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