Class ItemDefinitionImpl<I extends Item<?,?>>

All Implemented Interfaces:
Definition, Freezable, ItemDefinition<I>, ItemDefinitionTestAccess, MutableDefinition, MutableItemDefinition<I>, PrismContextSensitive, PrismItemAccessDefinition, Revivable, SmartVisitable<Definition>, Visitable<Definition>, DebugDumpable, Serializable, Cloneable
Direct Known Subclasses:
PrismContainerDefinitionImpl, PrismPropertyDefinitionImpl, PrismReferenceDefinitionImpl

public abstract class ItemDefinitionImpl<I extends Item<?,?>> extends DefinitionImpl implements MutableItemDefinition<I>, ItemDefinitionTestAccess
Abstract item definition in the schema. This is supposed to be a superclass for all item definitions. Items are things that can appear in property containers, which generally means only a property and property container itself. Therefore this is in fact superclass for those two definitions. The definitions represent data structures of the schema. Therefore instances of Java objects from this class represent specific definitions from the schema, not specific properties or objects. E.g the definitions does not have any value. To transform definition to a real property or object use the explicit instantiate() methods provided in the definition classes. E.g. the instantiate() method will create instance of Property using appropriate PropertyDefinition. The convenience methods in Schema are using this abstract class to find appropriate definitions easily.
Author:
Radovan Semancik
See Also:
  • Field Details

    • itemName

      @NotNull protected @NotNull ItemName itemName
    • substitutionHead

      protected QName substitutionHead
    • heterogeneousListItem

      protected boolean heterogeneousListItem
  • Method Details

    • useSerializationProxy

      protected static boolean useSerializationProxy(boolean localEnabled)
    • getItemName

      @NotNull public @NotNull ItemName getItemName()
      Returns name of the defined entity. The name is a name of the entity instance if it is fixed by the schema. E.g. it may be a name of the property in the container that cannot be changed. The name corresponds to the XML element name in the XML representation of the schema. It does NOT correspond to a XSD type name. Name is optional. If name is not set the null value is returned. If name is not set the type is "abstract", does not correspond to the element.
      Specified by:
      getItemName in interface ItemDefinition<I extends Item<?,?>>
      Returns:
      the name name of the entity or null.
    • setItemName

      public void setItemName(@NotNull @NotNull QName name)
      Specified by:
      setItemName in interface MutableItemDefinition<I extends Item<?,?>>
    • getMinOccurs

      public int getMinOccurs()
      Description copied from interface: ItemDefinition
      Return the number of minimal value occurrences.
      Specified by:
      getMinOccurs in interface ItemDefinition<I extends Item<?,?>>
    • setMinOccurs

      public void setMinOccurs(int minOccurs)
      Specified by:
      setMinOccurs in interface MutableItemDefinition<I extends Item<?,?>>
    • getMaxOccurs

      public int getMaxOccurs()
      Description copied from interface: ItemDefinition
      Return the number of maximal value occurrences. Any negative number means "unbounded".
      Specified by:
      getMaxOccurs in interface ItemDefinition<I extends Item<?,?>>
    • setMaxOccurs

      public void setMaxOccurs(int maxOccurs)
      Specified by:
      setMaxOccurs in interface MutableItemDefinition<I extends Item<?,?>>
    • isOperational

      public boolean isOperational()
      Description copied from interface: ItemDefinition
      Marks operational item. Operational properties are auxiliary data (or meta-data) that are usually not modifiable by the end user. They are generated and maintained by the system. Operational items are also not usually displayed unless it is explicitly requested. The example of operational items are modification timestamps, create timestamps, user that made the last change, etc. They are also treated in a special way when comparing values. See ParameterizedEquivalenceStrategy.
      Specified by:
      isOperational in interface ItemDefinition<I extends Item<?,?>>
    • setOperational

      public void setOperational(boolean operational)
      Specified by:
      setOperational in interface MutableItemDefinition<I extends Item<?,?>>
    • isDynamic

      public boolean isDynamic()
      Description copied from interface: ItemDefinition
      Returns true if definition was created during the runtime based on a dynamic information such as xsi:type attributes in XML. This means that the definition needs to be stored alongside the data to have a successful serialization "roundtrip". The definition is not part of any schema and therefore cannot be determined. It may even be different for every instance of the associated item (element name).
      Specified by:
      isDynamic in interface ItemDefinition<I extends Item<?,?>>
    • setDynamic

      public void setDynamic(boolean dynamic)
      Specified by:
      setDynamic in interface MutableItemDefinition<I extends Item<?,?>>
    • canRead

      public boolean canRead()
      Returns true if the property can be read. I.e. if it is returned in objects retrieved from "get", "search" and similar operations.
      Specified by:
      canRead in interface PrismItemAccessDefinition
    • canModify

      public boolean canModify()
      Returns true if the item can be modified. I.e. if it can be changed during a modification of existing object.
      Specified by:
      canModify in interface PrismItemAccessDefinition
    • setReadOnly

      public void setReadOnly()
      Specified by:
      setReadOnly in interface MutableItemDefinition<I extends Item<?,?>>
    • setCanRead

      public void setCanRead(boolean read)
      Specified by:
      setCanRead in interface MutableItemDefinition<I extends Item<?,?>>
    • setCanModify

      public void setCanModify(boolean modify)
      Specified by:
      setCanModify in interface MutableItemDefinition<I extends Item<?,?>>
    • setCanAdd

      public void setCanAdd(boolean add)
      Specified by:
      setCanAdd in interface MutableItemDefinition<I extends Item<?,?>>
    • canAdd

      public boolean canAdd()
      Returns true if the item can be added. I.e. if it can be present in the object when a new object is created.
      Specified by:
      canAdd in interface PrismItemAccessDefinition
    • getSubstitutionHead

      public QName getSubstitutionHead()
      Description copied from interface: ItemDefinition
      Returns the name of an element this one can be substituted for (e.g. c:user -> c:object, s:pipeline -> s:expression, etc). EXPERIMENTAL
      Specified by:
      getSubstitutionHead in interface ItemDefinition<I extends Item<?,?>>
    • setSubstitutionHead

      public void setSubstitutionHead(QName substitutionHead)
      Specified by:
      setSubstitutionHead in interface MutableItemDefinition<I extends Item<?,?>>
    • isHeterogeneousListItem

      public boolean isHeterogeneousListItem()
      Description copied from interface: ItemDefinition
      Can be used in heterogeneous lists as a list item. EXPERIMENTAL.
      Specified by:
      isHeterogeneousListItem in interface ItemDefinition<I extends Item<?,?>>
    • setHeterogeneousListItem

      public void setHeterogeneousListItem(boolean heterogeneousListItem)
      Specified by:
      setHeterogeneousListItem in interface MutableItemDefinition<I extends Item<?,?>>
    • getValueEnumerationRef

      public PrismReferenceValue getValueEnumerationRef()
      Description copied from interface: ItemDefinition
      Reference to an object that directly or indirectly represents possible values for this item. We do not define here what exactly the object has to be. It can be a lookup table, script that dynamically produces the values or anything similar. The object must produce the values of the correct type for this item otherwise an error occurs.
      Specified by:
      getValueEnumerationRef in interface ItemDefinition<I extends Item<?,?>>
    • setValueEnumerationRef

      public void setValueEnumerationRef(PrismReferenceValue valueEnumerationRef)
      Specified by:
      setValueEnumerationRef in interface MutableItemDefinition<I extends Item<?,?>>
    • isValidFor

      public boolean isValidFor(@NotNull @NotNull QName elementQName, @NotNull @NotNull Class<? extends ItemDefinition<?>> clazz, boolean caseInsensitive)
      Description copied from interface: ItemDefinition
      Returns true if this definition is valid for given element name and definition class, in either case-sensitive (the default) or case-insensitive way. Used e.g. for "slow" path lookup where we iterate over all definitions in a complex type.
      Specified by:
      isValidFor in interface ItemDefinition<I extends Item<?,?>>
    • adoptElementDefinitionFrom

      public void adoptElementDefinitionFrom(ItemDefinition<?> otherDef)
      Description copied from interface: ItemDefinition
      Transfers selected parts of the definition (currently item name, min/max occurs) from another definition. TODO used only on few places, consider removing
      Specified by:
      adoptElementDefinitionFrom in interface ItemDefinition<I extends Item<?,?>>
    • findItemDefinition

      public <T extends ItemDefinition<?>> T findItemDefinition(@NotNull @NotNull ItemPath path, @NotNull @NotNull Class<T> 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 interface ItemDefinition<I extends Item<?,?>>
    • canBeDefinitionOf

      public boolean canBeDefinitionOf(I item)
      Description copied from interface: ItemDefinition
      TODO document
      Specified by:
      canBeDefinitionOf in interface ItemDefinition<I extends Item<?,?>>
    • clone

      @NotNull public abstract @NotNull ItemDefinition<I> clone()
      Specified by:
      clone in interface Definition
      Specified by:
      clone in interface ItemDefinition<I extends Item<?,?>>
      Specified by:
      clone in class DefinitionImpl
    • copyDefinitionDataFrom

      protected void copyDefinitionDataFrom(ItemDefinition<I> source)
    • deepClone

      public ItemDefinition<I> deepClone(@NotNull @NotNull DeepCloneOperation operation)
      Make a deep clone, cloning all the sub-items and definitions.
      Specified by:
      deepClone in interface ItemDefinition<I extends Item<?,?>>
    • 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 interface Revivable
      Specified by:
      revive in class DefinitionImpl
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class DefinitionImpl
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class DefinitionImpl
    • toString

      public String toString()
      Overrides:
      toString in class DefinitionImpl
    • debugDumpShortToString

      public void debugDumpShortToString(StringBuilder sb)
      Used in debugDumping items. Does not need to have name in it as item already has it. Does not need to have class as that is just too much info that is almost anytime pretty obvious anyway.
      Specified by:
      debugDumpShortToString in interface ItemDefinition<I extends Item<?,?>>
    • debugMultiplicity

      public String debugMultiplicity()
    • debugFlags

      public String debugFlags()
    • extendToString

      protected void extendToString(StringBuilder sb)
    • isInherited

      public boolean isInherited()
      Description copied from interface: ItemDefinition
      Whether the item is inherited from a supertype.
      Specified by:
      isInherited in interface ItemDefinition<I extends Item<?,?>>
    • setInherited

      public void setInherited(boolean inherited)
      Specified by:
      setInherited in interface MutableItemDefinition<I extends Item<?,?>>
    • isIndexOnly

      public boolean isIndexOnly()
      Description copied from interface: ItemDefinition
      If true, this item is not stored in XML representation in repo. TODO better name
      Specified by:
      isIndexOnly in interface ItemDefinition<I extends Item<?,?>>
    • setIndexOnly

      public void setIndexOnly(boolean indexOnly)
      Specified by:
      setIndexOnly in interface MutableItemDefinition<I extends Item<?,?>>
    • isSearchable

      public boolean isSearchable()
      Description copied from interface: ItemDefinition
      Returns true if item definition is searchable.
      Specified by:
      isSearchable in interface ItemDefinition<I extends Item<?,?>>
      Returns:
    • setSearchable

      public void setSearchable(boolean searchable)
      Specified by:
      setSearchable in interface MutableItemDefinition<I extends Item<?,?>>
    • replaceName

      public void replaceName(ItemName newName)
      Specified by:
      replaceName in interface ItemDefinitionTestAccess
    • writeReplace

      protected Object writeReplace()