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.XMPError;
13f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport com.adobe.xmp.XMPException;
14f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
15f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
16f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling/**
17f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The property flags are used when properties are fetched from the <code>XMPMeta</code>-object
18f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * and provide more detailed information about the property.
19f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling *
20f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * @since   03.07.2006
21f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */
22f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpublic final class PropertyOptions extends Options
23f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling{
24f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
25f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int NO_OPTIONS = 0x00000000;
26f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
27f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int URI = 0x00000002;
28f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
29f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int HAS_QUALIFIERS = 0x00000010;
30f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
31f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int QUALIFIER = 0x00000020;
32f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
33f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int HAS_LANGUAGE = 0x00000040;
34f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
35f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int HAS_TYPE = 0x00000080;
36f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
37f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int STRUCT = 0x00000100;
38f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
39f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ARRAY = 0x00000200;
40f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
41f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ARRAY_ORDERED = 0x00000400;
42f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
43f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ARRAY_ALTERNATE = 0x00000800;
44f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
45f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int ARRAY_ALT_TEXT = 0x00001000;
46f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** */
47f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int SCHEMA_NODE = 0x80000000;
48f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** may be used in the future */
49f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public static final int DELETE_EXISTING = 0x20000000;
50f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
51f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
52f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
53f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Default constructor
54f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
55f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions()
56f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
57f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		// reveal default constructor
58f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
59f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
60f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
61f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
62f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Intialization constructor
63f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *
64f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param options the initialization options
65f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @throws XMPException If the options are not valid
66f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
67f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions(int options) throws XMPException
68f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
69f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		super(options);
70f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
71f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
72f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
73f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
74f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether the property value is a URI. It is serialized to RDF using the
75f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         <tt>rdf:resource</tt> attribute. Not mandatory for URIs, but considered RDF-savvy.
76f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
77f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isURI()
78f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
79f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(URI);
80f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
81f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
82f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
83f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
84f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
85f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
86f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
87f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setURI(boolean value)
88f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
89f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(URI, value);
90f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
91f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
92f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
93f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
94f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
95f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether the property has qualifiers. These could be an <tt>xml:lang</tt>
96f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         attribute, an <tt>rdf:type</tt> property, or a general qualifier. See the
97f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         introductory discussion of qualified properties for more information.
98f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
99f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getHasQualifiers()
100f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
101f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(HAS_QUALIFIERS);
102f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
103f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
104f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
105f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
106f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
107f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
108f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
109f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setHasQualifiers(boolean value)
110f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
111f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(HAS_QUALIFIERS, value);
112f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
113f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
114f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
115f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
116f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
117f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether this property is a qualifier for some other property. Note that if the
118f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         qualifier itself has a structured value, this flag is only set for the top node of
119f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         the qualifier's subtree. Qualifiers may have arbitrary structure, and may even have
120f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         qualifiers.
121f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
122f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isQualifier()
123f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
124f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(QUALIFIER);
125f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
126f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
127f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
128f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
129f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
130f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
131f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
132f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setQualifier(boolean value)
133f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
134f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(QUALIFIER, value);
135f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
136f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
137f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
138f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
139f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Return whether this property has an <tt>xml:lang</tt> qualifier. */
140f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getHasLanguage()
141f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
142f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(HAS_LANGUAGE);
143f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
144f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
145f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
146f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
147f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
148f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
149f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
150f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setHasLanguage(boolean value)
151f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
152f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(HAS_LANGUAGE, value);
153f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
154f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
155f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
156f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
157f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Return whether this property has an <tt>rdf:type</tt> qualifier. */
158f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean getHasType()
159f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
160f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(HAS_TYPE);
161f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
162f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
163f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
164f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
165f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
166f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
167f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
168f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setHasType(boolean value)
169f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
170f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(HAS_TYPE, value);
171f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
172f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
173f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
174f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
175f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Return whether this property contains nested fields. */
176f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isStruct()
177f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
178f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(STRUCT);
179f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
180f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
181f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
182f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
183f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
184f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
185f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
186f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setStruct(boolean value)
187f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
188f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(STRUCT, value);
189f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
190f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
191f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
192f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
193f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
194f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether this property is an array. By itself this indicates a general
195f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         unordered array. It is serialized using an <tt>rdf:Bag</tt> container.
196f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
197f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isArray()
198f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
199f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(ARRAY);
200f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
201f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
202f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
203f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
204f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
205f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
206f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
207f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setArray(boolean value)
208f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
209f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ARRAY, value);
210f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
211f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
212f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
213f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
214f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
215f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether this property is an ordered array. Appears in conjunction with
216f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         getPropValueIsArray(). It is serialized using an <tt>rdf:Seq</tt> container.
217f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
218f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isArrayOrdered()
219f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
220f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(ARRAY_ORDERED);
221f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
222f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
223f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
224f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
225f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
226f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
227f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
228f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setArrayOrdered(boolean value)
229f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
230f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ARRAY_ORDERED, value);
231f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
232f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
233f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
234f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
235f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
236f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether this property is an alternative array. Appears in conjunction with
237f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         getPropValueIsArray(). It is serialized using an <tt>rdf:Alt</tt> container.
238f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
239f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isArrayAlternate()
240f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
241f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(ARRAY_ALTERNATE);
242f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
243f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
244f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
245f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
246f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
247f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
248f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
249f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setArrayAlternate(boolean value)
250f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
251f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ARRAY_ALTERNATE, value);
252f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
253f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
254f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
255f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
256f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
257f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Return whether this property is an alt-text array. Appears in conjunction with
258f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         getPropArrayIsAlternate(). It is serialized using an <tt>rdf:Alt</tt> container.
259f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *         Each array element is a simple property with an <tt>xml:lang</tt> attribute.
260f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
261f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isArrayAltText()
262f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
263f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(ARRAY_ALT_TEXT);
264f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
265f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
266f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
267f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
268f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
269f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
270f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
271f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setArrayAltText(boolean value)
272f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
273f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(ARRAY_ALT_TEXT, value);
274f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
275f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
276f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
277f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
278f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
279f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the value to set
280f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
281f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
282f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
283f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
284f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
285f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns whether the SCHEMA_NODE option is set.
286f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
287f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isSchemaNode()
288f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
289f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return getOption(SCHEMA_NODE);
290f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
291f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
292f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
293f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
294f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param value the option DELETE_EXISTING to set
295f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns this to enable cascaded options.
296f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
297f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public PropertyOptions setSchemaNode(boolean value)
298f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
299f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		setOption(SCHEMA_NODE, value);
300f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return this;
301f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
302f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
303f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
304f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	//-------------------------------------------------------------------------- convenience methods
305f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
306f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
307f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns whether the property is of composite type - an array or a struct.
308f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
309f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isCompositeProperty()
310f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
311f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return (getOptions() & (ARRAY | STRUCT)) > 0;
312f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
313f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
314f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
315f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
316f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns whether the property is of composite type - an array or a struct.
317f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
318f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isSimple()
319f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
320f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return (getOptions() & (ARRAY | STRUCT)) == 0;
321f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
322f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
323f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
324f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
325f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Compares two options set for array compatibility.
326f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *
327f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param options other options
328f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns true if the array options of the sets are equal.
329f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
330f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean equalArrayTypes(PropertyOptions options)
331f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
332f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return
333f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			isArray()			== options.isArray()  			&&
334f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			isArrayOrdered()	== options.isArrayOrdered()  	&&
335f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			isArrayAlternate()	== options.isArrayAlternate()	&&
336f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			isArrayAltText()	== options.isArrayAltText();
337f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
338f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
339f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
340f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
341f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
342f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Merges the set options of a another options object with this.
343f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * If the other options set is null, this objects stays the same.
344f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param options other options
345f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @throws XMPException If illegal options are provided
346f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
347f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public void mergeWith(PropertyOptions options) throws XMPException
348f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
349f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		if (options != null)
350f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
351f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			setOptions(getOptions() | options.getOptions());
352f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
353f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
354f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
355f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
356f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
357f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns true if only array options are set.
358f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
359f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public boolean isOnlyArrayOptions()
360f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
361f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return (getOptions() &
362f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			~(ARRAY | ARRAY_ORDERED | ARRAY_ALTERNATE | ARRAY_ALT_TEXT)) == 0;
363f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
364f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
365f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
366f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
367f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @see Options#getValidOptions()
368f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
369f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	protected int getValidOptions()
370f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
371f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		return
372f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			URI |
373f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			HAS_QUALIFIERS |
374f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			QUALIFIER |
375f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			HAS_LANGUAGE |
376f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			HAS_TYPE |
377f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			STRUCT |
378f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			ARRAY |
379f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			ARRAY_ORDERED |
380f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			ARRAY_ALTERNATE |
381f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			ARRAY_ALT_TEXT |
382f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			SCHEMA_NODE;
383f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
384f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
385f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
386f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
387f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @see Options#defineOptionName(int)
388f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
389f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	protected String defineOptionName(int option)
390f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
391f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		switch (option)
392f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
393f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case URI : 				return "URI";
394f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case HAS_QUALIFIERS :	return "HAS_QUALIFIER";
395f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case QUALIFIER :		return "QUALIFIER";
396f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case HAS_LANGUAGE :		return "HAS_LANGUAGE";
397f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case HAS_TYPE:			return "HAS_TYPE";
398f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case STRUCT :			return "STRUCT";
399f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case ARRAY :			return "ARRAY";
400f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case ARRAY_ORDERED :	return "ARRAY_ORDERED";
401f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case ARRAY_ALTERNATE :	return "ARRAY_ALTERNATE";
402f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case ARRAY_ALT_TEXT : 	return "ARRAY_ALT_TEXT";
403f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			case SCHEMA_NODE : 		return "SCHEMA_NODE";
404f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			default: 				return null;
405f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
406f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
407f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
408f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
409f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
410f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * Checks that a node not a struct and array at the same time;
411f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * and URI cannot be a struct.
412f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *
413f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param options the bitmask to check.
414f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @throws XMPException Thrown if the options are not consistent.
415f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
416f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	public void assertConsistency(int options) throws XMPException
417f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	{
418f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		if ((options & STRUCT) > 0  &&  (options & ARRAY) > 0)
419f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
420f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			throw new XMPException("IsStruct and IsArray options are mutually exclusive",
421f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling					XMPError.BADOPTIONS);
422f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
423f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		else if ((options & URI) > 0  &&  (options & (ARRAY | STRUCT)) > 0)
424f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		{
425f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling			throw new XMPException("Structs and arrays can't have \"value\" options",
426f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling				XMPError.BADOPTIONS);
427f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling		}
428f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	}
429f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling}