Skip to content

Commit 9b3e50b

Browse files
Merge pull request #7241 from deutschebank/db-contrib/waltz-7237-bulk-upload-functionality-not-working-for-assessment-def
Db contrib/waltz 7237 bulk upload functionality not working for assessment def
2 parents 5ea60d4 + d3ecc85 commit 9b3e50b

2 files changed

Lines changed: 105 additions & 15 deletions

File tree

waltz-integration-test/src/test/java/org/finos/waltz/integration_test/inmem/service/BulkAssessmentRatingServiceTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,64 @@ private String mkBadTsv(String externalId) {
195195
+ externalId + "\tbadRatingCode\ttrue\tcomment\n";
196196
}
197197

198+
@Test
199+
public void bulkPreviewForCardinalityZeroToMany() {
200+
String appName = mkName(stem, "previewApp");
201+
String appExternalId = mkName(stem, "previewAppCode");
202+
String appName1 = mkName(stem, "previewApp1");
203+
String appExternalId1 = mkName(stem, "previewAppCode1");
204+
Long schemeId = ratingSchemeHelper.createEmptyRatingScheme(mkName(stem, "SchemeApp1"));
205+
ratingSchemeHelper.saveRatingItem(schemeId, "Yes", 0, "green", "Y");
206+
ratingSchemeHelper.saveRatingItem(schemeId, "No", 0, "red", "N");
207+
appHelper.createNewApp(
208+
appName,
209+
ouIds.root,
210+
appExternalId);
211+
appHelper.createNewApp(
212+
appName1,
213+
ouIds.root,
214+
appExternalId1);
215+
long defId = assessmentHelper.createDefinition(schemeId, "Assessment_DefinitionA", "", AssessmentVisibility.PRIMARY, "Test",
216+
EntityKind.LEGAL_ENTITY_RELATIONSHIP, Cardinality.ZERO_MANY, Optional.ofNullable(null));
217+
AssessmentDefinition def = assessmentDefinitionService.getById(defId);
218+
String[] externalIds = {appExternalId,appExternalId1};
219+
String[] ratingCodes = {"Y","N"};
220+
AssessmentRatingValidationResult result = bulkAssessmentRatingService.bulkPreview(
221+
mkRef(def.entityKind(), def.id().get()),
222+
mkTsvWithForCardinalityCheck(externalIds, ratingCodes));
223+
224+
assertEquals(2, result.validatedItems().size(), "Expected 2 items");
225+
}
226+
227+
@Test
228+
public void bulkUpdateForCardinalityZeroToMany() {
229+
String name = mkName(stem, "previewApp1");
230+
String kindExternalId = mkName(stem, "previewAppExtId");
231+
Long schemeId = ratingSchemeHelper.createEmptyRatingScheme(name + "SchemeApp1");
232+
ratingSchemeHelper.saveRatingItem(schemeId, "Yes", 0, "green", "Y");
233+
appHelper.createNewApp(
234+
mkName(stem, "previewUpdatesApp1"),
235+
ouIds.root,
236+
kindExternalId);
237+
long defId = assessmentHelper.createDefinition(schemeId, "Assessment_Definition1", "", AssessmentVisibility.PRIMARY, "Test",
238+
EntityKind.APPLICATION, Cardinality.ZERO_MANY, Optional.ofNullable(null));
239+
AssessmentDefinition def1 = assessmentDefinitionService.getById(defId);
240+
EntityReference cfg = mkRef(EntityKind.APPLICATION, defId);
241+
SaveAssessmentRatingCommand cmd = ImmutableSaveAssessmentRatingCommand.builder()
242+
.entityReference(cfg)
243+
.assessmentDefinitionId(defId)
244+
.ratingId(26)
245+
.lastUpdatedBy("test")
246+
.build();
247+
try {
248+
assessmentRatingService.store(cmd, "test");
249+
} catch (InsufficientPrivelegeException e) {
250+
e.printStackTrace();
251+
}
252+
AssessmentRatingValidationResult result1 = bulkAssessmentRatingService.bulkPreview(
253+
mkRef(def1.entityKind(), def1.id().get()),
254+
mkGoodTsv(kindExternalId));
255+
256+
assertNotNull(result1.validatedItems().get(0).changeOperation(), ChangeOperation.UPDATE.name());
257+
}
198258
}

waltz-service/src/main/java/org/finos/waltz/service/assessment_rating/BulkAssessmentRatingService.java

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,23 @@ public AssessmentRatingValidationResult bulkPreview(EntityReference assessmentRe
156156

157157
List<AssessmentRating> existingAssessmentRatings = assessmentRatingService.findByDefinitionId(assessmentReference.id());
158158

159-
DiffResult<AssessmentRating> assessmentRatingDiffResult = DiffResult
160-
.mkDiff(
161-
existingAssessmentRatings,
162-
requiredAssessmentRatings,
163-
d -> tuple(d.entityReference(), d.assessmentDefinitionId()),
164-
(a, b) -> StringUtilities.safeEq(a.comment(), b.comment())
165-
&& a.ratingId() == b.ratingId());
159+
DiffResult<AssessmentRating> assessmentRatingDiffResult;
160+
if (isCardinalityZeroToOne) {
161+
assessmentRatingDiffResult = DiffResult
162+
.mkDiff(
163+
existingAssessmentRatings,
164+
requiredAssessmentRatings,
165+
d -> tuple(d.entityReference(), d.assessmentDefinitionId()),
166+
(a, b) -> StringUtilities.safeEq(a.comment(), b.comment())
167+
&& a.ratingId() == b.ratingId());
168+
} else {
169+
assessmentRatingDiffResult = DiffResult
170+
.mkDiff(
171+
existingAssessmentRatings,
172+
requiredAssessmentRatings,
173+
d -> tuple(d.entityReference(), d.assessmentDefinitionId(), d.ratingId()),
174+
(a, b) -> StringUtilities.safeEq(a.comment(), b.comment()));
175+
}
166176

167177
Set<Tuple2<EntityReference, Long>> toAdd = SetUtilities.map(assessmentRatingDiffResult.otherOnly(), d -> tuple(d.entityReference(), d.ratingId()));
168178
Set<Tuple2<EntityReference, Long>> toUpdate = SetUtilities.map(assessmentRatingDiffResult.differingIntersection(), d -> tuple(d.entityReference(), d.ratingId()));
@@ -212,6 +222,9 @@ public BulkAssessmentRatingApplyResult apply(EntityReference assessmentRef,
212222
}
213223
Timestamp now = DateTimeUtilities.nowUtcTimestamp();
214224

225+
AssessmentDefinition assessmentDefinition = assessmentDefinitionService.getById(assessmentRef.id());
226+
boolean isCardinalityZeroToOne = assessmentDefinition.cardinality().equals(Cardinality.ZERO_ONE);
227+
215228
Set<AssessmentRatingRecord> toAdd = preview
216229
.validatedItems()
217230
.stream()
@@ -231,20 +244,37 @@ public BulkAssessmentRatingApplyResult apply(EntityReference assessmentRef,
231244
})
232245
.collect(Collectors.toSet());
233246

234-
Set<UpdateConditionStep<AssessmentRatingRecord>> toUpdate = preview
247+
248+
Set<UpdateConditionStep<AssessmentRatingRecord>> toUpdate;
249+
if (isCardinalityZeroToOne) {
250+
toUpdate = preview
235251
.validatedItems()
236252
.stream()
237253
.filter(d -> d.changeOperation() == ChangeOperation.UPDATE && d.errors().isEmpty())
238254
.map(d ->
239255
DSL
240-
.update(ar)
241-
.set(ar.RATING_ID, d.ratingSchemeItem().id().get())
242-
.set(ar.DESCRIPTION, sanitizeCharacters(d.parsedItem().comment()))
243-
.where(ar.ASSESSMENT_DEFINITION_ID.eq(assessmentRef.id())
244-
.and(ar.ENTITY_KIND.eq(d.entityKindReference().kind().name())
245-
.and(ar.ENTITY_ID.eq(d.entityKindReference().id()))
246-
.and(ar.RATING_ID.eq(d.ratingSchemeItem().id().get())))))
256+
.update(ar)
257+
.set(ar.RATING_ID, d.ratingSchemeItem().id().get())
258+
.set(ar.DESCRIPTION, sanitizeCharacters(d.parsedItem().comment()))
259+
.where(ar.ASSESSMENT_DEFINITION_ID.eq(assessmentRef.id())
260+
.and(ar.ENTITY_KIND.eq(d.entityKindReference().kind().name())
261+
.and(ar.ENTITY_ID.eq(d.entityKindReference().id())))))
247262
.collect(Collectors.toSet());
263+
} else {
264+
toUpdate = preview
265+
.validatedItems()
266+
.stream()
267+
.filter(d -> d.changeOperation() == ChangeOperation.UPDATE && d.errors().isEmpty())
268+
.map(d ->
269+
DSL
270+
.update(ar)
271+
.set(ar.DESCRIPTION, sanitizeCharacters(d.parsedItem().comment()))
272+
.where(ar.ASSESSMENT_DEFINITION_ID.eq(assessmentRef.id())
273+
.and(ar.ENTITY_KIND.eq(d.entityKindReference().kind().name())
274+
.and(ar.ENTITY_ID.eq(d.entityKindReference().id()))
275+
.and(ar.RATING_ID.eq(d.ratingSchemeItem().id().get())))))
276+
.collect(Collectors.toSet());
277+
}
248278

249279
Set<DeleteConditionStep<AssessmentRatingRecord>> toRemove = preview
250280
.removals()

0 commit comments

Comments
 (0)