Skip to content

Commit

Permalink
MID-9278 always use equals annotation now support marking "self" not …
Browse files Browse the repository at this point in the history
…only container items => test + bugfixes
  • Loading branch information
1azyman committed Nov 14, 2023
1 parent a39d24e commit e3d8772
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -904,8 +904,8 @@ private MutablePrismContainerDefinition<?> createContainerOrObjectDefinition(

markRuntime(pcd);

var keysElem = SchemaProcessorUtil.getAnnotationQNames(elementDecl.getAnnotation(), A_ALWAYS_USE_FOR_EQUALS);
pcd.setAlwaysUseForEquals(keysElem);
Annotation.processAnnotation(pcd, annotation, Annotation.ALWAYS_USE_FOR_EQUALS);

parseItemDefinitionAnnotations(pcd, annotation);
parseItemDefinitionAnnotations(pcd, elementDecl.getAnnotation());
if (elementParticle != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@

package com.evolveum.midpoint.prism.impl.schema.annotation;

import java.util.List;
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Element;

import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.MutableItemDefinition;
import com.evolveum.midpoint.prism.MutablePrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.exception.SchemaException;

import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Element;

import javax.xml.namespace.QName;
import java.util.List;

public class AlwaysUseForEqualsProcessor extends AnnotationProcessor<MutableItemDefinition<?>, QName> {

public AlwaysUseForEqualsProcessor() {
Expand All @@ -41,9 +41,20 @@ public void process(@NotNull MutableItemDefinition<?> definition, @NotNull List<
}

if (definition instanceof MutablePrismContainerDefinition<?> pcd) {
List<QName> qnames = elements.stream().map(DOMUtil::getQNameValue).collect(Collectors.toList());
List<QName> qnames = elements.stream()
.map(DOMUtil::getQNameValue)
.filter(qname -> qname != null)
.toList();

pcd.setAlwaysUseForEquals(qnames);

for (QName qname : qnames) {
ItemDefinition<?> id = pcd.findItemDefinition(ItemPath.create(qname));
if (id instanceof MutableItemDefinition<?> mid) {
mid.setAlwaysUseForEquals(true);
}
}

pcd.setAnnotation(PrismConstants.A_ALWAYS_USE_FOR_EQUALS, qnames);
}
}
Expand Down

0 comments on commit e3d8772

Please sign in to comment.