KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > gui > SchemaTreeCellEditor


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/gui/SchemaTreeCellEditor.java#1 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 2006-2007 Julian Hyde and others
7 // Copyright (C) 2006-2007 CINCOM SYSTEMS, INC.
8 // All Rights Reserved.
9 // You must accept the terms of that agreement to use this software.
10 */

11 package mondrian.gui;
12
13 import java.awt.Component JavaDoc;
14 import java.awt.event.MouseEvent JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.EventObject JavaDoc;
17 import java.util.ResourceBundle JavaDoc;
18 import javax.swing.ImageIcon JavaDoc;
19 import javax.swing.JComboBox JavaDoc;
20 import javax.swing.JTree JavaDoc;
21 import javax.swing.event.CellEditorListener JavaDoc;
22 import javax.swing.event.ChangeEvent JavaDoc;
23 import javax.swing.tree.DefaultTreeCellRenderer JavaDoc;
24 import javax.swing.tree.TreeCellEditor JavaDoc;
25 import javax.swing.tree.TreePath JavaDoc;
26
27 /**
28  *
29  * @author sarora
30  * @version $Id: //open/mondrian/src/main/mondrian/gui/SchemaTreeCellEditor.java#1 $
31  */

32 public class SchemaTreeCellEditor extends javax.swing.tree.DefaultTreeCellEditor JavaDoc{
33
34     private final ClassLoader JavaDoc myClassLoader;
35     JComboBox JavaDoc listEditor;
36     ArrayList JavaDoc listeners;
37     private final ResourceBundle JavaDoc resources;
38
39     /** Creates a new instance of SchemaTreeCellEditor */
40     public SchemaTreeCellEditor(JTree JavaDoc tree, DefaultTreeCellRenderer JavaDoc renderer, TreeCellEditor JavaDoc editor) {
41         super(tree, renderer, editor);
42         listeners = new ArrayList JavaDoc();
43         myClassLoader = this.getClass().getClassLoader();
44         resources = ResourceBundle.getBundle("mondrian.gui.resources.gui");
45         renderer.setLeafIcon(new ImageIcon JavaDoc(myClassLoader.getResource(resources.getString("table"))));
46         renderer.setOpenIcon(new ImageIcon JavaDoc(myClassLoader.getResource(resources.getString("join"))));
47         renderer.setClosedIcon(new ImageIcon JavaDoc(myClassLoader.getResource(resources.getString("join"))));
48
49         /*
50         listEditor = new JComboBox( new String[] {"Join", "Table"} );
51         editor.addItemListener( new ItemListener() {
52             public void itemStateChanged(ItemEvent e) {
53                 //System.out.println("item state changed ="+listEditor.getSelectedItem());
54                 //if (listEditor.isDisplayable()) listEditor.setPopupVisible(false);
55                 System.out.println("Item listener called");
56                 stopCellEditing();
57             }
58         });
59          */

60
61     }
62
63     public Component JavaDoc getTreeCellEditorComponent(JTree JavaDoc tree, Object JavaDoc value, boolean isSelected, boolean expanded, boolean leaf, int row) {
64         Component JavaDoc retValue=null;
65
66
67         if (value instanceof MondrianGuiDef.Relation) {
68             String JavaDoc valueClass = value.getClass().getName();
69             String JavaDoc simpleName[] = valueClass.split("[$.]",0);
70
71             retValue = super.getTreeCellEditorComponent(tree, simpleName[simpleName.length-1], isSelected, expanded, leaf, row);
72             /*
73             retValue.setPreferredSize(null);
74             retValue.setPreferredSize(new java.awt.Dimension(retValue.getPreferredSize().width+1, 20)); //Do not remove this
75             retValue.setMaximumSize(new java.awt.Dimension(retValue.getPreferredSize().width+1, 20)); //Do not remove this
76              */

77             /*
78             if (listEditor.isDisplayable()) {
79                 listEditor.setPopupVisible(true);
80             }
81             return listEditor;
82              */

83         }
84
85         return retValue;
86     }
87
88     public boolean isCellEditable(EventObject JavaDoc event) {
89         boolean editable;
90         //retValue = super.isCellEditable(event);
91

92         if (event != null) {
93             if (event.getSource() instanceof JTree JavaDoc) {
94                 if (event instanceof MouseEvent JavaDoc) {
95                     TreePath JavaDoc path = tree.getPathForLocation(
96                             ((MouseEvent JavaDoc)event).getX(),
97                             ((MouseEvent JavaDoc)event).getY());
98                     editable = (lastPath != null && path != null && lastPath.equals(path));
99                     if (path!=null) {
100                         Object JavaDoc value = path.getLastPathComponent();
101                         TreePath JavaDoc parentPath = path.getParentPath();
102                         Object JavaDoc parent = (parentPath==null?null:parentPath.getLastPathComponent());
103                         if (value instanceof MondrianGuiDef.Relation && (parent instanceof MondrianGuiDef.Hierarchy || parent instanceof MondrianGuiDef.Relation)) {
104                             // editing of relation(cube fact table is not allowed
105
//===System.out.println("Super iscelleditable="+ super.isCellEditable(event)); //editable;
106
if(((MouseEvent JavaDoc)event).getClickCount() == 2) {
107                                 return true;
108                             }
109                             return false;
110                         } else {
111                             return false;
112                         }
113                     }
114                 }
115             }
116         }
117         return false;
118     }
119
120     public Object JavaDoc getCellEditorValue() {
121         Object JavaDoc retValue;
122
123         retValue = super.getCellEditorValue();
124         /*
125         System.out.println("Selected "+retValue);
126
127         if (retValue.equals("Join")) {
128             return new MondrianGuiDef.Join("","",new MondrianGuiDef.Table(), "", "", new MondrianGuiDef.Table());
129         } else if (retValue.equals("Table")) {
130             return new MondrianGuiDef.Table();
131
132         }
133         return null;
134          */

135         return retValue;
136     }
137
138
139     protected void fireEditingStopped() {
140         ChangeEvent JavaDoc ce = new ChangeEvent JavaDoc(this);
141         for (int i = listeners.size() - 1; i >= 0; i--) {
142             ((CellEditorListener JavaDoc)listeners.get(i)).editingStopped(ce);
143         }
144     }
145
146     public void addCellEditorListener(CellEditorListener JavaDoc l) {
147         listeners.add(l);
148     }
149
150     public void removeCellEditorListener(CellEditorListener JavaDoc l) {
151         listeners.remove(l);
152     }
153
154     public void setValueAt(JTree JavaDoc tree) {
155         String JavaDoc retValue;
156         MondrianGuiDef.Relation relationObj=null;
157
158         retValue = (String JavaDoc) getCellEditorValue();
159         if (retValue.equals("Join")) {
160             relationObj= new MondrianGuiDef.Join("","",new MondrianGuiDef.Table("","Table 1",""), "", "", new MondrianGuiDef.Table("","Table 2",""));
161         } else if (retValue.equals("Table")) {
162             relationObj= new MondrianGuiDef.Table("","Table","");
163
164         }
165
166         TreePath JavaDoc tpath = tree.getSelectionPath();
167         if (tpath != null) {
168             Object JavaDoc value = tpath.getLastPathComponent();
169             TreePath JavaDoc parentpath = tpath.getParentPath();
170             if (parentpath != null) {
171                 Object JavaDoc parent = parentpath.getLastPathComponent();
172                 if (parent instanceof MondrianGuiDef.Hierarchy) {
173                     ((MondrianGuiDef.Hierarchy) parent).relation = relationObj;
174                 } else if (parent instanceof MondrianGuiDef.Closure) {
175                     ((MondrianGuiDef.Closure) parent).table = (MondrianGuiDef.Table)relationObj;
176                 } else if (parent instanceof MondrianGuiDef.Join) {
177                     int indexOfChild = tree.getModel().getIndexOfChild(parent, value);
178                     switch (indexOfChild) {
179                         case 0: ((MondrianGuiDef.Join) parent).left = relationObj; break;
180                         case 1: ((MondrianGuiDef.Join) parent).right = relationObj; break;
181                     }
182                 }
183                 tree.setSelectionPath(parentpath.pathByAddingChild(relationObj));
184             }
185         }
186     }
187
188     public boolean stopCellEditing() {
189         boolean retValue;
190
191         setValueAt(super.tree);
192         retValue = super.stopCellEditing();
193         return retValue;
194     }
195 }
196
197 // End SchemaTreeCellEditor.java
198
Popular Tags