001: /*
002: * $RCSfile: Node.java,v $
003: *
004: * @(#)Node.java 1.30 98/11/05 20:34:46
005: *
006: * Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
007: *
008: * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
009: * modify and redistribute this software in source and binary code form,
010: * provided that i) this copyright notice and license appear on all copies of
011: * the software; and ii) Licensee does not utilize the software in a manner
012: * which is disparaging to Sun.
013: *
014: * This software is provided "AS IS," without a warranty of any kind. ALL
015: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
016: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
017: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
018: * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
019: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
020: * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
024: * POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: * $Revision: 1.2 $
033: * $Date: 2005/02/03 23:06:58 $
034: * $State: Exp $
035: */
036: /*
037: * @Author: Rick Goldberg
038: * @Author: Doug Gehringer
039: *
040: */
041: package org.jdesktop.j3d.loaders.vrml97.impl;
042:
043: import java.util.Hashtable;
044: import vrml.InvalidEventInException;
045: import vrml.InvalidEventOutException;
046: import vrml.InvalidExposedFieldException;
047: import vrml.InvalidFieldException;
048:
049: /** Description of the Class */
050: public abstract class Node extends BaseNode implements Cloneable,
051: Notifier {
052:
053: /** Description of the Field */
054: public Hashtable FieldSpec = new Hashtable(4);
055:
056: /**
057: *Constructor for the ImplNode object
058: *
059: *@param browser Description of the Parameter
060: */
061: public Node(Browser browser) {
062: super (browser);
063: }
064:
065: /**
066: *Constructor for the Node object
067: *
068: *@param loader Description of the Parameter
069: */
070:
071: /**
072: *Constructor for the Node object
073: *
074: *@param loader Description of the Parameter
075: */
076: public Node(Loader loader) {
077: super (loader);
078: }
079:
080: // Exposed fields may be either input ( eventIn )
081: // output ( eventOut ) or both
082: /**
083: * Gets the exposedField attribute of the Node object
084: *
085: *@param fieldName Description of the Parameter
086: *@return The exposedField value
087: *@exception InvalidExposedFieldException Description of the Exception
088: */
089: public Field getExposedField(String fieldName)
090: throws InvalidExposedFieldException {
091: Field f;
092: if ((f = (Field) FieldSpec.get(fieldName)) == null) {
093: throw new InvalidExposedFieldException("No field named "
094: + fieldName);
095: }
096: return f;
097: }
098:
099: /**
100: * Gets the eventOut attribute of the Node object
101: *
102: *@param eventOutName Description of the Parameter
103: *@return The eventOut value
104: *@exception InvalidEventOutException Description of the Exception
105: */
106: public ConstField getEventOut(String eventOutName)
107: throws InvalidEventOutException {
108: Object cf;
109: Field f;
110:
111: String fieldName = Field.baseName(eventOutName);
112: f = (Field) FieldSpec.get(fieldName);
113: if (f == null) {
114: throw new InvalidEventOutException("No field named "
115: + fieldName);
116: } else if ((f.fieldType & Field.EVENT_OUT) != Field.EVENT_OUT) {
117: throw new InvalidEventOutException(
118: "Field is not an EVENT_OUT");
119: }
120: if (!(f instanceof ConstField)) {
121: f = ((Field) f).constify();
122: }
123: return (ConstField) f;
124: }
125:
126: // the default action is to connect a route by accessing the fields
127: // through these calls, and a setValue on the input side automatically
128: // causes a getValue on the output.
129:
130: /**
131: * Gets the eventIn attribute of the Node object
132: *
133: *@param eventInName Description of the Parameter
134: *@return The eventIn value
135: *@exception InvalidEventInException Description of the Exception
136: */
137: public Field getEventIn(String eventInName)
138: throws InvalidEventInException {
139: String fieldName = Field.baseName(eventInName);
140: Field f = (Field) FieldSpec.get(fieldName);
141: if (f == null) {
142: throw new InvalidEventInException("No field named "
143: + eventInName);
144: } else if ((f.fieldType & Field.EVENT_IN) != Field.EVENT_IN) {
145: throw new InvalidEventInException(
146: "Field is not an EVENT_IN");
147: }
148: if (f instanceof ConstField) {
149: throw new InvalidEventInException("Field is an ConstField");
150: }
151: return f;
152: }
153:
154: /**
155: * Gets the field attribute of the Node object
156: *
157: *@param fieldName Description of the Parameter
158: *@return The field value
159: *@exception InvalidFieldException Description of the Exception
160: */
161: public Field getField(String fieldName)
162: throws InvalidFieldException {
163: Field f;
164: fieldName = Field.baseName(fieldName);
165: //if(loader.debug) {
166: // System.out.println(toStringId()+" getField "+fieldName);
167: //}
168: if ((f = (Field) FieldSpec.get(fieldName)) == null) {
169: throw new InvalidFieldException("No field named "
170: + fieldName);
171: }
172: return f;
173: }
174:
175: /**
176: * Description of the Method
177: *
178: *@param eventInName Description of the Parameter
179: *@param time Description of the Parameter
180: */
181: public abstract void notifyMethod(String eventInName, double time);
182:
183: /** Description of the Method */
184: abstract void initFields();
185:
186: /**
187: * Description of the Method
188: *
189: *@return Description of the Return Value
190: */
191: public vrml.BaseNode wrap() {
192: return new vrml.node.Node(this);
193: }
194:
195: }
|