001: // ObjectAttribute.java
002: // $Id: ObjectAttribute.java,v 1.6 2002/06/09 11:23:34 ylafon Exp $
003: // (c) COPYRIGHT MIT and INRIA, 1996.
004: // Please first read the full copyright statement in file COPYRIGHT.html
005:
006: package org.w3c.tools.resources;
007:
008: /**
009: * A generic Object attribute.
010: * This attribute is usefull for attributes that are:
011: * <ul>
012: * <li>Have Object values.
013: * <li>Need not be saved (have the DONTSAVE bit set).
014: * </ul>
015: */
016:
017: public class ObjectAttribute extends Attribute {
018: /**
019: * The class for values of this attribute.
020: */
021: protected Class cls = null;
022:
023: /**
024: * Check that a value is allowed for this attribute.
025: * @param value The value to check.
026: * @return A boolean <strong>true</strong> if value is allowed.
027: */
028:
029: public boolean checkValue(Object value) {
030: return true;
031: }
032:
033: /**
034: * Pickle an integer to the given output stream.
035: * @param obj The object to pickle.
036: */
037:
038: public String pickle(Object obj) {
039: throw new RuntimeException("Can't pickle ObjectAttribute");
040: }
041:
042: /**
043: * Unpickle an integer from the given input stream.
044: * @param value the string representation of this integer
045: * @return An instance of Integer.
046: */
047:
048: public Object unpickle(String value) {
049: throw new RuntimeException("Can't pickle ObjectAttribute");
050: }
051:
052: public String stringify(Object value) {
053: throw new RuntimeException("Can't pickle ObjectAttribute");
054: }
055:
056: /**
057: * Create a new ObjectAttribute instance.
058: * @param name The name of the attribute.
059: * @param cls The class for this attribute values.
060: * @param def The default value for this attribute.
061: * @param flags The attribute flags.
062: */
063:
064: public ObjectAttribute(String name, Class cls, Object def, int flags) {
065: super (name, def, flags);
066: // Check consistency
067: if (!checkFlag(DONTSAVE)) {
068: String error = "ObjectAttribute can't pickle themselves.";
069: throw new RuntimeException(error);
070: }
071: this .cls = cls;
072: }
073:
074: /**
075: * Create a new ObjectAttribute instance.
076: * @param name The name of the attribute.
077: * @param cname The name class for this attribute values.
078: * @param def The default value for this attribute.
079: * @param flags The attribute flags.
080: * @exception RuntimeException If we couldn't resolve the class name.
081: */
082:
083: public ObjectAttribute(String name, String cname, Object def,
084: int flags) {
085: super (name, def, flags);
086: // Check consistency:
087: if (!checkFlag(DONTSAVE)) {
088: String error = "ObjectAttribute can't pickle themselves.";
089: throw new RuntimeException(error);
090: }
091: // Resolve the class:
092: try {
093: this .cls = Class.forName(cname);
094: } catch (Exception ex) {
095: throw new RuntimeException("unable to resolve class "
096: + cname);
097: }
098: this .type = "java.lang.Object".intern();
099: }
100:
101: }
|