blob: f6381e2709ec996440ed5c83fdf1346345402466 [file] [log] [blame]
/*
* 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)
);
}
}