File:  [Public] / java / classes / org / w3c / tools / resources / Attribute.java
Revision 1.6: download - view: text, annotated - select for diffs
Fri Oct 18 13:42:25 2013 UTC (12 years, 2 months ago) by ylafon
Branches: MAIN
CVS tags: HEAD
generics + raw types + serializer

// Attribute.java
// $Id: Attribute.java,v 1.6 2013/10/18 13:42:25 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.tools.resources;

import java.io.Serializable;

/**
 * Instances of this class describe an attribute of a resource.
 */

abstract public class Attribute implements Serializable {
    private static final long serialVersionUID = 1331778123896555826L;

    /**
     * Flags value - This attribute is computed from the resource state.
     */
    public static final int COMPUTED = (1 << 0);
    /**
     * Flag value - This attribute is editable.
     */
    public static final int EDITABLE = (1 << 1);
    /**
     * Flag value - This attribute is mandatory.
     */
    public static final int MANDATORY = (1 << 2);
    /**
     * Flag value - This attribute shouldn't be saved.
     */
    public static final int DONTSAVE = (1 << 3);
    /**
     * The attribute name.
     */
    protected String name = null;
    /**
     * The attribute's value type, as the name of its class.
     */
    protected String type = null;
    /**
     * The associated flags (see the predefined flags).
     */
    protected int flags = 0;
    /**
     * The attribute's default value.
     */
    private transient Object defvalue = null;

    /**
     * Private constructore to create a new resource attribute description.
     *
     * @param name  The name of the attribute.
     * @param def   Its default value.
     * @param flags Its associated flags.
     */

    public Attribute(String name, Object def, int flags) {
        this.name = name.intern();
        this.defvalue = def;
        this.flags = flags;
    }

    /**
     * Empty contructor, (cls.newInstance())
     */
    public Attribute() {
        this.defvalue = null;
        this.flags = COMPUTED;
    }

    public String getFlag() {
        return String.valueOf(flags);
    }

    public void setFlag(String flag) {
        try {
            flags = Integer.parseInt(flag);
        } catch (Exception ex) {
            flags = 0;
        }
    }

    /**
     * Get this attribute name.
     *
     * @return A String giving the attribute name.
     */

    public String getName() {
        return name;
    }

    /**
     * set the attribute name.
     *
     * @param name the attribute name.
     */
    public void setName(String name) {
        this.name = name.intern();
    }

    /**
     * Get this attribute type.
     */

    public String getType() {
        return type;
    }

    /**
     * Check some flag on this attribute description.
     */

    public boolean checkFlag(int tst) {
        return (flags & tst) == tst;
    }

    /**
     * Get this attribute default value.
     *
     * @return A default value for this attribute (may be
     *         <strong>null</strong>).
     */

    public Object getDefault() {
        return defvalue;
    }

    /**
     * Is the provided object a suitable value for this attribute ?
     * If so, store it into the given store.
     *
     * @param value The value to check.
     * @return A boolean <strong>true</strong> if this object can be used
     *         as a value for this attribute.
     * @throws IllegalAttributeAccess If the provided value doesn't match
     *                                the expected type.
     */

    public abstract boolean checkValue(Object value);

    public abstract String stringify(Object value);
}

Webmaster