1 19 20 package org.netbeans.modules.xml.wsdl.ui.navigator; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Color ; 24 import java.awt.EventQueue ; 25 import java.beans.PropertyChangeEvent ; 26 import java.beans.PropertyChangeListener ; 27 import java.beans.PropertyVetoException ; 28 import java.io.IOException ; 29 import java.util.ArrayList ; 30 import java.util.List ; 31 import javax.swing.JLabel ; 32 import javax.swing.JPanel ; 33 import javax.swing.SwingConstants ; 34 import javax.swing.SwingUtilities ; 35 import javax.swing.UIManager ; 36 import org.netbeans.modules.xml.wsdl.model.WSDLComponent; 37 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 38 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.UIUtilities; 39 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility; 40 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.WSDLModelCookie; 41 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.NodesFactory; 42 import org.netbeans.modules.xml.xam.Model.State; 43 import org.openide.explorer.ExplorerManager; 44 import org.openide.explorer.view.BeanTreeView; 45 import org.openide.explorer.view.TreeView; 46 import org.openide.loaders.DataObject; 47 import org.openide.nodes.Node; 48 import org.openide.util.NbBundle; 49 import org.openide.windows.TopComponent; 50 51 56 public class WSDLNavigatorContent extends JPanel 57 implements ExplorerManager.Provider, Runnable , PropertyChangeListener { 58 59 private static final long serialVersionUID = 1L; 60 63 private ExplorerManager explorerManager; 64 65 private TreeView treeView; 66 67 private Node rootNode; 68 69 private boolean treeInHierarchy; 70 71 private boolean listeningOnActivatedNodes = false; 72 private final JLabel notAvailableLabel = new JLabel ( 73 NbBundle.getMessage(WSDLNavigatorContent.class, "MSG_NotAvailable")); 74 75 80 83 public WSDLNavigatorContent() { 84 setLayout(new BorderLayout ()); 85 explorerManager = new ExplorerManager(); 86 treeView = new BeanTreeView(); 87 explorerManager.addPropertyChangeListener(this); 88 notAvailableLabel.setHorizontalAlignment(SwingConstants.CENTER); 89 notAvailableLabel.setEnabled(false); 90 Color usualWindowBkg = UIManager.getColor("window"); notAvailableLabel.setBackground(usualWindowBkg != null ? usualWindowBkg : Color.white); 92 notAvailableLabel.setOpaque(true); 94 } 95 96 148 public ExplorerManager getExplorerManager() { 149 return explorerManager; 150 } 151 152 157 public void navigate(DataObject dobj) { 158 WSDLModel model = null; 159 try { 160 WSDLModelCookie modelCookie = 161 (WSDLModelCookie) dobj.getCookie(WSDLModelCookie.class); 162 assert modelCookie != null; 163 model = modelCookie.getModel(); 164 if (model != null) { 165 model.removePropertyChangeListener(this); 166 model.addPropertyChangeListener(this); 167 } 168 } catch (IOException ioe) { 169 } 171 if (model == null || model.getState() != WSDLModel.State.VALID) { 172 showError(); 173 } else { 174 show(model); 175 } 176 } 177 178 public boolean requestFocusInWindow() { 179 return treeView.requestFocusInWindow(); 180 } 181 182 public void run() { 183 treeView.expandNode(rootNode); 185 Utility.expandNodes(treeView, 2, rootNode); 186 selectActivatedNodes(); 187 } 188 189 public void propertyChange(PropertyChangeEvent event) { 190 String property = event.getPropertyName(); 191 if (WSDLModel.STATE_PROPERTY.equals(property)) { 192 State newState = (State) event.getNewValue(); 193 if (newState == WSDLModel.State.VALID) { 194 WSDLModel model = (WSDLModel) event.getSource(); 195 show(model); 196 } else { 197 showError(); 198 } 199 return; 200 } 201 TopComponent tc = (TopComponent) SwingUtilities. 202 getAncestorOfClass(TopComponent.class, this); 203 if (ExplorerManager.PROP_SELECTED_NODES.equals(property) && 204 tc == TopComponent.getRegistry().getActivated()) { 205 Node[] filteredNodes = (Node[])event.getNewValue(); 206 if (filteredNodes != null && filteredNodes.length >= 1) { 207 tc.setActivatedNodes(filteredNodes); 209 } 210 } else if (TopComponent.getRegistry().PROP_ACTIVATED_NODES.equals(property) && 211 tc != null && tc != TopComponent.getRegistry().getActivated()) { 212 EventQueue.invokeLater(new Runnable () { 213 public void run() { 214 selectActivatedNodes(); 215 } 216 }); 217 } else if (TopComponent.getRegistry().PROP_ACTIVATED.equals(property) && 218 tc == TopComponent.getRegistry().getActivated()) { 219 tc.setActivatedNodes(getExplorerManager().getSelectedNodes()); 220 } 221 } 222 223 private void selectActivatedNodes() { 224 Node[] activated = TopComponent.getRegistry().getActivatedNodes(); 225 List <Node> selNodes = new ArrayList <Node>(); 226 for (Node n : activated) { 227 WSDLComponent wc = (WSDLComponent) n.getLookup(). 228 lookup(WSDLComponent.class); 229 if (wc != null) { 230 List <Node> path = UIUtilities.findPathFromRoot( 231 getExplorerManager().getRootContext(), wc); 232 if (path != null && !path.isEmpty()) { 233 selNodes.add(path.get(path.size() - 1)); 234 } 235 } 236 } 237 try { 238 getExplorerManager().setSelectedNodes( 239 selNodes.toArray(new Node[0])); 240 } catch (PropertyVetoException pve) { 241 } 242 } 243 244 247 private void showError() { 248 if (notAvailableLabel.isShowing()) { 249 return; 250 } 251 remove(treeView); 252 add(notAvailableLabel, BorderLayout.CENTER); 253 revalidate(); 254 repaint(); 255 } 256 257 262 private void show(WSDLModel model) { 263 remove(notAvailableLabel); 264 add(treeView, BorderLayout.CENTER); 265 NodesFactory factory = NodesFactory.getInstance(); 266 rootNode = factory.create(model.getDefinitions()); 267 getExplorerManager().setRootContext(rootNode); 268 EventQueue.invokeLater(this); 269 revalidate(); 270 repaint(); 271 } 272 } 273 | Popular Tags |