Class XmiSerializationSharedData

java.lang.Object
org.apache.uima.cas.impl.XmiSerializationSharedData

public class XmiSerializationSharedData extends Object
A container for data that is shared between the XmiCasSerializer and the XmiCasDeserializer. This has a number of uses:
  • Consistency of xmi:id values across serializations. If you pass an XmiSerializationSharedData instance to the deserializer, the deserializer will store information about the incoming xmi:id values. If you then pass the same XmiSerializationSharedData object to the serializer when you attempt to serialize the same CAS, all of the incoming FS will be serialized using the same xmi:id value that they had when they were deserialized.
  • Support for "out-of-typesystem data". If you call the XMI deserializer with the lenient parameter set to true, whenever it encounters an XMI element that doesn't correspond to a type in the type system, it will populate the XmiSerializationSharedData with information about these elements. If you then pass the same XmiSerializationSharedData object to the serializer when you attempt to serialize the same CAS, these out-of-typesystem FS will be reserialized without loss of information. References between in-typesystem and out-of-typesystem FS (in either direction) are maintained as well.
  • After calling the XmiCasSerializer and passing an XmiSerializationSharedData, you can call the getMaxXmiId() method to get the maximum xmi:id value in the serialized CAS. This feature, along with the consistency of xmi:id values, allows merging multiple XMI documents into a single CAS. See TODO.
  • Field Details

    • fsAddrToXmiIdMap

      private Int2IntHashMap fsAddrToXmiIdMap
      A map from FeatureStructure address to xmi:id. This is populated whenever an XMI element is serialized or deserialized. It is used by the getXmiId() method, which is done to ensure a consistent ID for each FS address across multiple serializations.
    • xmiIdToFsAddrMap

      private Int2IntHashMap xmiIdToFsAddrMap
      A map from xmi:id to FeatureStructure address. This is populated whenever an XMI element is serialized or deserialized. It is used by the getFsAddrForXmiId() method, necessary to support merging multiple XMI CASes into the same CAS object.
    • ootsFs

      List of OotsElementData objects, each of which captures information about incoming XMI elements that did not correspond to any type in the type system.
    • ootsViewMembers

      private Map<String,List<String>> ootsViewMembers
      Map that from the xmi:id (String) of a Sofa to a List of xmi:id's (Strings) for the out-of-typesystem FSs that are members of that Sofa's view.
    • ootsFeatures

      Map from Feature Structure address (Integer) to OotsElementData object, capturing information about out-of-typesystem features that were part of an in-typesystem FS. These include both features not defined in the typesystem and features that are references to out-of-typesystem elements. This information needs to be included when the FS is subsequently serialized.
    • ootsArrayElements

      Map from Feature Structure address (Integer) of an FSArray to a list of XmiSerializationSharedData.XmiArrayElement objects, each of which holds an index and an xmi:id for an out-of-typesystem array element.
    • maxXmiId

      private int maxXmiId
      The maximum XMI ID used in the serialization. Used to generate unique IDs if needed.
    • nonsharedfeatureIdToFSId

      Int2IntHashMap nonsharedfeatureIdToFSId
      Map from FS address of a non-shared multi-valued (Array/List) FS to the FS address of the encompassing FS which has a feature whose value is this multi-valued FS. Used when deserializing a Delta CAS to find and serialize the encompassing FS when the non-shared array/list FS is modified.
  • Constructor Details

    • XmiSerializationSharedData

      public XmiSerializationSharedData()
  • Method Details

    • addIdMapping

      void addIdMapping(int fsAddr, int xmiId)
    • getXmiId

      String getXmiId(int fsAddr)
    • getXmiIdAsInt

      int getXmiIdAsInt(int fsAddr)
    • getMaxXmiId

      public int getMaxXmiId()
      Gets the maximum xmi:id that has been generated or read so far.
      Returns:
      the maximum xmi:id
    • getFsAddrForXmiId

      public int getFsAddrForXmiId(int xmiId)
      Gets the FS address that corresponds to the given xmi:id, in the most recent serialization or deserialization.
      Parameters:
      xmiId - an xmi:id from the most recent XMI CAS that was serialized or deserialized.
      Returns:
      the FS address of the FeatureStructure corresponding to that xmi:id, -1 if none.
    • clearIdMap

      public void clearIdMap()
      Clears the ID mapping information that was populated in previous serializations or deserializations. TODO: maybe a more general reset that resets other things?
    • addOutOfTypeSystemElement

      public void addOutOfTypeSystemElement(XmiSerializationSharedData.OotsElementData elemData)
      Records information about an XMI element that was not an instance of any type in the type system.
      Parameters:
      elemData - information about the out-of-typesystem XMI element
    • getOutOfTypeSystemElements

      public List<XmiSerializationSharedData.OotsElementData> getOutOfTypeSystemElements()
      Gets a List of XmiSerializationSharedData.OotsElementData objects, each of which describes an incoming XMI element that did not correspond to a Type in the TypeSystem.
      Returns:
      List of XmiSerializationSharedData.OotsElementData objects
    • addOutOfTypeSystemViewMember

      public void addOutOfTypeSystemViewMember(String sofaXmiId, String memberXmiId)
      Records that an out-of-typesystem XMI element should be a member of the specified view.
      Parameters:
      sofaXmiId - xmi:id of a Sofa
      memberXmiId - xmi:id of an out-of-typesystem element that should be a member of the view for the given Sofa
    • getOutOfTypeSystemViewMembers

      public List<String> getOutOfTypeSystemViewMembers(String sofaXmiId)
      Gets a List of xmi:id's (Strings) of all out-of-typesystem XMI elements that are members of the view with the given id.
      Parameters:
      sofaXmiId - xmi:id of a Sofa
      Returns:
      List of xmi:id's of members of the view for the given Sofa.
    • addOutOfTypeSystemAttribute

      public void addOutOfTypeSystemAttribute(int addr, String featName, String featVal)
      Records an out-of-typesystem attribute that belongs to an in-typesystem FS. This will be added to the attributes when that FS is reserialized.
      Parameters:
      addr - CAS address of the FS
      featName - name of the feature
      featVal - value of the feature, as a string
    • addOutOfTypeSystemChildElements

      public void addOutOfTypeSystemChildElements(int addr, String featName, List<String> featVals)
      Records out-of-typesystem child elements that belong to an in-typesystem FS. These will be added to the child elements when that FS is reserialized.
      Parameters:
      addr - CAS address of the FS
      featName - name of the feature (element tag name)
      featVals - values of the feature, as a List of strings
    • getOutOfTypeSystemFeatures

      public XmiSerializationSharedData.OotsElementData getOutOfTypeSystemFeatures(int addr)
      Gets information about out-of-typesystem features that belong to an in-typesystem FS.
      Parameters:
      addr - CAS address of the FS
      Returns:
      object containing information about out-of-typesystem features (both attributes and child elements)
    • getAllFsAddressesInIdMap

      public int[] getAllFsAddressesInIdMap()
      Get all FS Addresses that have been added to the id map.
      Returns:
      an array containing all the FS addresses
    • getOutOfTypeSystemArrayElements

      public List<XmiSerializationSharedData.XmiArrayElement> getOutOfTypeSystemArrayElements(int addr)
      Gets information about out-of-typesystem array elements.
      Parameters:
      addr - the CAS address of an FSArray
      Returns:
      a List of XmiSerializationSharedData.XmiArrayElement objects, each of which holds the index and xmi:id of an array element that is a reference to an out-of-typesystem FS.
    • hasOutOfTypeSystemArrayElements

      public boolean hasOutOfTypeSystemArrayElements()
    • addOutOfTypeSystemArrayElement

      public void addOutOfTypeSystemArrayElement(int addr, int index, int xmiId)
      Records an out-of-typesystem array element in the XmiSerializationSharedData.
      Parameters:
      addr - CAS address of FSArray
      index - index into array
      xmiId - xmi:id of the out-of-typesystem element that is the value at the given index
    • addNonsharedRefToFSMapping

      public void addNonsharedRefToFSMapping(int nonsharedFSAddr, int fsAddr)
      Add mapping between the address of FS that is the value of a non-shared multi-valued feature of a FeatureStructure.
      Parameters:
      nonsharedFSAddr - - fs address of non-shared multi-valued feature value
      fsAddr - - fs address of encompassing featurestructure
    • getNonsharedMulitValuedFSs

      public int[] getNonsharedMulitValuedFSs()
      Returns:
      the non-shared featureId to FS Id key set
    • getEncompassingFS

      public int getEncompassingFS(int nonsharedFS)
      Parameters:
      nonsharedFS - an id of a nonsharedFS
      Returns:
      the int handle to the encompassing FS or -1 if not found
    • checkForDups

      void checkForDups()
      For debugging purposes only.
    • toString

      public String toString()
      For debugging purposes only.
      Overrides:
      toString in class Object