Class PrismContainerDefinitionImpl<C extends Containerable>
- java.lang.Object
-
- com.evolveum.midpoint.prism.AbstractFreezable
-
- com.evolveum.midpoint.prism.impl.DefinitionImpl
-
- com.evolveum.midpoint.prism.impl.ItemDefinitionImpl<PrismContainer<C>>
-
- com.evolveum.midpoint.prism.impl.PrismContainerDefinitionImpl<C>
-
- All Implemented Interfaces:
Definition
,Freezable
,ItemDefinition<PrismContainer<C>>
,ItemDefinitionTestAccess
,LocalItemDefinitionStore
,MutableDefinition
,MutableItemDefinition<PrismContainer<C>>
,MutablePrismContainerDefinition<C>
,PrismContainerDefinition<C>
,PrismContextSensitive
,PrismItemAccessDefinition
,Revivable
,SmartVisitable<Definition>
,Visitable<Definition>
,DebugDumpable
,Serializable
,Cloneable
- Direct Known Subclasses:
PrismObjectDefinitionImpl
,ResourceAttributeContainerDefinitionImpl
public class PrismContainerDefinitionImpl<C extends Containerable> extends ItemDefinitionImpl<PrismContainer<C>> implements MutablePrismContainerDefinition<C>
Definition of a property container.Property container groups properties into logical blocks. The reason for grouping may be as simple as better understandability of data structure. But the group usually means different meaning, source or structure of the data. For example, the property container is frequently used to hold properties that are dynamic, not fixed by a static schema. Such grouping also naturally translates to XML and helps to "quarantine" such properties to avoid Unique Particle Attribute problems.
Property Container contains a set of (potentially multi-valued) properties. The order of properties is not significant, regardless of the fact that it may be fixed in the XML representation. In the XML representation, each element inside Property Container must be either Property or a Property Container.
This class represents schema definition for property container. See
Definition
for more details.- Author:
- Radovan Semancik
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.evolveum.midpoint.prism.PrismItemAccessDefinition
PrismItemAccessDefinition.Mutable
-
-
Field Summary
Fields Modifier and Type Field Description protected Class<C>
compileTimeClass
protected ComplexTypeDefinition
complexTypeDefinition
-
Fields inherited from class com.evolveum.midpoint.prism.impl.ItemDefinitionImpl
heterogeneousListItem, itemName, substitutionHead
-
Fields inherited from class com.evolveum.midpoint.prism.impl.DefinitionImpl
deprecated, deprecatedSince, displayName, displayOrder, documentation, elaborate, emphasized, experimental, help, isAbstract, isRuntimeSchema, plannedRemoval, processing, typeName
-
Fields inherited from interface com.evolveum.midpoint.util.DebugDumpable
INDENT_STRING
-
-
Constructor Summary
Constructors Constructor Description PrismContainerDefinitionImpl(@NotNull QName name, ComplexTypeDefinition complexTypeDefinition)
The constructors should be used only occasionally (if used at all).PrismContainerDefinitionImpl(@NotNull QName name, ComplexTypeDefinition complexTypeDefinition, Class<C> compileTimeClass)
PrismContainerDefinitionImpl(@NotNull QName name, ComplexTypeDefinition complexTypeDefinition, Class<C> compileTimeClass, QName definedInType)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation)
boolean
canBeDefinitionOf(PrismValue pvalue)
TODO documentboolean
canRepresent(@NotNull QName typeName)
TODOvoid
checkMutable()
@NotNull PrismContainerDefinitionImpl<C>
clone()
Shallow clone@NotNull PrismContainerDefinition<C>
cloneWithReplacedDefinition(QName itemName, ItemDefinition<?> newDefinition)
TODOprotected void
copyDefinitionDataFrom(PrismContainerDefinition<C> source)
MutablePrismContainerDefinition<?>
createContainerDefinition(QName name, ComplexTypeDefinition complexTypeDefinition, int minOccurs, int maxOccurs)
PrismContainerDefinition<?>
createContainerDefinition(QName name, QName typeName)
MutablePrismContainerDefinition<?>
createContainerDefinition(QName name, QName typeName, int minOccurs, int maxOccurs)
@NotNull ContainerDelta<C>
createEmptyDelta(ItemPath path)
Creates an empty delta (with appropriate implementation class), pointing to this item definition, with a given path.PrismPropertyDefinition<?>
createPropertyDefinition(String localName, String localTypeName)
Creates new instance of property definition and adds it to the container.PrismPropertyDefinition<?>
createPropertyDefinition(String localName, String localTypeName, int minOccurs, int maxOccurs)
Creates new instance of property definition and adds it to the container.MutablePrismPropertyDefinition<?>
createPropertyDefinition(String localName, QName typeName)
Creates new instance of property definition and adds it to the container.PrismPropertyDefinition<?>
createPropertyDefinition(QName name)
PrismPropertyDefinitionImpl<?>
createPropertyDefinition(QName name, QName typeName)
Creates new instance of property definition and adds it to the container.MutablePrismPropertyDefinition<?>
createPropertyDefinition(QName name, QName typeName, int minOccurs, int maxOccurs)
Creates new instance of property definition and adds it to the container.PrismContainerValue<C>
createValue()
TODOString
debugDump(int indent)
String
debugDump(int indent, IdentityHashMap<Definition,Object> seen)
ItemDefinition<PrismContainer<C>>
deepClone(@NotNull DeepCloneOperation operation)
Make a deep clone, cloning all the sub-items and definitions.<ID extends ItemDefinition<?>>
IDfindItemDefinition(@NotNull ItemPath path, @NotNull Class<ID> clazz)
Used to find a matching item definition _within_ this definition.Class<C>
getCompileTimeClass()
Static (compile-time) class holding the container values.ComplexTypeDefinition
getComplexTypeDefinition()
Definition of the container values.String
getDebugDumpClassName()
Return a human readable name of this class suitable for logs.@NotNull List<? extends ItemDefinition<?>>
getDefinitions()
FIXME this looks like outdated description Returns set of property definitions.List<ItemDiagramSpecification>
getDiagrams()
String
getDocClassName()
Returns human-readable name of this class suitable for documentation.List<PrismPropertyDefinition<?>>
getPropertyDefinitions()
Returns set of property definitions.protected String
getSchemaNamespace()
Class<C>
getTypeClass()
Returns a compile-time class that is used to represent items.@NotNull PrismContainer<C>
instantiate()
Create an item instance.@NotNull PrismContainer<C>
instantiate(QName elementName)
Create an item instance.boolean
isAbstract()
For types: is the type abstract so that it should not be instantiated directly? For items: TODOboolean
isEmpty()
TODOvoid
performFreeze()
void
replaceDefinition(QName itemName, ItemDefinition<?> newDefinition)
TODOvoid
revive(PrismContext prismContext)
TODO: Is revive necessary if prism context is static? TODO document (if it's found to be necessary)void
setCompileTimeClass(Class<C> compileTimeClass)
void
setComplexTypeDefinition(ComplexTypeDefinition complexTypeDefinition)
MutablePrismContainerDefinition<C>
toMutable()
Returns an interface to mutate this definition.-
Methods inherited from class com.evolveum.midpoint.prism.impl.ItemDefinitionImpl
adoptElementDefinitionFrom, canAdd, canBeDefinitionOf, canModify, canRead, copyDefinitionDataFrom, debugDumpShortToString, debugFlags, debugMultiplicity, equals, extendToString, getItemName, getMaxOccurs, getMinOccurs, getSubstitutionHead, getValueEnumerationRef, hashCode, isDynamic, isHeterogeneousListItem, isIndexOnly, isInherited, isOperational, isValidFor, replaceName, setCanAdd, setCanModify, setCanRead, setDynamic, setHeterogeneousListItem, setIndexOnly, setInherited, setItemName, setMaxOccurs, setMinOccurs, setOperational, setReadOnly, setSubstitutionHead, setValueEnumerationRef, toString, useSerializationProxy, writeReplace
-
Methods inherited from class com.evolveum.midpoint.prism.impl.DefinitionImpl
accept, addDiagram, addSchemaMigration, checkMutableOnExposing, copyDefinitionDataFrom, extendDumpHeader, getAnnotation, getAnnotations, getDeprecatedSince, getDisplayName, getDisplayOrder, getDocumentation, getDocumentationPreview, getHelp, getPlannedRemoval, getPrismContext, getProcessing, getSchemaMigrations, getTypeName, isDeprecated, isElaborate, isEmphasized, isExperimental, isIgnored, isRuntimeSchema, setAbstract, setAnnotation, setDeprecated, setDeprecatedSince, setDisplayName, setDisplayOrder, setDocumentation, setElaborate, setEmphasized, setExperimental, setHelp, setPlannedRemoval, setProcessing, setRuntimeSchema, setTypeName
-
Methods inherited from class com.evolveum.midpoint.prism.AbstractFreezable
freeze, freeze, freezeAll, freezeNullableList, isImmutable, isMutable
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.evolveum.midpoint.util.DebugDumpable
debugDump, debugDumpLazily, debugDumpLazily
-
Methods inherited from interface com.evolveum.midpoint.prism.Definition
getAnnotation, getAnnotations, getDeprecatedSince, getDisplayName, getDisplayOrder, getDocumentation, getDocumentationPreview, getHelp, getMutabilityFlag, getPlannedRemoval, getProcessing, getSchemaMigrations, getSchemaRegistry, getTypeName, isDeprecated, isElaborate, isEmphasized, isExperimental, isIgnored, isRuntimeSchema, setAnnotation
-
Methods inherited from interface com.evolveum.midpoint.prism.Freezable
checkImmutable, freeze, isImmutable
-
Methods inherited from interface com.evolveum.midpoint.prism.ItemDefinition
adoptElementDefinitionFrom, canBeDefinitionOf, debugDumpShortToString, getItemName, getMaxOccurs, getMinOccurs, getSubstitutionHead, getValueEnumerationRef, isDynamic, isHeterogeneousListItem, isIndexOnly, isInherited, isMandatory, isMultiValue, isOperational, isOptional, isSingleValue, isValidFor
-
Methods inherited from interface com.evolveum.midpoint.prism.LocalItemDefinitionStore
containsItemDefinition, findContainerDefinition, findItemDefinition, findLocalItemDefinition, findLocalItemDefinition, findPropertyDefinition, findReferenceDefinition
-
Methods inherited from interface com.evolveum.midpoint.prism.MutableDefinition
addDiagram, addSchemaMigration, setDeprecated, setDisplayName, setDisplayOrder, setDocumentation, setEmphasized, setExperimental, setHelp, setProcessing, setRuntimeSchema, setTypeName
-
Methods inherited from interface com.evolveum.midpoint.prism.MutableItemDefinition
setCanAdd, setCanModify, setCanRead, setDeprecatedSince, setDynamic, setElaborate, setHeterogeneousListItem, setIndexOnly, setInherited, setItemName, setMaxOccurs, setMinOccurs, setOperational, setPlannedRemoval, setReadOnly, setSubstitutionHead, setValueEnumerationRef
-
Methods inherited from interface com.evolveum.midpoint.prism.PrismContainerDefinition
getItemNames, isCompletelyDefined, structuredType
-
Methods inherited from interface com.evolveum.midpoint.prism.PrismContextSensitive
getPrismContext
-
Methods inherited from interface com.evolveum.midpoint.prism.PrismItemAccessDefinition
canAdd, canModify, canRead
-
-
-
-
Field Detail
-
complexTypeDefinition
protected ComplexTypeDefinition complexTypeDefinition
-
compileTimeClass
protected Class<C extends Containerable> compileTimeClass
-
-
Constructor Detail
-
PrismContainerDefinitionImpl
public PrismContainerDefinitionImpl(@NotNull @NotNull QName name, ComplexTypeDefinition complexTypeDefinition)
The constructors should be used only occasionally (if used at all). Use the factory methods in the ResourceObjectDefintion instead.
-
PrismContainerDefinitionImpl
public PrismContainerDefinitionImpl(@NotNull @NotNull QName name, ComplexTypeDefinition complexTypeDefinition, Class<C> compileTimeClass)
-
PrismContainerDefinitionImpl
public PrismContainerDefinitionImpl(@NotNull @NotNull QName name, ComplexTypeDefinition complexTypeDefinition, Class<C> compileTimeClass, QName definedInType)
-
-
Method Detail
-
getCompileTimeClass
public Class<C> getCompileTimeClass()
Description copied from interface:PrismContainerDefinition
Static (compile-time) class holding the container values. May be null. (Let's not mark it as @Nullable to avoid lots of warnings.)- Specified by:
getCompileTimeClass
in interfacePrismContainerDefinition<C extends Containerable>
-
setCompileTimeClass
public void setCompileTimeClass(Class<C> compileTimeClass)
- Specified by:
setCompileTimeClass
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
getTypeClass
public Class<C> getTypeClass()
Description copied from interface:Definition
Returns a compile-time class that is used to represent items. E.g. returns String, Integer, subclasses of Objectable and Containerable and so on.- Specified by:
getTypeClass
in interfaceDefinition
- Specified by:
getTypeClass
in interfacePrismContainerDefinition<C extends Containerable>
- Overrides:
getTypeClass
in classDefinitionImpl
-
getSchemaNamespace
protected String getSchemaNamespace()
-
getComplexTypeDefinition
public ComplexTypeDefinition getComplexTypeDefinition()
Description copied from interface:PrismContainerDefinition
Definition of the container values. May be null. (Let's not mark it as @Nullable to avoid lots of warnings.) Note that individual values can hold their own (more specific) complex type definitions.- Specified by:
getComplexTypeDefinition
in interfacePrismContainerDefinition<C extends Containerable>
-
setComplexTypeDefinition
public void setComplexTypeDefinition(ComplexTypeDefinition complexTypeDefinition)
- Specified by:
setComplexTypeDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
isAbstract
public boolean isAbstract()
Description copied from interface:Definition
For types: is the type abstract so that it should not be instantiated directly? For items: TODO- Specified by:
isAbstract
in interfaceDefinition
- Overrides:
isAbstract
in classDefinitionImpl
-
revive
public void revive(PrismContext prismContext)
Description copied from interface:Revivable
TODO: Is revive necessary if prism context is static? TODO document (if it's found to be necessary)- Specified by:
revive
in interfaceRevivable
- Overrides:
revive
in classItemDefinitionImpl<PrismContainer<C extends Containerable>>
-
findItemDefinition
public <ID extends ItemDefinition<?>> ID findItemDefinition(@NotNull @NotNull ItemPath path, @NotNull @NotNull Class<ID> clazz)
Description copied from interface:ItemDefinition
Used to find a matching item definition _within_ this definition. Treats e.g. de-referencing in prism references.- Specified by:
findItemDefinition
in interfaceItemDefinition<C extends Containerable>
- Specified by:
findItemDefinition
in interfaceLocalItemDefinitionStore
- Overrides:
findItemDefinition
in classItemDefinitionImpl<PrismContainer<C extends Containerable>>
-
getDefinitions
@NotNull public @NotNull List<? extends ItemDefinition<?>> getDefinitions()
FIXME this looks like outdated description Returns set of property definitions.WARNING: This may return definitions from the associated complex type. Therefore changing the returned set may influence also the complex type definition.
The set contains all property definitions of all types that were parsed. Order of definitions is insignificant.
- Specified by:
getDefinitions
in interfaceLocalItemDefinitionStore
- Specified by:
getDefinitions
in interfacePrismContainerDefinition<C extends Containerable>
- Returns:
- set of definitions
-
checkMutable
public void checkMutable()
- Specified by:
checkMutable
in interfaceFreezable
-
getPropertyDefinitions
public List<PrismPropertyDefinition<?>> getPropertyDefinitions()
Description copied from interface:PrismContainerDefinition
Returns set of property definitions. The set contains all property definitions of all types that were parsed. Order of definitions is insignificant. The returned set is immutable! All changes may be lost.- Specified by:
getPropertyDefinitions
in interfacePrismContainerDefinition<C extends Containerable>
- Returns:
- set of definitions
-
instantiate
@NotNull public @NotNull PrismContainer<C> instantiate() throws SchemaException
Description copied from interface:ItemDefinition
Create an item instance. Definition name or default name will be used as an element name for the instance. The instance will otherwise be empty.- Specified by:
instantiate
in interfaceItemDefinition<C extends Containerable>
- Throws:
SchemaException
-
instantiate
@NotNull public @NotNull PrismContainer<C> instantiate(QName elementName) throws SchemaException
Description copied from interface:ItemDefinition
Create an item instance. Definition name will use provided name. for the instance. The instance will otherwise be empty.- Specified by:
instantiate
in interfaceItemDefinition<C extends Containerable>
- Throws:
SchemaException
-
createEmptyDelta
@NotNull public @NotNull ContainerDelta<C> createEmptyDelta(ItemPath path)
Description copied from interface:ItemDefinition
Creates an empty delta (with appropriate implementation class), pointing to this item definition, with a given path.- Specified by:
createEmptyDelta
in interfaceItemDefinition<C extends Containerable>
- Specified by:
createEmptyDelta
in interfacePrismContainerDefinition<C extends Containerable>
-
accept
public boolean accept(Visitor<Definition> visitor, SmartVisitation<Definition> visitation)
- Specified by:
accept
in interfaceSmartVisitable<C extends Containerable>
- Overrides:
accept
in classDefinitionImpl
- Returns:
- false if we already was here
-
clone
@NotNull public @NotNull PrismContainerDefinitionImpl<C> clone()
Shallow clone- Specified by:
clone
in interfaceDefinition
- Specified by:
clone
in interfaceItemDefinition<C extends Containerable>
- Specified by:
clone
in interfacePrismContainerDefinition<C extends Containerable>
- Specified by:
clone
in classItemDefinitionImpl<PrismContainer<C extends Containerable>>
-
copyDefinitionDataFrom
protected void copyDefinitionDataFrom(PrismContainerDefinition<C> source)
-
deepClone
public ItemDefinition<PrismContainer<C>> deepClone(@NotNull @NotNull DeepCloneOperation operation)
Description copied from class:ItemDefinitionImpl
Make a deep clone, cloning all the sub-items and definitions.- Specified by:
deepClone
in interfaceItemDefinition<C extends Containerable>
- Overrides:
deepClone
in classItemDefinitionImpl<PrismContainer<C extends Containerable>>
-
cloneWithReplacedDefinition
@NotNull public @NotNull PrismContainerDefinition<C> cloneWithReplacedDefinition(QName itemName, ItemDefinition<?> newDefinition)
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
cloneWithReplacedDefinition
in interfacePrismContainerDefinition<C extends Containerable>
-
replaceDefinition
public void replaceDefinition(QName itemName, ItemDefinition<?> newDefinition)
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
replaceDefinition
in interfacePrismContainerDefinition<C extends Containerable>
-
createPropertyDefinition
public PrismPropertyDefinitionImpl<?> createPropertyDefinition(QName name, QName typeName)
Creates new instance of property definition and adds it to the container.This is the preferred method of creating a new definition.
- Specified by:
createPropertyDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
- Parameters:
name
- name of the property (element name)typeName
- XSD type of the property- Returns:
- created property definition
-
createPropertyDefinition
public MutablePrismPropertyDefinition<?> createPropertyDefinition(QName name, QName typeName, int minOccurs, int maxOccurs)
Creates new instance of property definition and adds it to the container.This is the preferred method of creating a new definition.
- Specified by:
createPropertyDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
- Parameters:
name
- name of the property (element name)typeName
- XSD type of the propertyminOccurs
- minimal number of occurrencesmaxOccurs
- maximal number of occurrences (-1 means unbounded)- Returns:
- created property definition
-
createPropertyDefinition
public PrismPropertyDefinition<?> createPropertyDefinition(QName name)
-
createPropertyDefinition
public MutablePrismPropertyDefinition<?> createPropertyDefinition(String localName, QName typeName)
Creates new instance of property definition and adds it to the container.This is the preferred method of creating a new definition.
- Specified by:
createPropertyDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
- Parameters:
localName
- name of the property (element name) relative to the schema namespacetypeName
- XSD type of the property- Returns:
- created property definition
-
createPropertyDefinition
public PrismPropertyDefinition<?> createPropertyDefinition(String localName, String localTypeName)
Creates new instance of property definition and adds it to the container.This is the preferred method of creating a new definition.
- Parameters:
localName
- name of the property (element name) relative to the schema namespacelocalTypeName
- XSD type of the property- Returns:
- created property definition
-
createPropertyDefinition
public PrismPropertyDefinition<?> createPropertyDefinition(String localName, String localTypeName, int minOccurs, int maxOccurs)
Creates new instance of property definition and adds it to the container.This is the preferred method of creating a new definition.
- Parameters:
localName
- name of the property (element name) relative to the schema namespacelocalTypeName
- XSD type of the propertyminOccurs
- minimal number of occurrencesmaxOccurs
- maximal number of occurrences (-1 means unbounded)- Returns:
- created property definition
-
createContainerDefinition
public PrismContainerDefinition<?> createContainerDefinition(QName name, QName typeName)
-
createContainerDefinition
public MutablePrismContainerDefinition<?> createContainerDefinition(QName name, QName typeName, int minOccurs, int maxOccurs)
- Specified by:
createContainerDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
createContainerDefinition
public MutablePrismContainerDefinition<?> createContainerDefinition(QName name, ComplexTypeDefinition complexTypeDefinition, int minOccurs, int maxOccurs)
- Specified by:
createContainerDefinition
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
canBeDefinitionOf
public boolean canBeDefinitionOf(PrismValue pvalue)
Description copied from interface:ItemDefinition
TODO document- Specified by:
canBeDefinitionOf
in interfaceItemDefinition<C extends Containerable>
-
canRepresent
public boolean canRepresent(@NotNull @NotNull QName typeName)
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
canRepresent
in interfacePrismContainerDefinition<C extends Containerable>
-
createValue
public PrismContainerValue<C> createValue()
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
createValue
in interfacePrismContainerDefinition<C extends Containerable>
-
getDiagrams
public List<ItemDiagramSpecification> getDiagrams()
- Specified by:
getDiagrams
in interfaceDefinition
- Overrides:
getDiagrams
in classDefinitionImpl
-
debugDump
public String debugDump(int indent)
- Specified by:
debugDump
in interfaceDebugDumpable
- Overrides:
debugDump
in classDefinitionImpl
-
debugDump
public String debugDump(int indent, IdentityHashMap<Definition,Object> seen)
- Specified by:
debugDump
in interfaceDefinition
-
isEmpty
public boolean isEmpty()
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
isEmpty
in interfacePrismContainerDefinition<C extends Containerable>
-
getDebugDumpClassName
public String getDebugDumpClassName()
Return a human readable name of this class suitable for logs.- Specified by:
getDebugDumpClassName
in classDefinitionImpl
-
getDocClassName
public String getDocClassName()
Description copied from class:DefinitionImpl
Returns human-readable name of this class suitable for documentation. (e.g. "property")- Specified by:
getDocClassName
in classDefinitionImpl
-
toMutable
public MutablePrismContainerDefinition<C> toMutable()
Description copied from interface:Definition
Returns an interface to mutate this definition.- Specified by:
toMutable
in interfaceDefinition
- Specified by:
toMutable
in interfaceItemDefinition<C extends Containerable>
- Specified by:
toMutable
in interfacePrismContainerDefinition<C extends Containerable>
-
performFreeze
public void performFreeze()
- Overrides:
performFreeze
in classAbstractFreezable
-
-