Package org.apache.sis.util.iso
Class DefaultRecordSchema
java.lang.Object
org.apache.sis.util.iso.DefaultRecordSchema
- All Implemented Interfaces:
org.opengis.util.RecordSchema
- Direct Known Subclasses:
RecordSchemaSIS
A collection of record types in a given namespace.
This class works also as a factory for creating
RecordType
and Record
instances.
The factory methods are:
Subclasses can modify the characteristics of the records to be created
by overriding the following methods:
DefaultNameFactory.toTypeName(Class)
if the factory given to the constructor.
Thread safety
The sameDefaultRecordSchema
instance can be safely used by many threads without synchronization
on the part of the caller if the NameFactory
given to the constructor is also thread-safe.
Subclasses should make sure that any overridden methods remain safe to call from multiple threads.
Limitations
This class is currently not serializable becauseRecordSchema
contain an arbitrary number of record
types in its description map. Since each RecordType
has a reference
to its schema, serializing a single RecordType
could imply serializing all of them.
In order to reduce the risk of unexpected behavior, serialization is currently left to subclasses.
For example, a subclass may define a Object readResolve()
method (as documented in the
Serializable
interface) returning a system-wide static constant for their schema.- Since:
- 0.5
- Version:
- 1.3
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ConcurrentMap<Class<?>,
org.opengis.util.Type> The pool of attribute types created so far.private final Map<org.opengis.util.TypeName,
org.opengis.util.RecordType> The record types in the namespace of this schema.protected final DefaultNameFactory
The factory to use for creating names.private final org.opengis.util.NameSpace
The namespace ofRecordType
to be created by this class.private final ObjectConverter<Class<?>,
org.opengis.util.Type> The converter to use for converting JavaClass
to ISO 19103Type
. -
Constructor Summary
ConstructorsConstructorDescriptionDefaultRecordSchema
(DefaultNameFactory nameFactory, org.opengis.util.NameSpace parent, CharSequence schemaName) Creates a new schema of the given name. -
Method Summary
Modifier and TypeMethodDescriptionorg.opengis.util.RecordType
createRecordType
(CharSequence typeName, Map<CharSequence, Class<?>> fields) Creates a new record type of the given name, which will contain the given fields.org.opengis.util.TypeName
createRecordTypeName
(CharSequence typeName) Creates the name of a record.Map<org.opengis.util.TypeName,
org.opengis.util.RecordType> Returns the dictionary of all (name, record type) pairs in this schema.org.opengis.util.LocalName
Returns the schema name.org.opengis.util.RecordType
locate
(org.opengis.util.TypeName name) Returns the record type for the given name.(package private) final org.opengis.util.Type
toAttributeType
(Class<?> valueClass) Suggests an attribute type for the given value class.toString()
Returns a string representation of this schema for debugging purpose only.
-
Field Details
-
nameFactory
The factory to use for creating names. This is the factory given at construction time.Upcoming API change — generalization
This field type will be changed to theNameFactory
interface when that interface will provide acreateMemberName(…)
method (tentatively in GeoAPI 3.1). -
namespace
private final org.opengis.util.NameSpace namespaceThe namespace ofRecordType
to be created by this class. This is also (indirectly) the schema name. -
description
The record types in the namespace of this schema. -
attributeTypes
The pool of attribute types created so far. -
toTypes
The converter to use for converting JavaClass
to ISO 19103Type
. This converter delegates its work to thetoAttributeType(Class)
method.
-
-
Constructor Details
-
DefaultRecordSchema
public DefaultRecordSchema(DefaultNameFactory nameFactory, org.opengis.util.NameSpace parent, CharSequence schemaName) Creates a new schema of the given name.Upcoming API change — generalization
This type of the first argument will be changed to theNameFactory
interface when that interface will provide acreateMemberName(…)
method (tentatively in GeoAPI 3.1).- Parameters:
nameFactory
- the factory to use for creating names, ornull
for the default factory.parent
- the parent namespace, ornull
if none.schemaName
- the name of the new schema.
-
-
Method Details
-
getSchemaName
public org.opengis.util.LocalName getSchemaName()Returns the schema name.- Specified by:
getSchemaName
in interfaceorg.opengis.util.RecordSchema
- Returns:
- the schema name.
-
createRecordTypeName
Creates the name of a record.- Parameters:
typeName
- name of the record type to create.- Returns:
- name of a record type.
- Since:
- 1.3
-
createRecordType
public org.opengis.util.RecordType createRecordType(CharSequence typeName, Map<CharSequence, Class<?>> fields) throws IllegalArgumentExceptionCreates a new record type of the given name, which will contain the given fields. Fields are declared in iteration order.- Parameters:
typeName
- name of the record type to create.fields
- the name of each record field, together with the expected value types.- Returns:
- a record type of the given name and fields.
- Throws:
IllegalArgumentException
- if a record already exists for the given name but with different fields.
-
toAttributeType
Suggests an attribute type for the given value class. TheTypeName
will use the UML identifier of OGC/ISO specification when possible, e.g."GCO:CharacterString"
forjava.lang.String
. See Mapping Java classes to type names inDefaultTypeName
javadoc for more information.- Parameters:
valueClass
- the value class to represent as an attribute type.- Returns:
- attribute type for the given value class.
-
getDescription
Returns the dictionary of all (name, record type) pairs in this schema.- Specified by:
getDescription
in interfaceorg.opengis.util.RecordSchema
- Returns:
- all (name, record type) pairs in this schema.
-
locate
public org.opengis.util.RecordType locate(org.opengis.util.TypeName name) Returns the record type for the given name. If the type name is not defined within this schema, then this method returnsnull
.- Specified by:
locate
in interfaceorg.opengis.util.RecordSchema
- Parameters:
name
- the name of the type to lookup.- Returns:
- the type for the given name, or
null
if none.
-
toString
Returns a string representation of this schema for debugging purpose only.
-