/*
* 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.s3.dnd;
import java.io.File;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonDropAdapter;
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.explorer.s3.BucketEditor;
import com.amazonaws.eclipse.explorer.s3.BucketEditorInput;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.transfer.TransferManager;
/**
* Handles dropping a resource into a bucket, uploading it.
*/
public class UploadDropAssistant extends CommonDropAdapterAssistant {
public UploadDropAssistant() {
}
@Override
public IStatus validateDrop(final Object target, final int operation, final TransferData transferType) {
if ( target instanceof Bucket ) {
return Status.OK_STATUS;
} else {
return Status.CANCEL_STATUS;
}
}
@Override
public boolean isSupportedType(TransferData aTransferType) {
return LocalSelectionTransfer.getTransfer().isSupportedType(aTransferType)
|| FileTransfer.getInstance().isSupportedType(aTransferType);
}
@Override
public IStatus handleDrop(CommonDropAdapter aDropAdapter, final DropTargetEvent aDropTargetEvent, Object aTarget) {
final Bucket bucket = (Bucket) aTarget;
File f = getFileToDrop(aDropAdapter.getCurrentTransfer());
if ( f == null || !f.exists() )
return Status.CANCEL_STATUS;
KeySelectionDialog dialog = new KeySelectionDialog(aDropTargetEvent.display.getActiveShell(), f);
if ( dialog.open() != 0 ) {
return Status.CANCEL_STATUS;
}
final String keyName = dialog.getKeyName();
final TransferManager transferManager = new TransferManager(AwsToolkitCore.getClientFactory().getS3ClientForBucket(bucket.getName()));
UploadFileJob uploadFileJob = new UploadFileJob("Uploading " + f.getAbsolutePath().toString(),
bucket.getName(), f, keyName, transferManager);
uploadFileJob.setRefreshRunnable(new Runnable() {
public void run() {
try {
for ( IEditorReference ref : PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().getEditorReferences() ) {
if ( ref.getEditorInput() instanceof BucketEditorInput ) {
if ( bucket.getName()
.equals(((BucketEditorInput) ref.getEditorInput()).getBucketName()) ) {
BucketEditor editor = (BucketEditor) ref.getEditor(false);
editor.getObjectSummaryTable().refresh(null);
return;
}
}
}
} catch ( PartInitException e ) {
AwsToolkitCore.getDefault().logError("Unable to open the Amazon S3 bucket editor: ", e);
}
}
});
uploadFileJob.schedule();
return Status.OK_STATUS;
}
public static File getFileToDrop(TransferData transfer) {
File f = null;
if ( LocalSelectionTransfer.getTransfer().isSupportedType(transfer) ) {
IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().nativeToJava(
transfer);
IResource resource = (IResource) selection.getFirstElement();
f = resource.getLocation().toFile();
} else if ( FileTransfer.getInstance().isSupportedType(transfer) ) {
String[] files = (String[]) FileTransfer.getInstance().nativeToJava(transfer);
f = new File(files[0]);
}
return f;
}
}