1f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// =================================================================================================
2f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// ADOBE SYSTEMS INCORPORATED
3f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// Copyright 2006 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.options;
11f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
12f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.XMPException;
13f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.XMPMeta;
14f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.XMPMetaFactory;
15f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
16f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
17f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling/**
18f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * Options for {@link XMPMetaFactory#serializeToBuffer(XMPMeta, SerializeOptions)}.
19f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling *
20f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @since 24.01.2006
21f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */
22f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpublic final class SerializeOptions extends Options
23f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling{
24f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Omit the XML packet wrapper. */
25f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int OMIT_PACKET_WRAPPER = 0x0010;
26f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Mark packet as read-only. Default is a writeable packet. */
27f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int READONLY_PACKET = 0x0020;
28f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Use a compact form of RDF. */
29f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int USE_COMPACT_FORMAT = 0x0040;
30f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
31f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Include a padding allowance for a thumbnail image. If no <tt>xmp:Thumbnails</tt> property
32f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * is present, the typical space for a JPEG thumbnail is used.
33f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
34f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int INCLUDE_THUMBNAIL_PAD = 0x0100;
35f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
36f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * The padding parameter provides the overall packet length. The actual amount of padding is
37f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * computed. An exception is thrown if the packet exceeds this length with no padding.
38f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
39f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int EXACT_PACKET_LENGTH = 0x0200;
40f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Sort the struct properties and qualifier before serializing */
41f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int SORT = 0x1000;
42f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
43f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	// ---------------------------------------------------------------------------------------------
44f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	// encoding bit constants
45f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
46f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Bit indicating little endian encoding, unset is big endian */
47f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private static final int LITTLEENDIAN_BIT = 0x0001;
48f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Bit indication UTF16 encoding. */
49f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private static final int UTF16_BIT = 0x0002;
50f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** UTF8 encoding; this is the default */
51f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ENCODE_UTF8 = 0;
52f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** UTF16BE encoding */
53f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ENCODE_UTF16BE = UTF16_BIT;
54f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** UTF16LE encoding */
55f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ENCODE_UTF16LE = UTF16_BIT | LITTLEENDIAN_BIT;
56f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
57f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private static final int ENCODING_MASK = UTF16_BIT | LITTLEENDIAN_BIT;
58f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
59f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
60f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * The amount of padding to be added if a writeable XML packet is created. If zero is passed
61f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * (the default) an appropriate amount of padding is computed.
62f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
63f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private int padding = 2048;
64f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
65f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * The string to be used as a line terminator. If empty it defaults to; linefeed, U+000A, the
66f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * standard XML newline.
67f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
68f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private String newline = "\n";
69f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
70f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * The string to be used for each level of indentation in the serialized
71f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * RDF. If empty it defaults to two ASCII spaces, U+0020.
72f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
73f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private String indent = "  ";
74f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
75f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * The number of levels of indentation to be used for the outermost XML element in the
76f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * serialized RDF. This is convenient when embedding the RDF in other text, defaults to 0.
77f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
78f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private int baseIndent = 0;
79f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** Omits the Toolkit version attribute, not published, only used for Unit tests. */
80f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	private boolean omitVersionAttribute = false;
81f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
82f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
83f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
84f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Default constructor.
85f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
86f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions()
87f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
88f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		// reveal default constructor
89f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
90f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
91f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
92f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
93f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Constructor using inital options
94f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param options the inital options
95f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @throws XMPException Thrown if options are not consistant.
96f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
97f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions(int options) throws XMPException
98f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
99f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		super(options);
100f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
101f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
102f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
103f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
104f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
105f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
106f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getOmitPacketWrapper()
107f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
108f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(OMIT_PACKET_WRAPPER);
109f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
110f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
111f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
112f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
113f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
114f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
115f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
116f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setOmitPacketWrapper(boolean value)
117f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
118f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(OMIT_PACKET_WRAPPER, value);
119f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
120f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
121f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
122f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
123f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
124f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
125f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
126f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getReadOnlyPacket()
127f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
128f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(READONLY_PACKET);
129f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
130f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
131f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
132f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
133f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
134f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
135f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
136f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setReadOnlyPacket(boolean value)
137f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
138f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(READONLY_PACKET, value);
139f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
140f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
141f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
142f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
143f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
144f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
145f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
146f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getUseCompactFormat()
147f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
148f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(USE_COMPACT_FORMAT);
149f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
150f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
151f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
152f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
153f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
154f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
155f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
156f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setUseCompactFormat(boolean value)
157f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
158f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(USE_COMPACT_FORMAT, value);
159f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
160f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
161f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
162f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
163f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
164f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
165f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getIncludeThumbnailPad()
166f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
167f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(INCLUDE_THUMBNAIL_PAD);
168f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
169f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
170f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
171f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
172f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
173f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
174f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
175f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setIncludeThumbnailPad(boolean value)
176f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
177f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(INCLUDE_THUMBNAIL_PAD, value);
178f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
179f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
180f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
181f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
182f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
183f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
184f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
185f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getExactPacketLength()
186f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
187f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(EXACT_PACKET_LENGTH);
188f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
189f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
190f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
191f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
192f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
193f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
194f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
195f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setExactPacketLength(boolean value)
196f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
197f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(EXACT_PACKET_LENGTH, value);
198f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
199f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
200f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
201f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
202f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
203f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
204f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
205f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getSort()
206f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
207f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(SORT);
208f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
209f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
210f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
211f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
212f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
213f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
214f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
215f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setSort(boolean value)
216f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
217f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(SORT, value);
218f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
219f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
220f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
221f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
222f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
223f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
224f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
225f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getEncodeUTF16BE()
226f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
227f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return (getOptions() & ENCODING_MASK) == ENCODE_UTF16BE;
228f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
229f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
230f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
231f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
232f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
233f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
234f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
235f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setEncodeUTF16BE(boolean value)
236f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
237f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		// clear unicode bits
238f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(UTF16_BIT | LITTLEENDIAN_BIT, false);
239f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ENCODE_UTF16BE, value);
240f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
241f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
242f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
243f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
244f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
245f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the option.
246f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
247f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getEncodeUTF16LE()
248f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
249f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return (getOptions() & ENCODING_MASK) == ENCODE_UTF16LE;
250f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
251f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
252f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
253f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
254f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
255f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
256f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
257f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setEncodeUTF16LE(boolean value)
258f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
259f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		// clear unicode bits
260f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(UTF16_BIT | LITTLEENDIAN_BIT, false);
261f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ENCODE_UTF16LE, value);
262f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
263f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
264f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
265f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
266f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
267f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the baseIndent.
268f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
269f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public int getBaseIndent()
270f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
271f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return baseIndent;
272f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
273f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
274f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
275f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
276f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param baseIndent
277f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *            The baseIndent to set.
278f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
279f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
280f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setBaseIndent(int baseIndent)
281f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
282f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		this.baseIndent = baseIndent;
283f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
284f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
285f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
286f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
287f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
288f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the indent.
289f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
290f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public String getIndent()
291f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
292f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return indent;
293f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
294f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
295f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
296f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
297f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param indent
298f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *            The indent to set.
299f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
300f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
301f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setIndent(String indent)
302f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
303f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		this.indent = indent;
304f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
305f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
306f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
307f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
308f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
309f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the newline.
310f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
311f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public String getNewline()
312f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
313f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return newline;
314f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
315f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
316f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
317f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
318f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param newline
319f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *            The newline to set.
320f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
321f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
322f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setNewline(String newline)
323f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
324f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		this.newline = newline;
325f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
326f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
327f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
328f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
329f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
330f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the padding.
331f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
332f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public int getPadding()
333f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
334f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return padding;
335f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
336f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
337f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
338f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
339f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param padding
340f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *            The padding to set.
341f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the instance to call more set-methods.
342f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
343f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public SerializeOptions setPadding(int padding)
344f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
345f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		this.padding = padding;
346f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
347f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
348f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
349f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
350f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
351f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns whether the Toolkit version attribute shall be omitted.
352f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * <em>Note:</em> This options can only be set by unit tests.
353f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
354f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getOmitVersionAttribute()
355f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
356f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return omitVersionAttribute;
357f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
358f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
359f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
360f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
361f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the encoding as Java encoding String.
362f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
363f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public String getEncoding()
364f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
365f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		if (getEncodeUTF16BE())
366f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
367f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			return "UTF-16BE";
368f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
369f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		else if (getEncodeUTF16LE())
370f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
371f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			return "UTF-16LE";
372f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
373f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		else
374f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
375f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			return "UTF-8";
376f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
377f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
378f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
379f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
380f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
381f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *
382f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns clone of this SerializeOptions-object with the same options set.
383f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @throws CloneNotSupportedException Cannot happen in this place.
384f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
385f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public Object clone() throws CloneNotSupportedException
386f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
387f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		SerializeOptions clone;
388f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		try
389f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
390f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			clone = new SerializeOptions(getOptions());
391f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			clone.setBaseIndent(baseIndent);
392f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			clone.setIndent(indent);
393f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			clone.setNewline(newline);
394f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			clone.setPadding(padding);
395f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			return clone;
396f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
397f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		catch (XMPException e)
398f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
399f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			// This cannot happen, the options are already checked in "this" object.
400f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			return null;
401f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
402f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
403f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
404f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
405f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
406f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @see Options#defineOptionName(int)
407f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
408f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	protected String defineOptionName(int option)
409f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
410f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		switch (option)
411f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
412f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case OMIT_PACKET_WRAPPER : 		return "OMIT_PACKET_WRAPPER";
413f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case READONLY_PACKET :			return "READONLY_PACKET";
414f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case USE_COMPACT_FORMAT :		return "USE_COMPACT_FORMAT";
415f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case INCLUDE_THUMBNAIL_PAD :	return "INCLUDE_THUMBNAIL_PAD";
416f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case EXACT_PACKET_LENGTH :		return "EXACT_PACKET_LENGTH";
417f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case SORT :				return "NORMALIZED";
418f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			default: 						return null;
419f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
420f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
421f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
422f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
423f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
424f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @see Options#getValidOptions()
425f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
426f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	protected int getValidOptions()
427f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
428f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return
429f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		OMIT_PACKET_WRAPPER |
430f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		READONLY_PACKET |
431f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		USE_COMPACT_FORMAT |
432f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		INCLUDE_THUMBNAIL_PAD |
433f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		EXACT_PACKET_LENGTH |
434f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		SORT;
435f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
436f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling}