KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > bluej > ui > window > OpenedBluejProjects


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.bluej.ui.window;
21
22 import java.beans.PropertyChangeEvent JavaDoc;
23 import java.beans.PropertyChangeListener JavaDoc;
24
25 import java.util.ArrayList JavaDoc;
26 import java.util.Collection JavaDoc;
27 import java.util.Iterator JavaDoc;
28
29 import javax.swing.ComboBoxModel JavaDoc;
30 import javax.swing.DefaultComboBoxModel JavaDoc;
31 import javax.swing.SwingUtilities JavaDoc;
32
33 import org.netbeans.api.project.Project;
34 import org.netbeans.api.project.ProjectUtils;
35 import org.netbeans.api.project.ui.OpenProjects;
36 import org.netbeans.bluej.api.BluejLogicalViewProvider;
37 import org.openide.windows.TopComponent;
38 import org.openide.windows.WindowManager;
39
40 /**
41  * Class holding opened BlueJ projects and providing ComboBoxModel
42  *
43  * @author Milan Kubec
44  */

45 public class OpenedBluejProjects implements PropertyChangeListener JavaDoc {
46     
47     private DefaultComboBoxModel JavaDoc model;
48     private PropChange topComponentChanger;
49
50     private static OpenedBluejProjects instance;
51     
52     /** Creates a new instance of OpenedBluejProjects */
53     private OpenedBluejProjects() {
54         model = new DefaultComboBoxModel JavaDoc();
55         topComponentChanger = new PropChange();
56     }
57     
58     public static synchronized OpenedBluejProjects getInstance() {
59         if (instance == null) {
60             instance = new OpenedBluejProjects();
61         }
62         return instance;
63     }
64     
65     public void addNotify() {
66         OpenProjects.getDefault().addPropertyChangeListener(this);
67         doUpdate(false);
68     }
69     
70     public void removeNotify() {
71         OpenProjects.getDefault().removePropertyChangeListener(this);
72     }
73     
74     public ComboBoxModel JavaDoc getComboModel() {
75         return model;
76     }
77     
78     public Project getSelectedProject() {
79         Object JavaDoc sel = model.getSelectedItem();
80         if (sel != null) {
81             return ((ComboWrapper)sel).getProject();
82         }
83         return null;
84     }
85     
86     
87     public void propertyChange(PropertyChangeEvent JavaDoc evt) {
88         if (OpenProjects.PROPERTY_OPEN_PROJECTS.equals(evt.getPropertyName())) {
89             if (SwingUtilities.isEventDispatchThread()) {
90                 doUpdate(true);
91             } else {
92                 SwingUtilities.invokeLater(new Runnable JavaDoc() {
93                     public void run() {
94                         doUpdate(true);
95                     }
96                 });
97             }
98         }
99     }
100     
101     private void doUpdate(boolean trapProjectsView) {
102         Collection JavaDoc existing = new ArrayList JavaDoc();
103         for (int i = 0; i < model.getSize(); i++) {
104             existing.add(((ComboWrapper)model.getElementAt(i)).getProject());
105         }
106         Collection JavaDoc newones = new ArrayList JavaDoc();
107         Project[] prjs = OpenProjects.getDefault().getOpenProjects();
108         for (int i = 0; i < prjs.length; i++) {
109             if (prjs[i].getLookup().lookup(BluejLogicalViewProvider.class) != null) {
110                 if (existing.contains(prjs[i])) {
111                     existing.remove(prjs[i]);
112                 } else {
113                     newones.add(prjs[i]);
114                 }
115             }
116         }
117         Iterator JavaDoc it = existing.iterator();
118         while (it.hasNext()) {
119             Project elem = (Project) it.next();
120             for (int i = 0; i < model.getSize(); i++) {
121                 if (elem == ((ComboWrapper)model.getElementAt(i)).getProject()) {
122                     model.removeElementAt(i);
123                     break;
124                 }
125             }
126         }
127         if (newones.size() > 0) {
128             it = newones.iterator();
129             ComboWrapper wr = null;
130             while (it.hasNext()) {
131                 Project elem = (Project) it.next();
132                 wr = new ComboWrapper(elem);
133                 model.addElement(wr);
134             }
135             if (trapProjectsView) {
136                 model.setSelectedItem(wr);
137                 topComponentChanger.projectWasOpened();
138             }
139         }
140         if (model.getSelectedItem() == null && model.getSize() > 0) {
141             model.setSelectedItem(model.getElementAt(0));
142         }
143         if (model.getSize() == 0 && model.getSelectedItem() != null) {
144             model.setSelectedItem(null);
145         }
146     }
147     
148     private static class ComboWrapper {
149         private Project project;
150         ComboWrapper(Project proj) {
151             project = proj;
152         }
153         
154         public String JavaDoc toString() {
155             return ProjectUtils.getInformation(project).getDisplayName();
156         }
157         
158         public Project getProject() {
159             return project;
160         }
161         
162     }
163     
164     private static class PropChange implements PropertyChangeListener JavaDoc{
165         private boolean listenerAdded = false;
166         PropChange() {
167         }
168         
169         void projectWasOpened() {
170             if (listenerAdded) {
171                 return;
172             }
173             listenerAdded = true;
174             assert SwingUtilities.isEventDispatchThread();
175             TopComponent active = TopComponent.getRegistry().getActivated();
176             String JavaDoc id = WindowManager.getDefault().findTopComponentID(active);
177             if ("projectTabLogical_tc".equals(id)) { // NOI18N
178
BluejViewTopComponent.findInstance().open();
179                 BluejViewTopComponent.findInstance().requestActive();
180             }
181             TopComponent.getRegistry().addPropertyChangeListener(this);
182         }
183         
184         public void propertyChange(PropertyChangeEvent JavaDoc evt) {
185             if (TopComponent.Registry.PROP_ACTIVATED.equals(evt.getPropertyName())) {
186                 TopComponent active = TopComponent.getRegistry().getActivated();
187                 String JavaDoc id = WindowManager.getDefault().findTopComponentID(active);
188                 if ("projectTabLogical_tc".equals(id)) { // NOI18N
189
TopComponent.getRegistry().removePropertyChangeListener(this);
190                     listenerAdded = false;
191                     BluejViewTopComponent.findInstance().open();
192                     BluejViewTopComponent.findInstance().requestActive();
193                 }
194             }
195         }
196     }
197     
198 }
199
Popular Tags