Class OdfPackageDocument

  • All Implemented Interfaces:
    Closeable, AutoCloseable
    Direct Known Subclasses:
    OdfSchemaDocument

    public class OdfPackageDocument
    extends Object
    implements Closeable
    The package layer described by the ODF 1.2 Package specification is independent of the above ODF XML layer described by the ODF 1.2 XML Schema specification.

    Still the abstract concept of documents exist in the ODF Package layer.

    • Field Detail

      • mPackage

        protected OdfPackage mPackage
        The ODF package containing the document
      • mDocumentPathInPackage

        protected String mDocumentPathInPackage
        The internal path to the document relative to the ODF package
      • mDocumentMediaType

        protected String mDocumentMediaType
        The media type of the ODF package document. Note: Not necessarily an ODF XML media type as specified in ODF 1.2 part1
    • Constructor Detail

      • OdfPackageDocument

        protected OdfPackageDocument​(OdfPackage pkg,
                                     String internalPath,
                                     String mediaTypeString)
        Creates a new OdfPackageDocument.
        Parameters:
        pkg - - the ODF Package that contains the document. A baseURL is being generated based on its location.
        internalPath - - the directory path within the package from where the document should be loaded.
        mediaTypeString - - media type of stream. If unknown null can be used.
    • Method Detail

      • loadDocument

        public static OdfPackageDocument loadDocument​(String documentPath)
                                               throws Exception
        Loads an OdfPackageDocument from the provided path.

        OdfPackageDocument relies on the file being available for read access over the whole life-cycle of OdfDocument.

        Parameters:
        documentPath - - the path from where the document can be loaded
        Returns:
        the OpenDocument from the given path or NULL if the media type is not supported by ODFDOM.
        Throws:
        Exception - - if the document could not be created.
      • loadSubDocument

        public OdfPackageDocument loadSubDocument​(String documentPath)
        Returns an embedded OdfPackageDocument from the given package path.
        Parameters:
        documentPath - to the document within the package. The path is relative the current document path.
        Returns:
        an embedded OdfPackageDocument
      • getMediaTypeString

        public String getMediaTypeString()
        Returns:
        the media type of this document
      • setMediaTypeString

        protected final void setMediaTypeString​(String mediaTypeString)
        Parameters:
        mediaTypeString - for the media type of this document
      • getPackage

        public OdfPackage getPackage()
        Retrieves the OdfPackage for this OdfPackageDocument.
        Returns:
        the OdfPackage that contains this OdfPackageDocument.
      • getDocumentPath

        public String getDocumentPath()
        Get the relative path for an embedded ODF document.
        Returns:
        path to the directory of the embedded ODF document (relative to ODF package root).
      • removeDocument

        public void removeDocument​(String internDocumentPath)
        Removes an embedded ODF document from the ODF Package. All files within the embedded document directory will be removed.
        Parameters:
        internDocumentPath - path to the directory of the embedded ODF document (always relative to the package path of the current document).
      • isRootDocument

        public boolean isRootDocument()
        Returns:
        true if the document is at the root level of the package
      • isExternalReference

        protected static boolean isExternalReference​(String ref)
        Checks if the given reference is a reference, which points outside the ODF package Only relative path are allowed with the exception of a single slash '/' representing the root document.
        Parameters:
        ref - the file reference to be checked
        Returns:
        true if the reference is an package external reference
      • normalizeDocumentPath

        protected static String normalizeDocumentPath​(String documentPath)
        Ensure the document path for is valid and gurantee unique encoding by normalizing the path.
        Parameters:
        documentPath - the destination directory of the document. The path should end with a '/'.
        Returns:
        the documentPath after normalization.
        See Also:
        OdfPackage.normalizeDirectoryPath(java.lang.String)
      • save

        public void save​(String documentPath)
                  throws Exception
        Save the document to given path.

        When save the embedded document to a stand alone document, all the file entries of the embedded document will be copied to a new document package. If the embedded document is outside of the current document directory, you have to embed it to the sub directory and refresh the link of the embedded document. You should reload it from the given path to get the saved embedded document.

        Parameters:
        documentPath - - the path to the package document
        Throws:
        Exception - if the document could not be saved
      • save

        public void save​(File file)
                  throws Exception
        Save the document to a given file.

        If the input file has been cached (this is the case when loading from an InputStream), the input file can be overwritten.

        Otherwise it's allowed to overwrite the input file as long as the same path name is used that was used for loading (no symbolic link foo2.odt pointing to the loaded file foo1.odt, no network path X:\foo.odt pointing to the loaded file D:\foo.odt).

        When saving the embedded document to a stand alone document, all files of the embedded document will be copied to a new document package. If the embedded document is outside of the current document directory, you have to embed it to the sub directory and refresh the link of the embedded document. You should reload it from the given file to get the saved embedded document.

        Parameters:
        file - - the file to save the document
        Throws:
        Exception - if the document could not be saved
      • flushDoms

        protected void flushDoms()
        Flush the existing DOM to the document to get in advantage of the recent changes from the DOM
      • insertDocument

        public void insertDocument​(OdfPackageDocument newDocument,
                                   String documentPath)
        Embed an OdfPackageDocument to the current OdfPackageDocument. All the file entries of child document will be embedded as well to the current document package.
        Parameters:
        newDocument - the OdfPackageDocument to be embedded.
        documentPath - to the directory the ODF document should be inserted (relative to the root of this document).
      • getFileDom

        public OdfFileDom getFileDom​(String internalPath)
        Parameters:
        filePath - of the XML relative to the document folder
        Returns:
        the typed DOM of the given file
      • getAbsoluteFilePath

        public String getAbsoluteFilePath​(String relativeFilePath)
        Parameters:
        relativeFilePath - of the file path relative to the document folder
        Returns:
        the absolute file path relative to the package (i.e. ZIP) root.
      • close

        public void close()
        Close the OdfPackageDocument, its OdfPackage and release all temporary created data. After execution of this method, this class is no longer usable. Do this as the last action to free resources. Closing an already closed document has no effect.
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Closeable
      • getXMLFileMetadata

        public org.apache.jena.rdf.model.Model getXMLFileMetadata​(String internalPath)
        Extracts RDF Metadata triple from XML files
        Parameters:
        internalPath - path to the XML file relative to package root
        Returns:
        RDF Metadata through GRDDL XSLT of given XML file
      • getCachedDom

        protected Document getCachedDom​(String internalPath)
        Returns:
        the already once parsed XML document