@@ -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