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}