Skip to content

Commit

Permalink
Make schemas and definitions freezable
Browse files Browse the repository at this point in the history
The following types are now freezable: Definition, PrismSchema,
SchemaDescription. They are frozen on prismContext initialization and
(for those that are added later) when they are added to schema registry.

Also:
1. Definition is now SmartVisitable - normal visitation does not work
   because of cycles in definitions.
2. Slightly changed initialization of PrismSchema and SchemaDescription
   (as some attributes were changed to final).
3. Removed unused features: DynamicNamespacePrefixMapper.alwaysExplicit,
   SchemaDescription.xsdTypeTocompileTimeClassMap.
4. Fixed deepCloneDefinition to reach globally-defined items in
   xsd:anyType containers (e.g. resource capabilities).
  • Loading branch information
mederly committed Jan 23, 2020
1 parent d7fd147 commit ee1e304
Show file tree
Hide file tree
Showing 73 changed files with 1,429 additions and 679 deletions.
Expand Up @@ -688,11 +688,11 @@ public List<SchemaMigration> getSchemaMigrations() {
return getItemDefinition().getSchemaMigrations();
}

@Override
public void accept(Visitor visitor) {
getItemDefinition().accept(visitor);
}

// @Override
// public void accept(Visitor visitor) {
// getItemDefinition().accept(visitor);
// }
//

@Override
public void setReadOnly(boolean readOnly) {
Expand Down
Expand Up @@ -21,12 +21,12 @@
import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MetadataType;
import org.apache.commons.collections4.CollectionUtils;
import org.jetbrains.annotations.NotNull;

/**
* @author katka
Expand Down Expand Up @@ -125,7 +125,7 @@ public MutablePrismContainerDefinition<C> toMutable() {
}

@Override
public <ID extends ItemDefinition> ID findLocalItemDefinition(QName name, Class<ID> clazz, boolean caseInsensitive) {
public <ID extends ItemDefinition> ID findLocalItemDefinition(@NotNull QName name, @NotNull Class<ID> clazz, boolean caseInsensitive) {
return getItemDefinition().findLocalItemDefinition(name, clazz, caseInsensitive);
}

Expand Down Expand Up @@ -363,4 +363,26 @@ public void setVirtual(boolean virtual) {
public boolean isVirtual() {
return virtual;
}

@Override
public boolean isImmutable() {
// TODO
return false;
}

@Override
public void freeze() {
// TODO
}

@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
// TODO
return false;
}

@Override
public void accept(Visitor<Definition> visitor) {
// TODO
}
}
Expand Up @@ -8,17 +8,11 @@

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
Expand Down Expand Up @@ -127,4 +121,25 @@ public PrismObject<O> getObjectApplyDelta() throws SchemaException {
return oldObject;
}

@Override
public boolean isImmutable() {
// TODO
return false;
}

@Override
public void freeze() {
// TODO
}

@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
// TODO
return false;
}

@Override
public void accept(Visitor<Definition> visitor) {
// TODO
}
}
Expand Up @@ -11,17 +11,12 @@

import javax.xml.namespace.QName;

import org.apache.commons.collections4.CollectionUtils;
import com.evolveum.midpoint.prism.*;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.prism.MutablePrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;

/**
Expand Down Expand Up @@ -113,4 +108,26 @@ protected boolean isEmpty() {

return allEmpty;
}

@Override
public boolean isImmutable() {
// TODO
return false;
}

@Override
public void freeze() {
// TODO
}

@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
// TODO
return false;
}

@Override
public void accept(Visitor<Definition> visitor) {
// TODO
}
}
Expand Up @@ -12,10 +12,7 @@

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.query.ObjectFilter;

/**
Expand Down Expand Up @@ -94,4 +91,25 @@ protected boolean isEmpty() {
return allEmpty;
}

@Override
public boolean isImmutable() {
// TODO
return false;
}

@Override
public void freeze() {
// TODO
}

@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
// TODO
return false;
}

@Override
public void accept(Visitor<Definition> visitor) {
// TODO
}
}
Expand Up @@ -104,7 +104,6 @@ public GenericHandlerDto(TaskDto taskDto, @NotNull List<ExtensionItem> extension
//noinspection unchecked
container.setDefinition(containerDefinition);
Task task = pageBase.createSimpleTask("Adding new container wrapper");
//noinspection unchecked
ItemWrapperFactory factory = pageBase.findWrapperFactory(containerDefinition);
if (factory instanceof PrismContainerWrapperFactory) {

Expand Down
Expand Up @@ -47,6 +47,8 @@
public class CompositeRefinedObjectClassDefinitionImpl implements CompositeRefinedObjectClassDefinition {
private static final long serialVersionUID = 1L;

private boolean immutable;

@NotNull private final RefinedObjectClassDefinition structuralObjectClassDefinition;
@NotNull private final Collection<RefinedObjectClassDefinition> auxiliaryObjectClassDefinitions;

Expand Down Expand Up @@ -650,14 +652,24 @@ private <T> T findInDefinitions(Function<RefinedObjectClassDefinition,T> transfo
}

@Override
public void accept(Visitor visitor) {
public void accept(Visitor<Definition> visitor) {
visitor.visit(this);
structuralObjectClassDefinition.accept(visitor);
for (RefinedObjectClassDefinition auxiliaryObjectClassDefinition : auxiliaryObjectClassDefinitions) {
auxiliaryObjectClassDefinition.accept(visitor);
}
}

// TODO reconsider this
@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
visitor.visit(this);
structuralObjectClassDefinition.accept(visitor, visitation);
for (RefinedObjectClassDefinition auxiliaryObjectClassDefinition : auxiliaryObjectClassDefinitions) {
auxiliaryObjectClassDefinition.accept(visitor, visitation);
}
return true;
}

@NotNull
@Override
Expand Down Expand Up @@ -718,7 +730,7 @@ protected String debugDump(int indent, LayerType layer) {
for (int i = 0; i < indent; i++) {
sb.append(INDENT_STRING);
}
sb.append(getDebugDumpClassName()).append(": ");
sb.append(getDebugDumpClassName()).append(getMutabilityFlag()).append(": ");
sb.append(SchemaDebugUtil.prettyPrint(getTypeName()));
sb.append("\n");
DebugUtil.debugDumpWithLabel(sb, "structural", structuralObjectClassDefinition, indent + 1);
Expand All @@ -745,10 +757,10 @@ public String getHumanReadableName() {
@Override
public String toString() {
if (auxiliaryObjectClassDefinitions.isEmpty()) {
return getDebugDumpClassName() + " ("+getTypeName()+")";
return getDebugDumpClassName() + getMutabilityFlag() + " ("+getTypeName()+")";
} else {
StringBuilder sb = new StringBuilder();
sb.append(getDebugDumpClassName()).append("(").append(getTypeName());
sb.append(getDebugDumpClassName()).append(getMutabilityFlag()).append("(").append(getTypeName());
for (RefinedObjectClassDefinition auxiliaryObjectClassDefinition: auxiliaryObjectClassDefinitions) {
sb.append("+").append(auxiliaryObjectClassDefinition.getTypeName());
}
Expand Down Expand Up @@ -827,4 +839,16 @@ public boolean canRepresent(QName typeName) {
}
return false;
}

@Override
public void freeze() {
structuralObjectClassDefinition.freeze();
auxiliaryObjectClassDefinitions.forEach(Freezable::freeze);
this.immutable = true;
}

@Override
public boolean isImmutable() {
return immutable;
}
}
Expand Up @@ -39,6 +39,8 @@ public final class LayerRefinedAttributeDefinitionImpl<T> implements LayerRefine
private Boolean overrideCanAdd = null;
private Boolean overrideCanModify = null;

private boolean immutable;

private LayerRefinedAttributeDefinitionImpl(RefinedAttributeDefinition<T> refinedAttributeDefinition, LayerType layer) {
this.refinedAttributeDefinition = refinedAttributeDefinition;
this.layer = layer;
Expand Down Expand Up @@ -112,11 +114,19 @@ public PropertyLimitations getLimitations() {
}

@Override
public void accept(Visitor visitor) {
public void accept(Visitor<Definition> visitor) {
visitor.visit(this);
refinedAttributeDefinition.accept(visitor);
}

// TODO reconsider this
@Override
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) {
visitor.visit(this);
refinedAttributeDefinition.accept(visitor, visitation);
return true;
}

@NotNull
@Override
public RefinedAttributeDefinition<T> clone() {
Expand Down Expand Up @@ -293,6 +303,11 @@ public MutableResourceAttributeDefinition<T> toMutable() {
throw new UnsupportedOperationException();
}

@Override
public boolean isImmutable() {
return immutable;
}

@Override
public String getDescription() {
return refinedAttributeDefinition.getDescription();
Expand Down Expand Up @@ -676,4 +691,8 @@ public String toString() {
return refinedAttributeDefinition + ":" + layer;
}

@Override
public void freeze() {
immutable = true;
}
}

0 comments on commit ee1e304

Please sign in to comment.