Package org.apache.padaf.xmpbox.schema

Source Code of org.apache.padaf.xmpbox.schema.PDFAValueTypeDescription$FieldDescriptionContainer

/*****************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
****************************************************************************/

package org.apache.padaf.xmpbox.schema;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;


import org.apache.padaf.xmpbox.XMPMetadata;
import org.apache.padaf.xmpbox.type.AbstractField;
import org.apache.padaf.xmpbox.type.Attribute;
import org.apache.padaf.xmpbox.type.ComplexPropertyContainer;
import org.apache.padaf.xmpbox.type.Elementable;
import org.apache.padaf.xmpbox.type.TextType;
import org.w3c.dom.Element;

/**
* Representation of a PDF/A Value type schema
*
* @author a183132
*
*/
public class PDFAValueTypeDescription implements Elementable {

  public static final String PDFATYPEPREFIX = "pdfaType";
  public static final String PDFATYPEPREFIXSEP = "pdfaType:";

  public static final String TYPE = "type";
  public static final String NS_URI = "namespaceURI";
  public static final String PREFIX = "prefix";
  public static final String DESCRIPTION = "description";
  public static final String FIELD = "field";

  protected FieldDescriptionContainer fields;
  protected XMPMetadata metadata;
  protected ComplexPropertyContainer content;

  /**
   * Build a new valuetype description
   *
   * @param metadata
   *            The metadata to attach this schema
   */
  public PDFAValueTypeDescription(XMPMetadata metadata) {
    this.metadata = metadata;
    content = new ComplexPropertyContainer(metadata, "rdf", "li");
    content
        .setAttribute(new Attribute(null, "rdf", "parseType",
            "Resource"));
    fields = new FieldDescriptionContainer();
    content.getElement().appendChild(fields.getElement());

  }

  /**
   * set the name of this valuetype
   *
   * @param name
   *            The value to set
   */
  public void setTypeNameValue(String name) {
    content.addProperty(new TextType(metadata, PDFATYPEPREFIX, TYPE, name));
  }

  /**
   * set the namespaceURI of this valueType
   *
   * @param nsURI
   *            The value to set
   */
  public void setNamespaceURIValue(String nsURI) {
    content.addProperty(new TextType(metadata, PDFATYPEPREFIX, NS_URI,
        nsURI));
  }

  /**
   * set the prefix of this valuetype
   *
   * @param prefix
   *            The value to set
   */
  public void setPrefixValue(String prefix) {
    content.addProperty(new TextType(metadata, PDFATYPEPREFIX, PREFIX,
        prefix));
  }

  /**
   * set the description of this property
   *
   * @param desc
   *            The value to set
   */
  public void setDescriptionValue(String desc) {
    content.addProperty(new TextType(metadata, PDFATYPEPREFIX, DESCRIPTION,
        desc));
  }

  /**
   * Get value type property value as a string
   *
   * @param qualifiedName
   *            the Name of property wanted
   * @return value of the property wanted which describe this property
   */
  private String getValueTypeProperty(String qualifiedName) {
    Iterator<AbstractField> it = content.getAllProperties().iterator();
    AbstractField tmp;
    while (it.hasNext()) {
      tmp = it.next();
      if (tmp.getQualifiedName().equals(qualifiedName)) {
        return ((TextType) tmp).getStringValue();
      }
    }
    return null;
  }

  /**
   * Return the current defined type name (in a string)
   *
   * @return the type value (so the name) given to this valuetype
   */
  public String getTypeNameValue() {
    return getValueTypeProperty(PDFATYPEPREFIXSEP + TYPE);
  }

  /**
   * Return the current nsURI (in a string)
   *
   * @return the namespace URI value
   */
  public String getNamespaceURIValue() {
    return getValueTypeProperty(PDFATYPEPREFIXSEP + NS_URI);
  }

  /**
   * Return the current prefix (in a string)
   *
   * @return The prefix value
   */
  public String getPrefixValue() {
    return getValueTypeProperty(PDFATYPEPREFIXSEP + PREFIX);
  }

  /**
   * Return the description of this valueType(in a string)
   *
   * @return the description value
   */
  public String getDescriptionValue() {
    return getValueTypeProperty(PDFATYPEPREFIXSEP + DESCRIPTION);
  }

  /**
   * Get value type property value as a TextType
   *
   * @param qualifiedName
   *            the name of the property wanted
   * @return the property wanted
   */
  private TextType getTypeProperty(String qualifiedName) {
    Iterator<AbstractField> it = content.getAllProperties().iterator();
    AbstractField tmp;
    while (it.hasNext()) {
      tmp = it.next();
      if (tmp.getQualifiedName().equals(qualifiedName)) {
        return (TextType) tmp;
      }
    }
    return null;
  }

  /**
   * Return the property corresponding to the type name definition
   *
   * @return the type property (or the property that define the name of this
   *         valuetype)
   */
  public TextType getTypeName() {
    return getTypeProperty(PDFATYPEPREFIXSEP + TYPE);
  }

  /**
   * Return the property corresponding to the Type namespaceURI definition
   *
   * @return the namespace URI property
   */
  public TextType getNamespaceURI() {
    return getTypeProperty(PDFATYPEPREFIXSEP + NS_URI);
  }

  /**
   * Return the property corresponding to the type prefix definition
   *
   * @return the prefix property
   */
  public TextType getPrefix() {
    return getTypeProperty(PDFATYPEPREFIXSEP + PREFIX);
  }

  /**
   * Return the property corresponding to the type description definition
   *
   * @return the description property
   */
  public TextType getDescription() {
    return getTypeProperty(PDFATYPEPREFIXSEP + DESCRIPTION);
  }

  /**
   * Give all Fields description embedded in this valuetype
   *
   * @return a list of Field defined for this valuetype
   */
  public List<PDFAFieldDescription> getFields() {
    return Collections.unmodifiableList(fields.fields);
  }

  /**
   * Add a field description to this valuetype
   *
   * @param name
   *            name of field
   * @param valueType
   *            valueType of field
   * @param description
   *            description of field
   * @return the Field property created
   */
  public PDFAFieldDescription addField(String name, String valueType,
      String description) {
    PDFAFieldDescription field = new PDFAFieldDescription(metadata);
    field.setNameValue(name);
    field.setValueTypeValue(valueType);
    field.setDescriptionValue(description);
    fields.addFieldDescription(field);
    return field;
  }

  /**
   * Add a Structured Field to this valueType
   *
   * @param field
   *            the field to add to this valueType
   */
  public void addField(PDFAFieldDescription field) {
    fields.addFieldDescription(field);
  }

  /**
   * Get Dom Element for xml/rdf serialization
   *
   * @return the DOM element
   */
  public Element getElement() {
    return content.getElement();
  }

  /**
   * Container of Field Description
   *
   * @author a183132
   *
   */
  public class FieldDescriptionContainer implements Elementable {

    protected Element element, content;
    protected List<PDFAFieldDescription> fields;

    /**
     *
     * PDF/A Field Description Container constructor
     */
    public FieldDescriptionContainer() {
      element = metadata.getFuturOwner().createElement(
          PDFAExtensionSchema.PDFATYPESEP + FIELD);
      content = metadata.getFuturOwner().createElement("rdf:Seq");
      element.appendChild(content);

      fields = new ArrayList<PDFAFieldDescription>();
    }

    /**
     * Add a PDF/A Field Description to the current structure
     *
     * @param obj
     *            the field to add
     */
    public void addFieldDescription(PDFAFieldDescription obj) {
      if (containsFieldDescription(obj)) {
        removeFieldDescription(obj);
      }
      fields.add(obj);
      content.appendChild(obj.content.getElement());
    }

    /**
     * access to all PDF/A Field Descriptions
     *
     * @return an Iterator on all PDF/A Field Descriptions declared
     */
    public Iterator<PDFAFieldDescription> getAllFieldDescription() {
      return fields.iterator();
    }

    /**
     * Check if two PDF/A Field Descriptions are similar
     *
     * @param prop1
     *            the first PDF/A Field Description
     * @param prop2
     *            the second PDF/A Field Description
     * @return comparison result
     */
    public boolean isSameFieldDescription(PDFAFieldDescription prop1,
        PDFAFieldDescription prop2) {
      if (prop1.getClass().equals(prop2.getClass())) {
        if (prop1.content.getElement().getTextContent().equals(
            prop2.content.getElement().getTextContent())) {
          return true;
        }
      }
      return false;
    }

    /**
     * Check if a specified PDF/A Field Description is embedded
     *
     * @param field
     *            PDF/A field Description
     * @return result
     */
    public boolean containsFieldDescription(PDFAFieldDescription field) {
      Iterator<PDFAFieldDescription> it = getAllFieldDescription();
      PDFAFieldDescription tmp;
      while (it.hasNext()) {
        tmp = it.next();
        if (isSameFieldDescription(tmp, field)) {
          return true;
        }
      }
      return false;
    }

    /**
     * Remove a PDF/A Field description
     *
     * @param field
     *            the PDF/A Field Description
     */
    public void removeFieldDescription(PDFAFieldDescription field) {
      if (containsFieldDescription(field)) {
        fields.remove(field);
        content.removeChild(field.content.getElement());
      }
    }

    /**
     * Get Dom Element for xml/rdf serialization
     *
     * @return the DOM element
     */
    public Element getElement() {
      return element;
    }

  }

}
TOP

Related Classes of org.apache.padaf.xmpbox.schema.PDFAValueTypeDescription$FieldDescriptionContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.