Index: apichanges.xml
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/apichanges.xml,v
retrieving revision 1.17
diff -u -r1.17 apichanges.xml
--- apichanges.xml 30 Jun 2006 18:59:07 -0000 1.17
+++ apichanges.xml 25 May 2007 15:14:46 -0000
@@ -14,7 +14,7 @@
"Portions Copyrighted [year] [name of copyright owner]"
The Original Software is NetBeans. The Initial Developer of the Original
-Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
Microsystems, Inc. All Rights Reserved.
-->
@@ -221,6 +221,28 @@
+
+
+
+ Extension to NodeModel.
+
+
+
+
+
+ Add ability to in-place rename and copy/paste functionality to nodes
+ in debugger views. Also, the models needs to have a way to provide
+ an icon with arbitrary extension. Therefore following methods are
+ provided with new ExtendedNodeModel
and ExtendedNodeModelFilter
interfaces
+ and are also added into CompoundModel
:
+ canRename()
, canCopy()
, canCut()
,
+ clipboardCopy()
, clipboardCut()
, getPasteTypes()
,
+ setName()
, getIconBaseWithExtension()
.
+
+
+
+
+
Index: manifest.mf
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/manifest.mf,v
retrieving revision 1.17
diff -u -r1.17 manifest.mf
--- manifest.mf 10 Feb 2006 14:56:03 -0000 1.17
+++ manifest.mf 25 May 2007 15:14:46 -0000
@@ -1,5 +1,5 @@
Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.spi.viewmodel/2
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/viewmodel/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.11
+OpenIDE-Module-Specification-Version: 1.12
Index: nbproject/project.properties
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/nbproject/project.properties,v
retrieving revision 1.7
diff -u -r1.7 project.properties
--- nbproject/project.properties 16 Aug 2006 06:28:19 -0000 1.7
+++ nbproject/project.properties 25 May 2007 15:14:46 -0000
@@ -16,6 +16,8 @@
# Microsystems, Inc. All Rights Reserved.
is.autoload=true
+javac.compilerargs=-Xlint:unchecked
+javac.source=1.5
javadoc.arch=${basedir}/arch.xml
javadoc.apichanges=${basedir}/apichanges.xml
# Need extra runtime dependency on modules which are loaded transitively:
Index: src/org/netbeans/modules/viewmodel/TreeModelNode.java
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/src/org/netbeans/modules/viewmodel/TreeModelNode.java,v
retrieving revision 1.51
diff -u -r1.51 TreeModelNode.java
--- src/org/netbeans/modules/viewmodel/TreeModelNode.java 27 Mar 2007 17:42:35 -0000 1.51
+++ src/org/netbeans/modules/viewmodel/TreeModelNode.java 25 May 2007 15:14:47 -0000
@@ -13,17 +13,19 @@
* "Portions Copyrighted [year] [name of copyright owner]"
*
* The Original Software is NetBeans. The Initial Developer of the Original
- * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.viewmodel;
+import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.beans.PropertyEditor;
import java.lang.IllegalAccessException;
import java.lang.ref.WeakReference;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -53,6 +55,7 @@
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
import org.openide.util.RequestProcessor.Task;
+import org.openide.util.datatransfer.PasteType;
import org.openide.util.lookup.Lookups;
@@ -203,11 +206,23 @@
}
public boolean canCopy () {
- return false;
+ try {
+ return model.canCopy(object);
+ } catch (UnknownTypeException e) {
+ Throwable t = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, t);
+ return false;
+ }
}
public boolean canCut () {
- return false;
+ try {
+ return model.canCut(object);
+ } catch (UnknownTypeException e) {
+ Throwable t = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, t);
+ return false;
+ }
}
public void destroy () {
@@ -296,9 +311,9 @@
}
} else if ((ModelEvent.NodeChanged.ICON_MASK & changeMask) != 0) {
try {
- String iconBase = model.getIconBase (object);
+ String iconBase = model.getIconBaseWithExtension (object);
if (iconBase != null)
- setIconBase (iconBase);
+ setIconBaseWithExtension (iconBase);
else
setIconBaseWithExtension ("org/openide/resources/actions/empty.gif");
} catch (UnknownTypeException e) {
@@ -363,9 +378,9 @@
ErrorManager.getDefault().notify(t);
}
setName (name, false);
- String iconBase = model.getIconBase (object);
+ String iconBase = model.getIconBaseWithExtension (object);
if (iconBase != null)
- setIconBase (iconBase);
+ setIconBaseWithExtension (iconBase);
else
setIconBaseWithExtension ("org/openide/resources/actions/empty.gif");
firePropertyChange(null, null, null);
@@ -466,6 +481,110 @@
return text;
}
+
+ public boolean canRename() {
+ try {
+ return model.canRename(object);
+ } catch (UnknownTypeException e) {
+ Throwable t = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, t);
+ return false;
+ }
+ }
+
+ public void setName(String s) {
+ try {
+ model.setName(object, s);
+ super.setName(s);
+ } catch (UnknownTypeException e) {
+ Throwable t = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, t);
+ }
+ }
+
+ public Transferable clipboardCopy() throws IOException {
+ Transferable t;
+ try {
+ t = model.clipboardCopy(object);
+ } catch (UnknownTypeException e) {
+ Throwable th = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, th);
+ t = null;
+ }
+ if (t == null) {
+ return super.clipboardCopy();
+ } else {
+ return t;
+ }
+ }
+
+ public Transferable clipboardCut() throws IOException {
+ Transferable t;
+ try {
+ t = model.clipboardCut(object);
+ } catch (UnknownTypeException e) {
+ Throwable th = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, th);
+ t = null;
+ }
+ if (t == null) {
+ return super.clipboardCut();
+ } else {
+ return t;
+ }
+ }
+
+ /*
+ public Transferable drag() throws IOException {
+ Transferable t;
+ try {
+ t = model.drag(object);
+ } catch (UnknownTypeException e) {
+ Throwable th = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, th);
+ t = null;
+ }
+ if (t == null) {
+ return super.drag();
+ } else {
+ return t;
+ }
+ }
+ */
+
+ public void createPasteTypes(Transferable t, List l) {
+ PasteType[] p;
+ try {
+ p = model.getPasteTypes(object, t);
+ } catch (UnknownTypeException e) {
+ Throwable th = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, th);
+ p = null;
+ }
+ if (p == null) {
+ super.createPasteTypes(t, l);
+ } else {
+ l.addAll(Arrays.asList(p));
+ }
+ }
+
+ /*
+ public PasteType getDropType(Transferable t, int action, int index) {
+ PasteType p;
+ try {
+ p = model.getDropType(object, t, action, index);
+ } catch (UnknownTypeException e) {
+ Throwable th = ErrorManager.getDefault().annotate(e, "Model: "+model);
+ ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, th);
+ p = null;
+ }
+ if (p == null) {
+ return super.getDropType(t, action, index);
+ } else {
+ return p;
+ }
+ }
+ */
// innerclasses ............................................................
Index: src/org/netbeans/modules/viewmodel/TreeTable.java
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/src/org/netbeans/modules/viewmodel/TreeTable.java,v
retrieving revision 1.27
diff -u -r1.27 TreeTable.java
--- src/org/netbeans/modules/viewmodel/TreeTable.java 18 Nov 2006 21:26:05 -0000 1.27
+++ src/org/netbeans/modules/viewmodel/TreeTable.java 25 May 2007 15:14:47 -0000
@@ -35,6 +35,7 @@
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.table.TableColumn;
+import javax.swing.text.DefaultEditorKit;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
@@ -51,6 +52,7 @@
import org.openide.explorer.view.NodeTableModel;
import org.openide.explorer.view.TreeTableView;
+import org.openide.explorer.view.TreeView;
import org.openide.explorer.view.Visualizer;
import org.openide.nodes.AbstractNode;
@@ -91,8 +93,11 @@
add (treeTable, "Center"); //NOI18N
treeTable.getTree ().addTreeExpansionListener (this);
ActionMap map = getActionMap();
- map.put("delete", ExplorerUtils.actionDelete(getExplorerManager(), false));
-
+ ExplorerManager manager = getExplorerManager();
+ map.put(DefaultEditorKit.copyAction, ExplorerUtils.actionCopy(manager));
+ map.put(DefaultEditorKit.cutAction, ExplorerUtils.actionCut(manager));
+ map.put(DefaultEditorKit.pasteAction, ExplorerUtils.actionPaste(manager));
+ map.put("delete", ExplorerUtils.actionDelete(manager, false));
}
public void setModel (Models.CompoundModel model) {
@@ -310,13 +315,15 @@
public void addNotify () {
super.addNotify ();
TopComponent.getRegistry ().addPropertyChangeListener (this);
+ ExplorerUtils.activateActions(getExplorerManager (), true);
getExplorerManager ().addPropertyChangeListener (this);
}
public void removeNotify () {
- super.removeNotify ();
TopComponent.getRegistry ().removePropertyChangeListener (this);
+ ExplorerUtils.activateActions(getExplorerManager (), false);
getExplorerManager ().removePropertyChangeListener (this);
+ super.removeNotify ();
}
public boolean isExpanded (Object node) {
cvs server: src/org/netbeans/spi/viewmodel/ExtendedNodeModel.java is a new entry, no comparison available
cvs server: src/org/netbeans/spi/viewmodel/ExtendedNodeModelFilter.java is a new entry, no comparison available
Index: src/org/netbeans/spi/viewmodel/Models.java
===================================================================
RCS file: /shared/data/ccvs/repository/debuggercore/viewmodel/src/org/netbeans/spi/viewmodel/Models.java,v
retrieving revision 1.30
diff -u -r1.30 Models.java
--- src/org/netbeans/spi/viewmodel/Models.java 31 Oct 2006 10:51:24 -0000 1.30
+++ src/org/netbeans/spi/viewmodel/Models.java 25 May 2007 15:14:47 -0000
@@ -13,15 +13,16 @@
* "Portions Copyrighted [year] [name of copyright owner]"
*
* The Original Software is NetBeans. The Initial Developer of the Original
- * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.spi.viewmodel;
+import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
+import java.io.IOException;
import java.lang.StringBuffer;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -39,13 +40,14 @@
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
-import org.netbeans.modules.viewmodel.TreeModelNode;
import org.netbeans.modules.viewmodel.TreeTable;
import org.netbeans.spi.viewmodel.ColumnModel;
import org.netbeans.spi.viewmodel.NodeActionsProvider;
import org.netbeans.spi.viewmodel.NodeActionsProviderFilter;
import org.netbeans.spi.viewmodel.NodeModel;
+import org.netbeans.spi.viewmodel.ExtendedNodeModel;
+import org.netbeans.spi.viewmodel.ExtendedNodeModelFilter;
import org.netbeans.spi.viewmodel.NodeModelFilter;
import org.netbeans.spi.viewmodel.TableModel;
import org.netbeans.spi.viewmodel.TableModelFilter;
@@ -53,9 +55,10 @@
import org.netbeans.spi.viewmodel.TreeModelFilter;
import org.netbeans.spi.viewmodel.ModelListener;
import org.netbeans.spi.viewmodel.UnknownTypeException;
+
import org.openide.nodes.Node;
import org.openide.util.WeakSet;
-
+import org.openide.util.datatransfer.PasteType;
import org.openide.windows.TopComponent;
@@ -374,11 +377,11 @@
*
* @returns compund tree model
*/
- private static NodeModel createCompoundNodeModel (
- NodeModel originalNodeModel,
+ private static ExtendedNodeModel createCompoundNodeModel (
+ ExtendedNodeModel originalNodeModel,
List treeNodeModelFilters
) {
- NodeModel nm = originalNodeModel;
+ ExtendedNodeModel nm = originalNodeModel;
int i, k = treeNodeModelFilters.size ();
for (i = 0; i < k; i++)
nm = new CompoundNodeModel (
@@ -695,10 +698,10 @@
*
* @author Jan Jancura
*/
- final static class CompoundNodeModel implements NodeModel, ModelListener {
+ final static class CompoundNodeModel implements ExtendedNodeModel, ModelListener {
- private NodeModel model;
+ private ExtendedNodeModel model;
private NodeModelFilter filter;
private Collection modelListeners = new HashSet();
@@ -708,7 +711,7 @@
* Creates {@link org.netbeans.spi.viewmodel.TreeModel} for given TreeModel and
* {@link org.netbeans.spi.viewmodel.TreeModelFilter}.
*/
- CompoundNodeModel (NodeModel model, NodeModelFilter filter) {
+ CompoundNodeModel (ExtendedNodeModel model, NodeModelFilter filter) {
this.model = model;
this.filter = filter;
}
@@ -805,6 +808,90 @@
return n + filter + "\n" +
n + " " + model;
}
+
+ public boolean canRename(Object node) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).canRename(model, node);
+ } else {
+ return model.canRename(node);
+ }
+ }
+
+ public boolean canCopy(Object node) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).canCopy(model, node);
+ } else {
+ return model.canCopy(node);
+ }
+ }
+
+ public boolean canCut(Object node) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).canCut(model, node);
+ } else {
+ return model.canCut(node);
+ }
+ }
+
+ public Transferable clipboardCopy(Object node) throws IOException,
+ UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).clipboardCopy(model, node);
+ } else {
+ return model.clipboardCopy(node);
+ }
+ }
+
+ public Transferable clipboardCut(Object node) throws IOException,
+ UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).clipboardCut(model, node);
+ } else {
+ return model.clipboardCut(node);
+ }
+ }
+
+ /*public Transferable drag(Object node) throws IOException,
+ UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).drag(model, node);
+ } else {
+ return model.drag(node);
+ }
+ }*/
+
+ public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).getPasteTypes(model, node, t);
+ } else {
+ return model.getPasteTypes(node, t);
+ }
+ }
+
+ /*public PasteType getDropType(Object node, Transferable t, int action,
+ int index) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).getDropType(model, node, t, action, index);
+ } else {
+ return model.getDropType(node, t, action, index);
+ }
+ }*/
+
+ public void setName(Object node, String name) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ ((ExtendedNodeModelFilter) filter).setName(model, node, name);
+ } else {
+ model.setName(node, name);
+ }
+ }
+
+ public String getIconBaseWithExtension(Object node) throws UnknownTypeException {
+ if (filter instanceof ExtendedNodeModelFilter) {
+ return ((ExtendedNodeModelFilter) filter).getIconBaseWithExtension(model, node);
+ } else {
+ return model.getIconBaseWithExtension(node);
+ }
+ }
}
/**
@@ -1546,7 +1633,7 @@
*
* @author Jan Jancura
*/
- static final class DelegatingNodeModel implements NodeModel {
+ static final class DelegatingNodeModel implements ExtendedNodeModel {
private NodeModel[] models;
private HashMap classNameToModel = new HashMap ();
@@ -1712,6 +1799,459 @@
sb.append (models [i]);
return new String (sb);
}
+
+ // Extensions:
+
+ private boolean defaultCanRename() {
+ return false;
+ }
+
+ private boolean defaultCanCopy() {
+ return false;
+ }
+
+ private boolean defaultCanCut() {
+ return false;
+ }
+
+ private Transferable defaultClipboardCopy() throws IOException {
+ return null;
+ }
+
+ private Transferable defaultClipboardCut() throws IOException {
+ return null;
+ }
+
+ /*
+ private Transferable defaultDrag() throws IOException {
+ return null;
+ }
+ */
+
+ private PasteType[] defaultGetPasteTypes(Transferable t) {
+ return null;
+ }
+
+ /*
+ private PasteType defaultGetDropType(Transferable t, int action,
+ int index) {
+ return null;
+ }
+ */
+
+ private void defaultSetName(String name) {
+ // nothing
+ }
+
+ public boolean canRename(Object node) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).canRename (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultCanRename();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ boolean cr = ((ExtendedNodeModel) models [i]).canRename (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return cr;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultCanRename();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ public boolean canCopy(Object node) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).canCopy (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultCanCopy();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ boolean cr = ((ExtendedNodeModel) models [i]).canCopy (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return cr;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultCanCopy();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ public boolean canCut(Object node) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).canCut (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultCanCut();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ boolean cr = ((ExtendedNodeModel) models [i]).canCut (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return cr;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultCanCut();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ public Transferable clipboardCopy(Object node) throws IOException,
+ UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).clipboardCopy (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultClipboardCopy();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ Transferable t = ((ExtendedNodeModel) models [i]).clipboardCopy (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return t;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultClipboardCopy();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ public Transferable clipboardCut(Object node) throws IOException,
+ UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).clipboardCut (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultClipboardCut();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ Transferable t = ((ExtendedNodeModel) models [i]).clipboardCut (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return t;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultClipboardCut();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ /*
+ public Transferable drag(Object node) throws IOException,
+ UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).drag (node);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultDrag();
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ Transferable t = ((ExtendedNodeModel) models [i]).drag (node);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return t;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultDrag();
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+ */
+
+ public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).getPasteTypes (node, t);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultGetPasteTypes(t);
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ PasteType[] p = ((ExtendedNodeModel) models [i]).getPasteTypes (node, t);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return p;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultGetPasteTypes(t);
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ /*
+ public PasteType getDropType(Object node, Transferable t, int action,
+ int index) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ return ((ExtendedNodeModel) model).getDropType (node, t, action, index);
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ return defaultGetDropType(t, action, index);
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ PasteType p = ((ExtendedNodeModel) models [i]).getDropType (node, t, action, index);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return p;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ return defaultGetDropType(t, action, index);
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+ */
+
+ public void setName(Object node, String name) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ if (model instanceof ExtendedNodeModel) {
+ try {
+ ((ExtendedNodeModel) model).setName (node, name);
+ return ;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ } else {
+ defaultSetName(name);
+ return ;
+ }
+ }
+ int i, k = models.length;
+ boolean isExtended = false;
+ for (i = 0; i < k; i++) {
+ if (models[i] instanceof ExtendedNodeModel) {
+ try {
+ ((ExtendedNodeModel) models [i]).setName (node, name);
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return ;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ isExtended = true;
+ }
+ }
+ if (!isExtended) {
+ defaultSetName(name);
+ return ;
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+ }
+
+ public String getIconBaseWithExtension(Object node) throws UnknownTypeException {
+ UnknownTypeException uex = null;
+ NodeModel model = (NodeModel) classNameToModel.get (
+ node.getClass ().getName ()
+ );
+ if (model != null) {
+ try {
+ if (model instanceof ExtendedNodeModel) {
+ return ((ExtendedNodeModel) model).getIconBaseWithExtension (node);
+ } else {
+ return model.getIconBase(node)+".gif";
+ }
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ }
+ int i, k = models.length;
+ for (i = 0; i < k; i++) {
+ try {
+ String ib;
+ if (models[i] instanceof ExtendedNodeModel) {
+ ib = ((ExtendedNodeModel) models [i]).getIconBaseWithExtension (node);
+ } else {
+ ib = models [i].getIconBase(node)+".gif";
+ }
+ classNameToModel.put (node.getClass ().getName (), models [i]);
+ return ib;
+ } catch (UnknownTypeException e) {
+ uex = e;
+ }
+ }
+ if (uex != null) {
+ throw uex;
+ } else {
+ throw new UnknownTypeException (node);
+ }
+
+ }
}
/**
@@ -2120,10 +2660,10 @@
* @author Jan Jancura
*/
public static final class CompoundModel implements TreeModel,
- NodeModel, NodeActionsProvider, TableModel, TreeExpansionModel {
+ ExtendedNodeModel, NodeActionsProvider, TableModel, TreeExpansionModel {
private TreeModel treeModel;
- private NodeModel nodeModel;
+ private ExtendedNodeModel nodeModel;
private NodeActionsProvider nodeActionsProvider;
private ColumnModel[] columnModels;
private TableModel tableModel;
@@ -2148,7 +2688,7 @@
private CompoundModel (
TreeModel treeModel,
TreeExpansionModel treeExpansionModel,
- NodeModel nodeModel,
+ ExtendedNodeModel nodeModel,
NodeActionsProvider nodeActionsProvider,
List columnModels,
TableModel tableModel,
@@ -2412,6 +2952,56 @@
"\n TableModel = " + tableModel +
"\n NodeActionsProvider = " + nodeActionsProvider +
"\n ColumnsModel = " + java.util.Arrays.asList(columnModels);
+ }
+
+ // ExtendedNodeModel
+
+ public boolean canRename(Object node) throws UnknownTypeException {
+ return nodeModel.canRename(node);
+ }
+
+ public boolean canCopy(Object node) throws UnknownTypeException {
+ return nodeModel.canCopy(node);
+ }
+
+ public boolean canCut(Object node) throws UnknownTypeException {
+ return nodeModel.canCut(node);
+ }
+
+ public Transferable clipboardCopy(Object node) throws IOException,
+ UnknownTypeException {
+ return nodeModel.clipboardCopy(node);
+ }
+
+ public Transferable clipboardCut(Object node) throws IOException,
+ UnknownTypeException {
+ return nodeModel.clipboardCut(node);
+ }
+
+ /*
+ public Transferable drag(Object node) throws IOException,
+ UnknownTypeException {
+ return nodeModel.drag(node);
+ }
+ */
+
+ public PasteType[] getPasteTypes(Object node, Transferable t) throws UnknownTypeException {
+ return nodeModel.getPasteTypes(node, t);
+ }
+
+ /*
+ public PasteType getDropType(Object node, Transferable t, int action,
+ int index) throws UnknownTypeException {
+ return nodeModel.getDropType(node, t, action, index);
+ }
+ */
+
+ public void setName(Object node, String name) throws UnknownTypeException {
+ nodeModel.setName(node, name);
+ }
+
+ public String getIconBaseWithExtension(Object node) throws UnknownTypeException {
+ return nodeModel.getIconBaseWithExtension(node);
}
}
}