1 19 20 package org.netbeans.modules.xml.schema.abe.navigator; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Color ; 24 import java.awt.Component ; 25 import java.beans.PropertyChangeEvent ; 26 import java.beans.PropertyChangeListener ; 27 import java.io.IOException ; 28 import javax.swing.JPanel ; 29 import javax.swing.SwingConstants ; 30 import javax.swing.SwingUtilities ; 31 import javax.swing.UIManager ; 32 import org.netbeans.modules.xml.axi.AXIComponent; 33 import org.netbeans.modules.xml.axi.AXIModel; 34 import org.netbeans.modules.xml.axi.AXIModelFactory; 35 import org.netbeans.modules.xml.schema.abe.nodes.AXINodeVisitor; 36 import org.netbeans.modules.xml.schema.ui.basic.SchemaModelCookie; 37 import org.netbeans.modules.xml.xam.Model; 38 import org.netbeans.modules.xml.xam.Model.State; 39 import org.openide.explorer.ExplorerManager; 40 import org.openide.explorer.view.BeanTreeView; 41 import org.openide.loaders.DataObject; 42 import org.openide.nodes.Node; 43 import org.openide.util.NbBundle; 44 import org.openide.windows.TopComponent; 45 46 52 public class NavigatorContent extends JPanel 53 implements ExplorerManager.Provider, PropertyChangeListener { 54 55 private static final long serialVersionUID = 1L; 56 57 private final ExplorerManager explorerManager; 58 59 private final BeanTreeView treeView; 60 private final javax.swing.JLabel notAvailableLabel = new javax.swing.JLabel ( 61 NbBundle.getMessage(NavigatorContent.class, "MSG_NotAvailable")); 63 66 public NavigatorContent() { 67 setLayout(new BorderLayout ()); 68 explorerManager = new ExplorerManager(); 69 treeView = new BeanTreeView(); 70 treeView.setRootVisible(false); 71 explorerManager.addPropertyChangeListener(this); 72 73 notAvailableLabel.setHorizontalAlignment(SwingConstants.CENTER); 75 notAvailableLabel.setEnabled(false); 76 Color usualWindowBkg = UIManager.getColor("window"); notAvailableLabel.setBackground(usualWindowBkg != null ? usualWindowBkg : Color.white); 78 notAvailableLabel.setOpaque(true); 80 } 81 82 public ExplorerManager getExplorerManager() { 83 return explorerManager; 84 } 85 86 public void show(DataObject dobj) { 87 AXIModel model = getAXIModel(dobj); 88 if (model == null || model.getState() != Model.State.VALID) { 89 showError(); 90 } else { 91 show(model.getRoot()); 92 } 93 } 94 95 private void showError() { 96 if (notAvailableLabel.isShowing()) { 97 return; 98 } 99 remove(treeView); 100 add(notAvailableLabel, BorderLayout.CENTER); 101 redraw(); 102 } 103 104 private void redraw() { 105 TopComponent tc = (TopComponent) SwingUtilities. 106 getAncestorOfClass(TopComponent.class,this); 107 if (tc != null) { 108 tc.revalidate(); 109 tc.repaint(); 110 } 111 } 112 113 private void show(AXIComponent component) { 114 remove(notAvailableLabel); 115 add(treeView, BorderLayout.CENTER); 116 AXINodeVisitor nv = new AXINodeVisitor(); 117 Node n = nv.getNode(component); 118 getExplorerManager().setRootContext(n); 119 redraw(); 120 } 121 122 125 public boolean requestFocusInWindow() { 126 return treeView.requestFocusInWindow(); 127 } 128 129 public void propertyChange(PropertyChangeEvent evt) { 130 String property = evt.getPropertyName(); 131 if(AXIModel.STATE_PROPERTY.equals(property)) { 132 onModelStateChanged(evt); 133 return; 134 } 135 136 TopComponent tc = (TopComponent) SwingUtilities. 137 getAncestorOfClass(TopComponent.class,this); 138 if (ExplorerManager.PROP_SELECTED_NODES.equals(property)) { 139 Node[] filteredNodes = (Node[])evt.getNewValue(); 140 if (filteredNodes != null && filteredNodes.length >= 1) { 141 if (tc != null) { 143 tc.setActivatedNodes(filteredNodes); 144 } 145 } 146 } else if(TopComponent.getRegistry().PROP_ACTIVATED.equals(property) && 147 tc == TopComponent.getRegistry().getActivated()) { 148 tc.setActivatedNodes(getExplorerManager().getSelectedNodes()); 149 } 150 } 151 152 public void onModelStateChanged(PropertyChangeEvent evt) { 153 State newState = (State)evt.getNewValue(); 154 if(newState != AXIModel.State.VALID) { 155 showError(); 156 return; 157 } 158 AXIModel model = (AXIModel)evt.getSource(); 159 show(model.getRoot()); 160 } 161 162 private AXIModel getAXIModel(DataObject dobj) { 164 try { 165 SchemaModelCookie modelCookie = (SchemaModelCookie)dobj. 166 getCookie(SchemaModelCookie.class); 167 assert modelCookie != null; 168 AXIModel model = AXIModelFactory.getDefault().getModel(modelCookie.getModel()); 169 if(model != null) { 170 model.removePropertyChangeListener(this); 171 model.addPropertyChangeListener(this); 172 } 173 174 return model; 175 } catch (IOException ioe) { 176 } 178 179 return null; 180 } 181 182 @Override 183 public void addNotify() { 184 super.addNotify(); 185 redraw(); 186 } 187 188 } 189 | Popular Tags |