/*
* Copyright 2011-2012 Amazon Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://aws.amazon.com/apache2.0
*
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and
* limitations under the License.
*/
package com.amazonaws.eclipse.explorer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.ui.navigator.CommonDragAdapterAssistant;
import org.eclipse.ui.part.PluginTransfer;
import com.amazonaws.services.s3.model.S3ObjectSummary;
public class DragAdapterAssistant extends CommonDragAdapterAssistant {
@Override
public void dragStart(DragSourceEvent anEvent, IStructuredSelection aSelection) {
anEvent.doit = aSelection.size() == 1 && aSelection.getFirstElement() instanceof S3ObjectSummary;
/*
* We need to make sure that our drag is treated *only* as a plugin
* transfer, whereas the superclass defaults to treating all such events
* as either LocalSelectionTransfer or PluginTransfer. In the case of
* the former, the drag adapter for other views won't recognize the
* object being dropped and so disallows it.
*/
DragSource source = ((DragSource) anEvent.getSource());
source.setTransfer(getSupportedTransferTypes());
//printEvent(anEvent);
}
public DragAdapterAssistant() {
}
/*
* This list is added to the list of defaults, so it's a no-op in its
* intended context. However, we include it here as a convenience for
* dragStart()
*/
@Override
public Transfer[] getSupportedTransferTypes() {
return new Transfer[] { PluginTransfer.getInstance(), };
}
private void printEvent(DragSourceEvent e) {
System.out.println("\n\n\nEVENT START\n\n\n");
StringBuffer sb = new StringBuffer();
DragSource source = ((DragSource) e.widget);
sb.append("widget: ");
sb.append(e.widget);
sb.append(", source.Transfer: ");
sb.append(source.getTransfer().length + " elements; ");
for ( Transfer transfer : source.getTransfer() ) {
sb.append(transfer).append("; ");
}
sb.append(System.identityHashCode(source));
sb.append(", time: ");
sb.append(e.time);
sb.append(", operation: ");
sb.append(e.detail);
sb.append(", type: ");
sb.append(e.dataType != null ? e.dataType.type : 0);
sb.append(", doit: ");
sb.append(e.doit);
sb.append(", data: ");
sb.append(e.data);
sb.append(", dataType: ");
sb.append(e.dataType);
sb.append("\n");
System.out.println(sb.toString());
System.out.println("\n\n\nEVENT END\n\n\n");
}
/* (non-Javadoc)
* @see org.eclipse.ui.navigator.CommonDragAdapterAssistant#setDragData(org.eclipse.swt.dnd.DragSourceEvent, org.eclipse.jface.viewers.IStructuredSelection)
*/
@Override
public boolean setDragData(DragSourceEvent anEvent, IStructuredSelection aSelection) {
//printEvent(anEvent);
return true;
}
}