com.itextpdf.xmp.options.SerializeOptions Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of itextpdf Show documentation
Show all versions of itextpdf Show documentation
iText, a free Java-PDF library
//Copyright (c) 2006, Adobe Systems Incorporated
//All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. All advertising materials mentioning features or use of this software
// must display the following acknowledgement:
// This product includes software developed by the Adobe Systems Incorporated.
// 4. Neither the name of the Adobe Systems Incorporated nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY ADOBE SYSTEMS INCORPORATED ''AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL ADOBE SYSTEMS INCORPORATED BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// http://www.adobe.com/devnet/xmp/library/eula-xmp-library-java.html
package com.itextpdf.xmp.options;
import com.itextpdf.xmp.XMPException;
import com.itextpdf.xmp.XMPMeta;
import com.itextpdf.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.
* The compact form is the default serialization format (this flag is technically ignored).
* To serialize to the canonical form, set the flag USE_CANONICAL_FORMAT.
* If both flags "compact" and "canonical" are set, canonical is used.
*/
public static final int USE_COMPACT_FORMAT = 0x0040;
/** Use the canonical form of RDF if set. By default the compact form is used */
public static final int USE_CANONICAL_FORMAT = 0x0080;
/**
* Include a padding allowance for a thumbnail image. If no xmp:Thumbnails 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;
/** Omit the <x:xmpmeta&bt;-tag */
public static final int OMIT_XMPMETA_ELEMENT = 0x1000;
/** Sort the struct properties and qualifier before serializing */
public static final int SORT = 0x2000;
// ---------------------------------------------------------------------------------------------
// 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 getOmitXmpMetaElement()
{
return getOption(OMIT_XMPMETA_ELEMENT);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setOmitXmpMetaElement(boolean value)
{
setOption(OMIT_XMPMETA_ELEMENT, 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 getUseCanonicalFormat()
{
return getOption(USE_CANONICAL_FORMAT);
}
/**
* @param value the value to set
* @return Returns the instance to call more set-methods.
*/
public SerializeOptions setUseCanonicalFormat(boolean value)
{
setOption(USE_CANONICAL_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.
* Note: 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 USE_CANONICAL_FORMAT : return "USE_CANONICAL_FORMAT";
case INCLUDE_THUMBNAIL_PAD : return "INCLUDE_THUMBNAIL_PAD";
case EXACT_PACKET_LENGTH : return "EXACT_PACKET_LENGTH";
case OMIT_XMPMETA_ELEMENT: return "OMIT_XMPMETA_ELEMENT";
case SORT : return "NORMALIZED";
default: return null;
}
}
/**
* @see Options#getValidOptions()
*/
protected int getValidOptions()
{
return
OMIT_PACKET_WRAPPER |
READONLY_PACKET |
USE_COMPACT_FORMAT |
// USE_CANONICAL_FORMAT |
INCLUDE_THUMBNAIL_PAD |
OMIT_XMPMETA_ELEMENT |
EXACT_PACKET_LENGTH |
SORT;
}
}