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); } } }