class PDFAIdentificationSchema extends XMPSchema
{

    @PropertyType(type = Types.Integer, card = Cardinality.Simple)
    public static final String PART = "part";

    @PropertyType(type = Types.Text, card = Cardinality.Simple)
    public static final String AMD = "amd";

    @PropertyType(type = Types.Text, card = Cardinality.Simple)
    public static final String CONFORMANCE = "conformance";

    /*
     * <rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">
     * <pdfaid:conformance>B</pdfaid:conformance> <pdfaid:part>1</pdfaid:part> </rdf:Description>
     */

    /**
     * Constructor of a PDF/A Identification schema
     * 
     * @param metadata
     *            The metadata to attach this schema
     */
    public PDFAIdentificationSchema(XMPMetadata metadata)
    {
        super(metadata);
    }

    public PDFAIdentificationSchema(XMPMetadata metadata, String prefix)
    {
        super(metadata, prefix);
    }

    /**
     * Set the PDFA Version identifier (with string)
     * 
     * @param value
     *            The version Id value to set
     * 
     */
    public void setPartValueWithString(String value)
    {
        IntegerType part = (IntegerType) instanciateSimple(PART, value);
        addProperty(part);
    }

    /**
     * Set the PDFA Version identifier (with an int)
     * 
     * @param value
     *            The version Id value to set
     */
    public void setPartValueWithInt(int value)
    {
        IntegerType part = (IntegerType) instanciateSimple(PART, value);
        addProperty(part);
    }

    /**
     * Set the PDF/A Version identifier (with an int)
     * 
     * @param value
     *            The version Id property to set
     */
    public void setPart(Integer value)
    {
        setPartValueWithInt(value);
    }

    /**
     * Set the PDF/A Version identifier
     * 
     * @param part
     *            set the PDF/A Version id property
     */
    public void setPartProperty(IntegerType part)
    {
        addProperty(part);
    }

    /**
     * Set the PDF/A amendment identifier
     * 
     * @param value
     *            The amendment identifier value to set
     */
    public void setAmd(String value)
    {
        TextType amd = createTextType(AMD, value);
        addProperty(amd);
    }

    /**
     * Set the PDF/A amendment identifier
     * 
     * @param amd
     *            The amendment identifier property to set
     */
    public void setAmdProperty(TextType amd)
    {
        addProperty(amd);
    }

    /**
     * Set the PDF/A conformance level
     * 
     * @param value
     *            The conformance level value to set
     * @throws BadFieldValueException
     *             If Conformance Value not 'A', 'B' or 'U' (PDF/A-2 and PDF/A-3)
     */
    public void setConformance(String value) throws BadFieldValueException
    {
        if (value.equals("A") || value.equals("B") || value.equals("U"))
        {
            TextType conf = createTextType(CONFORMANCE, value);
            addProperty(conf);

        }
        else
        {
            throw new BadFieldValueException(
                    "The property given not seems to be a PDF/A conformance level (must be A, B or U)");
        }
    }

    /**
     * Set the PDF/A conformance level
     * 
     * @param conf
     *            The conformance level property to set
     * @throws BadFieldValueException
     *             If Conformance Value not 'A', 'B' or 'U' (PDF/A-2 and PDF/A-3)
     */
    public void setConformanceProperty(TextType conf) throws BadFieldValueException
    {<FILL_FUNCTION_BODY>}

    /**
     * Give the PDFAVersionId (as an integer)
     * 
     * @return Part value (Integer) or null if it is missing
     */
    public Integer getPart()
    {
        IntegerType tmp = getPartProperty();
        if (tmp == null)
        {
            return null;
        }
        return tmp.getValue();
    }

    /**
     * Give the property corresponding to the PDFA Version id
     * 
     * @return Part property
     */
    public IntegerType getPartProperty()
    {
        AbstractField tmp = getProperty(PART);
        if (tmp instanceof IntegerType)
        {
            return (IntegerType) tmp;
        }
        return null;
    }

    /**
     * Give the PDFAAmendmentId (as an String)
     * 
     * @return Amendment value
     */
    public String getAmendment()
    {
        AbstractField tmp = getProperty(AMD);
        if (tmp instanceof TextType)
        {
            return ((TextType) tmp).getStringValue();
        }
        return null;
    }

    /**
     * Give the property corresponding to the PDFA Amendment id
     * 
     * @return Amendment property
     */
    public TextType getAmdProperty()
    {
        AbstractField tmp = getProperty(AMD);
        if (tmp instanceof TextType)
        {
            return (TextType) tmp;
        }
        return null;
    }

    /**
     * Give the PDFA Amendment Id (as an String)
     * 
     * @return Amendment Value
     */
    public String getAmd()
    {
        TextType tmp = getAmdProperty();
        if (tmp == null)
        {
            for (Attribute attribute : getAllAttributes())
            {
                if (attribute.getName().equals(AMD))
                {
                    return attribute.getValue();
                }
            }
            return null;
        }
        else
        {
            return tmp.getStringValue();
        }
    }

    /**
     * Give the property corresponding to the PDFA Conformance id
     * 
     * @return conformance property
     */
    public TextType getConformanceProperty()
    {
        AbstractField tmp = getProperty(CONFORMANCE);
        if (tmp instanceof TextType)
        {
            return (TextType) tmp;
        }
        return null;
    }

    /**
     * Give the Conformance id
     * 
     * @return conformance id value
     */
    public String getConformance()
    {
        TextType tt = getConformanceProperty();
        if (tt == null)
        {
            for (Attribute attribute : getAllAttributes())
            {
                if (attribute.getName().equals(CONFORMANCE))
                {
                    return attribute.getValue();
                }
            }
            return null;
        }
        else
        {
            return tt.getStringValue();
        }
    }

}

        String value = conf.getStringValue();
        if (value.equals("A") || value.equals("B") || value.equals("U"))
        {
            addProperty(conf);
        }
        else
        {
            throw new BadFieldValueException(
                    "The property given not seems to be a PDF/A conformance level (must be A, B or U)");
        }
    
<methods>public void <init>(org.apache.xmpbox.XMPMetadata, java.lang.String, java.lang.String, java.lang.String) ,public void <init>(org.apache.xmpbox.XMPMetadata) ,public void <init>(org.apache.xmpbox.XMPMetadata, java.lang.String) ,public void <init>(org.apache.xmpbox.XMPMetadata, java.lang.String, java.lang.String) ,public void addBagValue(java.lang.String, org.apache.xmpbox.type.AbstractField) ,public void addBagValueAsSimple(java.lang.String, java.lang.String) ,public void addQualifiedBagValue(java.lang.String, java.lang.String) ,public void addSequenceDateValueAsSimple(java.lang.String, java.util.Calendar) ,public void addUnqualifiedSequenceDateValue(java.lang.String, java.util.Calendar) ,public void addUnqualifiedSequenceValue(java.lang.String, java.lang.String) ,public void addUnqualifiedSequenceValue(java.lang.String, org.apache.xmpbox.type.AbstractField) ,public org.apache.xmpbox.type.Attribute getAboutAttribute() ,public java.lang.String getAboutValue() ,public org.apache.xmpbox.type.AbstractField getAbstractProperty(java.lang.String) ,public org.apache.xmpbox.type.BooleanType getBooleanProperty(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.Boolean getBooleanPropertyValue(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.Boolean getBooleanPropertyValueAsSimple(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public org.apache.xmpbox.type.DateType getDateProperty(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.util.Calendar getDatePropertyValue(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.util.Calendar getDatePropertyValueAsSimple(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public org.apache.xmpbox.type.IntegerType getIntegerProperty(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.Integer getIntegerPropertyValue(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.Integer getIntegerPropertyValueAsSimple(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public List<org.apache.xmpbox.type.AbstractField> getUnqualifiedArrayList(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public List<java.lang.String> getUnqualifiedBagValueList(java.lang.String) ,public List<java.lang.String> getUnqualifiedLanguagePropertyLanguagesValue(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.String getUnqualifiedLanguagePropertyValue(java.lang.String, java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public List<java.util.Calendar> getUnqualifiedSequenceDateValueList(java.lang.String) ,public List<java.lang.String> getUnqualifiedSequenceValueList(java.lang.String) ,public org.apache.xmpbox.type.TextType getUnqualifiedTextProperty(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public java.lang.String getUnqualifiedTextPropertyValue(java.lang.String) throws org.apache.xmpbox.type.BadFieldValueException,public void merge(org.apache.xmpbox.schema.XMPSchema) throws java.io.IOException,public void removeUnqualifiedArrayValue(java.lang.String, org.apache.xmpbox.type.AbstractField) ,public void removeUnqualifiedBagValue(java.lang.String, java.lang.String) ,public void removeUnqualifiedSequenceDateValue(java.lang.String, java.util.Calendar) ,public void removeUnqualifiedSequenceValue(java.lang.String, java.lang.String) ,public void removeUnqualifiedSequenceValue(java.lang.String, org.apache.xmpbox.type.AbstractField) ,public void reorganizeAltOrder(org.apache.xmpbox.type.ComplexPropertyContainer) ,public void setAbout(org.apache.xmpbox.type.Attribute) throws org.apache.xmpbox.type.BadFieldValueException,public void setAboutAsSimple(java.lang.String) ,public void setBooleanProperty(org.apache.xmpbox.type.BooleanType) ,public void setBooleanPropertyValue(java.lang.String, java.lang.Boolean) ,public void setBooleanPropertyValueAsSimple(java.lang.String, java.lang.Boolean) ,public void setDateProperty(org.apache.xmpbox.type.DateType) ,public void setDatePropertyValue(java.lang.String, java.util.Calendar) ,public void setDatePropertyValueAsSimple(java.lang.String, java.util.Calendar) ,public void setIntegerProperty(org.apache.xmpbox.type.IntegerType) ,public void setIntegerPropertyValue(java.lang.String, java.lang.Integer) ,public void setIntegerPropertyValueAsSimple(java.lang.String, java.lang.Integer) ,public void setTextProperty(org.apache.xmpbox.type.TextType) ,public void setTextPropertyValue(java.lang.String, java.lang.String) ,public void setTextPropertyValueAsSimple(java.lang.String, java.lang.String) ,public void setUnqualifiedLanguagePropertyValue(java.lang.String, java.lang.String, java.lang.String) <variables>