Class XMPSchema

Direct Known Subclasses:
AdobePDFSchema, DublinCoreSchema, ExifSchema, PDFAExtensionSchema, PDFAIdentificationSchema, PhotoshopSchema, TiffSchema, XMPageTextSchema, XMPBasicJobTicketSchema, XMPBasicSchema, XMPMediaManagementSchema, XMPRightsManagementSchema

public class XMPSchema extends AbstractStructuredType
This class represents a metadata schema that can be stored in an XMP document. It handles all generic properties that are available. See subclasses for access to specific properties. MODIFIED TO INCLUDE OBJECT REPRESENTATION
  • Constructor Details

    • XMPSchema

      public XMPSchema(XMPMetadata metadata, String namespaceURI, String prefix, String name)
      Create a new blank schema that can be populated.
      Parameters:
      metadata - The parent XMP metadata that this schema will be part of.
      namespaceURI - The URI of the namespace, e.g. "http://ns.adobe.com/pdf/1.3/"
      prefix - The field prefix of the namespace.
      name - The property name.
    • XMPSchema

      public XMPSchema(XMPMetadata metadata)
      Create a new blank schema that can be populated.
      Parameters:
      metadata - The parent XMP metadata that this schema will be part of.
    • XMPSchema

      public XMPSchema(XMPMetadata metadata, String prefix)
      Create a new blank schema that can be populated.
      Parameters:
      metadata - The parent XMP metadata that this schema will be part of.
      prefix - The field prefix of the namespace.
    • XMPSchema

      public XMPSchema(XMPMetadata metadata, String namespaceURI, String prefix)
      Create a new blank schema that can be populated.
      Parameters:
      metadata - The parent XMP metadata that this schema will be part of.
      namespaceURI - The URI of the namespace, e.g. "http://ns.adobe.com/pdf/1.3/"
      prefix - The field prefix of the namespace.
  • Method Details

    • getAbstractProperty

      public AbstractField getAbstractProperty(String qualifiedName)
      Retrieve a generic simple type property
      Parameters:
      qualifiedName - Full qualified name of property wanted
      Returns:
      The generic simple type property according to its qualified name
    • getAboutAttribute

      public Attribute getAboutAttribute()
      Get the RDF about attribute
      Returns:
      The RDF 'about' attribute.
    • getAboutValue

      public String getAboutValue()
      Get the RDF about value.
      Returns:
      The RDF 'about' value. If there is no rdf:about attribute, an empty string is returned.
    • setAbout

      public void setAbout(Attribute about) throws BadFieldValueException
      Set the RDF 'about' attribute
      Parameters:
      about - the well-formed attribute
      Throws:
      BadFieldValueException - Bad Attribute name (not corresponding to about attribute)
    • setAboutAsSimple

      public void setAboutAsSimple(String about)
      Set the RDF 'about' attribute. Passing in null will clear this attribute.
      Parameters:
      about - The new RFD about value.
    • setSpecifiedSimpleTypeProperty

      private void setSpecifiedSimpleTypeProperty(Types type, String qualifiedName, Object propertyValue)
    • setSpecifiedSimpleTypeProperty

      private void setSpecifiedSimpleTypeProperty(AbstractSimpleProperty prop)
      Add a SimpleProperty to this schema
      Parameters:
      prop - The Property to add
    • setTextProperty

      public void setTextProperty(TextType prop)
      Set TextType property
      Parameters:
      prop - The text property to add
    • setTextPropertyValue

      public void setTextPropertyValue(String qualifiedName, String propertyValue)
      Set a simple text property on the schema.
      Parameters:
      qualifiedName - The name of the property, it must contain the namespace prefix, ie "pdf:Keywords"
      propertyValue - The value for the property, can be any string. Passing null will remove the property.
    • setTextPropertyValueAsSimple

      public void setTextPropertyValueAsSimple(String simpleName, String propertyValue)
      Set a simple text property on the schema, using the current prefix.
      Parameters:
      simpleName - the name of the property without prefix
      propertyValue - The value for the property, can be any string. Passing null will remove the property.
    • getUnqualifiedTextProperty

      public TextType getUnqualifiedTextProperty(String name)
      Get a TextProperty Type from its name
      Parameters:
      name - The property name.
      Returns:
      The Text Type property wanted
    • getUnqualifiedTextPropertyValue

      public String getUnqualifiedTextPropertyValue(String name)
      Get the value of a simple text property.
      Parameters:
      name - The property name.
      Returns:
      The value of the text property or null if there is no value.
    • getDateProperty

      public DateType getDateProperty(String qualifiedName)
      Get the Date property with its name
      Parameters:
      qualifiedName - The name of the property to get, it must include the namespace prefix, e.g. "pdf:Keywords".
      Returns:
      Date Type property
    • getDatePropertyValueAsSimple

      public Calendar getDatePropertyValueAsSimple(String simpleName)
      Get a simple date property value on the schema, using the current prefix.
      Parameters:
      simpleName - the local name of the property to get
      Returns:
      The value of the property as a calendar.
    • getDatePropertyValue

      public Calendar getDatePropertyValue(String qualifiedName)
      Get the value of the property as a date.
      Parameters:
      qualifiedName - The fully qualified property name for the date.
      Returns:
      The value of the property as a date.
    • setDateProperty

      public void setDateProperty(DateType date)
      Set a new DateProperty
      Parameters:
      date - The DateType Property
    • setDatePropertyValueAsSimple

      public void setDatePropertyValueAsSimple(String simpleName, Calendar date)
      Set a simple Date property on the schema, using the current prefix.
      Parameters:
      simpleName - the name of the property without prefix
      date - The calendar value for the property, can be any string. Passing null will remove the property.
    • setDatePropertyValue

      public void setDatePropertyValue(String qualifiedName, Calendar date)
      Set the value of the property as a date.
      Parameters:
      qualifiedName - The fully qualified property name for the date.
      date - The date to set, or null to clear.
    • getBooleanProperty

      public BooleanType getBooleanProperty(String qualifiedName)
      Get a BooleanType property with its name
      Parameters:
      qualifiedName - the full qualified name of property wanted
      Returns:
      boolean Type property
    • getBooleanPropertyValueAsSimple

      public Boolean getBooleanPropertyValueAsSimple(String simpleName)
      Get a simple boolean property value on the schema, using the current prefix.
      Parameters:
      simpleName - the local name of property wanted
      Returns:
      The value of the property as a boolean or null if the property does not exist.
    • getBooleanPropertyValue

      public Boolean getBooleanPropertyValue(String qualifiedName)
      Get the value of the property as a Boolean. If you want to use this value like a condition, you must do a null check before.
      Parameters:
      qualifiedName - The fully qualified property name for the Boolean.
      Returns:
      The value of the property as a Boolean, or null if the property does not exist.
    • setBooleanProperty

      public void setBooleanProperty(BooleanType bool)
      Set a BooleanType property
      Parameters:
      bool - the booleanType property
    • setBooleanPropertyValueAsSimple

      public void setBooleanPropertyValueAsSimple(String simpleName, Boolean bool)
      Set a simple Boolean property on the schema, using the current prefix.
      Parameters:
      simpleName - the name of the property without prefix
      bool - The value for the property, can be any string. Passing null will remove the property.
    • setBooleanPropertyValue

      public void setBooleanPropertyValue(String qualifiedName, Boolean bool)
      Set the value of the property as a boolean.
      Parameters:
      qualifiedName - The fully qualified property name for the boolean.
      bool - The boolean to set, or null to clear.
    • getIntegerProperty

      public IntegerType getIntegerProperty(String qualifiedName)
      Get the Integer property with its name
      Parameters:
      qualifiedName - the full qualified name of property wanted
      Returns:
      Integer Type property
    • getIntegerPropertyValueAsSimple

      public Integer getIntegerPropertyValueAsSimple(String simpleName)
      Get a simple integer property value on the schema, using the current prefix.
      Parameters:
      simpleName - the local name of property wanted
      Returns:
      The value of the property as an integer.
    • getIntegerPropertyValue

      public Integer getIntegerPropertyValue(String qualifiedName)
      Get the value of the property as an integer.
      Parameters:
      qualifiedName - The fully qualified property name for the integer.
      Returns:
      The value of the property as an integer.
    • setIntegerProperty

      public void setIntegerProperty(IntegerType prop)
      Add an integerProperty
      Parameters:
      prop - The Integer Type property
    • setIntegerPropertyValueAsSimple

      public void setIntegerPropertyValueAsSimple(String simpleName, Integer intValue)
      Set a simple Integer property on the schema, using the current prefix.
      Parameters:
      simpleName - the name of the property without prefix
      intValue - The value for the property, can be any string. Passing null will remove the property.
    • setIntegerPropertyValue

      public void setIntegerPropertyValue(String qualifiedName, Integer intValue)
      Set the value of the property as an integer.
      Parameters:
      qualifiedName - The fully qualified property name for the integer.
      intValue - The int to set, or null to clear.
    • removeUnqualifiedArrayValue

      private void removeUnqualifiedArrayValue(String arrayName, String fieldValue)
      Generic array property removing
      Parameters:
      fieldValue - the field value
    • removeUnqualifiedBagValue

      public void removeUnqualifiedBagValue(String bagName, String bagValue)
      Remove all matching entries with the given value from the bag.
      Parameters:
      bagName - The bag name.
      bagValue - The value to remove from the bagList.
    • addBagValueAsSimple

      public void addBagValueAsSimple(String simpleName, String bagValue)
      add a bag value property on the schema, using the current prefix.
      Parameters:
      simpleName - the local name of property
      bagValue - the string value to add
    • internalAddBagValue

      private void internalAddBagValue(String qualifiedBagName, String bagValue)
    • addQualifiedBagValue

      public void addQualifiedBagValue(String simpleName, String bagValue)
      Add an entry to a bag property.
      Parameters:
      simpleName - The name of the bag without the namespace prefix
      bagValue - The value to add to the bagList.
    • getUnqualifiedBagValueList

      public List<String> getUnqualifiedBagValueList(String bagName)
      Get all the values of the bag property. This will return a list of java.lang.String objects, this is a read-only list.
      Parameters:
      bagName - The bag name.
      Returns:
      All values of the bag property in a list.
    • removeUnqualifiedSequenceValue

      public void removeUnqualifiedSequenceValue(String qualifiedSeqName, String seqValue)
      Remove all matching values from a sequence property.
      Parameters:
      qualifiedSeqName - The name of the sequence property. It must include the namespace prefix, e.g. "pdf:Keywords".
      seqValue - The value to remove from the list.
    • removeUnqualifiedArrayValue

      public void removeUnqualifiedArrayValue(String arrayName, AbstractField fieldValue)
      Generic method to remove a field from an array with an Elementable Object
      Parameters:
      arrayName - the name of the property concerned
      fieldValue - the elementable field value
    • removeUnqualifiedSequenceValue

      public void removeUnqualifiedSequenceValue(String qualifiedSeqName, AbstractField seqValue)
      Remove a value from a sequence property. This will remove all entries from the list.
      Parameters:
      qualifiedSeqName - The name of the sequence property. It must include the namespace prefix, e.g. "pdf:Keywords".
      seqValue - The value to remove from the list.
    • addUnqualifiedSequenceValue

      public void addUnqualifiedSequenceValue(String simpleSeqName, String seqValue)
      Add a new value to a sequence property.
      Parameters:
      simpleSeqName - The name of the sequence property without the namespace prefix
      seqValue - The value to add to the sequence.
    • addBagValue

      public void addBagValue(String qualifiedSeqName, AbstractField seqValue)
      Add a new value to a bag property.
      Parameters:
      qualifiedSeqName - The name of the sequence property, it must include the namespace prefix, e.g. "pdf:Keywords"
      seqValue - The value to add to the bag.
    • addUnqualifiedSequenceValue

      public void addUnqualifiedSequenceValue(String seqName, AbstractField seqValue)
      Add a new value to a sequence property.
      Parameters:
      seqName - The name of the sequence property, it must include the namespace prefix, e.g. "pdf:Keywords"
      seqValue - The value to add to the sequence.
    • getUnqualifiedSequenceValueList

      public List<String> getUnqualifiedSequenceValueList(String seqName)
      Get all the values in a sequence property.
      Parameters:
      seqName - The name of the sequence property without namespace prefix.
      Returns:
      A read-only list of java.lang.String objects or null if the property does not exist.
    • removeUnqualifiedSequenceDateValue

      public void removeUnqualifiedSequenceDateValue(String seqName, Calendar date)
      Remove a date sequence value from the list.
      Parameters:
      seqName - The name of the sequence property, it must include the namespace prefix, e.g. "pdf:Keywords"
      date - The date to remove from the sequence property.
    • addSequenceDateValueAsSimple

      public void addSequenceDateValueAsSimple(String simpleName, Calendar date)
      Add a date sequence value to the list using the current prefix
      Parameters:
      simpleName - the local name of the property
      date - the value to add
    • addUnqualifiedSequenceDateValue

      public void addUnqualifiedSequenceDateValue(String seqName, Calendar date)
      Add a date sequence value to the list.
      Parameters:
      seqName - The name of the sequence property, it must include the namespace prefix, e.g. "pdf:Keywords"
      date - The date to add to the sequence property.
    • getUnqualifiedSequenceDateValueList

      public List<Calendar> getUnqualifiedSequenceDateValueList(String seqName)
      Get all the date values in a sequence property.
      Parameters:
      seqName - The name of the sequence property, it must include the namespace prefix, e.g. "pdf:Keywords".
      Returns:
      A read-only list of java.util.Calendar objects or null if the property does not exist.
    • reorganizeAltOrder

      public void reorganizeAltOrder(ComplexPropertyContainer alt)
      Method used to place the 'x-default' value in first in Language alternatives as said in xmp spec
      Parameters:
      alt - The property to reorganize
    • setUnqualifiedLanguagePropertyValue

      public void setUnqualifiedLanguagePropertyValue(String name, String language, String value)
      Set the value of a multi-lingual property.
      Parameters:
      name - The name of the property, it must include the namespace prefix, e.g. "pdf:Keywords"
      language - The language code of the value. If null then "x-default" is assumed.
      value - The value of the property in the specified language.
    • getUnqualifiedLanguagePropertyValue

      public String getUnqualifiedLanguagePropertyValue(String name, String expectedLanguage)
      Get the value of a multi-lingual property.
      Parameters:
      name - The name of the property, without the namespace prefix.
      expectedLanguage - The language code of the value. If null then "x-default" is assumed.
      Returns:
      The value of the language property.
    • getUnqualifiedLanguagePropertyLanguagesValue

      public List<String> getUnqualifiedLanguagePropertyLanguagesValue(String name)
      Get a list of all languages that are currently defined for a specific property.
      Parameters:
      name - The name of the property, it must include the namespace prefix, e.g. "pdf:Keywords".
      Returns:
      A list of all languages, this will return an non-null empty list if none have been defined, and null if the property doesn't exist.
    • merge

      public void merge(XMPSchema xmpSchema) throws IOException
      A basic schema merge, it merges bags and sequences and replace everything else.
      Parameters:
      xmpSchema - The schema to merge.
      Throws:
      IOException - If there is an error during the merge.
    • mergeComplexProperty

      private boolean mergeComplexProperty(Iterator<AbstractField> itNewValues, ArrayProperty arrayProperty)
    • getUnqualifiedArrayList

      public List<AbstractField> getUnqualifiedArrayList(String name) throws BadFieldValueException
      Get an AbstractField list corresponding to the content of an array property.
      Parameters:
      name - The property name without namespace.
      Returns:
      List of properties contained in the array property.
      Throws:
      BadFieldValueException - If the property with the requested name isn't an array.
    • instanciateSimple

      protected AbstractSimpleProperty instanciateSimple(String propertyName, Object value)