com.evolveum.midpoint.schema.processor
Class Schema

java.lang.Object
  extended by com.evolveum.midpoint.schema.processor.Schema
All Implemented Interfaces:
DebugDumpable, Dumpable, java.io.Serializable
Direct Known Subclasses:
RefinedResourceSchema

public class Schema
extends java.lang.Object
implements Dumpable, DebugDumpable, java.io.Serializable

Schema as a collection of definitions. This is a midPoint-specific view of schema definition. It is just a collection of definitions grouped under a specific namespace. The schema and all the public classes in this package define a schema meta-model. It is supposed to be used for run-time schema interpretation. It will not be a convenient tool to work with static data model objects such as user or role. But it is needed for interpreting dynamic schemas for resource objects, extensions and so on. Schema is immutable.

Author:
Radovan Semancik
See Also:
Serialized Form

Field Summary
protected  java.util.Set<Definition> definitions
           
protected  java.lang.String namespace
           
 
Fields inherited from interface com.evolveum.midpoint.util.DebugDumpable
INDENT_STRING
 
Constructor Summary
Schema(java.lang.String namespace)
           
 
Method Summary
static ItemDefinition createDefaultItemDefinition(ItemDefinition parentDefinition, java.util.List<java.lang.Object> valueElements)
          Create default ItemDefinition.
 PropertyContainerDefinition createPropertyContainerDefinition(java.lang.String localTypeName)
          Creates a new property container definition and adds it to the schema.
 PropertyDefinition createPropertyDefinition(javax.xml.namespace.QName name, javax.xml.namespace.QName typeName)
          Creates a top-level property definition and adds it to the schema.
 PropertyDefinition createPropertyDefinition(java.lang.String localName, javax.xml.namespace.QName typeName)
          Creates a top-level property definition and adds it to the schema.
 PropertyDefinition createPropertyDefinition(java.lang.String localName, java.lang.String localTypeName)
          Creates a top-level property definition and adds it to the schema.
 ResourceObjectDefinition createResourceObjectDefinition(javax.xml.namespace.QName typeName)
          Creates a new resource object definition and adds it to the schema.
 ResourceObjectDefinition createResourceObjectDefinition(java.lang.String localTypeName)
          Creates a new resource object definition and adds it to the schema.
 java.lang.String debugDump()
          Show the content of the object intended for diagnostics by system administrator.
 java.lang.String debugDump(int indent)
           
 java.lang.String dump()
          Show the content of the object intended for diagnostics by developer.
 ResourceObjectDefinition findAccountDefinition()
          Looks for a default account ObjectClass.
 ResourceObjectDefinition findAccountDefinition(java.lang.String accountType)
          Looks for a specific account ObjectClass.
 ComplexTypeDefinition findComplexTypeDefinition(javax.xml.namespace.QName typeName)
          Finds complex type definition by type name.
 PropertyContainerDefinition findContainerDefinition(java.lang.Class<? extends ObjectType> type, PropertyPath path)
           
 PropertyContainerDefinition findContainerDefinitionByType(javax.xml.namespace.QName typeName)
          Finds a PropertyContainerDefinition by the type name.
<T extends ItemDefinition>
T
findItemDefinition(javax.xml.namespace.QName definitionName, java.lang.Class<T> definitionType)
          Finds item definition by name.
<T extends ItemDefinition>
T
findItemDefinition(java.lang.String localName, java.lang.Class<T> definitionType)
          Finds item definition by local name
<T extends ItemDefinition>
T
findItemDefinitionByType(javax.xml.namespace.QName typeName, java.lang.Class<T> definitionType)
          Finds item definition by type.
<T extends ObjectType>
ObjectDefinition<T>
findObjectDefinition(java.lang.Class<T> type)
           
<T extends ObjectType>
ObjectDefinition<T>
findObjectDefinition(ObjectTypes objectType, java.lang.Class<T> type)
           
 ObjectDefinition findObjectDefinitionByType(javax.xml.namespace.QName typeName)
           
<T extends ObjectType>
ObjectDefinition<T>
findObjectDefinitionByType(javax.xml.namespace.QName typeName, java.lang.Class<T> type)
           
 ResourceObjectDefinition findResourceObjectDefinitionByType(javax.xml.namespace.QName typeName)
           
 java.util.Collection<? extends ResourceObjectDefinition> getAccountDefinitions()
           
 java.util.Collection<Definition> getDefinitions()
          Returns set of definitions.
<T extends Definition>
java.util.Collection<T>
getDefinitions(java.lang.Class<T> type)
           
 java.lang.String getNamespace()
          Returns schema namespace.
 boolean isEmpty()
           
static Schema parse(org.w3c.dom.Element element)
           
static Schema parse(org.w3c.dom.Element element, org.xml.sax.EntityResolver resolver)
           
<T extends ObjectType>
MidPointObject<T>
parseObject(java.io.File xmlFile, java.lang.Class<T> type)
           
<T extends ObjectType>
MidPointObject<T>
parseObject(java.lang.String stringXml, java.lang.Class<T> type)
           
<T extends ObjectType>
MidPointObject<T>
parseObjectType(T objectType)
           
 PropertyContainer parsePropertyContainer(org.w3c.dom.Element domElement)
           
static ItemDefinition resolveDynamicItemDefinition(ItemDefinition parentDefinition, java.util.List<java.lang.Object> valueElements)
          Try to locate xsi:type definition in the elements and return appropriate ItemDefinition.
 org.w3c.dom.Document serializeToXsd()
           
static org.w3c.dom.Document serializeToXsd(Schema schema)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

namespace

protected java.lang.String namespace

definitions

protected java.util.Set<Definition> definitions
Constructor Detail

Schema

public Schema(java.lang.String namespace)
Method Detail

getNamespace

public java.lang.String getNamespace()
Returns schema namespace. All schema definitions are placed in the returned namespace.

Returns:
schema namespace

getDefinitions

public java.util.Collection<Definition> getDefinitions()
Returns set of definitions. The set contains all definitions of all types that were parsed. Order of definitions is insignificant.

Returns:
set of definitions

getDefinitions

public <T extends Definition> java.util.Collection<T> getDefinitions(java.lang.Class<T> type)

parse

public static Schema parse(org.w3c.dom.Element element)
                    throws SchemaException
Throws:
SchemaException

parse

public static Schema parse(org.w3c.dom.Element element,
                           org.xml.sax.EntityResolver resolver)
                    throws SchemaException
Throws:
SchemaException

serializeToXsd

public org.w3c.dom.Document serializeToXsd()
                                    throws SchemaException
Throws:
SchemaException

serializeToXsd

public static org.w3c.dom.Document serializeToXsd(Schema schema)
                                           throws SchemaException
Throws:
SchemaException

parsePropertyContainer

public PropertyContainer parsePropertyContainer(org.w3c.dom.Element domElement)
                                         throws SchemaException
Throws:
SchemaException

findContainerDefinitionByType

public PropertyContainerDefinition findContainerDefinitionByType(javax.xml.namespace.QName typeName)
Finds a PropertyContainerDefinition by the type name.

Parameters:
typeName - property container type name
Returns:
found property container definition
Throws:
java.lang.IllegalStateException - if more than one definition is found

findObjectDefinitionByType

public ObjectDefinition findObjectDefinitionByType(javax.xml.namespace.QName typeName)

findObjectDefinitionByType

public <T extends ObjectType> ObjectDefinition<T> findObjectDefinitionByType(javax.xml.namespace.QName typeName,
                                                                             java.lang.Class<T> type)

findObjectDefinition

public <T extends ObjectType> ObjectDefinition<T> findObjectDefinition(ObjectTypes objectType,
                                                                       java.lang.Class<T> type)

findObjectDefinition

public <T extends ObjectType> ObjectDefinition<T> findObjectDefinition(java.lang.Class<T> type)

findContainerDefinition

public PropertyContainerDefinition findContainerDefinition(java.lang.Class<? extends ObjectType> type,
                                                           PropertyPath path)

findComplexTypeDefinition

public ComplexTypeDefinition findComplexTypeDefinition(javax.xml.namespace.QName typeName)
Finds complex type definition by type name.


findItemDefinition

public <T extends ItemDefinition> T findItemDefinition(javax.xml.namespace.QName definitionName,
                                                       java.lang.Class<T> definitionType)
Finds item definition by name.


findItemDefinition

public <T extends ItemDefinition> T findItemDefinition(java.lang.String localName,
                                                       java.lang.Class<T> definitionType)
Finds item definition by local name


findItemDefinitionByType

public <T extends ItemDefinition> T findItemDefinitionByType(javax.xml.namespace.QName typeName,
                                                             java.lang.Class<T> definitionType)
Finds item definition by type.


isEmpty

public boolean isEmpty()

createPropertyContainerDefinition

public PropertyContainerDefinition createPropertyContainerDefinition(java.lang.String localTypeName)
Creates a new property container definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localTypeName - type name "relative" to schema namespace
Returns:
new property container definition

createResourceObjectDefinition

public ResourceObjectDefinition createResourceObjectDefinition(java.lang.String localTypeName)
Creates a new resource object definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localTypeName - type name "relative" to schema namespace
Returns:
new resource object definition

createResourceObjectDefinition

public ResourceObjectDefinition createResourceObjectDefinition(javax.xml.namespace.QName typeName)
Creates a new resource object definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localTypeName - type QName
Returns:
new resource object definition

createPropertyDefinition

public PropertyDefinition createPropertyDefinition(java.lang.String localName,
                                                   javax.xml.namespace.QName typeName)
Creates a top-level property definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localName - element name "relative" to schema namespace
typeName - XSD type name of the element
Returns:
new property definition

createPropertyDefinition

public PropertyDefinition createPropertyDefinition(java.lang.String localName,
                                                   java.lang.String localTypeName)
Creates a top-level property definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localName - element name "relative" to schema namespace
localTypeName - XSD type name "relative" to schema namespace
Returns:
new property definition

createPropertyDefinition

public PropertyDefinition createPropertyDefinition(javax.xml.namespace.QName name,
                                                   javax.xml.namespace.QName typeName)
Creates a top-level property definition and adds it to the schema. This is a preferred way how to create definition in the schema.

Parameters:
localName - element name
typeName - XSD type name of the element
Returns:
new property definition

findAccountDefinition

public ResourceObjectDefinition findAccountDefinition()
Looks for a default account ObjectClass.


findAccountDefinition

public ResourceObjectDefinition findAccountDefinition(java.lang.String accountType)
Looks for a specific account ObjectClass.


findResourceObjectDefinitionByType

public ResourceObjectDefinition findResourceObjectDefinitionByType(javax.xml.namespace.QName typeName)

getAccountDefinitions

public java.util.Collection<? extends ResourceObjectDefinition> getAccountDefinitions()

resolveDynamicItemDefinition

public static ItemDefinition resolveDynamicItemDefinition(ItemDefinition parentDefinition,
                                                          java.util.List<java.lang.Object> valueElements)
Try to locate xsi:type definition in the elements and return appropriate ItemDefinition.


createDefaultItemDefinition

public static ItemDefinition createDefaultItemDefinition(ItemDefinition parentDefinition,
                                                         java.util.List<java.lang.Object> valueElements)
Create default ItemDefinition. Used as a last attempt to provide some useful definition. Kind of a hack.


parseObjectType

public <T extends ObjectType> MidPointObject<T> parseObjectType(T objectType)
                                                     throws SchemaException
Throws:
SchemaException

parseObject

public <T extends ObjectType> MidPointObject<T> parseObject(java.lang.String stringXml,
                                                            java.lang.Class<T> type)
                                                 throws SchemaException
Throws:
SchemaException

parseObject

public <T extends ObjectType> MidPointObject<T> parseObject(java.io.File xmlFile,
                                                            java.lang.Class<T> type)
                                                 throws SchemaException
Throws:
SchemaException

debugDump

public java.lang.String debugDump()
Description copied from interface: DebugDumpable
Show the content of the object intended for diagnostics by system administrator. The out put should be suitable to use in system logs at "debug" level. It may be multi-line, but in that case it should be well indented and quite terse. As it is intended to be used by system administrator, it should not use any developer terms such as class names, exceptions or stack traces.

Specified by:
debugDump in interface DebugDumpable
Returns:
content of the object intended for diagnostics by system administrator.

debugDump

public java.lang.String debugDump(int indent)
Specified by:
debugDump in interface DebugDumpable

dump

public java.lang.String dump()
Description copied from interface: Dumpable
Show the content of the object intended for diagnostics by developer. The content may be multi-line, in case of hierarchical objects it may be intended. The use of this method may not be efficient. It is not supposed to be used in normal operation. However, it is very useful in tests or in case of dumping objects in severe error situations.

Specified by:
dump in interface Dumpable
Returns:
content of the object intended for diagnostics.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object


Copyright © 2012 evolveum. All Rights Reserved.