01: /* ****************************************************************************
02: * Schema.java
03: * ****************************************************************************/
04:
05: /* J_LZ_COPYRIGHT_BEGIN *******************************************************
06: * Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
07: * Use is subject to license terms. *
08: * J_LZ_COPYRIGHT_END *********************************************************/
09:
10: package org.openlaszlo.xml.internal;
11:
12: import org.jdom.Element;
13: import java.util.*;
14:
15: /**
16: * Describes the content model of an XML document.
17: *
18: * @author Oliver Steele
19: * @version 1.0
20: */
21: public abstract class Schema {
22:
23: /** Hold mapping from Javascript type names to Types */
24: static Map typeNames = new HashMap();
25:
26: /** Represents the type of an attribute whose type isn't known. */
27: public static final Type UNKNOWN_TYPE = newType("unknown");
28: /** Represents a String. */
29: public static final Type STRING_TYPE = newType("string");
30: /** Represents a number. */
31: public static final Type NUMBER_TYPE = newType("number");
32: /** Represents an XML ID. */
33: public static final Type ID_TYPE = newType("ID");
34:
35: /** The type of an attribute. */
36: public static class Type {
37: private String mName;
38:
39: public Type(String name) {
40: mName = name;
41: }
42:
43: public String toString() {
44: return mName;
45: }
46: }
47:
48: /** Returns a unique type.
49: * @return a unique type
50: */
51: public static Type newType(String typeName) {
52: Type newtype = new Type(typeName);
53: typeNames.put(typeName, newtype);
54: return newtype;
55: }
56:
57: public static void addTypeAlias(String typeName, Type type) {
58: typeNames.put(typeName, type);
59: }
60:
61: /** Look up the Type object from a Javascript type name */
62: public Type getTypeForName(String typeName) {
63: return (Type) typeNames.get(typeName);
64: }
65:
66: /** An empty Schema, all of whose attribute types are unknown. */
67: public static final Schema DEFAULT_SCHEMA = new Schema() {
68: /** @see Schema */
69: public Type getAttributeType(Element element, String name) {
70: return UNKNOWN_TYPE;
71: }
72: };
73:
74: /**
75: * Returns a value representing the type of an attribute within an
76: * XML element.
77: *
78: * @param element an Element
79: * @param attributeName an attribute name
80: * @return a value represting the type of the attribute's
81: */
82: public abstract Type getAttributeType(Element element,
83: String attributeName);
84: }
|