public class ReferenceResolver extends Object
xlink
or uuidref
attributes.
At marshalling time, this class controls whether the marshaller is allowed to write a reference
to an existing instance instead than writing the full object definition.
At unmarshalling time, this class replaces (if possible) a reference by the full object definition.
Subclasses can override the methods defined in this class in order to search in their own catalog.
See the XML.RESOLVER
javadoc for an example of registering a custom ReferenceResolver
to a unmarshaller.
Defined in the sis-utility
module
Modifier and Type | Field and Description |
---|---|
static ReferenceResolver |
DEFAULT
The default and thread-safe instance.
|
Modifier | Constructor and Description |
---|---|
protected |
ReferenceResolver()
Creates a default
ReferenceResolver . |
Modifier and Type | Method and Description |
---|---|
XLink |
anchor(MarshalContext context,
Object value,
CharSequence text)
Returns the
<gmx:Anchor> to use for the given text, or null if none. |
<T> boolean |
canSubstituteByReference(MarshalContext context,
Class<T> type,
T object,
String id)
Returns
true if the marshaller can use a xlink:href="#id" reference to the given object
instead than writing the full XML element. |
<T> boolean |
canSubstituteByReference(MarshalContext context,
Class<T> type,
T object,
UUID uuid)
Returns
true if the marshaller can use a reference to the given object
instead than writing the full XML element. |
<T> boolean |
canSubstituteByReference(MarshalContext context,
Class<T> type,
T object,
XLink link)
Returns
true if the marshaller can use a xlink:href reference to the given
object instead than writing the full XML element. |
<T> T |
newIdentifiedObject(MarshalContext context,
Class<T> type,
Identifier... identifiers)
Returns an empty object of the given type having the given identifiers.
|
<T> T |
resolve(MarshalContext context,
Class<T> type,
UUID uuid)
Returns an object of the given type for the given
uuid attribute, or null if none. |
<T> T |
resolve(MarshalContext context,
Class<T> type,
XLink link)
Returns an object of the given type for the given
xlink attribute, or null if none. |
public static final ReferenceResolver DEFAULT
ReferenceResolver
was explicitly set by the XML.RESOLVER
property.protected ReferenceResolver()
ReferenceResolver
. This constructor is for subclasses only.public <T> T newIdentifiedObject(MarshalContext context, Class<T> type, Identifier... identifiers)
type
interface.NilObject
and IdentifiedObject
interfaces from this package.IdentifiedObject.getIdentifiers()
will return the given identifiers.IdentifiedObject.getIdentifierMap()
will return a Map
view over the given identifiers.Object
class will return
an empty collection, an empty array, null
, NaN
, 0 or
false
, depending on the method return type.T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.identifiers
- an arbitrary amount of identifiers. For each identifier,
the authority
is typically (but not necessarily) one of the constants defined in IdentifierSpace
.null
if none.public <T> T resolve(MarshalContext context, Class<T> type, UUID uuid)
uuid
attribute, or null
if none.
The default implementation returns null
in all cases.T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.uuid
- the uuid
attributes.uuid
attribute, or null
if none.public <T> T resolve(MarshalContext context, Class<T> type, XLink link)
xlink
attribute, or null
if none.
The default implementation performs the following lookups:
xlink:href
attribute is a URI fragment
of the form "#foo"
and if an object of class type
with the gml:id="foo"
attribute
has previously been seen in the same XML document, then that object is returned.null
.T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.link
- the xlink
attributes.xlink
attribute, or null
if none.public <T> boolean canSubstituteByReference(MarshalContext context, Class<T> type, T object, String id)
true
if the marshaller can use a xlink:href="#id"
reference to the given object
instead than writing the full XML element. This method is invoked by the marshaller when:
gml:id
attribute
IdentifierMap.put(IdentifierSpace.ID, id)
AbstractIdentifiedObject
).true
, then the use of xlink:href="#id"
will have
precedence over UUID
and XLink alternatives.
The default implementation unconditionally returns true
.
Subclasses can override this method if they want to filter which objects to declare by reference.
T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.object
- the object to be marshalled.id
- the gml:id
value of the object to be marshalled.true
if the marshaller can use the xlink:href="#id"
attribute
instead than marshalling the given object.public <T> boolean canSubstituteByReference(MarshalContext context, Class<T> type, T object, UUID uuid)
true
if the marshaller can use a reference to the given object
instead than writing the full XML element. This method is invoked when an object to
be marshalled has a UUID identifier. Because those object may be defined externally,
SIS can not know if the object shall be fully marshalled or not.
Such information needs to be provided by the application.
The default implementation returns true
in the following cases:
object
implements NilObject
.object
implements Emptiable
and its isEmpty()
method returns true
.T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.object
- the object to be marshalled.uuid
- the unique identifier of the object to be marshalled.true
if the marshaller can use the uuidref
attribute
instead than marshalling the given object.public <T> boolean canSubstituteByReference(MarshalContext context, Class<T> type, T object, XLink link)
true
if the marshaller can use a xlink:href
reference to the given
object instead than writing the full XML element. This method is invoked when an object to be
marshalled has a XLink
identifier. Because those object may be defined externally,
SIS can not know if the object shall be fully marshalled or not.
Such information needs to be provided by the application.
The default implementation returns true
in the following cases:
object
implements NilObject
.object
implements Emptiable
and its isEmpty()
method returns true
.T
- the compile-time type of the type
argument.context
- context (GML version, locale, etc.) of the (un)marshalling process.type
- the type of object to be unmarshalled, often as a GeoAPI interface.object
- the object to be marshalled.link
- the reference of the object to be marshalled.true
if the marshaller can use the xlink:href
attribute
instead than marshalling the given object.public XLink anchor(MarshalContext context, Object value, CharSequence text)
<gmx:Anchor>
to use for the given text, or null
if none.
Anchors can appear in ISO 19139 documents where we would normally expect a character
sequence. For example:
As <gco:CharacterString> |
As <gmx:Anchor> |
---|---|
<gmd:country> <gco:CharacterString>France</gco:CharacterString> </gmd:country> |
<gmd:country> <gmx:Anchor xlink:href="SDN:C320:2:FR">France</gmx:Anchor> </gmd:country> |
context
- context (GML version, locale, etc.) of the (un)marshalling process.value
- the value for which an anchor is requested. Often the same instance than text
,
but can also be the URI
or Locale
instance for which
text
is a string representation.text
- the textual representation of the value for which to get the anchor.null
if none.Copyright © 2010–2017 The Apache Software Foundation. All rights reserved.