/* * 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.actions; import java.util.ArrayList; import java.util.Collection; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import com.amazonaws.eclipse.core.AwsToolkitCore; import com.amazonaws.eclipse.explorer.s3.S3ObjectSummaryTable; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.S3ObjectSummary; public class DeleteObjectAction extends Action { private final S3ObjectSummaryTable table; public DeleteObjectAction(S3ObjectSummaryTable s3ObjectSummaryTable) { table = s3ObjectSummaryTable; setImageDescriptor(AwsToolkitCore.getDefault().getImageRegistry().getDescriptor("remove")); } @Override public String getText() { if ( table.getSelectedObjects().size() > 1 ) return "Delete Objects"; else return "Delete Object"; } private Dialog newConfirmationDialog(String title, String message) { return new MessageDialog(Display.getDefault().getActiveShell(), title, null, message, MessageDialog.QUESTION, new String[] {"No", "Yes"}, 1); } @Override public void run() { Dialog dialog = newConfirmationDialog(getText() + "?", "Are you sure you want to delete the selected objects?"); if (dialog.open() <= 0) return; new Job("Deleting Objects") { @Override protected IStatus run(IProgressMonitor monitor) { final Collection<S3ObjectSummary> selectedObjects = new ArrayList<S3ObjectSummary>(); Display.getDefault().syncExec(new Runnable() { public void run() { selectedObjects.addAll(table.getSelectedObjects()); } }); monitor.beginTask("Deleting objects", selectedObjects.size()); try { AmazonS3 s3 = table.getS3Client(); for ( S3ObjectSummary summary : selectedObjects ) { s3.deleteObject(summary.getBucketName(), summary.getKey()); monitor.worked(1); } Display.getDefault().asyncExec(new Runnable() { public void run() { String prefix = null; if (selectedObjects.size() == 1) { String key = selectedObjects.iterator().next().getKey(); int slashIndex = key.lastIndexOf('/'); if (slashIndex > 0) { prefix = key.substring(0, slashIndex); } } table.refresh(prefix); } }); return Status.OK_STATUS; } catch (Exception e) { return new Status(IStatus.ERROR, AwsToolkitCore.PLUGIN_ID, "Unable to delete objects: " + e.getMessage(), e); } finally { monitor.done(); } } }.schedule(); } @Override public boolean isEnabled() { return table.getSelectedObjects().size() > 0; } }