001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026: package com.sun.perseus.model;
027:
028: /**
029: * The purpose of the <code>StrictElement</code> class is to have a way to
030: * create elements with a list of required attributes but no specific
031: * rendering behavior.
032: *
033: * @version $Id: StrictElement.java,v 1.2 2006/04/21 06:38:49 st125089 Exp $
034: */
035: public class StrictElement extends ElementNode {
036: /**
037: * The set of required traits in the per-element partition namespace.
038: */
039: String[] requiredTraits;
040:
041: /**
042: * The set of required namespaced traits.
043: */
044: String[][] requiredTraitsNS;
045:
046: /**
047: * This node's local name.
048: */
049: String localName;
050:
051: /**
052: * This node's namespace URI
053: */
054: String namespaceURI;
055:
056: /**
057: * Constructs a new StrictElement with the requested list of required
058: * attributes.
059: *
060: * @param doc the owner document.
061: * @param localName the element's local name.
062: * @param namespaceURI the element's namespace uri.
063: * @param requiredTraits the list of required traits for the per-element
064: * partition namespace.
065: * @param requiredTraitsNS the list of required namespaced traits.
066: */
067: public StrictElement(final DocumentNode doc,
068: final String localName, final String namespaceURI,
069: final String[] requiredTraits,
070: final String[][] requiredTraitsNS) {
071: super (doc);
072:
073: if (localName == null) {
074: throw new IllegalArgumentException();
075: }
076:
077: this .localName = localName;
078: this .namespaceURI = namespaceURI;
079: this .requiredTraitsNS = requiredTraitsNS;
080: this .requiredTraits = requiredTraits;
081: }
082:
083: /**
084: * @return the namespace URI of the Node.
085: *
086: * @throws SecurityException if the application does not have the necessary
087: * privilege rights to access this (SVG) content.
088: */
089: public String getNamespaceURI() {
090: return namespaceURI;
091: }
092:
093: /**
094: * @return unprefixed node name. For an SVGElement, this returns the tag
095: * name without a prefix. In case of the Document node, string
096: * <code>#document</code> is returned.
097: * @throws SecurityException if the application does not have the necessary
098: * privilege rights to access this (SVG) content.
099: */
100:
101: public String getLocalName() {
102: return localName;
103: }
104:
105: /**
106: * @return an array of traits that are required by this element.
107: */
108: public String[] getRequiredTraits() {
109: return requiredTraits;
110: }
111:
112: /**
113: * @return an array of namespaceURI, localName trait pairs required by
114: * this element.
115: */
116: public String[][] getRequiredTraitsNS() {
117: return requiredTraitsNS;
118: }
119:
120: /**
121: * Used by <code>DocumentNode</code> to create a new instance from
122: * a prototype <code>StrictElement</code>.
123: *
124: * @param doc the <code>DocumentNode</code> for which a new node is
125: * should be created.
126: * @return a new <code>StrictElement</code> for the requested document.
127: */
128: public ElementNode newInstance(final DocumentNode doc) {
129: return new StrictElement(doc, localName, namespaceURI,
130: requiredTraits, requiredTraitsNS);
131: }
132:
133: }
|