|
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-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.vcs.advanced.variables;
import java.awt.datatransfer.*;
import java.util.Collection;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
import org.openide.cookies.InstanceCookie;
import org.openide.nodes.*;
import org.openide.util.datatransfer.PasteType;
import org.netbeans.modules.vcscore.Variables;
import org.netbeans.modules.vcscore.VcsConfigVariable;
import org.netbeans.modules.vcscore.commands.VcsCommand;
import org.netbeans.modules.vcscore.util.VcsUtilities;
class VariableCopySupport extends Object {
public static DataFlavor VARIABLE_COPY_FLAVOR = new VariableDataFlavor(
AbstractNode.class,
"VARIABLE_COPY_FLAVOR"); // NOI18N
public static DataFlavor VARIABLE_CUT_FLAVOR = new VariableDataFlavor(
AbstractNode.class,
"VARIABLE_COPY_FLAVOR"); // NOI18N
static class VariableDataFlavor extends DataFlavor {
private static final long serialVersionUID = 3504410287291109201L;
VariableDataFlavor(Class representationClass, String name) {
super(representationClass, name);
}
}
// -----------
public static class VariableTransferable implements Transferable {
private AbstractNode var;
private DataFlavor[] flavors;
VariableTransferable(DataFlavor flavor, AbstractNode var) {
this(new DataFlavor[] { flavor }, var);
}
VariableTransferable(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 VariableDataFlavor) {
return var;
}
throw new UnsupportedFlavorException(flavor);
}
}
// -----------
/** Method for checking whether a component can be moved to a container
* (the component should not be pasted to its own sub-container
* or even to itself). *
public static boolean canPasteCut(VcsCommand sourceCmd,
FormModel targetForm,
ComponentContainer targetContainer) {
if (sourceComponent.getFormModel() != targetForm)
return true;
if (targetContainer == null
|| targetContainer == targetForm.getModelContainer())
return targetForm.getModelContainer().getIndexOf(sourceComponent) < 0;
RADComponent targetComponent = (RADComponent) targetContainer;
return sourceComponent != targetComponent
&& sourceComponent.getParentComponent() != targetComponent
&& !sourceComponent.isParentComponent(targetComponent);
} */
// -----------
/** Paste type for meta components.
*/
public static class VariablePaste extends PasteType {
private Transferable transferable;
private AbstractNode targetNode;
//private FormModel targetForm;
public VariablePaste(Transferable t,
AbstractNode targetNode) {
this.transferable = t;
this.targetNode = targetNode;
}
public Transferable paste() throws java.io.IOException {
boolean fromCut =
transferable.isDataFlavorSupported(VARIABLE_CUT_FLAVOR);
AbstractNode sourceNode = null;
try {
sourceNode = (AbstractNode)
transferable.getTransferData(fromCut ?
VARIABLE_CUT_FLAVOR : VARIABLE_COPY_FLAVOR);
}
catch (java.io.IOException e) { } // ignore - should not happen
catch (UnsupportedFlavorException e) { } // ignore - should not happen
//if (sourceCommand == null)
// return null;
if (!fromCut) { // pasting copy of RADComponent
copyVariables(sourceNode, targetNode);
/*
targetForm.getComponentCreator()
.copyComponent(sourceComponent, targetContainer);
*/
return null;
}
else { // pasting cut RADComponent (same instance)
if (!targetNode.equals(sourceNode.getParentNode())) {
//CommandNode newNode = new CommandNode(Children.LEAF, sourceCommand.getCommand());
sourceNode.destroy();
copyVariables(sourceNode, targetNode);
//targetNode.getChildren().add(new Node[] { newNode });
return null;
}
/*
FormModel sourceForm = sourceComponent.getFormModel();
if (sourceForm != targetForm) { // taken from another form
Node sourceNode = sourceComponent.getNodeReference();
// delete component in the source
if (sourceNode != null)
sourceNode.destroy();
else throw new IllegalStateException();
sourceComponent.initialize(targetForm);
}
else { // moving within the same form
if (!canPasteCut(sourceComponent, targetForm, targetContainer))
return transferable; // ignore paste
// remove source component from its parent
sourceForm.removeComponent(sourceComponent);
}
*/
// return new copy flavor, as the first one was used already
return new VariableTransferable(VARIABLE_COPY_FLAVOR, sourceNode);
}
}
}
private static void copyVariables(AbstractNode sourceNode, AbstractNode targetNode) {
VcsConfigVariable var;
Map vbc;
Condition[] conditions = null;
if (sourceNode instanceof BasicVariableNode) {
var = ((BasicVariableNode) sourceNode).getVariable();
vbc = ((BasicVariableNode) sourceNode).getVarsByConditions();
} else if (sourceNode instanceof AccessoryVariableNode) {
var = ((AccessoryVariableNode) sourceNode).getVariable();
vbc = ((AccessoryVariableNode) sourceNode).getVarsByConditions();
} else return ;
if (var == null) return ;
var = new VcsConfigVariable(var.getName(), var.getLabel(), var.getValue(),
var.isBasic(), var.isLocalFile(), var.isLocalDir(),
var.getCustomSelector(), var.getOrder());
Collection varNames = BasicVariableNode.getAllVariablesNames(targetNode);
varNames.addAll(Variables.getContextVariablesNames());
var.setName(VcsUtilities.createUniqueName(var.getName(), varNames));
if (targetNode instanceof BasicVariableNode) {
var.setBasic(true);
String label = var.getLabel();
if (label == null || label.length() == 0) var.setLabel(var.getName());
int order = targetNode.getChildren().getNodesCount();
var.setOrder(order);
} else {
var.setBasic(false);
var.setLabel(null);
}
Map varsByConditions = null;
if (vbc != null) {
conditions = new Condition[vbc.size()];
varsByConditions = new IdentityHashMap();
int i = 0;
for (Iterator it = vbc.keySet().iterator(); it.hasNext(); i++) {
Condition c = (Condition) it.next();
VcsConfigVariable cvar = (VcsConfigVariable) vbc.get(c);
c = (Condition) c.clone();
cvar = (VcsConfigVariable) cvar.clone();
cvar.setName(var.getName());
cvar.setBasic(var.isBasic());
cvar.setLabel(var.getLabel());
cvar.setOrder(var.getOrder());
varsByConditions.put(c, cvar);
conditions[i] = c;
}
}
AbstractNode newNode;
if (targetNode instanceof BasicVariableNode) {
if (varsByConditions != null) {
newNode = new BasicVariableNode(var.getName(), conditions, varsByConditions);
} else {
newNode = new BasicVariableNode(var);
}
} else if (targetNode instanceof AccessoryVariableNode) {
if (varsByConditions != null) {
newNode = new AccessoryVariableNode(var.getName(), conditions, varsByConditions);
} else {
newNode = new AccessoryVariableNode(var);
}
} else return ;
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.