|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.vcs.advanced.variables; import java.awt.datatransfer.*; import java.util.Collection; import org.openide.cookies.InstanceCookie; import org.openide.nodes.*; import org.openide.util.datatransfer.PasteType; import org.netbeans.modules.vcscore.util.VcsUtilities; import org.openide.ErrorManager; class ConditionCopySupport extends Object { public static DataFlavor CONDITION_COPY_FLAVOR = new ConditionDataFlavor( AbstractNode.class, "CONDITION_COPY_FLAVOR"); // NOI18N public static DataFlavor CONDITION_CUT_FLAVOR = new ConditionDataFlavor( AbstractNode.class, "CONDITION_CUT_FLAVOR"); // NOI18N public static DataFlavor VAR_COPY_FLAVOR = new ConditionDataFlavor( AbstractNode.class, "VAR_COPY_FLAVOR"); // NOI18N public static DataFlavor VAR_CUT_FLAVOR = new ConditionDataFlavor( AbstractNode.class, "VAR_CUT_FLAVOR"); // NOI18N static class ConditionDataFlavor extends DataFlavor { private static final long serialVersionUID = 2413511288102054407L; ConditionDataFlavor(Class representationClass, String name) { super(representationClass, name); } } public static class ConditionTransferable implements Transferable { private AbstractNode var; private DataFlavor[] flavors; ConditionTransferable(DataFlavor flavor, AbstractNode var) { this(new DataFlavor[] { flavor }, var); } ConditionTransferable(DataFlavor[] flavors, AbstractNode var) { this.flavors = flavors; this.var = var; } public DataFlavor[] getTransferDataFlavors() { return flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { for (int i = 0; i < flavors.length; i++) { if (flavors[i] == flavor) { // comparison based on exact instances, as these are static in this node return true; } } return false; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, java.io.IOException { if (flavor instanceof ConditionDataFlavor) { return var; } throw new UnsupportedFlavorException(flavor); } } /** Paste type for meta components. */ public static class ConditionPaste extends PasteType { private Transferable transferable; private AbstractNode targetNode; //private FormModel targetForm; public ConditionPaste(Transferable t, AbstractNode targetNode) { this.transferable = t; this.targetNode = targetNode; } public Transferable paste() throws java.io.IOException { boolean fromCut = transferable.isDataFlavorSupported(CONDITION_CUT_FLAVOR); AbstractNode sourceNode = null; try { sourceNode = (AbstractNode) transferable.getTransferData(fromCut ? CONDITION_CUT_FLAVOR : CONDITION_COPY_FLAVOR); } catch (java.io.IOException e) { ErrorManager.getDefault().notify(e); } // ignore - should not happen catch (UnsupportedFlavorException e) { ErrorManager.getDefault().notify(e); } // ignore - should not happen if (!fromCut) { // pasting copy of RADComponent copyConditions(sourceNode, targetNode); return null; } else { // pasting cut RADComponent (same instance) if (!targetNode.equals(sourceNode.getParentNode())) { sourceNode.destroy(); copyConditions(sourceNode, targetNode); return null; } // return new copy flavor, as the first one was used already return new ConditionTransferable(CONDITION_COPY_FLAVOR, sourceNode); } } } /** Paste type for meta components. */ public static class VarPaste extends PasteType { private Transferable transferable; private AbstractNode targetNode; //private FormModel targetForm; public VarPaste(Transferable t, AbstractNode targetNode) { this.transferable = t; this.targetNode = targetNode; } public Transferable paste() throws java.io.IOException { boolean fromCut = transferable.isDataFlavorSupported(VAR_CUT_FLAVOR); AbstractNode sourceNode = null; try { sourceNode = (AbstractNode) transferable.getTransferData(fromCut ? VAR_CUT_FLAVOR : VAR_COPY_FLAVOR); } catch (java.io.IOException e) { ErrorManager.getDefault().notify(e); } // ignore - should not happen catch (UnsupportedFlavorException e) { ErrorManager.getDefault().notify(e); } // ignore - should not happen if (!fromCut) { // pasting copy of RADComponent copyVars(sourceNode, targetNode); return null; } else { // pasting cut RADComponent (same instance) if (!targetNode.equals(sourceNode.getParentNode())) { sourceNode.destroy(); copyVars(sourceNode, targetNode); return null; } // return new copy flavor, as the first one was used already return new ConditionTransferable(VAR_COPY_FLAVOR, sourceNode); } } } private static void copyConditions(AbstractNode sourceNode, AbstractNode targetNode) { Condition c; if (sourceNode instanceof ConditionNode) { c = ((ConditionNode) sourceNode).getCondition(); } else return ; if (c == null) return ; c = (Condition) c.clone(); Node newNode = new ConditionNode(c); Collection conditionNames = ConditionNode.getAllConditionsNames(targetNode); c.setName(VcsUtilities.createUniqueName(c.getName(), conditionNames)); targetNode.getChildren().add(new Node[] { newNode }); } private static void copyVars(AbstractNode sourceNode, AbstractNode targetNode) { Condition.Var var; if (sourceNode instanceof ConditionNode.VariableNode) { var = ((ConditionNode.VariableNode) sourceNode).getVar(); } else return ; if (var == null) return ; var = (Condition.Var) var.clone(); Node newNode = new ConditionNode.VariableNode(((ConditionNode.VariableNode) sourceNode).getEnclosingCondition(), var); //Collection conditionNames = ConditionNode.getAllConditionsNames(targetNode); //c.setName(VcsUtilities.createUniqueName(c.getName(), conditionNames)); targetNode.getChildren().add(new Node[] { newNode }); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.