com.itextpdf.xmp.options.PropertyOptions 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.XMPError;
import com.itextpdf.xmp.XMPException;
/**
* The property flags are used when properties are fetched from the XMPMeta
-object
* and provide more detailed information about the property.
*
* @since 03.07.2006
*/
public final class PropertyOptions extends Options
{
/** */
public static final int NO_OPTIONS = 0x00000000;
/** */
public static final int URI = 0x00000002;
/** */
public static final int HAS_QUALIFIERS = 0x00000010;
/** */
public static final int QUALIFIER = 0x00000020;
/** */
public static final int HAS_LANGUAGE = 0x00000040;
/** */
public static final int HAS_TYPE = 0x00000080;
/** */
public static final int STRUCT = 0x00000100;
/** */
public static final int ARRAY = 0x00000200;
/** */
public static final int ARRAY_ORDERED = 0x00000400;
/** */
public static final int ARRAY_ALTERNATE = 0x00000800;
/** */
public static final int ARRAY_ALT_TEXT = 0x00001000;
/** */
public static final int SCHEMA_NODE = 0x80000000;
/** may be used in the future */
public static final int DELETE_EXISTING = 0x20000000;
/**
* Default constructor
*/
public PropertyOptions()
{
// reveal default constructor
}
/**
* Intialization constructor
*
* @param options the initialization options
* @throws XMPException If the options are not valid
*/
public PropertyOptions(int options) throws XMPException
{
super(options);
}
/**
* @return Return whether the property value is a URI. It is serialized to RDF using the
* rdf:resource attribute. Not mandatory for URIs, but considered RDF-savvy.
*/
public boolean isURI()
{
return getOption(URI);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setURI(boolean value)
{
setOption(URI, value);
return this;
}
/**
* @return Return whether the property has qualifiers. These could be an xml:lang
* attribute, an rdf:type property, or a general qualifier. See the
* introductory discussion of qualified properties for more information.
*/
public boolean getHasQualifiers()
{
return getOption(HAS_QUALIFIERS);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setHasQualifiers(boolean value)
{
setOption(HAS_QUALIFIERS, value);
return this;
}
/**
* @return Return whether this property is a qualifier for some other property. Note that if the
* qualifier itself has a structured value, this flag is only set for the top node of
* the qualifier's subtree. Qualifiers may have arbitrary structure, and may even have
* qualifiers.
*/
public boolean isQualifier()
{
return getOption(QUALIFIER);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setQualifier(boolean value)
{
setOption(QUALIFIER, value);
return this;
}
/** @return Return whether this property has an xml:lang qualifier. */
public boolean getHasLanguage()
{
return getOption(HAS_LANGUAGE);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setHasLanguage(boolean value)
{
setOption(HAS_LANGUAGE, value);
return this;
}
/** @return Return whether this property has an rdf:type qualifier. */
public boolean getHasType()
{
return getOption(HAS_TYPE);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setHasType(boolean value)
{
setOption(HAS_TYPE, value);
return this;
}
/** @return Return whether this property contains nested fields. */
public boolean isStruct()
{
return getOption(STRUCT);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setStruct(boolean value)
{
setOption(STRUCT, value);
return this;
}
/**
* @return Return whether this property is an array. By itself this indicates a general
* unordered array. It is serialized using an rdf:Bag container.
*/
public boolean isArray()
{
return getOption(ARRAY);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setArray(boolean value)
{
setOption(ARRAY, value);
return this;
}
/**
* @return Return whether this property is an ordered array. Appears in conjunction with
* getPropValueIsArray(). It is serialized using an rdf:Seq container.
*/
public boolean isArrayOrdered()
{
return getOption(ARRAY_ORDERED);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setArrayOrdered(boolean value)
{
setOption(ARRAY_ORDERED, value);
return this;
}
/**
* @return Return whether this property is an alternative array. Appears in conjunction with
* getPropValueIsArray(). It is serialized using an rdf:Alt container.
*/
public boolean isArrayAlternate()
{
return getOption(ARRAY_ALTERNATE);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setArrayAlternate(boolean value)
{
setOption(ARRAY_ALTERNATE, value);
return this;
}
/**
* @return Return whether this property is an alt-text array. Appears in conjunction with
* getPropArrayIsAlternate(). It is serialized using an rdf:Alt container.
* Each array element is a simple property with an xml:lang attribute.
*/
public boolean isArrayAltText()
{
return getOption(ARRAY_ALT_TEXT);
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setArrayAltText(boolean value)
{
setOption(ARRAY_ALT_TEXT, value);
return this;
}
/**
* @param value the value to set
* @return Returns this to enable cascaded options.
*/
/**
* @return Returns whether the SCHEMA_NODE option is set.
*/
public boolean isSchemaNode()
{
return getOption(SCHEMA_NODE);
}
/**
* @param value the option DELETE_EXISTING to set
* @return Returns this to enable cascaded options.
*/
public PropertyOptions setSchemaNode(boolean value)
{
setOption(SCHEMA_NODE, value);
return this;
}
//-------------------------------------------------------------------------- convenience methods
/**
* @return Returns whether the property is of composite type - an array or a struct.
*/
public boolean isCompositeProperty()
{
return (getOptions() & (ARRAY | STRUCT)) > 0;
}
/**
* @return Returns whether the property is of composite type - an array or a struct.
*/
public boolean isSimple()
{
return (getOptions() & (ARRAY | STRUCT)) == 0;
}
/**
* Compares two options set for array compatibility.
*
* @param options other options
* @return Returns true if the array options of the sets are equal.
*/
public boolean equalArrayTypes(PropertyOptions options)
{
return
isArray() == options.isArray() &&
isArrayOrdered() == options.isArrayOrdered() &&
isArrayAlternate() == options.isArrayAlternate() &&
isArrayAltText() == options.isArrayAltText();
}
/**
* Merges the set options of a another options object with this.
* If the other options set is null, this objects stays the same.
* @param options other options
* @throws XMPException If illegal options are provided
*/
public void mergeWith(PropertyOptions options) throws XMPException
{
if (options != null)
{
setOptions(getOptions() | options.getOptions());
}
}
/**
* @return Returns true if only array options are set.
*/
public boolean isOnlyArrayOptions()
{
return (getOptions() &
~(ARRAY | ARRAY_ORDERED | ARRAY_ALTERNATE | ARRAY_ALT_TEXT)) == 0;
}
/**
* @see Options#getValidOptions()
*/
protected int getValidOptions()
{
return
URI |
HAS_QUALIFIERS |
QUALIFIER |
HAS_LANGUAGE |
HAS_TYPE |
STRUCT |
ARRAY |
ARRAY_ORDERED |
ARRAY_ALTERNATE |
ARRAY_ALT_TEXT |
SCHEMA_NODE;
}
/**
* @see Options#defineOptionName(int)
*/
protected String defineOptionName(int option)
{
switch (option)
{
case URI : return "URI";
case HAS_QUALIFIERS : return "HAS_QUALIFIER";
case QUALIFIER : return "QUALIFIER";
case HAS_LANGUAGE : return "HAS_LANGUAGE";
case HAS_TYPE: return "HAS_TYPE";
case STRUCT : return "STRUCT";
case ARRAY : return "ARRAY";
case ARRAY_ORDERED : return "ARRAY_ORDERED";
case ARRAY_ALTERNATE : return "ARRAY_ALTERNATE";
case ARRAY_ALT_TEXT : return "ARRAY_ALT_TEXT";
case SCHEMA_NODE : return "SCHEMA_NODE";
default: return null;
}
}
/**
* Checks that a node not a struct and array at the same time;
* and URI cannot be a struct.
*
* @param options the bitmask to check.
* @throws XMPException Thrown if the options are not consistent.
*/
public void assertConsistency(int options) throws XMPException
{
if ((options & STRUCT) > 0 && (options & ARRAY) > 0)
{
throw new XMPException("IsStruct and IsArray options are mutually exclusive",
XMPError.BADOPTIONS);
}
else if ((options & URI) > 0 && (options & (ARRAY | STRUCT)) > 0)
{
throw new XMPException("Structs and arrays can't have \"value\" options",
XMPError.BADOPTIONS);
}
}
}