Skip to content

Commit 617bb66

Browse files
committed
changed the entity field update
1 parent 0b9a90a commit 617bb66

File tree

12 files changed

+101
-73
lines changed

12 files changed

+101
-73
lines changed

colormipsearch-api/src/main/java/org/janelia/colormipsearch/model/AbstractNeuronEntity.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -251,27 +251,27 @@ public boolean hasProcessedTags(ProcessingType processingType, Set<String> tags)
251251

252252
public List<EntityField<?>> updateableFieldValues() {
253253
List<EntityField<?>> fieldList = new ArrayList<>();
254-
fieldList.add(new EntityField<>("alignmentSpace", false, alignmentSpace));
255-
fieldList.add(new EntityField<>("libraryName", false, libraryName));
256-
fieldList.add(new EntityField<>("publishedName", false, publishedName));
257-
fieldList.add(new EntityField<>("mipId", false, getMipId()));
258-
fieldList.add(new EntityField<>("sourceRefId", false, sourceRefId));
259-
fieldList.add(new EntityField<>("neuronTerms", false, neuronTerms));
260-
fieldList.add(new EntityField<>("updatedDate", false, getUpdatedDate()));
254+
fieldList.add(new EntityField<>("alignmentSpace", alignmentSpace));
255+
fieldList.add(new EntityField<>("libraryName", libraryName));
256+
fieldList.add(new EntityField<>("publishedName", publishedName));
257+
fieldList.add(new EntityField<>("mipId", getMipId()));
258+
fieldList.add(new EntityField<>("sourceRefId", sourceRefId));
259+
fieldList.add(new EntityField<>("neuronTerms", neuronTerms));
260+
fieldList.add(new EntityField<>("updatedDate", getUpdatedDate()));
261261
// datasetLabels is a collection but will always be replaced instead of appended to existing values
262-
fieldList.add(new EntityField<>("datasetLabels", false, datasetLabels));
263-
fieldList.add(new EntityField<>("validationErrors", true, validationErrors));
262+
fieldList.add(new EntityField<>("datasetLabels", datasetLabels));
263+
fieldList.add(new EntityField<>("validationErrors", validationErrors, EntityField.FieldOp.ADD_TO_SET));
264264
computeFiles.forEach((ft, fd) ->
265-
fieldList.add(new EntityField<>("computeFiles." + ft.name(), false, fd)));
265+
fieldList.add(new EntityField<>("computeFiles." + ft.name(), fd)));
266266
processedTags.forEach((pt, t) ->
267-
fieldList.add(new EntityField<>("processedTags." + pt.name(), true, t)));
267+
fieldList.add(new EntityField<>("processedTags." + pt.name(), t, EntityField.FieldOp.ADD_TO_SET)));
268268
return fieldList;
269269
}
270270

271271
public List<EntityField<?>> updateableFieldsOnInsert() {
272272
List<EntityField<?>> fieldList = new ArrayList<>();
273-
fieldList.add(new EntityField<>("class", false, getEntityClass()));
274-
fieldList.add(new EntityField<>("tags", true, getTags()));
273+
fieldList.add(new EntityField<>("class", getEntityClass()));
274+
fieldList.add(new EntityField<>("tags", getTags(), EntityField.FieldOp.ADD_TO_SET));
275275
return fieldList;
276276
}
277277

colormipsearch-api/src/main/java/org/janelia/colormipsearch/model/EMNeuronEntity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ public void setNeuronInstance(String neuronInstance) {
3535
@Override
3636
public List<EntityField<?>> updateableFieldValues() {
3737
List<EntityField<?>> fieldList = new ArrayList<>(super.updateableFieldValues());
38-
fieldList.add(new EntityField<>("neuronType", false, neuronType));
39-
fieldList.add(new EntityField<>("neuronInstance", false, neuronInstance));
38+
fieldList.add(new EntityField<>("neuronType", neuronType));
39+
fieldList.add(new EntityField<>("neuronInstance", neuronInstance));
4040
return fieldList;
4141
}
4242

colormipsearch-api/src/main/java/org/janelia/colormipsearch/model/EntityField.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,34 @@
11
package org.janelia.colormipsearch.model;
22

33
public class EntityField<V> {
4+
5+
public enum FieldOp {
6+
APPEND_TO_LIST,
7+
ADD_TO_SET,
8+
SET,
9+
UNSET
10+
};
11+
412
private final String fieldName;
5-
private final boolean toBeAppended;
6-
private final boolean toBeRemoved;
713
private final V value;
14+
private final FieldOp op;
815

9-
public EntityField(String fieldName, boolean toBeAppended, V value) {
10-
this(fieldName, toBeAppended, false, value);
16+
public EntityField(String fieldName, V value) {
17+
this(fieldName, value, FieldOp.SET);
1118
}
1219

13-
public EntityField(String fieldName, boolean toBeAppended, boolean toBeRemoved, V value) {
20+
public EntityField(String fieldName, V value, FieldOp op) {
1421
this.fieldName = fieldName;
15-
this.toBeAppended = toBeAppended;
16-
this.toBeRemoved = toBeRemoved;
1722
this.value = value;
23+
this.op = op;
1824
}
1925

2026
public String getFieldName() {
2127
return fieldName;
2228
}
2329

24-
public boolean isToBeAppended() {
25-
return toBeAppended;
26-
}
27-
28-
public boolean isToBeRemoved() {
29-
return toBeRemoved;
30+
public FieldOp getOp() {
31+
return op;
3032
}
3133

3234
public V getValue() {

colormipsearch-api/src/main/java/org/janelia/colormipsearch/model/LMNeuronEntity.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,12 @@ public boolean isValid() {
100100
@Override
101101
public List<EntityField<?>> updateableFieldValues() {
102102
List<EntityField<?>> fieldList = new ArrayList<>(super.updateableFieldValues());
103-
fieldList.add(new EntityField<>("slideCode", false, slideCode));
104-
fieldList.add(new EntityField<>("anatomicalArea", false, anatomicalArea));
105-
fieldList.add(new EntityField<>("gender", false, gender));
106-
fieldList.add(new EntityField<>("objective", false, objective));
107-
fieldList.add(new EntityField<>("notStaged", false, notStaged));
108-
fieldList.add(new EntityField<>("publishError", false, publishError));
103+
fieldList.add(new EntityField<>("slideCode", slideCode));
104+
fieldList.add(new EntityField<>("anatomicalArea", anatomicalArea));
105+
fieldList.add(new EntityField<>("gender", gender));
106+
fieldList.add(new EntityField<>("objective", objective));
107+
fieldList.add(new EntityField<>("notStaged", notStaged));
108+
fieldList.add(new EntityField<>("publishError", publishError));
109109
return fieldList;
110110
}
111111

colormipsearch-persist/src/itest/java/org/janelia/colormipsearch/dao/mongo/CDMatchesMongoDaoITest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,13 @@ public void findAndUpdate() {
334334
"1.0", "1.1");
335335

336336
List<Function<CDMatchEntity<EMNeuronEntity, LMNeuronEntity>, EntityField<?>>> fieldsToUpdate = Arrays.asList(
337-
m -> new EntityField<>("matchingPixels", false, m.getMatchingPixels()),
338-
m -> new EntityField<>("matchingPixelsRatio", false, m.getMatchingPixelsRatio()),
339-
m -> new EntityField<>("bidirectionalAreaGap", false, m.getBidirectionalAreaGap()),
340-
m -> new EntityField<>("gradientAreaGap", false, m.getGradientAreaGap()),
341-
m -> new EntityField<>("highExpressionArea", false, m.getHighExpressionArea()),
342-
m -> new EntityField<>("normalizedScore", false, m.getNormalizedScore()),
343-
m -> new EntityField<>("tags", true, m.getTags())
337+
m -> new EntityField<>("matchingPixels", m.getMatchingPixels()),
338+
m -> new EntityField<>("matchingPixelsRatio", m.getMatchingPixelsRatio()),
339+
m -> new EntityField<>("bidirectionalAreaGap", m.getBidirectionalAreaGap()),
340+
m -> new EntityField<>("gradientAreaGap", m.getGradientAreaGap()),
341+
m -> new EntityField<>("highExpressionArea", m.getHighExpressionArea()),
342+
m -> new EntityField<>("normalizedScore", m.getNormalizedScore()),
343+
m -> new EntityField<>("tags", m.getTags(), EntityField.FieldOp.ADD_TO_SET)
344344
);
345345

346346
assertEquals(

colormipsearch-persist/src/itest/java/org/janelia/colormipsearch/dao/mongo/NeuronMetadataMongoDaoITest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ public void updateTags() {
335335
.addTags(Arrays.asList("t1", "t2"))
336336
.addExcludedTag("t3")
337337
.withUsableSearchableMips(false),
338-
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag1")))
338+
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag1"), true))
339339
);
340340
assertEquals(2, n1);
341341
PagedResult<? extends AbstractNeuronEntity> neuronsUpdatedWithNewTag1 = testDao.findNeurons(new NeuronSelector().addTag("newTag1").withUsableSearchableMips(false), new PagedRequest());
@@ -351,15 +351,15 @@ public void updateTags() {
351351
.addProcessedTag("PPPMatch", "ppp2")
352352
.addExcludedTag("t3")
353353
.withUsableSearchableMips(false),
354-
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag2")))
354+
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag2"), true))
355355
));
356356
// update tags based on a single processed tag
357357
long n2 = testDao.updateAll(
358358
new NeuronSelector()
359359
.addProcessedTag("ColorDepthSearch", "cd2")
360360
.addProcessedTag("PPPMatch", "ppp2")
361361
.withUsableSearchableMips(false),
362-
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag2")))
362+
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag2"), true))
363363
);
364364
assertEquals(2, n2);
365365
PagedResult<? extends AbstractNeuronEntity> neuronsUpdatedWithNewTag2 = testDao.findNeurons(new NeuronSelector().addTag("newTag2").withUsableSearchableMips(false), new PagedRequest());
@@ -373,7 +373,7 @@ public void updateTags() {
373373
.addProcessedTag("ColorDepthSearch", "cd1")
374374
.addProcessedTag("PPPMatch", "ppp2")
375375
.withUsableSearchableMips(false),
376-
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag3")))
376+
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag3"), true))
377377
);
378378
assertEquals(0, n3);
379379

@@ -384,7 +384,7 @@ public void updateTags() {
384384
.addNewProcessedTagSelection("PPPMatch", "ppp2")
385385
.addProcessedTag("ColorDepthSearch", "cd2")
386386
.withUsableSearchableMips(false),
387-
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag3")))
387+
ImmutableMap.of("tags", new AppendFieldValueHandler<>(Collections.singleton("newTag3"), true))
388388
);
389389
assertEquals(4, n4);
390390
}

colormipsearch-persist/src/main/java/org/janelia/colormipsearch/dao/AppendFieldValueHandler.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44
* @param <T> field value type
55
*/
66
public class AppendFieldValueHandler<T> extends AbstractEntityFieldValueHandler<T> {
7-
public AppendFieldValueHandler(T fieldValue) {
7+
private final boolean addToSet;
8+
9+
public AppendFieldValueHandler(T fieldValue, boolean addToSet) {
810
super(fieldValue);
11+
this.addToSet = addToSet;
12+
}
13+
14+
public boolean isAddToSet() {
15+
return addToSet;
916
}
1017
}

colormipsearch-persist/src/main/java/org/janelia/colormipsearch/dao/mongo/MongoDaoHelper.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,10 @@ static Bson getFieldUpdate(String fieldName, EntityFieldValueHandler<?> valueHan
242242
if (valueHandler == null || valueHandler.getFieldValue() == null) {
243243
return Updates.unset(fieldName);
244244
} else if (valueHandler instanceof AppendFieldValueHandler) {
245+
AppendFieldValueHandler<?> appendFieldValueHandler = (AppendFieldValueHandler<?>) valueHandler;
245246
Object value = valueHandler.getFieldValue();
246247
if (value instanceof Iterable) {
247-
if (Set.class.isAssignableFrom(value.getClass())) {
248+
if (Set.class.isAssignableFrom(value.getClass()) || appendFieldValueHandler.isAddToSet()) {
248249
return Updates.addEachToSet(
249250
fieldName,
250251
StreamSupport.stream(((Iterable<?>) value).spliterator(), false).collect(Collectors.toList())
@@ -255,7 +256,9 @@ static Bson getFieldUpdate(String fieldName, EntityFieldValueHandler<?> valueHan
255256
StreamSupport.stream(((Iterable<?>) value).spliterator(), false).collect(Collectors.toList()));
256257
}
257258
} else {
258-
return Updates.push(fieldName, value);
259+
return appendFieldValueHandler.isAddToSet()
260+
? Updates.addToSet(fieldName, value)
261+
: Updates.push(fieldName, value);
259262
}
260263
} else if (valueHandler instanceof RemoveElementFieldValueHandler) {
261264
Object value = valueHandler.getFieldValue();
@@ -280,12 +283,20 @@ static Bson combineUpdates(List<Bson> updateList) {
280283

281284
static <V> EntityFieldNameValueHandler<V> entityFieldToValueHandler(EntityField<V> nf) {
282285
EntityFieldValueHandler<V> valueHandler;
283-
if (nf.isToBeRemoved()) {
284-
valueHandler = new RemoveElementFieldValueHandler<>(nf.getValue());
285-
} else if (nf.isToBeAppended()) {
286-
valueHandler = new AppendFieldValueHandler<>(nf.getValue());
287-
} else {
288-
valueHandler = new SetFieldValueHandler<>(nf.getValue());
286+
switch (nf.getOp()) {
287+
case ADD_TO_SET:
288+
valueHandler = new AppendFieldValueHandler<>(nf.getValue(), true);
289+
break;
290+
case APPEND_TO_LIST:
291+
valueHandler = new AppendFieldValueHandler<>(nf.getValue(), false);
292+
break;
293+
case UNSET:
294+
valueHandler = new RemoveElementFieldValueHandler<>(nf.getValue());
295+
break;
296+
case SET:
297+
default:
298+
valueHandler = new SetFieldValueHandler<>(nf.getValue());
299+
break;
289300
}
290301
return new EntityFieldNameValueHandler<>(nf.getFieldName(), valueHandler);
291302
}

colormipsearch-persist/src/main/java/org/janelia/colormipsearch/dao/mongo/NeuronMetadataMongoDao.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,16 @@ private N findAndUpdate(N neuron) {
117117
"computeFiles.SourceColorDepthImage",
118118
neuron.getComputeFileName(ComputeFileType.SourceColorDepthImage)));
119119
neuron.updateableFieldValues().forEach((f) -> {
120-
if (!f.isToBeAppended()) {
121-
updates.add(MongoDaoHelper.getFieldUpdate(f.getFieldName(), new SetFieldValueHandler<>(f.getValue())));
122-
} else {
123-
updates.add(MongoDaoHelper.getFieldUpdate(f.getFieldName(), new AppendFieldValueHandler<>(f.getValue())));
120+
switch (f.getOp()) {
121+
case ADD_TO_SET:
122+
updates.add(MongoDaoHelper.getFieldUpdate(f.getFieldName(), new AppendFieldValueHandler<>(f.getValue(), true)));
123+
break;
124+
case APPEND_TO_LIST:
125+
updates.add(MongoDaoHelper.getFieldUpdate(f.getFieldName(), new AppendFieldValueHandler<>(f.getValue(), false)));
126+
break;
127+
default:
128+
updates.add(MongoDaoHelper.getFieldUpdate(f.getFieldName(), new SetFieldValueHandler<>(f.getValue())));
129+
break;
124130
}
125131
});
126132
neuron.updateableFieldsOnInsert().forEach((f) -> {
@@ -215,7 +221,7 @@ public long addProcessingTagsToMIPIDs(Collection<String> neuronMIPIds, Processin
215221
}
216222
Map<String, EntityFieldValueHandler<?>> toUpdate = ImmutableMap.of(
217223
"processedTags." + processingType.name(),
218-
new AppendFieldValueHandler<>(tags)
224+
new AppendFieldValueHandler<>(tags, true)
219225
);
220226
UpdateResult updateRes = mongoCollection.updateMany(
221227
MongoDaoHelper.createInFilter("mipId", neuronMIPIds),

colormipsearch-persist/src/main/java/org/janelia/colormipsearch/dataio/db/DBCDScoresOnlyWriter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public class DBCDScoresOnlyWriter<R extends CDMatchEntity<? extends AbstractNeur
2424

2525
private final List<Function<R, EntityField<?>>> fieldsToUpdate =
2626
Arrays.asList(
27-
m -> new EntityField<>("sessionRefId", false, m.getSessionRefId()),
28-
m -> new EntityField<>("mirrored", false, m.isMirrored()),
29-
m -> new EntityField<>("matchingPixels", false, m.getMatchingPixels()),
30-
m -> new EntityField<>("matchingPixelsRatio", false, m.getMatchingPixelsRatio()),
31-
m -> new EntityField<>("normalizedScore", false, m.getNormalizedScore()),
32-
m -> new EntityField<>("tags", true, m.getTags())
27+
m -> new EntityField<>("sessionRefId", m.getSessionRefId()),
28+
m -> new EntityField<>("mirrored", m.isMirrored()),
29+
m -> new EntityField<>("matchingPixels", m.getMatchingPixels()),
30+
m -> new EntityField<>("matchingPixelsRatio", m.getMatchingPixelsRatio()),
31+
m -> new EntityField<>("normalizedScore", m.getNormalizedScore()),
32+
m -> new EntityField<>("tags", m.getTags(), EntityField.FieldOp.ADD_TO_SET)
3333
);
3434

3535
public DBCDScoresOnlyWriter(NeuronMatchesDao<R> neuronMatchesDao) {

0 commit comments

Comments
 (0)