blob: e0f29f0a35cb46892c7e7e11a3190c8ced07049c [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.notation.providers.internal.copypaste;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.emf.clipboard.core.ObjectInfo;
import org.eclipse.gmf.runtime.emf.clipboard.core.OverridePasteChildOperation;
import org.eclipse.gmf.runtime.emf.clipboard.core.PasteChildOperation;
import org.eclipse.gmf.runtime.emf.clipboard.core.PostPasteChildOperation;
import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
/**
* @author Yasser Lulu
*/
public class PositionalGeneralViewPasteOperation
extends OverridePasteChildOperation {
private boolean shouldPasteAlwaysCopyObject;
/**
* @param overriddenChildPasteOperation
*/
public PositionalGeneralViewPasteOperation(
PasteChildOperation overriddenChildPasteOperation,
boolean shouldPasteAlwaysCopyObject) {
super(overriddenChildPasteOperation);
this.shouldPasteAlwaysCopyObject = shouldPasteAlwaysCopyObject;
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.emf.clipboard.core.PasteChildOperation#paste()
*/
public void paste()
throws Exception {
// delay unsetting of connector refs
}
protected boolean shouldPasteAlwaysCopyObject(
ObjectInfo alwaysCopyObjectInfo) {
return shouldPasteAlwaysCopyObject;
}
public PasteChildOperation getPostPasteOperation() {
return new PostPasteChildOperation(this, EMPTY_ARRAY) {
public void paste()
throws Exception {
//unset connectors before pasting so that it won't affect
//real connectors especially if they happen to belong to the
// same
//target diagram
Node view = (Node) getEObject();
view.eUnset(NotationPackage.eINSTANCE.getView_SourceEdges());
view.eUnset(NotationPackage.eINSTANCE.getView_TargetEdges());
//now paste view
EObject pastedElement = doPasteInto(getParentEObject());
//did we succeed?
if (pastedElement != null) {
setPastedElement(pastedElement);
addPastedElement(pastedElement);
} else {
addPasteFailuresObject(getEObject());
}
}
protected boolean shouldPasteAlwaysCopyObject(
ObjectInfo alwaysCopyObjectInfo) {
return PositionalGeneralViewPasteOperation.this
.shouldPasteAlwaysCopyObject(alwaysCopyObjectInfo);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.emf.core.internal.copypaste.PasteChildOperation#makeAuxiliaryChildPasteProcess(org.eclipse.gmf.runtime.emf.core.internal.copypaste.ObjectInfo)
*/
protected PasteChildOperation makeAuxiliaryChildPasteProcess(
ObjectInfo auxiliaryChildEObjectInfo) {
EObject semanticPasteTarget = NotationClipboardOperationHelper
.getSemanticPasteTarget((View) getPastedElement());
if (semanticPasteTarget == null) {
return null;
}
return new PasteChildOperation(getParentPasteProcess().clone(
semanticPasteTarget), auxiliaryChildEObjectInfo);
}
public PasteChildOperation getPostPasteOperation() {
List operations = getAlwaysCopyObjectPasteOperations();
return new PostPasteChildOperation(this, operations);
}
};
}
}