1 19 20 package org.netbeans.modules.debugger.jpda.ui.views; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.util.ArrayList ; 24 import java.util.HashSet ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 import java.util.Set ; 28 import javax.swing.JComponent ; 29 30 import org.netbeans.api.debugger.DebuggerEngine; 31 import org.netbeans.api.debugger.DebuggerManager; 32 import org.netbeans.api.debugger.DebuggerManagerAdapter; 33 import org.netbeans.spi.viewmodel.Model; 34 import org.netbeans.spi.viewmodel.Models; 35 import org.netbeans.spi.viewmodel.ColumnModel; 36 import org.netbeans.spi.viewmodel.TableModelFilter; 37 import org.netbeans.spi.viewmodel.NodeActionsProvider; 38 import org.netbeans.spi.viewmodel.NodeActionsProviderFilter; 39 import org.netbeans.spi.viewmodel.NodeModel; 40 import org.netbeans.spi.viewmodel.NodeModelFilter; 41 import org.netbeans.spi.viewmodel.TableModel; 42 import org.netbeans.spi.viewmodel.TreeExpansionModel; 43 import org.netbeans.spi.viewmodel.TreeModel; 44 import org.netbeans.spi.viewmodel.TreeModelFilter; 45 import org.netbeans.spi.viewmodel.ModelListener; 46 import org.netbeans.spi.viewmodel.UnknownTypeException; 47 48 49 58 class ViewModelListener extends DebuggerManagerAdapter { 59 60 private static boolean verbose = 61 System.getProperty ("netbeans.debugger.models") != null; 62 63 private String viewType; 64 private JComponent view; 65 private List models = new ArrayList (11); 66 67 68 ViewModelListener ( 69 String viewType, 70 JComponent view 71 ) { 72 this.viewType = viewType; 73 this.view = view; 74 setUp(); 75 } 76 77 void setUp() { 78 DebuggerManager.getDebuggerManager ().addDebuggerListener ( 79 DebuggerManager.PROP_CURRENT_ENGINE, 80 this 81 ); 82 updateModel (); 83 } 84 85 void destroy () { 86 DebuggerManager.getDebuggerManager ().removeDebuggerListener ( 87 DebuggerManager.PROP_CURRENT_ENGINE, 88 this 89 ); 90 Models.setModelsToView ( 91 view, 92 Models.EMPTY_MODEL 93 ); 94 } 95 96 public void propertyChange (PropertyChangeEvent e) { 97 updateModel (); 98 } 99 100 private List joinLookups(DebuggerEngine e, DebuggerManager dm, Class service) { 101 List es = e.lookup (viewType, service); 102 List ms = dm.lookup(viewType, service); 103 ms.removeAll(es); 104 es.addAll(ms); 105 return es; 106 } 107 108 private synchronized void updateModel () { 109 DebuggerManager dm = DebuggerManager.getDebuggerManager (); 110 DebuggerEngine e = dm.getCurrentEngine (); 111 112 List treeModels; 113 List treeModelFilters; 114 List treeExpansionModels; 115 List nodeModels; 116 List nodeModelFilters; 117 List tableModels; 118 List tableModelFilters; 119 List nodeActionsProviders; 120 List nodeActionsProviderFilters; 121 List columnModels; 122 List mm; 123 if (e != null) { 124 treeModels = joinLookups(e, dm, TreeModel.class); 125 treeModelFilters = joinLookups(e, dm, TreeModelFilter.class); 126 treeExpansionModels = joinLookups(e, dm, TreeExpansionModel.class); 127 nodeModels = joinLookups(e, dm, NodeModel.class); 128 nodeModelFilters = joinLookups(e, dm, NodeModelFilter.class); 129 tableModels = joinLookups(e, dm, TableModel.class); 130 tableModelFilters = joinLookups(e, dm, TableModelFilter.class); 131 nodeActionsProviders = joinLookups(e, dm, NodeActionsProvider.class); 132 nodeActionsProviderFilters = joinLookups(e, dm, NodeActionsProviderFilter.class); 133 columnModels = joinLookups(e, dm, ColumnModel.class); 134 mm = joinLookups(e, dm, Model.class); 135 } else { 136 treeModels = dm.lookup (viewType, TreeModel.class); 137 treeModelFilters = dm.lookup (viewType, TreeModelFilter.class); 138 treeExpansionModels = dm.lookup (viewType, TreeExpansionModel.class); 139 nodeModels = dm.lookup (viewType, NodeModel.class); 140 nodeModelFilters = dm.lookup (viewType, NodeModelFilter.class); 141 tableModels = dm.lookup (viewType, TableModel.class); 142 tableModelFilters = dm.lookup (viewType, TableModelFilter.class); 143 nodeActionsProviders = dm.lookup (viewType, NodeActionsProvider.class); 144 nodeActionsProviderFilters = dm.lookup (viewType, NodeActionsProviderFilter.class); 145 columnModels = dm.lookup (viewType, ColumnModel.class); 146 mm = dm.lookup (viewType, Model.class); 147 } 148 149 models.clear(); 150 models.add(treeModels); 151 models.add(treeModelFilters); 152 models.add(treeExpansionModels); 153 models.add(nodeModels); 154 models.add(nodeModelFilters); 155 models.add(tableModels); 156 models.add(tableModelFilters); 157 models.add(nodeActionsProviders); 158 models.add(nodeActionsProviderFilters); 159 models.add(columnModels); 160 models.add(mm); 161 162 Models.setModelsToView ( 163 view, 164 Models.createCompoundModel (models) 165 ); 166 } 167 168 169 171 private static class EmptyModel implements NodeModel { 172 173 public String getDisplayName (Object node) throws UnknownTypeException { 174 if (node == TreeModel.ROOT) { 175 return "Name"; } 177 throw new UnknownTypeException (node); 178 } 179 180 public String getIconBase (Object node) throws UnknownTypeException { 181 if (node == TreeModel.ROOT) { 182 return "org/netbeans/modules/debugger/resources/DebuggerTab"; 183 } 184 throw new UnknownTypeException (node); 185 } 186 187 public String getShortDescription (Object node) 188 throws UnknownTypeException { 189 throw new UnknownTypeException (node); 190 } 191 192 public void addModelListener (ModelListener l) {} 193 public void removeModelListener (ModelListener l) {} 194 } 195 } 196 | Popular Tags |