KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > editors > tree > ProjectFolderNode


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package org.terracotta.dso.editors.tree;
5
6 import org.eclipse.core.resources.IFile;
7 import org.eclipse.core.resources.IFolder;
8 import org.eclipse.core.resources.IResource;
9 import org.eclipse.core.runtime.CoreException;
10
11 import org.terracotta.dso.TcPlugin;
12 import com.tc.admin.common.XAbstractAction;
13
14 import java.awt.Component JavaDoc;
15 import java.awt.KeyboardFocusManager JavaDoc;
16 import java.awt.event.ActionEvent JavaDoc;
17 import java.util.ArrayList JavaDoc;
18 import java.util.Vector JavaDoc;
19
20 import javax.swing.JOptionPane JavaDoc;
21 import javax.swing.JPopupMenu JavaDoc;
22 import javax.swing.tree.TreeNode JavaDoc;
23
24 /**
25  * A TreeNode that represents a project folder.
26  *
27  * @see ProjectNode
28  * @see IResourceNode
29  */

30
31 public class ProjectFolderNode extends ProjectNode implements IResourceNode {
32   private IFolder m_folder;
33   private String JavaDoc m_extension;
34   private IResource[] m_members;
35   private JPopupMenu JavaDoc m_popup;
36   
37   public ProjectFolderNode(IFolder folder) {
38     this(folder, null);
39     initPopup();
40     init();
41   }
42
43   private void initPopup() {
44     m_popup = new JPopupMenu JavaDoc();
45     m_popup.add(new NewFolderAction());
46   }
47
48   public JPopupMenu JavaDoc getPopupMenu() {
49     return m_popup;
50   }
51   
52   public ProjectFolderNode(IFolder folder, String JavaDoc extension) {
53     super(folder);
54     
55     m_folder = folder;
56     m_extension = extension;
57     
58     init();
59   }
60
61   private void init() {
62     int count = ensureMembers().length;
63
64     if(children == null) {
65       children = new Vector JavaDoc();
66     }
67     children.setSize(count);
68   }
69   
70   public TreeNode JavaDoc getChildAt(int index) {
71     if(children != null && children.elementAt(index) == null) {
72       addChildren();
73     }
74     
75     return super.getChildAt(index);
76   }
77
78   protected void removeChildren() {
79     removeAllChildren();
80     nodeStructureChanged();
81   }
82   
83   protected void addChildren() {
84     IResource[] members = ensureMembers();
85     IResource member;
86
87     for(int i = 0; i < members.length; i++) {
88       member = members[i];
89       
90       switch(member.getType()) {
91         case IResource.FOLDER: {
92           setChildAt(createFolderNode((IFolder)member, m_extension), i);
93           break;
94         }
95         case IResource.FILE: {
96           setChildAt(new ProjectFileNode((IFile)member), i);
97           break;
98         }
99       }
100     }
101   }
102   
103   protected ProjectFolderNode createFolderNode(IFolder folder, String JavaDoc extension) {
104     return new ProjectFolderNode(folder, extension);
105   }
106   
107   protected boolean addResource(IResource resource) {
108     return resource.getType() == IResource.FOLDER ||
109            m_extension == null ||
110            m_extension.equals(resource.getFileExtension());
111   }
112   
113   protected void refresh() {
114     removeChildren();
115     addChildren();
116   }
117   
118   public String JavaDoc toString() {
119     return m_folder.getName();
120   }
121
122   public IResource getResource() {
123     return getFolder();
124   }
125   
126   public IFolder getFolder() {
127     return m_folder;
128   }
129   
130   public String JavaDoc getExtension() {
131     return m_extension;
132   }
133   
134   class NewFolderAction extends XAbstractAction {
135     NewFolderAction() {
136       super("Create folder...");
137     }
138     
139     public void actionPerformed(ActionEvent JavaDoc ae) {
140       Object JavaDoc src = ae.getSource();
141       KeyboardFocusManager JavaDoc kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
142       Component JavaDoc pfo = kfm.getPermanentFocusOwner();
143
144       System.out.println("src: " + src);
145       
146       String JavaDoc name = JOptionPane.showInputDialog(pfo, "Enter new folder name");
147       
148       try {
149         m_folder.getFolder(name).create(true, true, null);
150         refresh();
151       } catch(CoreException ce) {
152         TcPlugin.getDefault().openError("Unable to create folder", ce);
153       }
154     }
155   }
156   
157   private IResource[] ensureMembers() {
158     if(m_members == null) {
159       m_members = internalGetMembers();
160     }
161     return m_members;
162   }
163   
164   private IResource[] internalGetMembers() {
165     try {
166       ArrayList JavaDoc<IResource> list = new ArrayList JavaDoc<IResource>();
167       IResource[] members = m_folder.members();
168
169       for(int i = 0; i < members.length; i++) {
170         if(addResource(members[i])) {
171           list.add(members[i]);
172         }
173       }
174       
175       return list.toArray(new IResource[0]);
176     } catch(CoreException ce) {
177       return new IResource[0];
178     }
179   }
180 }
181
Popular Tags