Class XMLPersistenceMetaDataParser

All Implemented Interfaces:
MetaDataParser, AbstractCFMetaDataFactory.Parser, ContentHandler, DTDHandler, EntityResolver, ErrorHandler, LexicalHandler
Direct Known Subclasses:
XMLPersistenceMappingParser

public class XMLPersistenceMetaDataParser extends CFMetaDataParser implements AbstractCFMetaDataFactory.Parser
Custom SAX parser used by the system to quickly parse persistence metadata files. This parser may invoke another parser to scan source code annotation.
Author:
Steve Kim, Pinaki Poddar
  • Field Details

  • Constructor Details

    • XMLPersistenceMetaDataParser

      public XMLPersistenceMetaDataParser(OpenJPAConfiguration conf)
      Constructor; supply configuration.
  • Method Details

    • getConfiguration

      public OpenJPAConfiguration getConfiguration()
      Configuration supplied on construction.
    • getAnnotationParser

      public AnnotationPersistenceMetaDataParser getAnnotationParser()
      The annotation parser. When class is discovered in an XML file, we first parse any annotations present, then override with the XML.
    • setAnnotationParser

      public void setAnnotationParser(AnnotationPersistenceMetaDataParser parser)
      The annotation parser. When class is discovered in an XML file, we first parse any annotations present, then override with the XML.
    • getRepository

      public MetaDataRepository getRepository()
      Returns the repository for this parser. If none has been set, creates a new repository and sets it.
      Specified by:
      getRepository in interface AbstractCFMetaDataFactory.Parser
    • setRepository

      public void setRepository(MetaDataRepository repos)
      Set the metadata repository for this parser.
    • getEnvClassLoader

      public ClassLoader getEnvClassLoader()
      Return the environmental class loader to pass on to parsed metadata instances.
    • setEnvClassLoader

      public void setEnvClassLoader(ClassLoader loader)
      Set the environmental class loader to pass on to parsed metadata instances.
    • getMappingOverride

      public boolean getMappingOverride()
      Whether to allow later parses of mapping information to override earlier information for the same class. Defaults to false. Useful when a tool is mapping a class, so that .jdo file partial mapping information can be used even when mappings are stored in .orm files or other locations.
    • setMappingOverride

      public void setMappingOverride(boolean override)
      Whether to allow later parses of mapping information to override earlier information for the same class. Defaults to false. Useful when a tool is mapping a class, so that .jdo file partial mapping information can be used even when mappings are stored in .orm files or other locations.
    • getMode

      public int getMode()
      The parse mode according to the expected document type. The mode constants act as bit flags, and therefore can be combined.
    • setMode

      public void setMode(int mode, boolean on)
      The parse mode according to the expected document type.
    • setMode

      public void setMode(int mode)
      The parse mode according to the expected document type.
      Specified by:
      setMode in interface AbstractCFMetaDataFactory.Parser
    • parse

      public void parse(URL url) throws IOException
      Description copied from interface: MetaDataParser
      Parse the given resource.
      Specified by:
      parse in interface MetaDataParser
      Overrides:
      parse in class XMLMetaDataParser
      Throws:
      IOException
    • parse

      public void parse(File file) throws IOException
      Description copied from interface: MetaDataParser
      Parse the given file, which may be a directory, in which case it will be scanned recursively for metadata files.
      Specified by:
      parse in interface MetaDataParser
      Overrides:
      parse in class XMLMetaDataParser
      Throws:
      IOException
    • isMetaDataMode

      protected boolean isMetaDataMode()
      Convenience method for interpreting getMode().
    • isQueryMode

      protected boolean isQueryMode()
      Convenience method for interpreting getMode().
    • isMappingMode

      protected boolean isMappingMode()
      Convenience method for interpreting getMode().
    • isMappingOverrideMode

      protected boolean isMappingOverrideMode()
      Returns true if we're in mapping mode or in metadata mode with mapping override enabled.
    • pushElement

      protected void pushElement(Object elem)
      Push a parse element onto the stack.
    • popElement

      protected Object popElement()
      Pop a parse element from the stack.
    • peekElement

      protected Object peekElement()
      Peek a parse element from the stack.
    • currentElement

      protected Object currentElement()
      Return the current element being parsed. May be a class metadata, field metadata, query metadata, etc.
    • currentStrategy

      protected PersistenceStrategy currentStrategy()
      Return the current PersistenceStrategy if any.
    • currentParent

      protected Object currentParent()
      Return the tag of the current parent element.
    • isRuntime

      protected boolean isRuntime()
      Return whether we're running the parser at runtime.
    • getSchemaSource

      protected Object getSchemaSource()
      Description copied from class: XMLMetaDataParser
      Implement to return the XML schema source for the document. Returns null by default. May return:
      • String pointing to schema URI.
      • InputStream containing schema contents.
      • InputSource containing schema contents.
      • File containing schema contents.
      • Array of any of the above elements.
      Overrides:
      getSchemaSource in class XMLMetaDataParser
    • getPackageAttributeName

      protected String getPackageAttributeName()
      Description copied from class: CFMetaDataParser
      The attribute of the package element that holds the name, or null to use the element text. Defaults to "name".
      Overrides:
      getPackageAttributeName in class CFMetaDataParser
    • getClassAttributeName

      protected String getClassAttributeName()
      Description copied from class: CFMetaDataParser
      The attribute of the class element that holds the name, or null to use the element text. Defaults to "name".
      Overrides:
      getClassAttributeName in class CFMetaDataParser
    • getClassElementDepth

      protected int getClassElementDepth()
      Description copied from class: CFMetaDataParser
      The depth of the class element. Defaults to 2.
      Overrides:
      getClassElementDepth in class CFMetaDataParser
    • isClassElementName

      protected boolean isClassElementName(String name)
      Description copied from class: CFMetaDataParser
      The name of the class element. Defaults to "class".
      Overrides:
      isClassElementName in class CFMetaDataParser
    • reset

      protected void reset()
      Description copied from class: CFMetaDataParser
      Override this method to clear any state and ready the parser for a new document. Subclasses should call super.reset() to clear superclass state.
      Overrides:
      reset in class CFMetaDataParser
    • startSystemElement

      protected boolean startSystemElement(String name, Attributes attrs) throws SAXException
      Description copied from class: CFMetaDataParser
      Override this method marking the start of an element outside of any package or class.
      Overrides:
      startSystemElement in class CFMetaDataParser
      Throws:
      SAXException
    • endSystemElement

      protected void endSystemElement(String name) throws SAXException
      Description copied from class: CFMetaDataParser
      Override this method marking the end of an element outside of any package or class.
      Overrides:
      endSystemElement in class CFMetaDataParser
      Throws:
      SAXException
    • startSystemMappingElement

      protected Object startSystemMappingElement(String name, Attributes attrs) throws SAXException
      Implement to parse a mapping element outside of any class.
      Returns:
      the tag for the given element, or null to skip the element
      Throws:
      SAXException
    • endSystemMappingElement

      protected void endSystemMappingElement(String name) throws SAXException
      Implement to parse a mapping element outside of any class.
      Throws:
      SAXException
    • startClassElement

      protected boolean startClassElement(String name, Attributes attrs) throws SAXException
      Description copied from class: CFMetaDataParser
      Override this method marking the start of an element within a declared class.
      Overrides:
      startClassElement in class CFMetaDataParser
      Throws:
      SAXException
    • endClassElement

      protected void endClassElement(String name) throws SAXException
      Description copied from class: CFMetaDataParser
      Override this method marking the end of an element within a declared class.
      Overrides:
      endClassElement in class CFMetaDataParser
      Throws:
      SAXException
    • startClassMappingElement

      protected Object startClassMappingElement(String name, Attributes attrs) throws SAXException
      Implement to parse a mapping element within a class.
      Returns:
      the tag for the given element, or null to skip element
      Throws:
      SAXException
    • endClassMappingElement

      protected void endClassMappingElement(String name) throws SAXException
      Implement to parse a mapping element within a class.
      Throws:
      SAXException
    • startClass

      protected boolean startClass(String elem, Attributes attrs) throws SAXException
      Description copied from class: CFMetaDataParser
      Start a class. Parses out class name by default. Return false to skip class element and its contents.
      Overrides:
      startClass in class CFMetaDataParser
      Throws:
      SAXException
    • endClass

      protected void endClass(String elem) throws SAXException
      Description copied from class: CFMetaDataParser
      End a class. Parses contained text by default.
      Overrides:
      endClass in class CFMetaDataParser
      Throws:
      SAXException
    • startClassMapping

      protected void startClassMapping(ClassMetaData mapping, boolean mappedSuper, Attributes attrs) throws SAXException
      Implement to add mapping attributes to class.
      Throws:
      SAXException
    • endClassMapping

      protected void endClassMapping(ClassMetaData mapping) throws SAXException
      Implement to finalize class mapping.
      Throws:
      SAXException
    • startSequenceGenerator

      protected boolean startSequenceGenerator(Attributes attrs)
      Parse sequence-generator.
    • endSequenceGenerator

      protected void endSequenceGenerator()
    • startId

      protected boolean startId(Attributes attrs) throws SAXException
      Parse id.
      Throws:
      SAXException
    • endId

      protected void endId() throws SAXException
      Throws:
      SAXException
    • startEmbeddedId

      protected boolean startEmbeddedId(Attributes attrs) throws SAXException
      Parse embedded-id.
      Throws:
      SAXException
    • endEmbeddedId

      protected void endEmbeddedId() throws SAXException
      Throws:
      SAXException
    • startIdClass

      protected boolean startIdClass(Attributes attrs) throws SAXException
      Parse id-class.
      Throws:
      SAXException
    • endIdClass

      protected void endIdClass() throws SAXException
      Throws:
      SAXException
    • startLob

      protected boolean startLob(Attributes attrs) throws SAXException
      Parse lob.
      Throws:
      SAXException
    • endLob

      protected void endLob() throws SAXException
      Throws:
      SAXException
    • startGeneratedValue

      protected boolean startGeneratedValue(Attributes attrs) throws SAXException
      Parse generated-value.
      Throws:
      SAXException
    • endGeneratedValue

      protected void endGeneratedValue() throws SAXException
      Throws:
      SAXException
    • startCascade

      protected boolean startCascade(Object tag, Attributes attrs) throws SAXException
      Lazily parse cascades.
      Throws:
      SAXException
    • setCascades

      protected void setCascades(FieldMetaData fmd)
      Set the cached cascades into the field.
    • startFieldMapping

      protected void startFieldMapping(FieldMetaData field, Attributes attrs) throws SAXException
      Implement to add field mapping data. Does nothing by default.
      Throws:
      SAXException
    • endFieldMapping

      protected void endFieldMapping(FieldMetaData field) throws SAXException
      Implement to finalize field mapping. Does nothing by default.
      Throws:
      SAXException
    • startVersion

      protected boolean startVersion(Attributes attrs) throws SAXException
      Parse version.
      Throws:
      SAXException
    • endVersion

      protected void endVersion() throws SAXException
      Throws:
      SAXException
    • parseBasic

      protected void parseBasic(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse basic.
      Throws:
      SAXException
    • parseEmbedded

      protected void parseEmbedded(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse embedded.
      Throws:
      SAXException
    • parseOneToOne

      protected void parseOneToOne(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse one-to-one.
      Throws:
      SAXException
    • parseManyToOne

      protected void parseManyToOne(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse many-to-one.
      Throws:
      SAXException
    • parseManyToMany

      protected void parseManyToMany(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse many-to-many.
      Throws:
      SAXException
    • parseOneToMany

      protected void parseOneToMany(FieldMetaData fmd, Attributes attrs) throws SAXException
      Parse one-to-many.
      Throws:
      SAXException
    • setOrphanRemoval

      protected void setOrphanRemoval(ValueMetaData vmd, boolean orphanRemoval)
    • parseElementCollection

      protected void parseElementCollection(FieldMetaData fmd, Attributes attrs) throws SAXException
      Throws:
      SAXException
    • startNamedQuery

      protected boolean startNamedQuery(Attributes attrs) throws SAXException
      Parse named-query.
      Throws:
      SAXException
    • endNamedQuery

      protected void endNamedQuery() throws SAXException
      Throws:
      SAXException
    • startQueryString

      protected boolean startQueryString(Attributes attrs) throws SAXException
      Throws:
      SAXException
    • endQueryString

      protected void endQueryString() throws SAXException
      Throws:
      SAXException
    • startQueryHint

      protected boolean startQueryHint(Attributes attrs) throws SAXException
      Parse query-hint.
      Throws:
      SAXException
    • endQueryHint

      protected void endQueryHint() throws SAXException
      Throws:
      SAXException
    • startNamedNativeQuery

      protected boolean startNamedNativeQuery(Attributes attrs) throws SAXException
      Parse native-named-query.
      Throws:
      SAXException
    • endNamedNativeQuery

      protected void endNamedNativeQuery() throws SAXException
      Throws:
      SAXException
    • startOrderColumn

      protected boolean startOrderColumn(Attributes attrs) throws SAXException
      Throws:
      SAXException
    • classForName

      protected Class<?> classForName(String name) throws SAXException
      Instantiate the given class, taking into account the default package.
      Throws:
      SAXException
    • addDeferredEmbeddableMetaData

      protected void addDeferredEmbeddableMetaData()
      Process all deferred embeddables using an unknown access type.
    • addDeferredEmbeddableMetaData

      protected void addDeferredEmbeddableMetaData(Class<?> embedType, int access) throws SAXException
      Process all deferred embeddables and embeddable mapping overrides for a given class. This should only happen after the access type of the embeddable is known.
      Parameters:
      embedType - embeddable class
      access - class level access for embeddable
      Throws:
      SAXException
    • setDeferredEmbeddableAccessType

      protected void setDeferredEmbeddableAccessType(Class<?> embedType, int access)
    • clearDeferredMetaData

      protected void clearDeferredMetaData()
      Overrides:
      clearDeferredMetaData in class XMLMetaDataParser
    • isDeferredEmbeddable

      protected boolean isDeferredEmbeddable(Class<?> embedType, MetaDataContext fmd)
    • deferEmbeddable

      protected void deferEmbeddable(Class<?> embedType, MetaDataContext fmd)
    • applyDeferredEmbeddableOverrides

      protected void applyDeferredEmbeddableOverrides(Class<?> cls) throws SAXException
      Throws:
      SAXException
    • addToParseList

      public void addToParseList(ArrayList<Class<?>> parseList)
    • addToParseList

      public void addToParseList(Class<?> parentCls)
    • parseListContains

      public boolean parseListContains(Class<?> cls)
    • getParseList

      public ArrayList<Class<?>> getParseList()
    • getParseClass

      public Class<?> getParseClass()
    • startDelimitedIdentifiers

      protected boolean startDelimitedIdentifiers()
    • normalizeSequenceName

      protected String normalizeSequenceName(String seqName)
    • normalizeSchemaName

      protected String normalizeSchemaName(String schName)
    • normalizeCatalogName

      protected String normalizeCatalogName(String catName)
    • isDuplicateClass

      protected boolean isDuplicateClass(ClassMetaData meta)
      Determines whether the ClassMetaData has been resolved more than once. Compares the current sourceName and linenumber to the ones used to originally resolve the metadata.
      Parameters:
      meta - The ClassMetaData to inspect.
      Returns:
      true if the source was has already been resolved from a different location. Otherwise return false
    • isDuplicateQuery

      protected boolean isDuplicateQuery(QueryMetaData meta)
      Determines whether the QueryMetaData has been resolved more than once.
      Parameters:
      meta - QueryMetaData that has already been resolved.
      Returns:
      true if the QueryMetaData was defined in a different place - e.g. another line in orm.xml.
    • parseStrategy

      protected void parseStrategy(FieldMetaData fmd, Attributes attrs)
    • parseElementClassCriteriaAttr

      protected void parseElementClassCriteriaAttr(FieldMetaData fmd, Attributes attrs) throws SAXException
      Throws:
      SAXException
    • parseEagerFetchModeAttr

      protected void parseEagerFetchModeAttr(FieldMetaData fmd, Attributes attrs) throws SAXException
      Throws:
      SAXException
    • endExtendedClass

      protected void endExtendedClass(String elem) throws SAXException
      Overrides:
      endExtendedClass in class CFMetaDataParser
      Throws:
      SAXException