Class PrismContainerDefinitionImpl<C extends Containerable>
- 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
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:
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.evolveum.midpoint.prism.PrismItemAccessDefinition
PrismItemAccessDefinition.Mutable
-
Field Summary
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, removed, removedSince, typeName
Fields inherited from interface com.evolveum.midpoint.util.DebugDumpable
INDENT_STRING
-
Constructor Summary
ConstructorDescriptionPrismContainerDefinitionImpl
(@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
Modifier and TypeMethodDescriptionboolean
accept
(Visitor<Definition> visitor, SmartVisitation<Definition> visitation) boolean
canBeDefinitionOf
(PrismValue pvalue) TODO documentboolean
canRepresent
(@NotNull QName typeName) TODOvoid
@NotNull PrismContainerDefinitionImpl<C>
clone()
Shallow clone@NotNull PrismContainerDefinition<C>
cloneWithReplacedDefinition
(QName itemName, ItemDefinition<?> newDefinition) TODOprotected void
createContainerDefinition
(QName name, ComplexTypeDefinition complexTypeDefinition, int minOccurs, int maxOccurs) createContainerDefinition
(QName name, QName typeName) 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.createPropertyDefinition
(String localName, String localTypeName) Creates new instance of property definition and adds it to the container.createPropertyDefinition
(String localName, String localTypeName, int minOccurs, int maxOccurs) Creates new instance of property definition and adds it to the container.createPropertyDefinition
(String localName, QName typeName) Creates new instance of property definition and adds it to the container.createPropertyDefinition
(QName name, QName typeName) Creates new instance of property definition and adds it to the container.createPropertyDefinition
(QName name, QName typeName, int minOccurs, int maxOccurs) Creates new instance of property definition and adds it to the container.TODOdebugDump
(int indent) debugDump
(int indent, IdentityHashMap<Definition, Object> seen) 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.Returns list of items which should be always used for equals, even if they are operational, and equivalence strategy does not consider operational data.Static (compile-time) class holding the container values.Definition of the container values.Return a human readable name of this class suitable for logs.@NotNull List<? extends ItemDefinition<?>>
FIXME this looks like outdated description Returns set of property definitions.Returns human-readable name of this class suitable for documentation.Returns set of property definitions.protected String
Returns a compile-time class that is used to represent items.@NotNull PrismContainer<C>
Create an item instance.@NotNull PrismContainer<C>
instantiate
(QName elementName) Create an item instance.boolean
For types: is the type abstract so that it should not be instantiated directly? For items: TODOboolean
isEmpty()
TODOvoid
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
setAlwaysUseForEquals
(@NotNull Collection<QName> keysElem) Experimental: USe only with care, this overrides behavior of listed operational=true items in equivalence strategies for containers.void
setCompileTimeClass
(Class<C> compileTimeClass) void
setComplexTypeDefinition
(ComplexTypeDefinition complexTypeDefinition) 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, isSearchable, isValidFor, replaceName, setCanAdd, setCanModify, setCanRead, setDynamic, setHeterogeneousListItem, setIndexOnly, setInherited, setItemName, setMaxOccurs, setMinOccurs, setOperational, setReadOnly, setSearchable, 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, getRemovedSince, getSchemaMigrations, getTypeName, isDeprecated, isElaborate, isEmphasized, isExperimental, isIgnored, isRemoved, isRuntimeSchema, setAbstract, setAnnotation, setDeprecated, setDeprecatedSince, setDisplayName, setDisplayOrder, setDocumentation, setElaborate, setEmphasized, setExperimental, setHelp, setPlannedRemoval, setProcessing, setRemoved, setRemovedSince, 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, getRemovedSince, getSchemaMigrations, getSchemaRegistry, getTypeName, isDeprecated, isElaborate, isEmphasized, isExperimental, isIgnored, isRemoved, 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, isSearchable, 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, setRemoved, setRemovedSince, 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, setSearchable, setSubstitutionHead, setValueEnumerationRef
Methods inherited from interface com.evolveum.midpoint.prism.PrismContainerDefinition
getItemNames, isAlwaysUseForEquals, 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 Details
-
complexTypeDefinition
-
compileTimeClass
-
-
Constructor Details
-
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 Details
-
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
- Specified by:
setCompileTimeClass
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
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
-
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
- 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
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
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
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
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
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
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
- Specified by:
accept
in interfaceSmartVisitable<C extends Containerable>
- Overrides:
accept
in classDefinitionImpl
- Returns:
- false if we already was here
-
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
-
deepClone
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
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
replaceDefinition
in interfacePrismContainerDefinition<C extends Containerable>
-
createPropertyDefinition
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
-
createPropertyDefinition
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
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
-
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
Description copied from interface:ItemDefinition
TODO document- Specified by:
canBeDefinitionOf
in interfaceItemDefinition<C extends Containerable>
-
canRepresent
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
canRepresent
in interfacePrismContainerDefinition<C extends Containerable>
-
createValue
Description copied from interface:PrismContainerDefinition
TODO- Specified by:
createValue
in interfacePrismContainerDefinition<C extends Containerable>
-
getDiagrams
- Specified by:
getDiagrams
in interfaceDefinition
- Overrides:
getDiagrams
in classDefinitionImpl
-
debugDump
- Specified by:
debugDump
in interfaceDebugDumpable
- Overrides:
debugDump
in classDefinitionImpl
-
debugDump
- Specified by:
debugDump
in interfaceDefinition
-
isEmpty
public boolean isEmpty()Description copied from interface:PrismContainerDefinition
TODO- Specified by:
isEmpty
in interfacePrismContainerDefinition<C extends Containerable>
-
getDebugDumpClassName
Return a human readable name of this class suitable for logs.- Specified by:
getDebugDumpClassName
in classDefinitionImpl
-
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
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>
-
setAlwaysUseForEquals
Description copied from interface:MutablePrismContainerDefinition
Experimental: USe only with care, this overrides behavior of listed operational=true items in equivalence strategies for containers.- Specified by:
setAlwaysUseForEquals
in interfaceMutablePrismContainerDefinition<C extends Containerable>
-
getAlwaysUseForEquals
Description copied from interface:PrismContainerDefinition
Returns list of items which should be always used for equals, even if they are operational, and equivalence strategy does not consider operational data.- Specified by:
getAlwaysUseForEquals
in interfacePrismContainerDefinition<C extends Containerable>
-
performFreeze
public void performFreeze()- Overrides:
performFreeze
in classAbstractFreezable
-