class AbstractSimpleProperty extends AbstractField
{

    private final String namespace;

    private final String prefix;

    private final Object rawValue;
    
    /**
     * Property specific type constructor (namespaceURI is given)
     * 
     * @param metadata
     *            The metadata to attach to this property
     * @param namespaceURI
     *            the specified namespace URI associated to this property
     * @param prefix
     *            The prefix to set for this property
     * @param propertyName
     *            The local Name of this property
     * @param value
     *            the value to give
     */
    public AbstractSimpleProperty(XMPMetadata metadata, String namespaceURI, String prefix, String propertyName,
            Object value)
    {
        super(metadata, propertyName);
        setValue(value);
        this.namespace = namespaceURI;
        this.prefix = prefix;
        this.rawValue = value;

    }

    /**
     * Check and set new property value (in Element and in its Object Representation)
     * 
     * @param value
     *            Object value to set
     */
    public abstract void setValue(Object value);

    /**
     * Return the property value
     * 
     * @return a string
     */
    public abstract String getStringValue();

    public abstract Object getValue();
    
    /**
     * Return the properties raw value.
     * <p>
     * The properties raw value is how it has been
     * serialized into the XML. Allows to retrieve the
     * low level date for validation purposes.
     * </p> 
     * 
     * @return the raw value.
     */
    public Object getRawValue()
    {
        return rawValue;
    }
    

    @Override
    public String toString()
    {<FILL_FUNCTION_BODY>}

    /**
     * Get the namespace URI of this entity
     * 
     * @return the namespace URI
     */
    @Override
    public final String getNamespace()
    {
        return namespace;
    }

    /**
     * Get the prefix of this entity
     * 
     * @return the prefix specified
     */
    @Override
    public String getPrefix()
    {
        return prefix;
    }

}

        return "[" + this.getClass().getSimpleName() + ":" + getStringValue() + "]";
    
<methods>public void <init>(org.apache.xmpbox.XMPMetadata, java.lang.String) ,public final boolean containsAttribute(java.lang.String) ,public final List<org.apache.xmpbox.type.Attribute> getAllAttributes() ,public final org.apache.xmpbox.type.Attribute getAttribute(java.lang.String) ,public final org.apache.xmpbox.XMPMetadata getMetadata() ,public abstract java.lang.String getNamespace() ,public abstract java.lang.String getPrefix() ,public final java.lang.String getPropertyName() ,public final void removeAttribute(java.lang.String) ,public final void setAttribute(org.apache.xmpbox.type.Attribute) ,public final void setPropertyName(java.lang.String) <variables>private final non-sealed Map<java.lang.String,org.apache.xmpbox.type.Attribute> attributes,private final non-sealed org.apache.xmpbox.XMPMetadata metadata,private java.lang.String propertyName