1f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//================================================================================================= 2f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//ADOBE SYSTEMS INCORPORATED 3f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//Copyright 2006-2007 Adobe Systems Incorporated 4f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//All Rights Reserved 5f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// 6f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms 7f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//of the Adobe license agreement accompanying it. 8f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//================================================================================================= 9f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 10f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpackage com.adobe.xmp; 11f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 12f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport java.io.InputStream; 13f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport java.io.OutputStream; 14f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 15f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.impl.XMPMetaImpl; 16f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.impl.XMPMetaParser; 17f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.impl.XMPSchemaRegistryImpl; 18f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.impl.XMPSerializerHelper; 19f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.options.ParseOptions; 20f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.options.SerializeOptions; 21f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 22f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 23f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling/** 24f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Creates <code>XMPMeta</code>-instances from an <code>InputStream</code> 25f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 26f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @since 30.01.2006 27f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 28f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpublic final class XMPMetaFactory 29f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling{ 30f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** The singleton instance of the <code>XMPSchemaRegistry</code>. */ 31f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling private static XMPSchemaRegistry schema = new XMPSchemaRegistryImpl(); 32f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** cache for version info */ 33f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling private static XMPVersionInfo versionInfo = null; 34f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 35f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 36f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Hides public constructor 37f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 38f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling private XMPMetaFactory() 39f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 40f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // EMPTY 41f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 42f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 43f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 44f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 45f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the singleton instance of the <code>XMPSchemaRegistry</code>. 46f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 47f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPSchemaRegistry getSchemaRegistry() 48f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 49f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return schema; 50f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 51f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 52f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 53f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 54f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns an empty <code>XMPMeta</code>-object. 55f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 56f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta create() 57f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 58f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return new XMPMetaImpl(); 59f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 60f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 61f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 62f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 63f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Parsing with default options. 64f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @see XMPMetaFactory#parse(InputStream, ParseOptions) 65f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 66f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param in an <code>InputStream</code> 67f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 68f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 69f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 70f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parse(InputStream in) throws XMPException 71f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 72f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return parse(in, null); 73f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 74f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 75f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 76f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 77f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * These functions support parsing serialized RDF into an XMP object, and serailizing an XMP 78f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * object into RDF. The input for parsing may be any valid Unicode 79f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * encoding. ISO Latin-1 is also recognized, but its use is strongly discouraged. Serialization 80f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * is always as UTF-8. 81f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <p> 82f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <code>parseFromBuffer()</code> parses RDF from an <code>InputStream</code>. The encoding 83f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * is recognized automatically. 84f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 85f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param in an <code>InputStream</code> 86f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options controlling the parsing.<br> 87f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The available options are: 88f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <ul> 89f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> XMP_REQUIRE_XMPMETA - The <x:xmpmeta> XML element is required around 90f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <tt><rdf:RDF></tt>. 91f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> XMP_STRICT_ALIASING - Do not reconcile alias differences, throw an exception. 92f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * </ul> 93f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <em>Note:</em>The XMP_STRICT_ALIASING option is not yet implemented. 94f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 95f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 96f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 97f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parse(InputStream in, ParseOptions options) 98f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throws XMPException 99f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 100f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return XMPMetaParser.parse(in, options); 101f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 102f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 103f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 104f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 105f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Parsing with default options. 106f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @see XMPMetaFactory#parse(InputStream) 107f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 108f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param packet a String contain an XMP-file. 109f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 110f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 111f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 112f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parseFromString(String packet) throws XMPException 113f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 114f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return parseFromString(packet, null); 115f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 116f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 117f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 118f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 119f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Creates an <code>XMPMeta</code>-object from a string. 120f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @see XMPMetaFactory#parseFromString(String, ParseOptions) 121f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 122f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param packet a String contain an XMP-file. 123f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options controlling the parsing. 124f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 125f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 126f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 127f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parseFromString(String packet, ParseOptions options) 128f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throws XMPException 129f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 130f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return XMPMetaParser.parse(packet, options); 131f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 132f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 133f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 134f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 135f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Parsing with default options. 136f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @see XMPMetaFactory#parseFromBuffer(byte[], ParseOptions) 137f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 138f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param buffer a String contain an XMP-file. 139f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 140f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 141f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 142f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parseFromBuffer(byte[] buffer) throws XMPException 143f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 144f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return parseFromBuffer(buffer, null); 145f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 146f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 147f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 148f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 149f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Creates an <code>XMPMeta</code>-object from a byte-buffer. 150f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @see XMPMetaFactory#parse(InputStream, ParseOptions) 151f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 152f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param buffer a String contain an XMP-file. 153f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options controlling the parsing. 154f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the <code>XMPMeta</code>-object created from the input. 155f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException If the file is not well-formed XML or if the parsing fails. 156f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 157f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static XMPMeta parseFromBuffer(byte[] buffer, 158f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling ParseOptions options) throws XMPException 159f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 160f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return XMPMetaParser.parse(buffer, options); 161f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 162f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 163f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 164f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 165f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Serializes an <code>XMPMeta</code>-object as RDF into an <code>OutputStream</code> 166f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * with default options. 167f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 168f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param xmp a metadata object 169f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param out an <code>OutputStream</code> to write the serialized RDF to. 170f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException on serializsation errors. 171f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 172f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static void serialize(XMPMeta xmp, OutputStream out) throws XMPException 173f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 174f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling serialize(xmp, out, null); 175f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 176f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 177f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 178f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 179f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Serializes an <code>XMPMeta</code>-object as RDF into an <code>OutputStream</code>. 180f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 181f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param xmp a metadata object 182f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options to control the serialization (see {@link SerializeOptions}). 183f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param out an <code>OutputStream</code> to write the serialized RDF to. 184f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException on serializsation errors. 185f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 186f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static void serialize(XMPMeta xmp, OutputStream out, SerializeOptions options) 187f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throws XMPException 188f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 189f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling assertImplementation(xmp); 190f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling XMPSerializerHelper.serialize((XMPMetaImpl) xmp, out, options); 191f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 192f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 193f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 194f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 195f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Serializes an <code>XMPMeta</code>-object as RDF into a byte buffer. 196f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 197f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param xmp a metadata object 198f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options to control the serialization (see {@link SerializeOptions}). 199f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns a byte buffer containing the serialized RDF. 200f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException on serializsation errors. 201f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 202f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static byte[] serializeToBuffer(XMPMeta xmp, SerializeOptions options) 203f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throws XMPException 204f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 205f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling assertImplementation(xmp); 206f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return XMPSerializerHelper.serializeToBuffer((XMPMetaImpl) xmp, options); 207f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 208f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 209f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 210f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 211f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Serializes an <code>XMPMeta</code>-object as RDF into a string. <em>Note:</em> Encoding 212f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * is ignored when serializing to a string. 213f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 214f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param xmp a metadata object 215f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param options Options to control the serialization (see {@link SerializeOptions}). 216f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns a string containing the serialized RDF. 217f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @throws XMPException on serializsation errors. 218f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 219f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static String serializeToString(XMPMeta xmp, SerializeOptions options) 220f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throws XMPException 221f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 222f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling assertImplementation(xmp); 223f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return XMPSerializerHelper.serializeToString((XMPMetaImpl) xmp, options); 224f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 225f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 226f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 227f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 228f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @param xmp Asserts that xmp is compatible to <code>XMPMetaImpl</code>.s 229f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 230f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling private static void assertImplementation(XMPMeta xmp) 231f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 232f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling if (!(xmp instanceof XMPMetaImpl)) 233f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 234f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling throw new UnsupportedOperationException("The serializing service works only" + 235f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling "with the XMPMeta implementation of this library"); 236f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 237f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 238f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 239f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 240f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 241f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Resets the schema registry to its original state (creates a new one). 242f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Be careful this might break all existing XMPMeta-objects and should be used 243f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * only for testing purpurses. 244f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 245f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static void reset() 246f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 247f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling schema = new XMPSchemaRegistryImpl(); 248f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 249f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 250f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 251f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling /** 252f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Obtain version information. The XMPVersionInfo singleton is created the first time 253f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * its requested. 254f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * 255f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @return Returns the version information. 256f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */ 257f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public static synchronized XMPVersionInfo getVersionInfo() 258f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 259f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling if (versionInfo == null) 260f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 261f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling try 262f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 263f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final int major = 5; 264f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final int minor = 1; 265f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final int micro = 0; 266f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final int engBuild = 3; 267f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final boolean debug = false; 268f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 269f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // Adobe XMP Core 5.0-jc001 DEBUG-<branch>.<changelist>, 2009 Jan 28 15:22:38-CET 270f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling final String message = "Adobe XMP Core 5.1.0-jc003"; 271f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 272f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 273f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling versionInfo = new XMPVersionInfo() 274f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 275f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public int getMajor() 276f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 277f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return major; 278f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 279f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 280f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public int getMinor() 281f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 282f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return minor; 283f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 284f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 285f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public int getMicro() 286f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 287f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return micro; 288f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 289f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 290f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public boolean isDebug() 291f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 292f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return debug; 293f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 294f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 295f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public int getBuild() 296f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 297f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return engBuild; 298f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 299f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 300f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public String getMessage() 301f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 302f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return message; 303f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 304f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 305f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling public String toString() 306f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 307f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return message; 308f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 309f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling }; 310f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling 311f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 312f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling catch (Throwable e) 313f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling { 314f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling // EMTPY, severe error would be detected during the tests 315f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling System.out.println(e); 316f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 317f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 318f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling return versionInfo; 319f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling } 320f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling} 321