Class ReferenceResolver


  • public class ReferenceResolver
    extends Object
    Controls the (un)marshaller behavior regarding the 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 Reference­Resolver to a unmarshaller.

    Since:
    0.3

    Defined in the sis-metadata module

    • Field Detail

      • DEFAULT

        public static final ReferenceResolver DEFAULT
        The default and thread-safe instance. This instance is used at unmarshalling time when no Reference­Resolver was explicitly set by the XML​.RESOLVER property.
    • Constructor Detail

      • ReferenceResolver

        protected ReferenceResolver()
        Creates a default Reference­Resolver. This constructor is for subclasses only.
    • Method Detail

      • newIdentifiedObject

        public <T> T newIdentifiedObject​(MarshalContext context,
                                         Class<T> type,
                                         Identifier... identifiers)
        Returns an empty object of the given type having the given identifiers. The object returned by the default implementation has the following properties:
        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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 Identifier­Space.
        Returns:
        an object of the given type for the given identifiers, or null if none.
      • resolve

        public <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. The default implementation returns null in all cases.
        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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.
        Returns:
        an object of the given type for the given uuid attribute, or null if none.
      • resolve

        public <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. The default implementation performs the following lookups:
        • If the 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.
        • Otherwise returns null.
        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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.
        Returns:
        an object of the given type for the given xlink attribute, or null if none.
      • canSubstituteByReference

        public <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. This method is invoked by the marshaller when: Note that if this method returns 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.

        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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.
        Returns:
        true if the marshaller can use the xlink:href="#id" attribute instead than marshalling the given object.
        Since:
        0.7
      • canSubstituteByReference

        public <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. 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:

        • If object implements Nil­Object.
        • If object implements Emptiable and its is­Empty() method returns true.
        Subclasses can override this method if they know whether the receiver will be able to resolve the reference.
        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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.
        Returns:
        true if the marshaller can use the uuidref attribute instead than marshalling the given object.
      • canSubstituteByReference

        public <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. 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:

        • If object implements Nil­Object.
        • If object implements Emptiable and its is­Empty() method returns true.
        Subclasses can override this method if they know whether the receiver will be able to resolve the reference.
        Type Parameters:
        T - the compile-time type of the type argument.
        Parameters:
        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.
        Returns:
        true if the marshaller can use the xlink:href attribute instead than marshalling the given object.
      • anchor

        public XLink anchor​(MarshalContext context,
                            Object value,
                            CharSequence text)
        Returns the <gcx:Anchor> to use for the given text, or null if none. Anchors can appear in ISO 19115-3 documents where we would normally expect a character sequence. For example:
        XML representations of string
        As <gco:Character­String> As <gcx:Anchor>
         <cit:country>
             <gco:CharacterString>France</gco:CharacterString>
         </cit:country>
         <cit:country>
             <gcx:Anchor xlink:href="SDN:C320:2:FR">France</gcx:Anchor>
         </cit:country>
        Subclasses can override this method if they can provide a mapping from some text values to anchors.
        Parameters:
        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.
        Returns:
        the anchor for the given text, or null if none.