Skip to content

Commit

Permalink
cleanup code after review
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Apr 26, 2024
1 parent bb4e185 commit e8cad65
Show file tree
Hide file tree
Showing 10 changed files with 97 additions and 117 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -321,11 +321,11 @@ public <ID extends ItemDefinition<?>> ID findItemDefinition(@NotNull ItemPath pa
path = path.rest();
} else if (ItemPath.isParent(first)) {
ItemPath rest = path.rest();
ComplexTypeDefinition parent = getSchemaResolver().determineParentDefinition(this, rest);
ComplexTypeDefinition parent = getSchemaLookup().determineParentDefinition(this, rest);
if (rest.isEmpty()) {
// requires that the parent is defined as an item (container, object)
//noinspection unchecked
return (ID) getSchemaResolver().findItemDefinitionByType(parent.getTypeName());
return (ID) getSchemaLookup().findItemDefinitionByType(parent.getTypeName());

} else {
return parent.findItemDefinition(rest, clazz);
Expand Down Expand Up @@ -390,7 +390,7 @@ private <ID extends ItemDefinition<?>> ID tryDefaultItemDefinition(QName firstNa
if (defaultTypeName == null) {
return null;
}
ComplexTypeDefinition typeDef = getSchemaResolver().findComplexTypeDefinitionByType(defaultTypeName);
ComplexTypeDefinition typeDef = getSchemaLookup().findComplexTypeDefinitionByType(defaultTypeName);
var stateNonNullTypeDef = MiscUtil.stateNonNull(typeDef, "No complex type definition for %s", defaultTypeName);
var pcd = new PrismContainerDefinitionImpl<>(firstName, stateNonNullTypeDef);
pcd.setMinOccurs(0);
Expand Down Expand Up @@ -425,7 +425,7 @@ private <ID extends ItemDefinition<?>> ID findNamedItemDefinition(
}
}
if (isXsdAnyMarker()) {
ItemDefinition<?> def = getSchemaResolver().findItemDefinitionByElementName(firstName);
ItemDefinition<?> def = getSchemaLookup().findItemDefinitionByElementName(firstName);
if (def != null) {
return def.findItemDefinition(rest, clazz);
}
Expand Down Expand Up @@ -734,7 +734,7 @@ public void setStrictAnyMarker(boolean marker) {
// }

public Class<?> getTypeClass() {
return getSchemaResolver().determineClassForType(getTypeName());
return getSchemaLookup().determineClassForType(getTypeName());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import java.util.*;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.impl.schema.FreezableInitializable;
import com.evolveum.midpoint.prism.impl.schema.SchemaRegistryStateAware;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -46,7 +46,7 @@
* @author Radovan Semancik
*/
public abstract class DefinitionImpl
extends FreezableInitializable
extends SchemaRegistryStateAware
implements Definition, Definition.DefinitionMutator {

@Serial private static final long serialVersionUID = -2643332934312107274L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
package com.evolveum.midpoint.prism.impl;

import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.impl.schema.SchemaRegistryStateImpl;
import com.evolveum.midpoint.prism.schema.SchemaRegistry;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.annotation.Experimental;
Expand Down Expand Up @@ -98,7 +97,7 @@ public boolean canRepresent(QName typeName) {
return true;
}
if (superType != null) {
ComplexTypeDefinition supertypeDef = getSchemaResolver().findComplexTypeDefinitionByType(superType);
ComplexTypeDefinition supertypeDef = getSchemaLookup().findComplexTypeDefinitionByType(superType);
return supertypeDef.canRepresent(typeName);
} else {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
* @author Radovan Semancik
*/
public class PrismSchemaImpl
extends FreezableInitializable
extends SchemaRegistryStateAware
implements PrismSchema, PrismSchemaMutator, SchemaBuilder, SerializableSchema {

private static final Trace LOGGER = TraceManager.getTrace(PrismSchema.class);
Expand Down Expand Up @@ -214,7 +214,7 @@ public void add(@NotNull Definition def) {

void setupCompileTimeClass(@NotNull TypeDefinition typeDef) {
// Not caching the negative result, as this is called during schema parsing.
Class<Object> compileTimeClass = getSchemaResolver().determineCompileTimeClassInternal(typeDef.getTypeName(), false);
Class<Object> compileTimeClass = getSchemaLookup().determineCompileTimeClassInternal(typeDef.getTypeName(), false);
if (typeDef instanceof TypeDefinitionImpl typeDefImpl) {
typeDefImpl.setCompileTimeClass(compileTimeClass); // FIXME do better!
}
Expand Down Expand Up @@ -378,7 +378,7 @@ private <ID extends ItemDefinition<?>> List<ID> narrow(List<ItemDefinition<?>> d
found.add((ItemDefinition<?>) def);
}
} else if (def instanceof PrismPropertyDefinition) {
Class<?> fondClass = getSchemaResolver().determineClassForType(def.getTypeName());
Class<?> fondClass = getSchemaLookup().determineClassForType(def.getTypeName());
if (compileTimeClass.equals(fondClass)) {
found.add((ItemDefinition<?>) def);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ private XSOMParser createSchemaParser(SchemaRegistryState schemaRegistryState) {
if (schemaRegistryState == null) {
resolver = ((PrismContextImpl) PrismContext.get()).getEntityResolver();
} else {
resolver = new XmlEntityResolverUsingCurrentState(
resolver = new XmlEntityResolverImpl(
(SchemaRegistryImpl) PrismContext.get().getSchemaRegistry(),
(SchemaRegistryStateImpl) schemaRegistryState);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import java.util.Map.Entry;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.xml.namespace.QName;
import javax.xml.validation.Validator;

Expand All @@ -40,7 +39,6 @@
import com.evolveum.midpoint.prism.impl.*;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.schema.*;
import com.evolveum.midpoint.prism.schema.SchemaRegistryState.IsList;
import com.evolveum.midpoint.prism.xml.DynamicNamespacePrefixMapper;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.prism.xml.XsdTypeMapper;
Expand Down Expand Up @@ -84,7 +82,7 @@ public class SchemaRegistryImpl implements DebugDumpable, SchemaRegistry {
/**
* Advanced entity resolver that uses all registered schemas and built-in catalog-based schema resolver.
*/
private final XmlEntityResolver entityResolver = new XmlEntityResolverImpl(this);
private XmlEntityResolver entityResolver;

/**
* Registered schema descriptions.
Expand All @@ -100,7 +98,7 @@ public class SchemaRegistryImpl implements DebugDumpable, SchemaRegistry {
/**
* Current parsed schema state.
*/
private SchemaRegistryStateImpl schemaRegistryState;
private SchemaRegistryStateImpl schemaRegistryState = null;

/**
* "Registry" for namespace prefixes. It is used when serializing data as well as schemas.
Expand Down Expand Up @@ -134,21 +132,6 @@ public class SchemaRegistryImpl implements DebugDumpable, SchemaRegistry {
*/
private QName valueMetadataTypeName;

/**
* Definition of the value metadata container.
* It is lazily evaluated, because the schema registry has to be initialized to resolve type name to definition.
*/
private PrismContainerDefinition<?> valueMetadataDefinition;

/**
* Default name for value metadata container. Used to construct ad-hoc definition when no value metadata
* type name is specified.
*/
private static final QName DEFAULT_VALUE_METADATA_NAME = new QName("valueMetadata");

/** Type name for empty metadata. Doesn't exist in the registry. */
private static final QName DEFAULT_VALUE_METADATA_TYPE_NAME = new QName("EmptyValueMetadataType");

private PrismNamespaceContext staticNamespaceContext;

private final PrismNamespaceContext.Builder staticPrefixes = PrismNamespaceContext.builder();
Expand Down Expand Up @@ -189,9 +172,16 @@ public void setPrismContext(@NotNull PrismContext prismContext) {
}

public XmlEntityResolver getEntityResolver() {
if (entityResolver == null) {
initEntityResolver();
}
return entityResolver;
}

private void initEntityResolver() {
entityResolver = new XmlEntityResolverImpl(this, schemaRegistryState);
}

public MultiValuedMap<String, SchemaDescription> getParsedSchemas() {
return schemaRegistryState.getParsedSchemas();
}
Expand Down Expand Up @@ -474,6 +464,7 @@ public void initialize() throws SAXException, IOException, SchemaException {
schemaRegistryStateLocale.freeze();

this.schemaRegistryState = schemaRegistryStateLocale;
initEntityResolver();

invalidateCaches();
staticNamespaceContext = staticPrefixes.build();
Expand Down Expand Up @@ -902,36 +893,17 @@ public IsList isList(@Nullable QName xsiType, @NotNull QName elementName) {
return schemaRegistryState.isList(xsiType, elementName);
}

/**
* Must be called before call to initialize()
*/
public synchronized void setValueMetadataTypeName(QName typeName) {
valueMetadataTypeName = typeName;
valueMetadataDefinition = null;
}

@Override
@NotNull
public synchronized PrismContainerDefinition<?> getValueMetadataDefinition() {
if (valueMetadataDefinition == null) {
valueMetadataDefinition = resolveValueMetadataDefinition();
}
return valueMetadataDefinition;
}

private PrismContainerDefinition<?> resolveValueMetadataDefinition() {
if (valueMetadataTypeName != null) {
return Objects.requireNonNull(
schemaRegistryState.findContainerDefinitionByType(valueMetadataTypeName),
() -> "no definition for value metadata type " + valueMetadataTypeName);
} else {
return createDefaultValueMetadataDefinition();
}
}

private PrismContainerDefinition<?> createDefaultValueMetadataDefinition() {
var pcd = prismContext.definitionFactory().newContainerDefinitionWithoutTypeDefinition(
DEFAULT_VALUE_METADATA_NAME, DEFAULT_VALUE_METADATA_TYPE_NAME);
pcd.mutator().setMinOccurs(0);
pcd.mutator().setMaxOccurs(1);
return pcd;
return schemaRegistryState.getValueMetadataDefinition();
}
//endregion

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,19 @@
package com.evolveum.midpoint.prism.impl.schema;

import com.evolveum.midpoint.prism.AbstractFreezable;
import com.evolveum.midpoint.prism.Freezable;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.schema.SchemaRegistryState;

import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Objects;

/**
* Class allow before freeze setting of SchemaRegistryStateImpl
* and use it for resolving of definitions during initializing of schema.
*/
public abstract class FreezableInitializable extends AbstractFreezable {
public abstract class SchemaRegistryStateAware extends AbstractFreezable {

/**
* Current schemaRegistryState. This variable is present only if this state(also this prismSchema) isn't fully initialized.
Expand All @@ -49,7 +46,7 @@ public void setSchemaRegistryState(SchemaRegistryStateImpl schemaRegistryState)
/**
* Return schemaRegistryState that will be used for resolving of schema.
* This method is used to move the variable to another class.
* For resolving of definition use {@link #getSchemaResolver()}.
* For resolving of definition use {@link #getSchemaLookup()}.
*/
@Nullable
protected final SchemaRegistryStateImpl getSchemaRegistryState() {
Expand All @@ -59,7 +56,7 @@ protected final SchemaRegistryStateImpl getSchemaRegistryState() {
/**
* @return SchemaRegistryState that can be used for resolving of schema
*/
protected final SchemaRegistryState getSchemaResolver() {
protected final SchemaRegistryState getSchemaLookup() {
return Objects.requireNonNullElseGet(schemaRegistryState, () -> PrismContext.get().getSchemaRegistry());
}
}

0 comments on commit e8cad65

Please sign in to comment.