Interface ComplexTypeDefinition

All Superinterfaces:
AbstractTypeDefinition, Cloneable, DebugDumpable, Definition, Freezable, LocalItemDefinitionStore, PrismLifecycleDefinition, PrismPresentationDefinition, Revivable, SchemaLookup.Aware, Serializable, SmartVisitable<Definition>, TypeDefinition, Visitable<Definition>
All Known Subinterfaces:
ComplexTypeDefinitionDelegator, ShadowAssociationsComplexTypeDefinition, ShadowAttributesComplexTypeDefinition, ShadowItemsComplexTypeDefinition
All Known Implementing Classes:
ComplexTypeDefinitionImpl, TransformableComplexTypeDefinition

public interface ComplexTypeDefinition extends TypeDefinition, LocalItemDefinitionStore
Provides a definition for a complex type, i.e. type that prescribes inner items. It's instances may be container values or property values, depending on container/object markers presence.
Author:
semancik
  • Method Details

    • getDefinitions

      @NotNull @NotNull List<? extends ItemDefinition<?>> getDefinitions()
      Returns definitions for all inner items. These are of type ItemDefinition. However, very often subtypes of this type are used, e.g. ResourceAttributeDefinition, RefinedAttributeDefinition, LayerRefinedAttributeDefinition, and so on. The returned structure is a List because the ordering is significant, e.g. for serialization purposes. The list is unmodifiable.
      Specified by:
      getDefinitions in interface LocalItemDefinitionStore
    • getExtensionForType

      @Nullable @Nullable QName getExtensionForType()
      If not null, indicates that this type defines the structure of `extension` element of a given type. E.g. `getExtensionForType()` == `c:UserType` means that this complex type defines structure of `extension` elements of `UserType` objects.
    • isReferenceMarker

      boolean isReferenceMarker()
      Flag indicating whether this type was marked as "objectReference" in the original schema.
    • isContainerMarker

      boolean isContainerMarker()
      Flag indicating whether this type was marked as "container" in the original schema. Does not provide any information to schema processing logic, just conveys the marker from original schema so we can serialize and deserialize the schema without loss of information.
    • isObjectMarker

      boolean isObjectMarker()
      Flag indicating whether this type was marked as "object" in the original schema. Does not provide any information to schema processing logic, just conveys the marker from original schema so we can serialized and deserialize the schema without loss of information.
    • isXsdAnyMarker

      boolean isXsdAnyMarker()
      True if the complex type definition contains xsd:any (directly or indirectly).
    • isListMarker

      @Experimental boolean isListMarker()
      True if the complex type definition is a type dedicated to hold so-called https://docs.evolveum.com/midpoint/devel/design/xml-json-yaml-vs-xnode-vs-internal-data/heterogeneous-lists/[heterogeneous lists]. See also DOMUtil.IS_LIST_ATTRIBUTE_NAME and ItemDefinition.isHeterogeneousListItem().
    • getDefaultItemTypeName

      @Nullable @Nullable QName getDefaultItemTypeName()
      Type name for items that are not explicitly defined in this CTD.
    • getDefaultReferenceTargetTypeName

      @Nullable @Nullable QName getDefaultReferenceTargetTypeName()
      Default target type name for references typed using getDefaultItemTypeName() set to "reference type".
    • getDefaultNamespace

      @Nullable @Nullable String getDefaultNamespace()
      When resolving unqualified names for items contained in this CTD, what should be the default namespace to look into at first. Currently does NOT apply recursively (to inner CTDs). Set by parsing `defaultNamespace` XSD annotation.
    • getIgnoredNamespaces

      @NotNull @NotNull List<String> getIgnoredNamespaces()
      When resolving unqualified names for items contained in this CTD, what namespace(s) should be ignored. Names in this list are interpreted as a namespace prefixes. Currently does NOT apply recursively (to inner CTDs). Set by parsing `ignoredNamespace` XSD annotations.
    • merge

      void merge(ComplexTypeDefinition otherComplexTypeDef)
      Copies cloned definitions from the other type definition into this one. (TODO remove from the interface?)
    • isEmpty

      boolean isEmpty()
      Returns true if there are no item definitions.
    • clone

      @NotNull @NotNull ComplexTypeDefinition clone()
      Does a shallow clone of this definition (i.e. item definitions themselves are NOT cloned).
      Specified by:
      clone in interface Definition
    • deepClone

      @NotNull @NotNull ComplexTypeDefinition deepClone(@NotNull @NotNull DeepCloneOperation operation)
      Does a deep clone of this definition.
    • trimTo

      void trimTo(@NotNull @NotNull Collection<ItemPath> paths)
      Trims the definition (and any definitions it refers to) to contain only items related to given paths. USE WITH CARE. Be sure no shared definitions would be affected by this operation!
    • hasSubstitutions

      @Experimental boolean hasSubstitutions()
    • hasSubstitutions

      @Experimental default boolean hasSubstitutions(QName qName)
      Returns true if item has substitutions in current container definition
    • substitution

      @Experimental Optional<ItemDefinition<?>> substitution(QName name)
    • itemOrSubstitution

      @Experimental default Optional<ItemDefinition<?>> itemOrSubstitution(QName name)
    • mutator

      Description copied from interface: Definition
      Returns an interface to mutate this definition.
      Specified by:
      mutator in interface Definition
    • getXmlAttributeDefinitions

      @Experimental default List<PrismPropertyDefinition<?>> getXmlAttributeDefinitions()
    • isStrictAnyMarker

      @Experimental default boolean isStrictAnyMarker()
    • isItemDefinitionRemoved

      default boolean isItemDefinitionRemoved(QName itemName)
      This allows to distinguish between missing and explicitly removed definitions.
    • hasOperationalOnlyItems

      @Experimental default boolean hasOperationalOnlyItems()
    • getPropertyDefinitions

      default List<PrismPropertyDefinition<?>> getPropertyDefinitions()
    • migrateIfNeeded

      @Experimental @NotNull default <C extends Containerable> @NotNull PrismContainerValue<C> migrateIfNeeded(@NotNull @NotNull PrismContainerValue<C> value)
      A hook to migrate the value after this definition was applied to it. Similar to PrismReferenceDefinition.migrateIfNeeded(PrismReferenceValue) with the difference that the implementation for references is simpler. See the discussion in the default implementation.