Skip to content

Commit

Permalink
TransformableReferenceDefinition: Allow overriding of targetType
Browse files Browse the repository at this point in the history
  • Loading branch information
tonydamage committed Sep 28, 2022
1 parent 2f75e2f commit f9ee0c2
Showing 1 changed file with 30 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,51 @@

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.MutablePrismReferenceDefinition;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.deleg.ReferenceDefinitionDelegator;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.exception.SchemaException;

public class TransformableReferenceDefinition extends TransformableItemDefinition<PrismReference, PrismReferenceDefinition>
implements ReferenceDefinitionDelegator, PartiallyMutableItemDefinition.Reference {

private static final long serialVersionUID = 1L;
private QName targetTypeName;


@Override
public void setTargetTypeName(QName typeName) {
this.targetTypeName = typeName;
}

@Override
public QName getTargetTypeName() {
if (this.targetTypeName != null) {
return targetTypeName;
}
return ReferenceDefinitionDelegator.super.getTargetTypeName();
}

protected TransformableReferenceDefinition(PrismReferenceDefinition delegate) {
super(delegate);
}

@Override
public <T extends ItemDefinition> T findItemDefinition(@NotNull ItemPath path, @NotNull Class<T> clazz) {
if (!path.startsWithObjectReference()) {
return super.findItemDefinition(path, clazz);
} else {
ItemPath rest = path.rest();
PrismObjectDefinition referencedObjectDefinition =
getSchemaRegistry().determineReferencedObjectDefinition(getTargetTypeName(), rest);
return (T) ((ItemDefinition) referencedObjectDefinition).findItemDefinition(rest, clazz);
}
}

public static TransformableReferenceDefinition of(PrismReferenceDefinition original) {
return new TransformableReferenceDefinition(original);
}
Expand Down

0 comments on commit f9ee0c2

Please sign in to comment.