diff options
Diffstat (limited to 'java/XMPCore/src/com/adobe/xmp/XMPMetaFactory.java')
-rw-r--r-- | java/XMPCore/src/com/adobe/xmp/XMPMetaFactory.java | 327 |
1 files changed, 327 insertions, 0 deletions
diff --git a/java/XMPCore/src/com/adobe/xmp/XMPMetaFactory.java b/java/XMPCore/src/com/adobe/xmp/XMPMetaFactory.java new file mode 100644 index 0000000..4b218ec --- /dev/null +++ b/java/XMPCore/src/com/adobe/xmp/XMPMetaFactory.java @@ -0,0 +1,327 @@ +//================================================================================================= +//ADOBE SYSTEMS INCORPORATED +//Copyright 2006-2007 Adobe Systems Incorporated +//All Rights Reserved +// +//NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms +//of the Adobe license agreement accompanying it. +//================================================================================================= + +package com.adobe.xmp; + +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Properties; + +import com.adobe.xmp.impl.XMPMetaImpl; +import com.adobe.xmp.impl.XMPMetaParser; +import com.adobe.xmp.impl.XMPSchemaRegistryImpl; +import com.adobe.xmp.impl.XMPSerializerHelper; +import com.adobe.xmp.options.ParseOptions; +import com.adobe.xmp.options.SerializeOptions; + + +/** + * Creates <code>XMPMeta</code>-instances from an <code>InputStream</code> + * + * @since 30.01.2006 + */ +public final class XMPMetaFactory +{ + /** The singleton instance of the <code>XMPSchemaRegistry</code>. */ + private static XMPSchemaRegistry schema = new XMPSchemaRegistryImpl(); + /** cache for version info */ + private static XMPVersionInfo versionInfo = null; + + /** + * Hides public constructor + */ + private XMPMetaFactory() + { + // EMPTY + } + + + /** + * @return Returns the singleton instance of the <code>XMPSchemaRegistry</code>. + */ + public static XMPSchemaRegistry getSchemaRegistry() + { + return schema; + } + + + /** + * @return Returns an empty <code>XMPMeta</code>-object. + */ + public static XMPMeta create() + { + return new XMPMetaImpl(); + } + + + /** + * Parsing with default options. + * @see XMPMetaFactory#parse(InputStream, ParseOptions) + * + * @param in an <code>InputStream</code> + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parse(InputStream in) throws XMPException + { + return parse(in, null); + } + + + /** + * These functions support parsing serialized RDF into an XMP object, and serailizing an XMP + * object into RDF. The input for parsing may be any valid Unicode + * encoding. ISO Latin-1 is also recognized, but its use is strongly discouraged. Serialization + * is always as UTF-8. + * <p> + * <code>parseFromBuffer()</code> parses RDF from an <code>InputStream</code>. The encoding + * is recognized automatically. + * + * @param in an <code>InputStream</code> + * @param options Options controlling the parsing.<br> + * The available options are: + * <ul> + * <li> XMP_REQUIRE_XMPMETA - The <x:xmpmeta> XML element is required around + * <tt><rdf:RDF></tt>. + * <li> XMP_STRICT_ALIASING - Do not reconcile alias differences, throw an exception. + * </ul> + * <em>Note:</em>The XMP_STRICT_ALIASING option is not yet implemented. + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parse(InputStream in, ParseOptions options) + throws XMPException + { + return XMPMetaParser.parse(in, options); + } + + + /** + * Parsing with default options. + * @see XMPMetaFactory#parse(InputStream) + * + * @param packet a String contain an XMP-file. + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parseFromString(String packet) throws XMPException + { + return parseFromString(packet, null); + } + + + /** + * Creates an <code>XMPMeta</code>-object from a string. + * @see XMPMetaFactory#parseFromString(String, ParseOptions) + * + * @param packet a String contain an XMP-file. + * @param options Options controlling the parsing. + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parseFromString(String packet, ParseOptions options) + throws XMPException + { + return XMPMetaParser.parse(packet, options); + } + + + /** + * Parsing with default options. + * @see XMPMetaFactory#parseFromBuffer(byte[], ParseOptions) + * + * @param buffer a String contain an XMP-file. + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parseFromBuffer(byte[] buffer) throws XMPException + { + return parseFromBuffer(buffer, null); + } + + + /** + * Creates an <code>XMPMeta</code>-object from a byte-buffer. + * @see XMPMetaFactory#parse(InputStream, ParseOptions) + * + * @param buffer a String contain an XMP-file. + * @param options Options controlling the parsing. + * @return Returns the <code>XMPMeta</code>-object created from the input. + * @throws XMPException If the file is not well-formed XML or if the parsing fails. + */ + public static XMPMeta parseFromBuffer(byte[] buffer, + ParseOptions options) throws XMPException + { + return XMPMetaParser.parse(buffer, options); + } + + + /** + * Serializes an <code>XMPMeta</code>-object as RDF into an <code>OutputStream</code> + * with default options. + * + * @param xmp a metadata object + * @param out an <code>OutputStream</code> to write the serialized RDF to. + * @throws XMPException on serializsation errors. + */ + public static void serialize(XMPMeta xmp, OutputStream out) throws XMPException + { + serialize(xmp, out, null); + } + + + /** + * Serializes an <code>XMPMeta</code>-object as RDF into an <code>OutputStream</code>. + * + * @param xmp a metadata object + * @param options Options to control the serialization (see {@link SerializeOptions}). + * @param out an <code>OutputStream</code> to write the serialized RDF to. + * @throws XMPException on serializsation errors. + */ + public static void serialize(XMPMeta xmp, OutputStream out, SerializeOptions options) + throws XMPException + { + assertImplementation(xmp); + XMPSerializerHelper.serialize((XMPMetaImpl) xmp, out, options); + } + + + /** + * Serializes an <code>XMPMeta</code>-object as RDF into a byte buffer. + * + * @param xmp a metadata object + * @param options Options to control the serialization (see {@link SerializeOptions}). + * @return Returns a byte buffer containing the serialized RDF. + * @throws XMPException on serializsation errors. + */ + public static byte[] serializeToBuffer(XMPMeta xmp, SerializeOptions options) + throws XMPException + { + assertImplementation(xmp); + return XMPSerializerHelper.serializeToBuffer((XMPMetaImpl) xmp, options); + } + + + /** + * Serializes an <code>XMPMeta</code>-object as RDF into a string. <em>Note:</em> Encoding + * is ignored when serializing to a string. + * + * @param xmp a metadata object + * @param options Options to control the serialization (see {@link SerializeOptions}). + * @return Returns a string containing the serialized RDF. + * @throws XMPException on serializsation errors. + */ + public static String serializeToString(XMPMeta xmp, SerializeOptions options) + throws XMPException + { + assertImplementation(xmp); + return XMPSerializerHelper.serializeToString((XMPMetaImpl) xmp, options); + } + + + /** + * @param xmp Asserts that xmp is compatible to <code>XMPMetaImpl</code>.s + */ + private static void assertImplementation(XMPMeta xmp) + { + if (!(xmp instanceof XMPMetaImpl)) + { + throw new UnsupportedOperationException("The serializing service works only" + + "with the XMPMeta implementation of this library"); + } + } + + + /** + * Resets the schema registry to its original state (creates a new one). + * Be careful this might break all existing XMPMeta-objects and should be used + * only for testing purpurses. + */ + public static void reset() + { + schema = new XMPSchemaRegistryImpl(); + } + + + /** + * Obtain version information. + * + * @return Returns the version information. + */ + public static XMPVersionInfo getVersionInfo() + { + if (versionInfo == null) + { + try + { + Properties versProperties = new Properties(); + versProperties.load(XMPMetaFactory.class.getResourceAsStream("version.properties")); + + final int major = Integer.parseInt(versProperties + .getProperty("implementation.version.major")); + final int minor = Integer.parseInt(versProperties + .getProperty("implementation.version.minor")); + final int micro = Integer.parseInt(versProperties + .getProperty("implementation.version.micro")); + final boolean debug = Boolean.valueOf( + versProperties.getProperty("implementation.version.debug")).booleanValue(); + final String message; + final int engBuild; + + message = versProperties.getProperty("implementation.version"); + engBuild = Integer.parseInt(versProperties + .getProperty("implementation.version.engbuild")); + + versionInfo = new XMPVersionInfo() + { + public int getMajor() + { + return major; + } + + public int getMinor() + { + return minor; + } + + public int getMicro() + { + return micro; + } + + public boolean isDebug() + { + return debug; + } + + public int getBuild() + { + return engBuild; + } + + public String getMessage() + { + return message; + } + + public String toString() + { + return message; + } + }; + + } + catch (Throwable e) + { + // EMTPY, severe error would be detected during the tests + } + } + return versionInfo; + } +} |