blob: 37ed7bdd0aa866389bcac2aa85d6847287d8f3ad [file] [log] [blame]
// =================================================================================================
// ADOBE SYSTEMS INCORPORATED
// Copyright 2006 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.options;
import com.adobe.xmp.XMPException;
import com.adobe.xmp.XMPMeta;
import com.adobe.xmp.XMPMetaFactory;
/**
* Options for {@link XMPMetaFactory#serializeToBuffer(XMPMeta, SerializeOptions)}.
*
* @since 24.01.2006
*/
public final class SerializeOptions extends Options
{
/** Omit the XML packet wrapper. */
public static final int OMIT_PACKET_WRAPPER = 0x0010;
/** Mark packet as read-only. Default is a writeable packet. */
public static final int READONLY_PACKET = 0x0020;
/** Use a compact form of RDF. */
public static final int USE_COMPACT_FORMAT = 0x0040;
/**
* Include a padding allowance for a thumbnail image. If no <tt>xmp:Thumbnails</tt> property
* is present, the typical space for a JPEG thumbnail is used.
*/
public static final int INCLUDE_THUMBNAIL_PAD = 0x0100;
/**
* The padding parameter provides the overall packet length. The actual amount of padding is
* computed. An exception is thrown if the packet exceeds this length with no padding.
*/
public static final int EXACT_PACKET_LENGTH = 0x0200;
/** Sort the struct properties and qualifier before serializing */
public static final int SORT = 0x1000;
// ---------------------------------------------------------------------------------------------
// encoding bit constants
/** Bit indicating little endian encoding, unset is big endian */
private static final int LITTLEENDIAN_BIT = 0x0001;
/** Bit indication UTF16 encoding. */
private static final int UTF16_BIT = 0x0002;
/** UTF8 encoding; this is the default */
public static final int ENCODE_UTF8 = 0;
/** UTF16BE encoding */
public static final int ENCODE_UTF16BE = UTF16_BIT;
/** UTF16LE encoding */
public static final int ENCODE_UTF16LE = UTF16_BIT | LITTLEENDIAN_BIT;
/** */
private static final int ENCODING_MASK = UTF16_BIT | LITTLEENDIAN_BIT;
/**
* The amount of padding to be added if a writeable XML packet is created. If zero is passed
* (the default) an appropriate amount of padding is computed.
*/
private int padding = 2048;
/**
* The string to be used as a line terminator. If empty it defaults to; linefeed, U+000A, the
* standard XML newline.
*/
private String newline = "\n";
/**
* The string to be used for each level of indentation in the serialized
* RDF. If empty it defaults to two ASCII spaces, U+0020.
*/
private String indent = " ";
/**
* The number of levels of indentation to be used for the outermost XML element in the
* serialized RDF. This is convenient when embedding the RDF in other text, defaults to 0.
*/
private int baseIndent = 0;
/** Omits the Toolkit version attribute, not published, only used for Unit tests. */
private boolean omitVersionAttribute = false;
/**
* Default constructor.
*/
public SerializeOptions()
{
// reveal default constructor
}
/**
* Constructor using inital options
* @param options the inital options
* @throws XMPException Thrown if options are not consistant.
*/
public SerializeOptions(int options) throws XMPException
{
super(options);
}
/**
* @return Returns the option.
*/
public boolean getOmitPacketWrapper()
{
return getOption(OMIT_PACKET_WRAPPER);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setOmitPacketWrapper(boolean value)
{
setOption(OMIT_PACKET_WRAPPER, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getReadOnlyPacket()
{
return getOption(READONLY_PACKET);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setReadOnlyPacket(boolean value)
{
setOption(READONLY_PACKET, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getUseCompactFormat()
{
return getOption(USE_COMPACT_FORMAT);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setUseCompactFormat(boolean value)
{
setOption(USE_COMPACT_FORMAT, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getIncludeThumbnailPad()
{
return getOption(INCLUDE_THUMBNAIL_PAD);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setIncludeThumbnailPad(boolean value)
{
setOption(INCLUDE_THUMBNAIL_PAD, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getExactPacketLength()
{
return getOption(EXACT_PACKET_LENGTH);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setExactPacketLength(boolean value)
{
setOption(EXACT_PACKET_LENGTH, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getSort()
{
return getOption(SORT);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setSort(boolean value)
{
setOption(SORT, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getEncodeUTF16BE()
{
return (getOptions() & ENCODING_MASK) == ENCODE_UTF16BE;
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setEncodeUTF16BE(boolean value)
{
// clear unicode bits
setOption(UTF16_BIT | LITTLEENDIAN_BIT, false);
setOption(ENCODE_UTF16BE, value);
return this;
}
/**
* @return Returns the option.
*/
public boolean getEncodeUTF16LE()
{
return (getOptions() & ENCODING_MASK) == ENCODE_UTF16LE;
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setEncodeUTF16LE(boolean value)
{
// clear unicode bits
setOption(UTF16_BIT | LITTLEENDIAN_BIT, false);
setOption(ENCODE_UTF16LE, value);
return this;
}
/**
* @return Returns the baseIndent.
*/
public int getBaseIndent()
{
return baseIndent;
}
/**
* @param baseIndent
* The baseIndent to set.
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setBaseIndent(int baseIndent)
{
this.baseIndent = baseIndent;
return this;
}
/**
* @return Returns the indent.
*/
public String getIndent()
{
return indent;
}
/**
* @param indent
* The indent to set.
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setIndent(String indent)
{
this.indent = indent;
return this;
}
/**
* @return Returns the newline.
*/
public String getNewline()
{
return newline;
}
/**
* @param newline
* The newline to set.
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setNewline(String newline)
{
this.newline = newline;
return this;
}
/**
* @return Returns the padding.
*/
public int getPadding()
{
return padding;
}
/**
* @param padding
* The padding to set.
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setPadding(int padding)
{
this.padding = padding;
return this;
}
/**
* @return Returns whether the Toolkit version attribute shall be omitted.
* <em>Note:</em> This options can only be set by unit tests.
*/
public boolean getOmitVersionAttribute()
{
return omitVersionAttribute;
}
/**
* @return Returns the encoding as Java encoding String.
*/
public String getEncoding()
{
if (getEncodeUTF16BE())
{
return "UTF-16BE";
}
else if (getEncodeUTF16LE())
{
return "UTF-16LE";
}
else
{
return "UTF-8";
}
}
/**
*
* @return Returns clone of this SerializeOptions-object with the same options set.
* @throws CloneNotSupportedException Cannot happen in this place.
*/
public Object clone() throws CloneNotSupportedException
{
SerializeOptions clone;
try
{
clone = new SerializeOptions(getOptions());
clone.setBaseIndent(baseIndent);
clone.setIndent(indent);
clone.setNewline(newline);
clone.setPadding(padding);
return clone;
}
catch (XMPException e)
{
// This cannot happen, the options are already checked in "this" object.
return null;
}
}
/**
* @see Options#defineOptionName(int)
*/
protected String defineOptionName(int option)
{
switch (option)
{
case OMIT_PACKET_WRAPPER : return "OMIT_PACKET_WRAPPER";
case READONLY_PACKET : return "READONLY_PACKET";
case USE_COMPACT_FORMAT : return "USE_COMPACT_FORMAT";
case INCLUDE_THUMBNAIL_PAD : return "INCLUDE_THUMBNAIL_PAD";
case EXACT_PACKET_LENGTH : return "EXACT_PACKET_LENGTH";
case SORT : return "NORMALIZED";
default: return null;
}
}
/**
* @see Options#getValidOptions()
*/
protected int getValidOptions()
{
return
OMIT_PACKET_WRAPPER |
READONLY_PACKET |
USE_COMPACT_FORMAT |
INCLUDE_THUMBNAIL_PAD |
EXACT_PACKET_LENGTH |
SORT;
}
}