Class DummyItem<V extends PrismValue,D extends ItemDefinition<?>,R extends Item<V,D>>

java.lang.Object
com.evolveum.midpoint.prism.impl.item.DummyItem<V,D,R>
All Implemented Interfaces:
Freezable, Item<V,D>, Itemable, ParentVisitable, PathVisitable, Revivable, Visitable, DebugDumpable, Serializable
Direct Known Subclasses:
DummyContainerImpl, DummyPropertyImpl, DummyReferenceImpl

public abstract class DummyItem<V extends PrismValue,D extends ItemDefinition<?>,R extends Item<V,D>> extends Object implements Item<V,D>
Author:
semancik
See Also:
  • Constructor Details

    • DummyItem

      public DummyItem(R realContainer, @NotNull @NotNull ItemPath path)
  • Method Details

    • delegate

      protected final R delegate()
    • clone

      public abstract R clone()
      Description copied from interface: Item
      Literal clone.
      Specified by:
      clone in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Overrides:
      clone in class Object
    • accept

      public final void accept(Visitor visitor)
      Specified by:
      accept in interface Visitable<V extends PrismValue>
    • hasCompleteDefinition

      public final boolean hasCompleteDefinition()
      Description copied from interface: Item
      Returns true if this item and all contained items have definitions.
      Specified by:
      hasCompleteDefinition in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • getElementName

      public final ItemName getElementName()
      Description copied from interface: Item
      Returns the name of the item.

      The name is a QName. It uniquely defines an item.

      The name may be null, but such an item will not work.

      The name is the QName of XML element in the XML representation.

      Specified by:
      getElementName in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Specified by:
      getElementName in interface Itemable
      Returns:
      item name TODO consider making element name obligatory
    • setElementName

      public final void setElementName(QName elementName)
      Description copied from interface: Item
      Sets the name of the item.

      The name is a QName. It uniquely defines an item.

      The name may be null, but such an item will not work.

      The name is the QName of XML element in the XML representation.

      Specified by:
      setElementName in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Parameters:
      elementName - the name to set TODO consider removing this method
    • getDisplayName

      public final String getDisplayName()
      Description copied from interface: Item
      Returns a display name for the item.

      Returns null if the display name cannot be determined.

      The display name is fetched from the definition. If no definition (schema) is available, the display name will not be returned.

      Specified by:
      getDisplayName in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      display name for the item
    • isIncomplete

      public final boolean isIncomplete()
      Description copied from interface: Item
      Flag that indicates incomplete item. If set to true then the values in this item are not complete. If this flag is true then it can be assumed that the object that this item represents has at least one value. This is a method how to indicate that the item really has some values, but are not here. This may be used for variety of purposes. It may indicate that the account has a password, but the password value is not revealed. This may indicate that a user has a photo, but the photo was not requested and therefore is not returned. This may be used to indicate that only part of the attribute values were returned from the search. And so on. *Behavior*: For single-valued items, the `incomplete` flag is cleared when a known value is set up (via delta or Java API). See also https://docs.evolveum.com/midpoint/devel/design/incomplete-items-4.9.1/.
      Specified by:
      isIncomplete in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • setIncomplete

      public final void setIncomplete(boolean incomplete)
      Description copied from interface: Item
      Flags the item as incomplete. FIXME: Should be package-visible to implementation
      Specified by:
      setIncomplete in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Parameters:
      incomplete - The new value
      See Also:
    • getParent

      public final PrismContainerValue<?> getParent()
      Description copied from interface: Item
      Returns the parent of this item (if exists). Currently this has to be a PrismContainerValue.
      Specified by:
      getParent in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      The parent if exists
    • find

      public final Object find(ItemPath path)
      Description copied from interface: Item
      Returns object (Item or PrismValue) pointed to by the given path.
      Specified by:
      find in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • setParent

      public final void setParent(PrismContainerValue<?> parentValue)
      Description copied from interface: Item
      Sets the parent of this item.
      Specified by:
      setParent in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Parameters:
      parentValue - The new parent
    • getPath

      @NotNull public final @NotNull ItemPath getPath()
      Description copied from interface: Item
      Returns the path of this item (sequence of names from the "root" container or similar object to this item). Note that if the containing object is a delta (usually a container delta), then the path
      Specified by:
      getPath in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Specified by:
      getPath in interface Itemable
      Returns:
      the path
    • getUserData

      @NotNull public final @NotNull Map<String,Object> getUserData()
      Description copied from interface: Item
      Returns the "user data", a map that allows attaching arbitrary named data to this item.
      Specified by:
      getUserData in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      the user data map
    • getUserData

      public final <T> T getUserData(String key)
      Description copied from interface: Item
      Returns the user data for the given key (name).
      Specified by:
      getUserData in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • setUserData

      public final void setUserData(String key, Object value)
      Description copied from interface: Item
      Sets the user data for the given key (name).
      Specified by:
      setUserData in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • getValues

      @NotNull public final @NotNull List<V> getValues()
      Description copied from interface: Item
      Returns the values for this item. Although the ordering of this values is not important, and each value should be present at most once, we currently return them as a list instead of a set. TODO reconsider this FIXME we should return immutable list, to avoid manipulating the values directly FIXME and maybe we should return List<? extends V> to avoid specializing the values, see ShadowAssociationValue in midPoint
      Specified by:
      getValues in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • getDefinition

      public final D getDefinition()
      Description copied from interface: Item
      Returns applicable definition.

      May return null if no definition is applicable or the definition is not known.

      Specified by:
      getDefinition in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Specified by:
      getDefinition in interface Itemable
      Returns:
      applicable definition
    • setDefinition

      public final void setDefinition(@NotNull D definition)
      Description copied from interface: Item
      Sets applicable item definition.
      Specified by:
      setDefinition in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Parameters:
      definition - the definition to set
    • isEmpty

      public final boolean isEmpty()
      Description copied from interface: Item
      Normally the same as Item.hasNoValues(). But a container is considered empty also if all its values (PCVs) are empty. This is a bit strange and should be revisited.
      Specified by:
      isEmpty in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • checkConsistenceInternal

      public final void checkConsistenceInternal(Itemable rootItem, boolean requireDefinitions, boolean prohibitRaw, ConsistencyCheckScope scope)
      Specified by:
      checkConsistenceInternal in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • assertDefinitions

      public final void assertDefinitions(boolean tolerateRaw, Supplier<String> sourceDescriptionSupplier) throws SchemaException
      Specified by:
      assertDefinitions in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • add

      public final boolean add(@NotNull V newValue, @NotNull @NotNull EquivalenceStrategy equivalenceStrategy) throws SchemaException
      Description copied from interface: Item
      Adds a value, overwriting existing one(s). Uses specified equivalence strategy.
      Specified by:
      add in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      true if this item changed as a result of the call. This is either during real value addition or during overwriting existing value with a different one. The "difference" is taken using the DEFAULT_FOR_EQUALS (DATA) equivalence strategy.
      Throws:
      SchemaException
    • accept

      public final void accept(Visitor visitor, ItemPath path, boolean recursive)
      Specified by:
      accept in interface PathVisitable
    • toString

      public final String toString()
      Overrides:
      toString in class Object
    • addAll

      public final boolean addAll(Collection<V> newValues, @NotNull @NotNull EquivalenceStrategy strategy) throws SchemaException
      Description copied from interface: Item
      Adds given values, with the same semantics as repeated add(..) calls. For equality testing uses given strategy.
      Specified by:
      addAll in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      true if this item changed as a result of the call (i.e. if at least one value was really added)
      Throws:
      SchemaException
    • debugDump

      public final String debugDump(int indent)
      Specified by:
      debugDump in interface DebugDumpable
    • addRespectingMetadataAndCloning

      public ItemModifyResult<V> addRespectingMetadataAndCloning(V value, @NotNull @NotNull EquivalenceStrategy strategy, EquivalenceStrategy metadataEquivalenceStrategy) throws SchemaException
      Description copied from interface: Item
      Adds a value, respecting the metadata. I.e. if equivalent value exists, the metadata are merged. (Replacing metadata of colliding provenance, adding all the others.) If a value is to be added as a whole, it is cloned.
      Specified by:
      addRespectingMetadataAndCloning in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • removeRespectingMetadata

      public ItemModifyResult<V> removeRespectingMetadata(V value, @NotNull @NotNull EquivalenceStrategy strategy, EquivalenceStrategy metadataEquivalenceStrategy)
      Description copied from interface: Item
      Removes values equivalent to given value from the item; under specified equivalence strategy OR when values represent the same value via "representsSameValue(.., lax=false)" method. Respects metadata, i.e. if value to be removed has metadata specified, this method removes only particular metadata. Only if this means that all metadata are gone, then the value is deleted.
      Specified by:
      removeRespectingMetadata in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      null if value was removed, otherwise value which was modified.
    • remove

      public final boolean remove(V value, @NotNull @NotNull EquivalenceStrategy strategy)
      Description copied from interface: Item
      Removes values equivalent to given value from the item; under specified equivalence strategy OR when values represent the same value via "representsSameValue(.., lax=false)" method.
      Specified by:
      remove in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      true if this item changed as a result of the call (i.e. if at least one value was really removed)
    • removeAll

      public final boolean removeAll(Collection<V> values, @NotNull @NotNull EquivalenceStrategy strategy)
      Description copied from interface: Item
      Removes all given values from the item. It is basically a shortcut for repeated Item.remove(PrismValue, EquivalenceStrategy) call.
      Specified by:
      removeAll in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Returns:
      true if this item changed as a result of the call (i.e. if at least one value was really removed)
    • clear

      public final void clear()
      Description copied from interface: Item
      Removes all values from the item.
      Specified by:
      clear in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • replaceAll

      public final void replaceAll(Collection<V> newValues, @NotNull @NotNull EquivalenceStrategy strategy) throws SchemaException
      Description copied from interface: Item
      Replaces all values of the item by given values.
      Specified by:
      replaceAll in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • replace

      public final void replace(V newValue) throws SchemaException
      Description copied from interface: Item
      Replaces all values of the item by given value.
      Specified by:
      replace in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • equals

      public final boolean equals(Object obj)
      Description copied from interface: Item
      Compares this item to the specified object under DEFAULT_FOR_EQUALS (DATA) strategy.
      Specified by:
      equals in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Overrides:
      equals in class Object
    • equals

      public final boolean equals(Object obj, @NotNull @NotNull EquivalenceStrategy equivalenceStrategy)
      Description copied from interface: Item
      Compares this item to the specified object under given strategy.
      Specified by:
      equals in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • equals

      public final boolean equals(Object obj, @NotNull @NotNull ParameterizedEquivalenceStrategy equivalenceStrategy)
      Description copied from interface: Item
      Compares this item to the specified object under given strategy.
      Specified by:
      equals in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • hashCode

      public final int hashCode()
      Description copied from interface: Item
      Computes hash code to be used under DEFAULT_FOR_EQUALS (currently DATA) equivalence strategy.
      Specified by:
      hashCode in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Overrides:
      hashCode in class Object
    • hashCode

      public final int hashCode(@NotNull @NotNull EquivalenceStrategy equivalenceStrategy)
      Description copied from interface: Item
      Computes hash code to be used under given equivalence strategy.
      Specified by:
      hashCode in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • hashCode

      public final int hashCode(@NotNull @NotNull ParameterizedEquivalenceStrategy equivalenceStrategy)
      Description copied from interface: Item
      Computes hash code to be used under given equivalence strategy.
      Specified by:
      hashCode in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • diff

      public final ItemDelta<V,D> diff(Item<V,D> other, @NotNull @NotNull ParameterizedEquivalenceStrategy strategy)
      Description copied from interface: Item
      Computes a difference (delta) with the specified item using given equivalence strategy. Note this method cannot accept general EquivalenceStrategy here; it needs the parameterized strategy. Compares item values only -- does NOT dive into lower levels.
      Specified by:
      diff in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • normalize

      public final void normalize()
      Description copied from interface: Item
      Currently doing nothing.
      Specified by:
      normalize in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • merge

      public final void merge(Item<V,D> otherItem) throws SchemaException
      Description copied from interface: Item
      Merge all the values of other item to this item.
      Specified by:
      merge in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • acceptParentVisitor

      public final void acceptParentVisitor(@NotNull @NotNull Visitor visitor)
      Description copied from interface: Item
      Accepts a visitor that visits each item/value on the way to the structure root.
      Specified by:
      acceptParentVisitor in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Specified by:
      acceptParentVisitor in interface ParentVisitable
    • recomputeAllValues

      public final void recomputeAllValues()
      Description copied from interface: Item
      Re-apply PolyString (and possible other) normalizations to the object.
      Specified by:
      recomputeAllValues in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • applyDefinition

      public final void applyDefinition(@NotNull D definition, boolean force) throws SchemaException
      Description copied from interface: Item
      Applies the definition to this item (and all its values, down to the lowest level). It may even convert the values, e.g. from their raw (unparsed) form to the parsed one, or - for resource attributes - between String and PolyString values (due to the normalization).
      Specified by:
      applyDefinition in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • revive

      public final 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
    • checkConsistence

      public final void checkConsistence(boolean requireDefinitions, ConsistencyCheckScope scope)
      Specified by:
      checkConsistence in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • checkConsistence

      public final void checkConsistence(boolean requireDefinitions, boolean prohibitRaw)
      Specified by:
      checkConsistence in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • checkConsistence

      public final void checkConsistence(boolean requireDefinitions, boolean prohibitRaw, ConsistencyCheckScope scope)
      Specified by:
      checkConsistence in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • checkConsistence

      public final void checkConsistence()
      Specified by:
      checkConsistence in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • checkConsistence

      public final void checkConsistence(ConsistencyCheckScope scope)
      Specified by:
      checkConsistence in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • assertDefinitions

      public final void assertDefinitions() throws SchemaException
      Specified by:
      assertDefinitions in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • assertDefinitions

      public final void assertDefinitions(Supplier<String> sourceDescriptionSupplier) throws SchemaException
      Specified by:
      assertDefinitions in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
      Throws:
      SchemaException
    • isImmutable

      public final boolean isImmutable()
      Specified by:
      isImmutable in interface Freezable
    • freeze

      public final void freeze()
      Specified by:
      freeze in interface Freezable
    • getAllValues

      @NotNull public final @NotNull Collection<PrismValue> getAllValues(ItemPath path)
      Description copied from interface: Item
      Returns all values corresponding to the provided path. The path may contain ambiguous segments (e.g. `assignment/targetRef` when there are more assignments). Limitations: . The path can contain only name segments and the "identifier" (`#`) segment - at least for now. No ID segments. . There are no guarantees about duplicate values. They may or may not be present in the returned collections. . The caller should not modify the returned collection in any way. Note to implementors: Please take care about the performance of this method.
      Specified by:
      getAllValues in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • getAllItems

      @NotNull public @NotNull Collection<Item<?,?>> getAllItems(@NotNull @NotNull ItemPath path)
      Description copied from interface: Item
      Returns all items corresponding to the provided path. This is an analogue to Item.getAllValues(ItemPath). The only difference here is that `#` segment is not allowed, as it does not correspond to an item. (Shouldn't these methods be rather called findAllValues/findAllItems?)
      Specified by:
      getAllItems in interface Item<V extends PrismValue,D extends ItemDefinition<?>>
    • getHighestId

      public final Long getHighestId()
      Specified by:
      getHighestId in interface Item<V extends PrismValue,D extends ItemDefinition<?>>