001: /*
002: * $RCSfile: SFNode.java,v $
003: *
004: * @(#)SFNode.java 1.19 98/11/05 20:35:02
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:07:01 $
034: * $State: Exp $
035: */
036: /*
037: * @Author: Rick Goldberg
038: * @Author: Doug Gehringer
039: */
040: package org.jdesktop.j3d.loaders.vrml97.impl;
041:
042: import java.util.Observable;
043: import java.util.Observer;
044:
045: /** Description of the Class */
046: public class SFNode extends Field {
047:
048: BaseNode node;
049: BaseNode initNode;
050:
051: /**Constructor for the SFNode object */
052: public SFNode() {
053: node = null;
054: initNode = null;
055: }
056:
057: /**
058: *Constructor for the SFNode object
059: *
060: *@param node Description of the Parameter
061: */
062: public SFNode(BaseNode node) {
063: setValue(node);
064: initNode = node;
065: }
066:
067: /** Description of the Method */
068: void reset() {
069: node = initNode;
070: }
071:
072: /**
073: * Gets the value attribute of the SFNode object
074: *
075: *@return The value value
076: */
077: public BaseNode getValue() {
078: return node;
079: }
080:
081: /**
082: * Sets the value attribute of the SFNode object
083: *
084: *@param node The new value value
085: */
086: public void setValue(BaseNode node) {
087: this .node = node;
088: route();
089: }
090:
091: /**
092: * Sets the value attribute of the SFNode object
093: *
094: *@param sfnode The new value value
095: */
096: public void setValue(SFNode sfnode) {
097: setValue(sfnode.node);
098: }
099:
100: /**
101: * Sets the value attribute of the SFNode object
102: *
103: *@param csfnode The new value value
104: */
105: public void setValue(ConstSFNode csfnode) {
106: setValue((SFNode) csfnode.ownerField);
107: }
108:
109: /**
110: * Description of the Method
111: *
112: *@return Description of the Return Value
113: */
114: public synchronized Object clone() {
115: SFNode clone;
116: clone = new SFNode(node);
117: if (node != null) {
118: BaseNode cloneNode = (BaseNode) node.clone();
119: clone.node = cloneNode;
120: node.loader.registerClone(node, cloneNode);
121: node.loader.cleanUp();
122: }
123: return clone;
124: }
125:
126: /**
127: * Description of the Method
128: *
129: *@param field Description of the Parameter
130: */
131: public void update(Field field) {
132: setValue((SFNode) field);
133: }
134:
135: /**
136: * Description of the Method
137: *
138: *@return Description of the Return Value
139: */
140: public synchronized ConstField constify() {
141: if (constField == null) {
142: constField = new ConstSFNode(this );
143: }
144: return constField;
145: }
146:
147: /**
148: * Description of the Method
149: *
150: *@return Description of the Return Value
151: */
152: public vrml.Field wrap() {
153: return new vrml.field.SFNode(this );
154: }
155:
156: /**
157: * Description of the Method
158: *
159: *@return Description of the Return Value
160: */
161: public String toString() {
162: return node + "\n";
163: }
164:
165: }
|