001: /*
002: * Copyright (c) 2000-2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, but not to modify or redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: * @Author: Silvere Martin-Michiellot for Digital Biosphere
032: * @Version: 1.1 (to stay in touch with h-anim)
033: *
034: */
035:
036: package com.db.utils.tree;
037:
038: import java.util.*;
039: import javax.vecmath.*;
040: import javax.media.j3d.*;
041:
042: /**
043: * This class to implement a SceneGraphBrowser.
044: *
045: * @author Silvere Martin-Michiellot
046: * @version 1.0
047: */
048:
049: public class TreeBrowser extends Object {
050:
051: private int indent = 1;
052:
053: /** Creates new TreeBrowser */
054: public TreeBrowser() {
055:
056: super ();
057:
058: }
059:
060: //gets the number of spaces to right shift the string when it is displaying a node at a given level
061: public int getIndent() {
062:
063: return this .indent;
064:
065: }
066:
067: //sets the number of spaces to right shift the string when it is displaying a node at a given level
068: public void setIndent(int indent) {
069:
070: this .indent = indent;
071:
072: }
073:
074: //gets an indented hiearchical tree of all the nodes under locale
075: //locale must not have been removed from the VirtualUniverse
076: //otherwise a java.lang.IllegalStateException will be thrown
077: public String getTree(javax.media.j3d.Locale locale) {
078:
079: Enumeration enumeration;
080: BranchGroup branchGroup;
081: String string;
082:
083: enumeration = locale.getAllBranchGraphs();
084: string = new String("Printing tree of locale "
085: + locale.getClass().getName() + ":/n");
086: while (enumeration.hasMoreElements()) {
087: branchGroup = (BranchGroup) enumeration.nextElement();
088: string.concat(this .getTree(branchGroup));
089: }
090:
091: return string;
092:
093: }
094:
095: //gets an indented hiearchical tree of all the nodes under group
096: //CapabilityNotSetException are NOT caught
097: //so you must first set the capabilities for each node of the branchGroup to allow read access
098: //tree is indented
099: public String getTree(Group group) {
100:
101: return this .getTree(group, 0);
102:
103: }
104:
105: //gets an indented hiearchical tree of all the nodes under locale
106: //locale must not have been removed from the VirtualUniverse
107: //otherwise a java.lang.IllegalStateException will be thrown
108: public String getPartialTree(javax.media.j3d.Locale locale) {
109:
110: Enumeration enumeration;
111: BranchGroup branchGroup;
112: String string;
113:
114: enumeration = locale.getAllBranchGraphs();
115: string = new String("Printing tree of Locale "
116: + locale.getClass().getName() + ":/n");
117: while (enumeration.hasMoreElements()) {
118: branchGroup = (BranchGroup) enumeration.nextElement();
119: string.concat(this .getPartialTree(branchGroup));
120: }
121:
122: return string;
123:
124: }
125:
126: //gets an indented hiearchical tree of all the nodes under group
127: //CapabilityNotSetException are caught but nodes contents may therefore NOT be printed
128: //so you must first set the capabilities for each node of the branchGroup to allow read access
129: //tree is indented
130: public String getPartialTree(Group group) {
131:
132: return this .getPartialTree(group, 0);
133:
134: }
135:
136: private String getTree(Group group, int level) {
137:
138: Enumeration enumeration;
139: String string;
140: String space;
141: Object object;
142:
143: enumeration = group.getAllChildren();
144: string = new String("Printing tree of Group "
145: + group.getClass().toString() + ":/n");
146: space = new String("");
147: for (int i = 0; i < (level * this .getIndent()); i++) {
148: space.concat(" ");
149: }
150:
151: while (enumeration.hasMoreElements()) {
152: object = enumeration.nextElement();
153: if (object instanceof Group) {
154: string.concat(this .getTree((Group) object, level + 1));
155: } else {
156: string.concat(space);
157: string.concat(object.getClass().toString() + "./n");
158: }
159: }
160:
161: return string;
162:
163: }
164:
165: private String getPartialTree(Group group, int level) {
166:
167: Enumeration enumeration;
168: String string;
169: String space;
170: Object object;
171:
172: string = new String("Printing tree of Group "
173: + group.getClass().toString() + ":/n");
174: space = new String("");
175: for (int i = 0; i < (level * this .getIndent()); i++) {
176: space.concat(" ");
177: }
178: try {
179: enumeration = group.getAllChildren();
180:
181: while (enumeration.hasMoreElements()) {
182: object = enumeration.nextElement();
183: if (object instanceof Group) {
184: string.concat(this .getTree((Group) object,
185: level + 1));
186: } else {
187: string.concat(space);
188: string.concat(object.getClass().toString() + "./n");
189: }
190: }
191:
192: } catch (CapabilityNotSetException exception) {
193: string.concat(space);
194: string.concat("Sub elements can't be displayed./n");
195: }
196:
197: return string;
198:
199: }
200:
201: }
|