| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.ant.debugger; |
| |
| import java.util.Vector; |
| |
| import org.netbeans.api.debugger.Watch; |
| import org.netbeans.spi.debugger.ContextProvider; |
| import org.netbeans.spi.viewmodel.ModelEvent; |
| import org.netbeans.spi.viewmodel.NodeModel; |
| import org.netbeans.spi.viewmodel.TableModel; |
| import org.netbeans.spi.viewmodel.ModelListener; |
| import org.netbeans.spi.viewmodel.UnknownTypeException; |
| import org.netbeans.spi.debugger.ui.Constants; |
| import org.netbeans.spi.viewmodel.NodeModelFilter; |
| import org.openide.util.NbBundle; |
| |
| /** |
| * |
| * @author Jan Jancura |
| */ |
| public class WatchesModel implements NodeModelFilter, TableModel { |
| |
| public static final String WATCH = |
| "org/netbeans/modules/debugger/resources/watchesView/Watch"; |
| |
| private AntDebugger debugger; |
| private Vector listeners = new Vector (); |
| |
| |
| public WatchesModel (ContextProvider contextProvider) { |
| debugger = contextProvider.lookupFirst |
| (null, AntDebugger.class); |
| debugger.setWatchesModel(this); |
| } |
| |
| |
| // NodeModelFilter implementation ................................................ |
| |
| /** |
| * Returns display name for given node. |
| * |
| * @throws ComputingException if the display name resolving process |
| * is time consuming, and the value will be updated later |
| * @throws UnknownTypeException if this NodeModel implementation is not |
| * able to resolve display name for given node type |
| * @return display name for given node |
| */ |
| @Override |
| public String getDisplayName (NodeModel model, Object node) throws UnknownTypeException { |
| return model.getDisplayName(node); |
| } |
| |
| /** |
| * Returns icon for given node. |
| * |
| * @throws ComputingException if the icon resolving process |
| * is time consuming, and the value will be updated later |
| * @throws UnknownTypeException if this NodeModel implementation is not |
| * able to resolve icon for given node type |
| * @return icon for given node |
| */ |
| @Override |
| public String getIconBase (NodeModel model, Object node) throws UnknownTypeException { |
| return model.getIconBase(node); |
| } |
| |
| /** |
| * Returns tooltip for given node. |
| * |
| * @throws ComputingException if the tooltip resolving process |
| * is time consuming, and the value will be updated later |
| * @throws UnknownTypeException if this NodeModel implementation is not |
| * able to resolve tooltip for given node type |
| * @return tooltip for given node |
| */ |
| @Override |
| public String getShortDescription (NodeModel model, Object node) throws UnknownTypeException { |
| if (node instanceof Watch) { |
| if (!((Watch) node).isEnabled()) { |
| return NbBundle.getMessage(WatchesModel.class, "CTL_WatchDisabled"); |
| } |
| String expression = ((Watch) node).getExpression (); |
| return debugger.getVariableValue (expression); |
| } |
| return model.getShortDescription(node); |
| } |
| |
| |
| // TableModel implementation ............................................... |
| |
| /** |
| * Returns value to be displayed in column <code>columnID</code> |
| * and row identified by <code>node</code>. Column ID is defined in by |
| * {@link ColumnModel#getID}, and rows are defined by values returned from |
| * {@link org.netbeans.spi.viewmodel.TreeModel#getChildren}. |
| * |
| * @param node a object returned from |
| * {@link org.netbeans.spi.viewmodel.TreeModel#getChildren} for this row |
| * @param columnID a id of column defined by {@link ColumnModel#getID} |
| * @throws ComputingException if the value is not known yet and will |
| * be computed later |
| * @throws UnknownTypeException if there is no TableModel defined for given |
| * parameter type |
| * |
| * @return value of variable representing given position in tree table. |
| */ |
| @Override |
| public Object getValueAt (Object node, String columnID) throws |
| UnknownTypeException { |
| if (columnID == Constants.WATCH_TO_STRING_COLUMN_ID || |
| columnID == Constants.WATCH_VALUE_COLUMN_ID |
| ) { |
| if (node instanceof Watch) { |
| if (!((Watch) node).isEnabled()) { |
| return NbBundle.getMessage(WatchesModel.class, "CTL_WatchDisabled"); |
| } |
| String expression = ((Watch) node).getExpression (); |
| return debugger.getVariableValue (expression); |
| } |
| } |
| if (columnID == Constants.WATCH_TYPE_COLUMN_ID && |
| node instanceof Watch |
| ) |
| return ""; |
| throw new UnknownTypeException (node); |
| } |
| |
| /** |
| * Returns true if value displayed in column <code>columnID</code> |
| * and row <code>node</code> is read only. Column ID is defined in by |
| * {@link ColumnModel#getID}, and rows are defined by values returned from |
| * {@link TreeModel#getChildren}. |
| * |
| * @param node a object returned from {@link TreeModel#getChildren} for this row |
| * @param columnID a id of column defined by {@link ColumnModel#getID} |
| * @throws UnknownTypeException if there is no TableModel defined for given |
| * parameter type |
| * |
| * @return true if variable on given position is read only |
| */ |
| @Override |
| public boolean isReadOnly (Object node, String columnID) throws |
| UnknownTypeException { |
| if (columnID == Constants.WATCH_TO_STRING_COLUMN_ID || |
| columnID == Constants.WATCH_VALUE_COLUMN_ID || |
| columnID == Constants.WATCH_TYPE_COLUMN_ID |
| ) { |
| if (node instanceof Watch) |
| return true; |
| } |
| throw new UnknownTypeException (node); |
| } |
| |
| /** |
| * Changes a value displayed in column <code>columnID</code> |
| * and row <code>node</code>. Column ID is defined in by |
| * {@link ColumnModel#getID}, and rows are defined by values returned from |
| * {@link TreeModel#getChildren}. |
| * |
| * @param node a object returned from {@link TreeModel#getChildren} for this row |
| * @param columnID a id of column defined by {@link ColumnModel#getID} |
| * @param value a new value of variable on given position |
| * @throws UnknownTypeException if there is no TableModel defined for given |
| * parameter type |
| */ |
| @Override |
| public void setValueAt (Object node, String columnID, Object value) |
| throws UnknownTypeException { |
| throw new UnknownTypeException (node); |
| } |
| |
| |
| /** |
| * Registers given listener. |
| * |
| * @param l the listener to add |
| */ |
| @Override |
| public void addModelListener (ModelListener l) { |
| listeners.add (l); |
| } |
| |
| /** |
| * Unregisters given listener. |
| * |
| * @param l the listener to remove |
| */ |
| @Override |
| public void removeModelListener (ModelListener l) { |
| listeners.remove (l); |
| } |
| |
| |
| // other mothods ........................................................... |
| |
| void fireChanges () { |
| Vector v = (Vector) listeners.clone (); |
| int i, k = v.size (); |
| for (i = 0; i < k; i++) |
| ((ModelListener) v.get (i)).modelChanged ( |
| new ModelEvent.TreeChanged (this) |
| ); |
| } |
| |
| } |