Class Schema
- All Implemented Interfaces:
Serializable, Cloneable, Map<String,Object>, org.refcodes.exception.ExceptionAccessor<Throwable>, org.refcodes.mixin.AliasAccessor, org.refcodes.mixin.ChildrenAccessor<Schema[]>, org.refcodes.mixin.DescriptionAccessor, org.refcodes.mixin.HashAccessor, org.refcodes.mixin.IdentifierAccessor, org.refcodes.mixin.KeyAccessor<String>, org.refcodes.mixin.StereotypeAccessor<String>, org.refcodes.mixin.TypeAccessor, org.refcodes.mixin.ValueAccessor<Object>
public class Schema
extends HashMap<String,Object>
implements org.refcodes.mixin.ChildrenAccessor<Schema[]>, org.refcodes.mixin.IdentifierAccessor, org.refcodes.mixin.AliasAccessor, org.refcodes.mixin.TypeAccessor, org.refcodes.mixin.HashAccessor, org.refcodes.mixin.DescriptionAccessor, org.refcodes.mixin.KeyAccessor<String>, org.refcodes.mixin.StereotypeAccessor<String>, org.refcodes.exception.ExceptionAccessor<Throwable>, org.refcodes.mixin.ValueAccessor<Object>
A
Schema describes a nested data structure (having 0..n
Schema children) whilst not being the data structure itself. A
documentation in JSON or XML notation can be produced from a Schema
instance for debugging or diagnostic purposes (see JsonVisitor as
well as XmlVisitor) by invoking the visit(SchemaVisitor)
method (also custom SchemaVisitor classes my be programmed).For
description purposes, any descriptive attribute can be added as a key with
the according value, as a Schema extends the Map interface. The
Schema is a useful base class when implementing a package's
Schema type. By default it's toString() method produces a
JSON alike String representation of this Schema instances
alongside its children by uses the JsonVisitor type applied to the
visit(SchemaVisitor) method.- See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K, V> Nested classes/interfaces inherited from interface org.refcodes.mixin.AliasAccessor
org.refcodes.mixin.AliasAccessor.AliasBuilder<B>, org.refcodes.mixin.AliasAccessor.AliasMutator, org.refcodes.mixin.AliasAccessor.AliasPropertyNested classes/interfaces inherited from interface org.refcodes.mixin.ChildrenAccessor
org.refcodes.mixin.ChildrenAccessor.ChildrenBuilder<T,B>, org.refcodes.mixin.ChildrenAccessor.ChildrenMutator<T>, org.refcodes.mixin.ChildrenAccessor.ChildrenProperty<T> Nested classes/interfaces inherited from interface org.refcodes.mixin.DescriptionAccessor
org.refcodes.mixin.DescriptionAccessor.DescriptionBuilder<B>, org.refcodes.mixin.DescriptionAccessor.DescriptionMutator, org.refcodes.mixin.DescriptionAccessor.DescriptionPropertyNested classes/interfaces inherited from interface org.refcodes.exception.ExceptionAccessor
org.refcodes.exception.ExceptionAccessor.ExceptionBuilder<EXC,B>, org.refcodes.exception.ExceptionAccessor.ExceptionMutator<EXC>, org.refcodes.exception.ExceptionAccessor.ExceptionProperty<EXC> Nested classes/interfaces inherited from interface org.refcodes.mixin.HashAccessor
org.refcodes.mixin.HashAccessor.HashBuilder<B>, org.refcodes.mixin.HashAccessor.HashMutator, org.refcodes.mixin.HashAccessor.HashPropertyNested classes/interfaces inherited from interface org.refcodes.mixin.IdentifierAccessor
org.refcodes.mixin.IdentifierAccessor.IdentifierBuilder<B>, org.refcodes.mixin.IdentifierAccessor.IdentifierMutator, org.refcodes.mixin.IdentifierAccessor.IdentifierPropertyNested classes/interfaces inherited from interface org.refcodes.mixin.KeyAccessor
org.refcodes.mixin.KeyAccessor.KeyBuilder<K,B>, org.refcodes.mixin.KeyAccessor.KeyMutator<K>, org.refcodes.mixin.KeyAccessor.KeyProperty<K> Nested classes/interfaces inherited from interface org.refcodes.mixin.StereotypeAccessor
org.refcodes.mixin.StereotypeAccessor.StereotypeBuilder<T,B>, org.refcodes.mixin.StereotypeAccessor.StereotypeMutator<T>, org.refcodes.mixin.StereotypeAccessor.StereotypeProperty<T> Nested classes/interfaces inherited from interface org.refcodes.mixin.TypeAccessor
org.refcodes.mixin.TypeAccessor.TypeBuilder<T,B>, org.refcodes.mixin.TypeAccessor.TypeMutator<T>, org.refcodes.mixin.TypeAccessor.TypeProperty<T> Nested classes/interfaces inherited from interface org.refcodes.mixin.ValueAccessor
org.refcodes.mixin.ValueAccessor.ValueBuilder<V,B>, org.refcodes.mixin.ValueAccessor.ValueMutator<V>, org.refcodes.mixin.ValueAccessor.ValueProperty<V> -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Schema[]static final StringThis key labels the short name of aSchema.static final StringThis key labels a child's parent's association in terms of UML.static final StringThis key labels the description aSchema.static final StringThis key labels an exception related to aSchema.static final StringThis key labels the hash of an object described by aSchema.static final charThis separator is used to separate the hash code form on object's name.static final StringThis key labels the unique identifier of aSchema.static final StringThis key labels a child's parent key of aSchema.static final StringThis key labels a stereotype (category) in terms of UML.static final StringThis key labels the type described by aSchema.static final StringThis key labels the value described by aSchema. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedSchema()Schema(String aIdentifier, String aAlias, String aKey, Class<?> aType, Integer aHash, String aStereotype, Object aValue, Throwable aException, String aDescription, Schema aSchema, Schema[] aChildren) Constructs aSchemawith the provided arguments.protectedSchema(Schema.Builder aBuilder) Instantiates a new schema. -
Method Summary
Modifier and TypeMethodDescriptionstatic Schema.Builderbuilder()Creates builder to buildSchema.getAlias()Schema[]intgetHash()getKey()Class<?> getType()getValue()protected voidtoLabel()Determines the label for thisSchemaby evaluating theidentifiertill the last@character (if any), thealias, thekeyand thetype(it's simple name).toNotation(SchemaNotation aNotation) Creates aSchema's notationStringby invoking the providedSchemaNotationvisitor which traverses thisSchemainstance and its children recursively whilst producing the according notation.protected static StringtoObjectId(Object aObj) protected static StringtoSimpleObjectId(Object aObj) toString()Uses theJsonVisitortype applied to thevisit(SchemaVisitor)method to produce a JSON alikeStringrepresentation of thisSchemainstances alongside its children.<T> Tvisit(SchemaVisitor<T> aVisitor) Visits thisSchemainstance, the providedSchemaVisitorvisitor is invoked with thisSchemainstance and traverses its children recursively.Methods inherited from class HashMap
clear, clone, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, entrySet, forEach, get, getOrDefault, isEmpty, keySet, merge, newHashMap, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size, valuesMethods inherited from class AbstractMap
equals, hashCodeMethods inherited from interface org.refcodes.mixin.ValueAccessor
getValueOr
-
Field Details
-
ASSOCIATION
This key labels a child's parent's association in terms of UML.- See Also:
-
IDENTIFIER
-
ALIAS
-
KEY
-
TYPE
-
HASH
-
VALUE
-
DESCRIPTION
-
EXCEPTION
-
STEREOTYPE
This key labels a stereotype (category) in terms of UML.- See Also:
-
HASH_SEPARATOR
public static final char HASH_SEPARATORThis separator is used to separate the hash code form on object's name.- See Also:
-
_children
-
-
Constructor Details
-
Schema
protected Schema() -
Schema
Instantiates a new schema.- Parameters:
aBuilder- the builder
-
Schema
public Schema(String aIdentifier, String aAlias, String aKey, Class<?> aType, Integer aHash, String aStereotype, Object aValue, Throwable aException, String aDescription, Schema aSchema, Schema[] aChildren) Constructs aSchemawith the provided arguments.- Parameters:
aIdentifier- The identifier being the label for theSchema, when null thealias, thekeyor thetype's simple name prefixed with the@character alongside thehash(or this instance's identity has code when null).aAlias- The alias (name) describing thisSchema, whennull, then the alias is extrapolated from theidentifier's portion till the last@character (if any).aKey- The key (of a value) provided with thisSchemaaType- The type described by thisSchema.aHash- The hash if the instance described by thisSchema.aStereotype- The stereotype related with thisSchema.aValue- The value representing thisSchema.aException- TheThrowablerelated with thisSchema.aDescription- The description for thisSchema.aSchema- TheSchemafrom which to copy from (in case of not being explicitly set by the arguments).aChildren- TheSchema's children (aggregation structure).
-
-
Method Details
-
init
-
getIdentifier
- Specified by:
getIdentifierin interfaceorg.refcodes.mixin.IdentifierAccessor
-
getAlias
- Specified by:
getAliasin interfaceorg.refcodes.mixin.AliasAccessor
-
getKey
-
getType
- Specified by:
getTypein interfaceorg.refcodes.mixin.TypeAccessor
-
getValue
-
getHash
public int getHash()- Specified by:
getHashin interfaceorg.refcodes.mixin.HashAccessor
-
getStereotype
-
getException
-
getDescription
- Specified by:
getDescriptionin interfaceorg.refcodes.mixin.DescriptionAccessor
-
getChildren
-
toLabel
-
visit
Visits thisSchemainstance, the providedSchemaVisitorvisitor is invoked with thisSchemainstance and traverses its children recursively.- Type Parameters:
T- The type of the value which the visitor produces.- Parameters:
aVisitor- TheSchemaVisitorvisitor to traverse thisSchemainstance.- Returns:
- The according result produced by the
SchemaVisitorinstance.
-
toNotation
Creates aSchema's notationStringby invoking the providedSchemaNotationvisitor which traverses thisSchemainstance and its children recursively whilst producing the according notation.- Parameters:
aNotation- TheSchemaNotationvisitor to create the according notation.- Returns:
- The according
Stringnotation produced by theSchemaNotationinstance.
-
toString
Uses theJsonVisitortype applied to thevisit(SchemaVisitor)method to produce a JSON alikeStringrepresentation of thisSchemainstances alongside its children.- Overrides:
toStringin classAbstractMap<String,Object>
-
builder
-
toObjectId
-
toSimpleObjectId
-