1 19 package org.netbeans.modules.xml.schema.refactoring.ui; 20 21 import java.awt.*; 22 import java.beans.PropertyChangeEvent ; 23 import java.lang.ref.WeakReference ; 24 import javax.swing.*; 26 import org.netbeans.modules.xml.schema.refactoring.query.CustomizerResults; 27 import org.netbeans.modules.xml.schema.refactoring.query.Query; 28 import org.openide.ErrorManager; 29 import org.openide.nodes.NodeEvent; 30 import org.openide.nodes.NodeMemberEvent; 31 import org.openide.nodes.NodeReorderEvent; 32 import org.openide.windows.TopComponent; 33 import org.netbeans.modules.xml.nbprefuse.AnalysisViewer; 34 import org.netbeans.modules.xml.refactoring.ui.j.spi.ui.ParametersPanel; 35 import org.netbeans.modules.xml.schema.model.SchemaModel; 36 import org.openide.loaders.DataObject; 37 import org.openide.nodes.Node; 38 import org.openide.nodes.NodeListener; 39 import org.openide.util.WeakListeners; 40 41 47 public class QueryPanel extends JPanel implements NodeListener { 49 public static final long serialVersionUID = 1L; 50 51 53 private final Query query; 54 55 private transient boolean isVisible = false; 56 private transient ParametersPanel parametersPanel = null; 57 58 private WeakReference refCallerTC; 59 60 private AnalysisViewer analysisViewer; 61 62 private CustomizerResults results; 63 64 65 66 67 public QueryPanel(Query query) { 68 this(query,null); 69 } 70 71 72 @SuppressWarnings ("unchecked") 73 public QueryPanel(Query query, TopComponent caller) { 74 if (caller!=null) 75 refCallerTC = new WeakReference (caller); 76 this.query = query; 77 initialize(); 78 refresh(false); 79 } 80 81 82 public static void checkEventThread() { 83 if (!SwingUtilities.isEventDispatchThread()) { 84 ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, 85 new IllegalStateException ( 86 "This must happen in event thread!")); } 88 } 89 90 91 private void initialize() { 92 checkEventThread(); 93 setFocusCycleRoot(true); 94 setLayout(new BorderLayout()); 95 setName(query.getShortName()); 96 97 analysisViewer = new AnalysisViewer(); 98 analysisViewer.getPanel().setMinimumSize(new Dimension(10,10)); 101 analysisViewer.getPanel().setPreferredSize(new Dimension(10,10)); 102 add(analysisViewer, BorderLayout.CENTER); 103 validate(); 104 addDataOjectNodeListener(); 105 } 106 107 private void addDataOjectNodeListener() { 108 SchemaModel queryModel = query.getModel(); 109 assert queryModel != null : "null query model"; 110 DataObject dobj = (DataObject) queryModel.getModelSource().getLookup().lookup(DataObject.class); 111 assert dobj != null : "model source lookup has no data object"; 112 Node node = dobj.getNodeDelegate(); 113 node.addNodeListener((NodeListener)WeakListeners.create(NodeListener.class, this, node)); 114 } 115 116 void close() { 117 118 QueryPanelContainer.getUsagesComponent().removePanel(this); 119 closeNotify(); 120 } 121 122 public boolean getIsVisible() { 123 return this.isVisible; 124 } 125 126 public void setIsVisible(boolean isVisible){ 127 this.isVisible = isVisible; 128 } 129 130 private void refresh(final boolean showParametersPanel) { 131 checkEventThread(); 132 query.runQuery(this, analysisViewer); 133 134 } 135 136 private static void disableComponents(Container c) { 138 checkEventThread(); 139 Component children[] = c.getComponents(); 140 for (int i = 0; i < children.length; i++) { 141 if (children[i].isEnabled()) { 142 children[i].setEnabled(false); 143 } 144 if (children[i] instanceof Container) { 145 disableComponents((Container) children[i]); 146 } 147 } 148 } 149 150 protected void closeNotify() { 151 if (refCallerTC != null) { 153 TopComponent tc = (TopComponent) refCallerTC.get(); 154 if (tc != null && tc.isShowing()) { 155 tc.requestActive(); 156 } 157 } 158 } 160 161 165 166 168 176 190 public void childrenRemoved(NodeMemberEvent ev) { 191 } 192 193 public void childrenAdded(NodeMemberEvent ev) { 194 } 195 196 public void nodeDestroyed(NodeEvent ev) { 197 SwingUtilities.invokeLater(new Runnable () { 198 public void run() { 199 close(); 200 } 201 }); 202 } 203 204 public void childrenReordered(NodeReorderEvent ev) { 205 } 206 207 public void propertyChange(PropertyChangeEvent evt) { 208 } 209 210 211 212 } | Popular Tags |