All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.xmpbox.XMPMetadata Maven / Gradle / Ivy

/*****************************************************************************
 * 
 * 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.xmpbox;

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

import org.apache.xmpbox.schema.AdobePDFSchema;
import org.apache.xmpbox.schema.DublinCoreSchema;
import org.apache.xmpbox.schema.PDFAExtensionSchema;
import org.apache.xmpbox.schema.PDFAIdentificationSchema;
import org.apache.xmpbox.schema.PhotoshopSchema;
import org.apache.xmpbox.schema.XMPBasicJobTicketSchema;
import org.apache.xmpbox.schema.XMPBasicSchema;
import org.apache.xmpbox.schema.XMPMediaManagementSchema;
import org.apache.xmpbox.schema.XMPRightsManagementSchema;
import org.apache.xmpbox.schema.XMPSchema;
import org.apache.xmpbox.schema.XmpSchemaException;
import org.apache.xmpbox.type.StructuredType;
import org.apache.xmpbox.type.TypeMapping;

/**
 * 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
{

    private String xpacketId = null;

    private String xpacketBegin = null;

    private String xpacketBytes = null;

    private String xpacketEncoding = null;

    private String xpacketEndData = XmpConstants.DEFAULT_XPACKET_END;

    private List schemas;

    private TypeMapping typeMapping;

    /**
     * Contructor of an empty default XMPMetaData.
     * 
     */
    protected XMPMetadata()
    {
        this(XmpConstants.DEFAULT_XPACKET_BEGIN, XmpConstants.DEFAULT_XPACKET_ID, XmpConstants.DEFAULT_XPACKET_BYTES,
                XmpConstants.DEFAULT_XPACKET_ENCODING);
    }

    /**
     * Creates blank XMP doc with specified parameters.
     * 
     * @param xpacketBegin Value of xpacketBegin
     * @param xpacketId Value of xpacketId
     * @param xpacketBytes Value of xpacketBytes
     * @param xpacketEncoding Value of xpacket encoding
     */
    protected XMPMetadata(String xpacketBegin, String xpacketId, String xpacketBytes, String xpacketEncoding)
    {
        this.schemas = new ArrayList();
        this.typeMapping = new TypeMapping(this);

        this.xpacketBegin = xpacketBegin;
        this.xpacketId = xpacketId;
        this.xpacketBytes = xpacketBytes;
        this.xpacketEncoding = xpacketEncoding;
    }

    /**
     * Creates blank XMP doc with default parameters.
     *
     * @return the XMPMetadata created.
     */
    public static XMPMetadata createXMPMetadata()
    {
        return new XMPMetadata();
    }

    /**
     * Creates blank XMP doc with specified parameters.
     * 
     * @param xpacketBegin Value of xpacketBegin
     * @param xpacketId Value of xpacketId
     * @param xpacketBytes Value of xpacketBytes
     * @param xpacketEncoding Value of xpacket encoding
     * @return the XMPMetadata created.
     */
    public static XMPMetadata createXMPMetadata(String xpacketBegin, String xpacketId, String xpacketBytes,
            String xpacketEncoding)
    {
        return new XMPMetadata(xpacketBegin, xpacketId, xpacketBytes, xpacketEncoding);
    }

    /**
     * Get TypeMapping.
     * @return the defined TypeMapping.
     */
    public TypeMapping getTypeMapping()
    {
        return this.typeMapping;
    }

    /**
     * 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;
    }

    /**
     * Get All Schemas declared in this metadata representation.
     * 
     * @return List of declared schemas
     */
    public List getAllSchemas()
    {
        List schem = new ArrayList();
        Iterator it = schemas.iterator();
        while (it.hasNext())
        {
            schem.add(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 the XMPSchema for the specified namespace.
     * 
     * Return the schema corresponding to this nsURI
* BE CAREFUL: typically, Metadata should contain one schema for each type. * This method returns the first schema encountered * corresponding to this NSURI.
* Return null if unknown * * @param nsURI The namespace URI corresponding to the schema wanted * @return The matching XMP schema representation */ public XMPSchema getSchema(String nsURI) { Iterator it = schemas.iterator(); XMPSchema tmp; while (it.hasNext()) { tmp = it.next(); if (tmp.getNamespace().equals(nsURI)) { return tmp; } } return null; } /** * Get the XMPSchema for the specified Class. * * Return the schema corresponding to this Class
* BE CAREFUL: typically, Metadata should contain one schema for each type. * This method returns the first schema encountered * corresponding to this Class.
* Return null if unknown * * @param clz The Class corresponding to the schema wanted * @return The matching XMP schema representation */ public XMPSchema getSchema(Class clz) { StructuredType st = clz.getAnnotation(StructuredType.class); return getSchema(st.namespace()); } /** * 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 permits 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 it = getAllSchemas().iterator(); XMPSchema tmp; while (it.hasNext()) { tmp = it.next(); if (tmp.getNamespace().equals(nsURI) && tmp.getPrefix().equals(prefix)) { return tmp; } } return null; } /** * Create and add an unspecified 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, nsURI, nsPrefix); 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 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 namespaces) throws XmpSchemaException { PDFAExtensionSchema pdfAExt = new PDFAExtensionSchema(this); 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.class); } /** * 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.class); } /** * 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; } /** * 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.class); } /** * 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 Basic Job Ticket Schema. * * This method return null if not found * * @return The XMPBasicJobTicketSchema schema or null if not declared. */ public XMPBasicJobTicketSchema getBasicJobTicketSchema() { return (XMPBasicJobTicketSchema) getSchema(XMPBasicJobTicketSchema.class); } /** * Create and add a default XMP Rights Management 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; } /** * Get the XMP Rights Management Schema. * * This method return null if not found. * * @return The XMPRightsManagementSchema schema or null if not declared */ public XMPRightsManagementSchema getXMPRightsManagementSchema() { return (XMPRightsManagementSchema) getSchema(XMPRightsManagementSchema.class); } /** * 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.class); } /** * 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 schema added in order to work on it */ public PhotoshopSchema createAndAddPhotoshopSchema() { PhotoshopSchema photoshop = new PhotoshopSchema(this); photoshop.setAboutAsSimple(""); addSchema(photoshop); return photoshop; } /** * 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.class); } /** * 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.class); } /** * 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.class); } /** * Add a schema to the current structure. * * @param obj the schema to add */ public void addSchema(XMPSchema obj) { schemas.add(obj); } /** * Remove a schema. * * @param schema The schema to remove */ public void removeSchema(XMPSchema schema) { schemas.remove(schema); } /** * Removes all schemas defined. */ public void clearSchemas() { schemas.clear(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy