Skip to content

Commit 09492d2

Browse files
mKowalski256rs-nicof
authored andcommitted
code info about subsamples that cannot be deleted in ApiSample.canBeDeleted and ApiSubSample.storedInContainer flags, rather than in separate array of ApiSample
1 parent 967c111 commit 09492d2

File tree

6 files changed

+21
-19
lines changed

6 files changed

+21
-19
lines changed

src/main/java/com/researchspace/api/v1/model/ApiSample.java

+5-14
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
package com.researchspace.api.v1.model;
33

44
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import com.fasterxml.jackson.annotation.JsonProperty.Access;
65
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
76
import com.researchspace.model.inventory.Sample;
87
import com.researchspace.model.inventory.SubSample;
9-
import java.util.LinkedList;
8+
import java.util.ArrayList;
109
import java.util.List;
1110
import lombok.Data;
1211
import lombok.EqualsAndHashCode;
@@ -58,32 +57,24 @@
5857
"fields",
5958
"extraFields",
6059
"subSamples",
61-
"subSamplesInContainer",
6260
"_links"
6361
})
6462
public class ApiSample extends ApiSampleWithoutSubSamples {
6563

6664
@JsonProperty("subSamples")
67-
private List<ApiSubSampleInfo> subSamples = new LinkedList<>();
65+
private List<ApiSubSampleInfo> subSamples = new ArrayList<>();
6866

69-
@JsonProperty(value = "subSamplesInContainer", access = Access.READ_ONLY)
70-
private List<ApiSubSampleInfo> subSamplesInContainer = new LinkedList<>();
71-
72-
/* this will be `true` only when `subSamplesInContainer` is null or empty */
73-
@JsonProperty(value = "canBeDeleted", access = Access.READ_ONLY)
67+
@JsonProperty(value = "canBeDeleted")
7468
private Boolean canBeDeleted;
7569

7670
public ApiSample(Sample sample) {
7771
super(sample);
7872

7973
for (SubSample subSample : sample.getActiveSubSamples()) {
8074
ApiSubSampleInfo subSampInfo = new ApiSubSampleInfo(subSample);
81-
this.subSamples.add(subSampInfo);
82-
if (subSample.isStoredInContainer()) {
83-
this.subSamplesInContainer.add(subSampInfo);
84-
}
75+
subSamples.add(subSampInfo);
8576
}
86-
this.canBeDeleted = this.subSamplesInContainer.isEmpty();
77+
canBeDeleted = subSamples.stream().noneMatch(ApiSubSampleInfo::isStoredInContainer);
8778
}
8879

8980
@Override

src/main/java/com/researchspace/api/v1/model/ApiSampleWithFullSubSamples.java

+5
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"lastModified",
3636
"modifiedBy",
3737
"modifiedByFullName",
38+
"canBeDeleted",
3839
"deleted",
3940
"deletedDate",
4041
"iconId",
@@ -66,6 +67,9 @@ public class ApiSampleWithFullSubSamples extends ApiSampleWithoutSubSamples {
6667
@JsonProperty("subSamples")
6768
private List<ApiSubSample> subSamples = new ArrayList<>();
6869

70+
@JsonProperty(value = "canBeDeleted")
71+
private Boolean canBeDeleted;
72+
6973
@JsonProperty(value = "newSampleSubSamplesCount", access = Access.WRITE_ONLY)
7074
private Integer newSampleSubSamplesCount;
7175

@@ -90,6 +94,7 @@ public ApiSampleWithFullSubSamples(Sample sample) {
9094
for (SubSample subSample : sample.getActiveSubSamples()) {
9195
subSamples.add(new ApiSubSample(subSample));
9296
}
97+
canBeDeleted = subSamples.stream().noneMatch(ApiSubSample::isStoredInContainer);
9398
}
9499

95100
/** to simplify creation of a valid sample (must have name). */

src/main/java/com/researchspace/api/v1/model/ApiSubSampleInfo.java

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"lastMoveDate",
5151
"revisionId",
5252
"deletedOnSampleDeletion",
53+
"storedInContainer",
5354
"_links"
5455
})
5556
public class ApiSubSampleInfo extends ApiInventoryRecordInfo {
@@ -75,6 +76,9 @@ public class ApiSubSampleInfo extends ApiInventoryRecordInfo {
7576
@JsonProperty("deletedOnSampleDeletion")
7677
private boolean deletedOnSampleDeletion;
7778

79+
@JsonProperty("storedInContainer")
80+
private boolean storedInContainer;
81+
7882
/** default constructor used by jackson deserializer */
7983
public ApiSubSampleInfo() {
8084
setType(ApiInventoryRecordType.SUBSAMPLE);
@@ -94,6 +98,7 @@ public ApiSubSampleInfo(SubSample subSample) {
9498
setLastMoveDateMillis(Date.from(subSample.getLastMoveDate()).getTime());
9599
}
96100
setDeletedOnSampleDeletion(subSample.isDeletedOnSampleDeletion());
101+
setStoredInContainer(subSample.isStoredInContainer());
97102
}
98103

99104
protected void addImageLinksFromParentSample(

src/main/webapp/ui/src/stores/models/Search.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ export default class Search implements SearchInterface {
436436
record: {
437437
type: string,
438438
canBeDeleted?: boolean,
439-
subSamplesInContainer: $ReadOnlyArray<
439+
subSamples: $ReadOnlyArray<
440440
$Diff<SubSampleAttrs, { sample: mixed }>
441441
>,
442442
...
@@ -476,8 +476,7 @@ export default class Search implements SearchInterface {
476476
if (samplesThatCouldNotBeDeleted.length > 0) {
477477
const subsamplesThatPreventedSampleDeletion =
478478
samplesThatCouldNotBeDeleted.flatMap((s) =>
479-
s.subSamplesInContainer.map((ss) => [s, ss])
480-
);
479+
s.subSamples.map((ss) => [s, ss]));
481480
uiStore.addAlert(
482481
mkAlert({
483482
variant: "error",

src/test/java/com/researchspace/api/v1/controller/SamplesApiControllerMVCIT.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -844,10 +844,12 @@ public void deleteSampleAndCheckActions() throws Exception {
844844
ApiContainer basicContainer = createBasicContainerForUser(anyUser);
845845
assertFalse(basicSample.getSubSamples().isEmpty());
846846
ApiSubSample subSample = basicSample.getSubSamples().get(0);
847+
assertFalse(subSample.isStoredInContainer());
847848
verifyAuditAction(AuditAction.CREATE, 3);
848849

849850
// move subsample to container
850851
moveSubSampleIntoListContainer(subSample.getId(), basicContainer.getId(), anyUser);
852+
assertTrue(subSample.isStoredInContainer());
851853
verifyAuditAction(AuditAction.MOVE, 1);
852854

853855
// verify subsample in container
@@ -870,7 +872,7 @@ public void deleteSampleAndCheckActions() throws Exception {
870872
.andReturn();
871873
ApiSample sampleCannotBeDeleted = getFromJsonResponseBody(deleteResult, ApiSample.class);
872874
assertFalse(sampleCannotBeDeleted.getCanBeDeleted());
873-
assertEquals(1, sampleCannotBeDeleted.getSubSamplesInContainer().size());
875+
assertTrue(sampleCannotBeDeleted.getSubSamples().get(0).isStoredInContainer());
874876
verifyAuditAction(AuditAction.DELETE, 0);
875877

876878
// delete sample with forceDelete=true

src/test/java/com/researchspace/service/inventory/SampleApiManagerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ public void deleteSample() {
582582
// try deleting without forceDelete flag
583583
ApiSample apiSample = sampleApiMgr.markSampleAsDeleted(newSample.getId(), false, testUser);
584584
assertFalse(apiSample.getCanBeDeleted());
585-
assertEquals(1, apiSample.getSubSamplesInContainer().size());
585+
assertTrue(apiSample.getSubSamples().get(0).isStoredInContainer());
586586
listContainer = containerApiMgr.getApiContainerById(listContainer.getId(), testUser);
587587
assertEquals(1, listContainer.getContentSummary().getTotalCount());
588588
Mockito.verify(mockPublisher, Mockito.never())

0 commit comments

Comments
 (0)