Package org.apache.padaf.xmpbox

Source Code of org.apache.padaf.xmpbox.XMPMetadata$SchemasContainer

/*****************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
package org.apache.padaf.xmpbox;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.padaf.xmpbox.parser.XmpSchemaException;
import org.apache.padaf.xmpbox.schema.AdobePDFSchema;
import org.apache.padaf.xmpbox.schema.DublinCoreSchema;
import org.apache.padaf.xmpbox.schema.PDFAExtensionSchema;
import org.apache.padaf.xmpbox.schema.PDFAIdentificationSchema;
import org.apache.padaf.xmpbox.schema.PhotoshopSchema;
import org.apache.padaf.xmpbox.schema.XMPBasicJobTicketSchema;
import org.apache.padaf.xmpbox.schema.XMPBasicSchema;
import org.apache.padaf.xmpbox.schema.XMPMediaManagementSchema;
import org.apache.padaf.xmpbox.schema.XMPRightsManagementSchema;
import org.apache.padaf.xmpbox.schema.XMPSchema;
import org.apache.padaf.xmpbox.type.Elementable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
* Object representation of XMPMetaData Be CAREFUL: typically, metadata should
* contain only one schema for each type (each NSURI). Retrieval of common
* schemas (like DublinCore) is based on this fact and take the first schema of
* this type encountered. However, XmpBox allow you to place schemas of same
* type with different prefix. If you do that, you must retrieve all schemas by
* yourself with getAllSchemas or with getSchema which use prefix parameter.
*
* @author a183132
*
*/
public class XMPMetadata {

    protected String xpacketId = "W5M0MpCehiHzreSzNTczkc9d";
    protected String xpacketBegin = "\uFEFF";

    // DEPRECATED (SHOULD STAY NULL (Default value))
    protected String xpacketBytes;
    protected String xpacketEncoding;

    protected String xpacketEndData = "end=\"w\"";

    protected SchemasContainer schemas;

    private Document xmpDocument;

    /**
     * Contructor of an empty default XMPMetaData
     *
     * @throws CreateXMPMetadataException
     *             If DOM Document associated could not be created
     */
    public XMPMetadata() throws CreateXMPMetadataException {
        try {
            xmpDocument = org.apache.padaf.xmpbox.parser.XMLUtil.newDocument();
            schemas = new SchemasContainer();
        } catch (IOException e) {
            throw new CreateXMPMetadataException(
            "Failed to create Dom Document",e);
        }

    }

    /**
     * creates blank XMP doc with specified parameters
     *
     * @throws CreateXMPMetadataException
     * @param xpacketBegin
     *            Value of xpacketBegin
     * @param xpacketId
     *            Value of xpacketId
     * @param xpacketBytes
     *            Value of xpacketBytes
     * @param xpacketEncoding
     *            Value of xpacket encoding
     * @throws CreateXMPMetadataException
     *             If DOM Document associated could not be created
     */
    public XMPMetadata(String xpacketBegin, String xpacketId,
            String xpacketBytes, String xpacketEncoding)
    throws CreateXMPMetadataException {
        this.xpacketBegin = xpacketBegin;
        this.xpacketId = xpacketId;
        this.xpacketBytes = xpacketBytes;
        this.xpacketEncoding = xpacketEncoding;
        try {
            xmpDocument = org.apache.padaf.xmpbox.parser.XMLUtil.newDocument();
            schemas = new SchemasContainer();
        } catch (IOException e) {
            throw new CreateXMPMetadataException(
            "Failed to create Dom Document",e);
        }
    }

    /**
     * Get xpacketBytes
     *
     * @return value of xpacketBytes field
     */
    public String getXpacketBytes() {
        return xpacketBytes;
    }

    /**
     * Get xpacket encoding
     *
     * @return value of xpacket Encoding field
     */
    public String getXpacketEncoding() {
        return xpacketEncoding;
    }

    /**
     * Get xpacket Begin
     *
     * @return value of xpacket Begin field
     */
    public String getXpacketBegin() {
        return xpacketBegin;
    }

    /**
     * Get xpacket Id
     *
     * @return value of xpacket Id field
     */
    public String getXpacketId() {
        return xpacketId;
    }

    /**
     * Add schema given to this metadata representation
     *
     * @param schema
     *            The Schema to add
     */
    public void addSchema(XMPSchema schema) {
        schemas.addSchema(schema);
    }

    /**
     * Get All Schemas declared in this metadata representation
     *
     * @return List of declared schemas
     */
    public List<XMPSchema> getAllSchemas() {
        ArrayList<XMPSchema> schem = new ArrayList<XMPSchema>();
        Iterator<XMPSchema> it = schemas.schemas.iterator();
        while (it.hasNext()) {
            schem.add((XMPSchema) it.next());
        }
        return schem;
    }

    /**
     * Set special XPACKET END PI
     *
     * @param data
     *            The XPacket End value
     */
    public void setEndXPacket(String data) {
        xpacketEndData = data;
    }

    /**
     * get XPACKET END PI
     *
     * @return XPACKET END Value
     */
    public String getEndXPacket() {
        return xpacketEndData;
    }

    /**
     * Get element associated to all schemas contained in this Metadata
     *
     * @return Dom Element representing serialized metadata
     */
    public Element getContainerElement() {
        return schemas.getElement();
    }

    /**
     * Give the DOM Document to build metadata content
     *
     * @return The XML Document which is serialized metadata
     */
    public Document getFuturOwner() {
        return xmpDocument;
    }

    /**
     * Return the schema corresponding to this nsURI BE CAREFUL: typically,
     * Metadata should contains one schema for each type this method return the
     * first schema encountered corresponding to this NSURI Return null if
     * unknown
     *
     * @param nsURI
     *            The namespace URI corresponding to the schema wanted
     * @return The Class Schema representation
     */
    public XMPSchema getSchema(String nsURI) {
        Iterator<XMPSchema> it = schemas.schemas.iterator();
        XMPSchema tmp;
        while (it.hasNext()) {
            tmp = it.next();
            if (tmp.getNamespaceValue().equals(nsURI)) {
                return tmp;
            }
        }
        return null;
    }

    /**
     * Return the schema corresponding to this nsURI and a prefix This method is
     * here to treat metadata which embed more than one time the same schema It
     * permit to retrieve a specific schema with its prefix
     *
     * @param prefix
     *            The prefix fixed in the schema wanted
     * @param nsURI
     *            The namespace URI corresponding to the schema wanted
     * @return The Class Schema representation
     */
    public XMPSchema getSchema(String prefix, String nsURI) {
        Iterator<XMPSchema> it = getAllSchemas().iterator();
        XMPSchema tmp;
        while (it.hasNext()) {
            tmp = it.next();
            if (tmp.getNamespaceValue().equals(nsURI)
                    && tmp.getPrefix().equals(prefix)) {
                return tmp;
            }
        }
        return null;
    }

    /**
     * Set a unspecialized schema
     *
     * @param nsPrefix
     *            The prefix wanted for the schema
     * @param nsURI
     *            The namespace URI wanted for the schema
     * @return The schema added in order to work on it
     */
    public XMPSchema createAndAddDefaultSchema(String nsPrefix, String nsURI) {
        XMPSchema schem = new XMPSchema(this, nsPrefix, nsURI);
        schem.setAboutAsSimple("");
        addSchema(schem);
        return schem;
    }

    /**
     * Create and add a default PDFA Extension schema to this metadata This
     * method return the created schema to enter information This PDFAExtension
     * is created with all default namespaces used in PDFAExtensionSchema
     *
     * @return PDFAExtension schema added in order to work on it
     */
    public PDFAExtensionSchema createAndAddPDFAExtensionSchemaWithDefaultNS() {
        PDFAExtensionSchema pdfAExt = new PDFAExtensionSchema(this);
        pdfAExt.setAboutAsSimple("");
        addSchema(pdfAExt);
        return pdfAExt;
    }

    /**
     * Create and add a default XMPRights schema to this metadata This method
     * return the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public XMPRightsManagementSchema createAndAddXMPRightsManagementSchema() {
        XMPRightsManagementSchema rights = new XMPRightsManagementSchema(this);
        rights.setAboutAsSimple("");
        addSchema(rights);
        return rights;
    }

    /**
     * Create and add a default PDFA Extension schema to this metadata This
     * method return the created schema to enter information This PDFAExtension
     * is created with specified list of namespaces
     *
     * @param namespaces
     *            Special namespaces list to use
     * @return schema added in order to work on it
     * @throws XmpSchemaException
     *             If namespaces list not contains PDF/A Extension namespace URI
     */
    public PDFAExtensionSchema createAndAddPDFAExtensionSchemaWithNS(
           Map<String, String> namespaces) throws XmpSchemaException {
        PDFAExtensionSchema pdfAExt = new PDFAExtensionSchema(this, namespaces);
        pdfAExt.setAboutAsSimple("");
        addSchema(pdfAExt);
        return pdfAExt;
    }

    /**
     * Get the PDFA Extension schema This method return null if not found
     *
     * @return The PDFAExtension schema or null if not declared
     */
    public PDFAExtensionSchema getPDFExtensionSchema() {
        return (PDFAExtensionSchema) getSchema(PDFAExtensionSchema.PDFAEXTENSIONURI);
    }

    /**
     * Create and add a default PDFA Identification schema to this metadata This
     * method return the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public PDFAIdentificationSchema createAndAddPFAIdentificationSchema() {
        PDFAIdentificationSchema pdfAId = new PDFAIdentificationSchema(this);
        pdfAId.setAboutAsSimple("");
        addSchema(pdfAId);
        return pdfAId;
    }

    /**
     * Get the PDFA Identification schema This method return null if not found
     *
     * @return The PDFAIdentificationSchema schema or null if not declared
     */
    public PDFAIdentificationSchema getPDFIdentificationSchema() {
        return (PDFAIdentificationSchema) getSchema(PDFAIdentificationSchema.IDURI);
    }

    /**
     * Create and add a default Dublin Core schema to this metadata This method
     * return the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public DublinCoreSchema createAndAddDublinCoreSchema() {
        DublinCoreSchema dc = new DublinCoreSchema(this);
        dc.setAboutAsSimple("");
        addSchema(dc);
        return dc;
    }
   
    /**
     * Create and add a default Basic Job Ticket schema to this metadata This method
     * return the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public XMPBasicJobTicketSchema createAndAddBasicJobTicketSchema () {
        XMPBasicJobTicketSchema sc = new XMPBasicJobTicketSchema(this);
        sc.setAboutAsSimple("");
        addSchema(sc);
        return sc;
    }
   

    /**
     * Get the Dublin Core schema This method return null if not found
     *
     * @return The DublinCoreSchema schema or null if not declared
     */
    public DublinCoreSchema getDublinCoreSchema() {
        return (DublinCoreSchema) getSchema(DublinCoreSchema.DCURI);
    }

    /**
     * Get the Basic JOb Ticket Schema schema This method return null if not found
     *
     * @return The XMPBasicJobTicketSchema schema or null if not declared
     */
    public XMPBasicJobTicketSchema getBasicJobTicketSchema() {
        return (XMPBasicJobTicketSchema) getSchema(XMPBasicJobTicketSchema.JOB_TICKET_URI);
    }

   
    /**
     * Get the XMPRights schema This method return null if not found
     *
     * @return The XMPRightsManagementSchema schema or null if not declared
     */
    public XMPRightsManagementSchema getXMPRightsManagementSchema() {
        return (XMPRightsManagementSchema) getSchema(XMPRightsManagementSchema.XMPRIGHTSURI);
    }

    /**
     * Get the Photoshop schema This method return null if not found
     *
     * @return The PhotoshopSchema schema or null if not declared
     */
    public PhotoshopSchema getPhotoshopSchema() {
        return (PhotoshopSchema) getSchema(PhotoshopSchema.PHOTOSHOPURI);
    }

    /**
     * Create and add a XMP Basic schema to this metadata This method return the
     * created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public XMPBasicSchema createAndAddXMPBasicSchema() {
        XMPBasicSchema xmpB = new XMPBasicSchema(this);
        xmpB.setAboutAsSimple("");
        addSchema(xmpB);
        return xmpB;
    }

    /**
     * Get the XMP Basic schema This method return null if not found
     *
     * @return The XMPBasicSchema schema or null if not declared
     */
    public XMPBasicSchema getXMPBasicSchema() {
        return (XMPBasicSchema) getSchema(XMPBasicSchema.XMPBASICURI);
    }

    /**
     * Create and add a XMP Media Management schema to this metadata This method
     * return the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public XMPMediaManagementSchema createAndAddXMPMediaManagementSchema() {
        XMPMediaManagementSchema xmpMM = new XMPMediaManagementSchema(this);
        xmpMM.setAboutAsSimple("");
        addSchema(xmpMM);
        return xmpMM;
    }

    /***
     * create and add Photoshop Schema to this metadata. This method return
     * the created schema to enter information
     * @return
     */
    public PhotoshopSchema createAndAddPhotoshopSchema() {
        PhotoshopSchema photoshop = new PhotoshopSchema(this);
        photoshop.setAboutAsSimple("");
        addSchema(photoshop);
        return photoshop;
    }

    /**
     * Get the XMP Media Management schema This method return null if not found
     *
     * @return The XMPMediaManagementSchema schema or null if not declared
     */
    public XMPMediaManagementSchema getXMPMediaManagementSchema() {
        return (XMPMediaManagementSchema) getSchema(XMPMediaManagementSchema.XMPMMURI);
    }

    /**
     * Create and add an Adobe PDF schema to this metadata This method return
     * the created schema to enter information
     *
     * @return schema added in order to work on it
     */
    public AdobePDFSchema createAndAddAdobePDFSchema() {
        AdobePDFSchema pdf = new AdobePDFSchema(this);
        pdf.setAboutAsSimple("");
        addSchema(pdf);
        return pdf;
    }

    /**
     * Get the Adobe PDF schema This method return null if not found
     *
     * @return The AdobePDFSchema schema or null if not declared
     */
    public AdobePDFSchema getAdobePDFSchema() {
        return (AdobePDFSchema) getSchema(AdobePDFSchema.PDFURI);
    }

    /**
     * Class which represent a container for schemas associated to a metadata
     * representation
     *
     * @author a183132
     *
     */
    public class SchemasContainer implements Elementable {

        protected Element element;
        protected List<XMPSchema> schemas;

        /**
         *
         * Schemas Container constructor
         */
        public SchemasContainer() {
            element = xmpDocument.createElement("rdf:RDF");
            element.setAttributeNS(XMPSchema.NS_NAMESPACE, "xmlns:rdf",
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
            schemas = new ArrayList<XMPSchema>();
        }

        /**
         * Add a schema to the current structure
         *
         * @param obj
         *            the schema to add
         */
        public void addSchema(XMPSchema obj) {
            schemas.add(obj);
            element.appendChild(obj.getElement());
        }

        /**
         * Remove a schema
         *
         * @param schema
         *            The schema to remove
         */
        public void removeSchema(XMPSchema schema) {
            if (schemas.remove(schema)) {
                element.removeChild(schema.getElement());
            }
        }

        /**
         * Get The Dom Element in order to build serialized metadata
         *
         * @return Dom Element
         */
        public Element getElement() {
            return element;
        }

    }

}
TOP

Related Classes of org.apache.padaf.xmpbox.XMPMetadata$SchemasContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.