Package org.apache.padaf.xmpbox.schema

Source Code of org.apache.padaf.xmpbox.schema.PDFAPropertyDescription

/*****************************************************************************
*
* 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.Iterator;


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.BadFieldValueException;
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 property type schema
*
* @author a183132
*
*/
public class PDFAPropertyDescription implements Elementable {

  public static final String PDFAPROPPREFIX = "pdfaProperty";
  public static final String PDFAPROPPREFIXSEP = "pdfaProperty:";

  public static final String NAME = "name";
  public static final String VALUETYPE = "valueType";
  public static final String CATEGORY = "category";
  public static final String DESCRIPTION = "description";

  protected XMPMetadata metadata;
  protected ComplexPropertyContainer content;

  /**
   * Build a new property description
   *
   * @param metadata
   *            The metadata to attach this schema
   */
  public PDFAPropertyDescription(XMPMetadata metadata) {
    this.metadata = metadata;
    content = new ComplexPropertyContainer(metadata, "rdf", "li");
    content
        .setAttribute(new Attribute(null, "rdf", "parseType",
            "Resource"));
  }

  /**
   * set the name of this property
   *
   * @param name
   *            The value to set
   */
  public void setNameValue(String name) {
    content.addProperty(new TextType(metadata, PDFAPROPPREFIX, NAME, name));
  }

  /**
   * set the value type of this property
   *
   * @param type
   *            The value to set
   */
  public void setValueTypeValue(String type) {
    content.addProperty(new TextType(metadata, PDFAPROPPREFIX, VALUETYPE,
        type));
  }

  /**
   * set the category of this property
   *
   * @param category
   *            The value to set
   * @throws BadFieldValueException
   *             if category value not 'internal' or 'external'
   */
  public void setCategoryValue(String category) throws BadFieldValueException {
    if (category.equals("external") || category.equals("internal")) {
      content.addProperty(new TextType(metadata, PDFAPROPPREFIX,
          CATEGORY, category));
    } else {
      throw new BadFieldValueException(
          "Unexpected value '"
              + category
              + "' for property category (only values 'internal' or 'external' are allowed)");
    }
  }

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

  /**
   * Get the property value
   *
   * @param qualifiedName
   *            the name of property wanted
   * @return property value
   */
  private String getPropertyValue(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 name (in a string)
   *
   * @return the name value defined for this property
   */
  public String getNameValue() {
    return getPropertyValue(PDFAPROPPREFIXSEP + NAME);
  }

  /**
   * Return the current ValueType (in a string)
   *
   * @return the valueType value defined for this property
   */
  public String getValueTypeValue() {
    return getPropertyValue(PDFAPROPPREFIXSEP + VALUETYPE);
  }

  /**
   * Return the current category (in a string)
   *
   * @return the category value defined for this property
   */
  public String getCategoryValue() {
    return getPropertyValue(PDFAPROPPREFIXSEP + CATEGORY);
  }

  /**
   * Return the current description (in a string)
   *
   * @return the description value defined for this property
   */
  public String getDescriptionValue() {
    return getPropertyValue(PDFAPROPPREFIXSEP + DESCRIPTION);
  }

  /**
   * Get a property from its qualified name as a TextType object
   *
   * @param qualifiedName
   *            the Name of property wanted
   * @return the property wanted
   */
  private TextType getProperty(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 property name definition
   *
   * @return the Name property defined for this PropertyDescription
   */
  public TextType getName() {
    return getProperty(PDFAPROPPREFIXSEP + NAME);
  }

  /**
   * Return the property corresponding to the property valueType definition
   *
   * @return the ValueType property defined for this PropertyDescription
   */
  public TextType getValueType() {
    return getProperty(PDFAPROPPREFIXSEP + VALUETYPE);
  }

  /**
   * Return the property corresponding to the property category definition
   *
   * @return the Category property defined for this PropertyDescription
   */
  public TextType getCategory() {
    return getProperty(PDFAPROPPREFIXSEP + CATEGORY);
  }

  /**
   * Return the property corresponding to the property description definition
   *
   * @return the Description property defined for this PropertyDescription
   */
  public TextType getDescription() {
    return getProperty(PDFAPROPPREFIXSEP + DESCRIPTION);
  }

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

Related Classes of org.apache.padaf.xmpbox.schema.PDFAPropertyDescription

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.