blob: 092764b1fbfe44c1c4a6b189d203a3a5316af52a [file] [log] [blame]
// IdentifiableDropAdapterAssistant.java
package org.eclipse.stem.ui.views.explorer;
/*******************************************************************************
* Copyright (c) 2008 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
*******************************************************************************/
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.stem.core.Utility;
import org.eclipse.stem.core.common.DublinCore;
import org.eclipse.stem.core.common.Identifiable;
import org.eclipse.stem.core.scenario.Scenario;
import org.eclipse.stem.ui.Activator;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.navigator.CommonDropAdapter;
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
/**
* This class represents
*/
public class IdentifiableDropAdapterAssistant extends CommonDropAdapterAssistant {
/**
* @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#isSupportedType(org.eclipse.swt.dnd.TransferData)
*/
@Override
public boolean isSupportedType(TransferData transferType) {
final boolean retValue = LocalSelectionTransfer.getTransfer()
.isSupportedType(transferType);
return retValue;
}
/**
* @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter,
* org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)
*/
@Override
public IStatus handleDrop(@SuppressWarnings("unused") CommonDropAdapter dropAdapter,
DropTargetEvent event, Object target) {
IStatus retValue = Status.CANCEL_STATUS;
// Structured Selection?
if (event.data instanceof IStructuredSelection) {
// Yes
for (Object obj : ((IStructuredSelection) event.data).toList()) {
if (obj instanceof String) {
// Yes
// These are URI's from IdentifablePluginView
final String uriString = (String) obj;
try {
// We're going to deserialized the Identifiable, change
// it's URI and then serialize it again in the new
// location.
final URI uri = URI.createURI(uriString);
final Identifiable identifable = Utility
.getIdentifiable(uri);
// Fix problem reported by Matthias. Do not allow dragging of built-in scenarios.
if(identifable instanceof Scenario)
return retValue; // cancel
// SED fix. We must do the copy here. If we do not do this, the identifiable
// will be removed from the source ResourceSet when saved to the new location.
final Identifiable identifiableCopy = EcoreUtil.copy(identifable);
final DublinCore dc = identifiableCopy.getDublinCore();
final URI serializationURI = createSerializationURI(
uri, (IdentifiableTreeNode) target);
identifiableCopy.setURI(serializationURI);
dc.setTitle("Copy of \"" + dc.getTitle() + "\"");
dc.setDescription("Copy of \"" + dc.getDescription()
+ "\"");
dc.populate();
Utility.serializeIdentifiable(identifiableCopy,
serializationURI);
retValue = Status.OK_STATUS;
} catch (Exception e) {
Activator.logError(
"Problem deserializing Identifiable from \""
+ uriString + "\"", e);
}
} // if
} // for each Object
} // if IStructuredSelection
// LocalSelectionTransfer.getTransfer().setSelection(null);
return retValue;
} // handleDrop
private URI createSerializationURI(URI uri, IdentifiableTreeNode treeNode) {
final StringBuilder sb = new StringBuilder(treeNode.getProject()
.getName());
sb.append("/");
sb.append(treeNode.getFolderName());
sb.append("/");
sb.append(uri.segment(uri.segmentCount() - 1));
return URI.createPlatformResourceURI(sb.toString(), false);
} // createSerializationURI
/**
* @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#validateDrop(java.lang.Object,
* int, org.eclipse.swt.dnd.TransferData)
*/
@SuppressWarnings("unused")
@Override
public IStatus validateDrop(Object target, int operation,
TransferData transferType) {
// IStatus retValue = Status.CANCEL_STATUS;
//
// if (LocalSelectionTransfer.getTransfer().equals(transferType)) {
// // Yes
// retValue = Status.OK_STATUS;
// } // if
// else if (LocalTransfer.getInstance().equals(transferType)) {
// // Yes
// retValue = Status.OK_STATUS;
// } // if
//
// return retValue;
return Status.OK_STATUS;
} // validateDrop
} // IdentifiableDropAdapterAssistant