KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > ir > gui > typesystem > ModelParticipant


1 package org.jacorb.ir.gui.typesystem;
2
3 /*
4  * JacORB - a free Java ORB
5  *
6  * Copyright (C) 1997-2004 Gerald Brose.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the Free
20  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */

22
23 import java.util.*;
24 import javax.swing.tree.*;
25
26 /**
27  *
28  */

29
30 public abstract class ModelParticipant
31 {
32     private Hashtable modelRepresentants = new Hashtable();
33     private static ModelBuilder modelBuilder = ModelBuilder.getSingleton();
34
35     /**
36      * @param treeModel javax.swing.tree.DefaultTreeModel
37      * @param parent javax.swing.tree.DefaultMutableTreeNode
38      */

39
40     public void addToParent( DefaultTreeModel treeModel, DefaultMutableTreeNode parentTreeNode)
41     {
42         DefaultMutableTreeNode treeNode;
43
44         if (parentTreeNode!=null)
45         { // bei root ist es null
46
treeNode = new DefaultMutableTreeNode(this);
47             int i = 0;
48             while ((i<parentTreeNode.getChildCount()) &&
49                    ((ModelParticipant)((DefaultMutableTreeNode)treeModel.getChild(parentTreeNode,i)).getUserObject()).compareTo(this) < 0)
50             {
51                 i++;
52             }
53
54             treeModel.insertNodeInto(treeNode,parentTreeNode,i);
55         }
56         else
57         {
58             // wir sind root; unsere TreeNode wurde (bzw. mußte!) dem Konstruktor
59
// von DefaultTreeModel mitgegeben werden, wir müssen uns also nicht mehr inserten
60
treeNode = (DefaultMutableTreeNode)treeModel.getRoot();
61         }
62        
63         setModelRepresentant(treeModel, treeNode);
64         if (this instanceof AbstractContainer)
65         {
66             treeNode.setAllowsChildren(true);
67         }
68         else
69         {
70             treeNode.setAllowsChildren(false);
71         }
72     }
73
74     /**
75      * Baut Tree für diese Node auf.
76      * Kann leider nicht protected sein, weil Methode sonst selbst für Unterklassen in einem Unter-Package
77      * nicht sichtbar ist.
78      * @return DefaultMutableTreeNode
79      * @param treeModel TreeModel
80      */

81
82     public void buildTree ( DefaultTreeModel treeModel, DefaultMutableTreeNode parentTreeNode )
83     {
84         addToParent(treeModel,parentTreeNode);
85         DefaultMutableTreeNode treeNode =
86             (DefaultMutableTreeNode)modelRepresentants.get(treeModel);
87         if (this instanceof AbstractContainer)
88         {
89             ModelParticipant[] contents =
90                 ((AbstractContainer)this).contents();
91
92             treeNode.setAllowsChildren(true);
93
94             for (int i=0; i<contents.length; i++)
95             {
96                 if (contents[i]!=null)
97                 { // solange nicht alles implementiert ist gibt's null-Einträge
98
contents[i].buildTree(treeModel,treeNode);
99                 }
100             }
101         }
102
103     }
104     /**
105      * @return int
106      * @param other org.jacorb.ir.gui.typesystem.ModelParticipant
107      */

108
109     public abstract int compareTo(ModelParticipant other);
110
111     /**
112      * @param treeModel javax.swing.tree.DefaultTreeModel
113      * @param parent javax.swing.tree.DefaultMutableTreeNode
114      */

115
116     public synchronized void expand(DefaultTreeModel treeModel)
117     {
118         boolean jTreeExpanded = false;
119         // Hack, damit man gleich sieht, wie die Nodes eintrudeln
120
if (this instanceof AbstractContainer)
121         {
122             DefaultMutableTreeNode treeNode =
123                 (DefaultMutableTreeNode)modelRepresentants.get(treeModel);
124             ModelParticipant[] contents = ((AbstractContainer)this).contents();
125             for (int i=0; i<contents.length; i++)
126             {
127                 if (contents[i]!=null)
128                 {
129                     // solange nicht alles implementiert ist gibt's null-Einträge
130
contents[i].addToParent(treeModel,treeNode);
131                 }
132                 if (!jTreeExpanded)
133                 {
134                     javax.swing.JTree JavaDoc jTree =
135                         (javax.swing.JTree JavaDoc)modelBuilder.treeViewsToUpdate.get(treeNode);
136                     if (jTree!=null)
137                     {
138                         jTree.expandPath(new TreePath(treeNode.getPath()));
139                     }
140                 }
141             }
142             modelBuilder.expandedModParts.put(treeNode,treeNode);
143         }
144     }
145     /**
146      * @return java.lang.Object
147      * @param model java.lang.Object
148      */

149
150     public Object JavaDoc getModelRepresentant(Object JavaDoc model)
151     {
152         return modelRepresentants.get(model);
153     }
154
155     /**
156      * @param model java.lang.Object
157      * @param representant java.lang.Object
158      */

159
160     protected void setModelRepresentant(Object JavaDoc model, Object JavaDoc representant)
161     {
162         modelRepresentants.put(model,representant);
163     }
164 }
165
166
167
Popular Tags