Skip to content

Commit

Permalink
Schema: Cache substitution relatioship in enclosing complex type
Browse files Browse the repository at this point in the history
  • Loading branch information
tonydamage committed Feb 8, 2021
1 parent 7901ee1 commit 986091a
Show file tree
Hide file tree
Showing 14 changed files with 215 additions and 12 deletions.
4 changes: 4 additions & 0 deletions infra/common/pom.xml
Expand Up @@ -91,6 +91,10 @@
<groupId>org.codehaus.staxmate</groupId>
<artifactId>staxmate</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<!-- Adding logging bridges for JUL, commons-logging and log4j (3rd party libs needs). -->
<dependency>
<groupId>org.slf4j</groupId>
Expand Down
Expand Up @@ -56,6 +56,7 @@ public CompositeRefinedObjectClassDefinitionImpl(@NotNull RefinedObjectClassDefi
}
}

@Override
public RefinedObjectClassDefinition getStructuralObjectClassDefinition() {
return structuralObjectClassDefinition;
}
Expand Down Expand Up @@ -104,6 +105,7 @@ public ItemProcessing getProcessing() {
return structuralObjectClassDefinition.getProcessing();
}

@Override
public List<SchemaMigration> getSchemaMigrations() {
return structuralObjectClassDefinition.getSchemaMigrations();
}
Expand Down Expand Up @@ -340,6 +342,7 @@ public ObjectReferenceType getPasswordPolicy() {
return structuralObjectClassDefinition.getPasswordPolicy();
}

@Override
public ObjectReferenceType getSecurityPolicyRef() {
return structuralObjectClassDefinition.getSecurityPolicyRef();
}
Expand Down Expand Up @@ -369,6 +372,7 @@ public CapabilitiesType getCapabilities() {
return structuralObjectClassDefinition.getCapabilities();
}

@Override
public <T extends CapabilityType> T getEffectiveCapability(Class<T> capabilityClass, ResourceType resourceType) {
return structuralObjectClassDefinition.getEffectiveCapability(capabilityClass, resourceType);
}
Expand Down Expand Up @@ -489,6 +493,7 @@ public <X> RefinedAttributeDefinition<X> findAttributeDefinition(@NotNull QName
return findAttributeDefinition(name, false);
}

@Override
public RefinedAssociationDefinition findAssociationDefinition(QName name) {
for (RefinedAssociationDefinition assocType : getAssociationDefinitions()) {
if (QNameUtil.match(assocType.getName(), name)) {
Expand Down Expand Up @@ -719,10 +724,12 @@ protected String debugDump(int indent, LayerType layer) {
/**
* Return a human readable name of this class suitable for logs.
*/
@Override
public String getDebugDumpClassName() {
return "crOCD";
}

@Override
public String getHumanReadableName() {
if (getDisplayName() != null) {
return getDisplayName();
Expand Down Expand Up @@ -828,4 +835,14 @@ public void freeze() {
public boolean isImmutable() {
return immutable;
}

@Override
public boolean hasSubstitutions() {
return false;
}

@Override
public Optional<ItemDefinition<?>> substitution(QName name) {
return Optional.empty();
}
}
Expand Up @@ -25,6 +25,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -91,6 +92,7 @@ public List<SchemaMigration> getSchemaMigrations() {
return refinedObjectClassDefinition.getSchemaMigrations();
}

@Override
public boolean isEmphasized() {
return refinedObjectClassDefinition.isEmphasized();
}
Expand Down Expand Up @@ -353,6 +355,7 @@ public ObjectReferenceType getPasswordPolicy() {
return refinedObjectClassDefinition.getPasswordPolicy();
}

@Override
public ObjectReferenceType getSecurityPolicyRef() {
return refinedObjectClassDefinition.getSecurityPolicyRef();
}
Expand Down Expand Up @@ -591,6 +594,7 @@ public String debugDump(int indent) {
/**
* Return a human readable name of this class suitable for logs.
*/
@Override
public String getDebugDumpClassName() {
return "LRObjectClassDef";
}
Expand Down Expand Up @@ -743,4 +747,14 @@ public void freeze() {
getAttributeDefinitions();
this.immutable = true;
}

@Override
public Optional<ItemDefinition<?>> substitution(QName name) {
return Optional.empty();
}

@Override
public boolean hasSubstitutions() {
return false;
}
}
Expand Up @@ -16,6 +16,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.LayerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.google.common.collect.Multimap;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.w3c.dom.Document;
Expand Down Expand Up @@ -54,6 +56,7 @@ public LayerType getLayer() {
return layer;
}

@Override
public List<? extends RefinedObjectClassDefinition> getRefinedDefinitions(ShadowKindType kind) {
return LayerRefinedObjectClassDefinitionImpl
.wrapCollection(refinedResourceSchema.getRefinedDefinitions(kind), layer);
Expand Down Expand Up @@ -153,6 +156,7 @@ public LayerRefinedObjectClassDefinition getDefaultRefinedDefinition(ShadowKindT
.wrap(refinedResourceSchema.getDefaultRefinedDefinition(kind), layer);
}

@Override
public LayerRefinedObjectClassDefinition findRefinedDefinitionByObjectClassQName(ShadowKindType kind, QName objectClass) {
return LayerRefinedObjectClassDefinitionImpl
.wrap(refinedResourceSchema.findRefinedDefinitionByObjectClassQName(kind, objectClass), layer);
Expand Down Expand Up @@ -266,6 +270,11 @@ public boolean isImmutable() {
return refinedResourceSchema.isImmutable();
}

@Override
public Multimap<QName, ItemDefinition<?>> getSubstitutions() {
return refinedResourceSchema.getSubstitutions();
}

@Override
public void freeze() {
// TODO should we freeze referenced refinedResourceSchema?
Expand Down
Expand Up @@ -691,6 +691,7 @@ public String getNativeObjectClass() {
return getObjectClassDefinition().getNativeObjectClass();
}

@Override
public boolean isAuxiliary() {
return getObjectClassDefinition().isAuxiliary();
}
Expand Down Expand Up @@ -1194,6 +1195,7 @@ public static String debugDump(int indent, LayerType layer, RefinedObjectClassDe
/**
* Return a human readable name of this class suitable for logs.
*/
@Override
public String getDebugDumpClassName() {
return "rOCD";
}
Expand Down Expand Up @@ -1434,4 +1436,14 @@ public void freeze() {
auxiliaryObjectClassDefinitions.forEach(Freezable::freeze);
this.immutable = true;
}

@Override
public boolean hasSubstitutions() {
return false;
}

@Override
public Optional<ItemDefinition<?>> substitution(QName name) {
return Optional.empty();
}
}
Expand Up @@ -19,6 +19,8 @@
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.google.common.collect.Multimap;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.w3c.dom.Document;
Expand Down Expand Up @@ -638,6 +640,11 @@ public boolean isImmutable() {
return originalResourceSchema.isImmutable() && resourceSchema.isImmutable();
}

@Override
public Multimap<QName, ItemDefinition<?>> getSubstitutions() {
return originalResourceSchema.getSubstitutions();
}

@Override
public void freeze() {
originalResourceSchema.freeze();
Expand Down
Expand Up @@ -17,6 +17,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;

/**
Expand Down Expand Up @@ -124,6 +125,7 @@ public interface ComplexTypeDefinition extends TypeDefinition, LocalDefinitionSt
/**
* Does a shallow clone of this definition (i.e. item definitions themselves are NOT cloned).
*/
@Override
@NotNull
ComplexTypeDefinition clone();

Expand All @@ -148,5 +150,21 @@ default boolean containsItemDefinition(QName itemName) {
return findItemDefinition(ItemName.fromQName(itemName)) != null;
}

@Experimental
boolean hasSubstitutions();

@Experimental
Optional<ItemDefinition<?>> substitution(QName name);

@Experimental
default Optional<ItemDefinition<?>> itemOrSubstitution(QName name) {
ItemDefinition itemDef = findLocalItemDefinition(name);
if(itemDef != null) {
return Optional.of(itemDef);
}
return substitution(name);
}

@Override
MutableComplexTypeDefinition toMutable();
}
Expand Up @@ -9,7 +9,10 @@

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.util.annotation.Experimental;

import javax.xml.namespace.QName;

import java.util.List;

/**
Expand All @@ -25,6 +28,7 @@ public interface MutableComplexTypeDefinition extends ComplexTypeDefinition, Mut

MutablePrismPropertyDefinition<?> createPropertyDefinition(String name, QName typeName);

@Override
@NotNull
ComplexTypeDefinition clone();

Expand All @@ -51,4 +55,7 @@ public interface MutableComplexTypeDefinition extends ComplexTypeDefinition, Mut
void setCompileTimeClass(Class<?> compileTimeClass);

void replaceDefinition(QName itemName, ItemDefinition newDefinition);

@Experimental
void addSubstitution(ItemDefinition<?> itemDef, ItemDefinition<?> maybeSubst);
}
Expand Up @@ -35,4 +35,6 @@ public interface MutablePrismSchema extends PrismSchema {
PrismPropertyDefinition createPropertyDefinition(QName name, QName typeName);

void addDelayedItemDefinition(DefinitionSupplier o);

void addSubstitution(QName substitutionHead, ItemDefinition<?> definition);
}
Expand Up @@ -10,12 +10,16 @@
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.google.common.collect.Multimap;

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

import java.util.Collection;
import java.util.List;

import javax.xml.namespace.QName;

/**
* Schema as a collection of definitions. This is a midPoint-specific view of
* schema definition. It is just a collection of definitions grouped under a
Expand Down Expand Up @@ -76,4 +80,6 @@ default List<ComplexTypeDefinition> getComplexTypeDefinitions() {
Document serializeToXsd() throws SchemaException;

boolean isEmpty();

Multimap<QName, ItemDefinition<?>> getSubstitutions();
}

0 comments on commit 986091a

Please sign in to comment.