blob: 29e57b7eb919e90d80dfa0ce2366db11481061fb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2016 Christian Pontesegger 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:
* Christian Pontesegger - initial API and implementation
* IBM Corporation - bug fixing
* Martin Karpisek <martin.karpisek@gmail.com> - Bug 507831
*******************************************************************************/
package org.eclipse.pde.internal.ui.views.imagebrowser;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Map;
import org.eclipse.core.commands.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.ui.ISourceProvider;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.services.ISourceProviderService;
/**
* Handler for the image browser view's save to workspace command.
*
*/
public class SaveToWorkspace extends AbstractHandler {
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
ISourceProviderService service = PlatformUI.getWorkbench().getService(ISourceProviderService.class);
ISourceProvider provider = service.getSourceProvider(ActiveImageSourceProvider.ACTIVE_IMAGE);
if (provider != null) {
Map<?, ?> currentState = provider.getCurrentState();
Object data = currentState.get(ActiveImageSourceProvider.ACTIVE_IMAGE);
if (data instanceof ImageElement) {
SaveAsDialog dialog = new SaveAsDialog(HandlerUtil.getActiveShell(event));
dialog.setTitle(PDEUIMessages.SaveToWorkspace_SaveImageToWorkspace);
dialog.setOriginalName(((ImageElement) data).getFileName());
// dialog.setMessage("select location & filename to store image to");
if (dialog.open() == Window.OK) {
IPath result = dialog.getResult();
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(result);
boolean exists = file.exists();
if (exists) {
boolean confirm = MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), PDEUIMessages.SaveToWorkspace_ConfirmOverwrite, NLS.bind(PDEUIMessages.SaveToWorkspace_ConfirmOverwriteText, result));
if (!confirm)
return null;
}
int imageType = getImageType(result);
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {((ImageElement) data).getImageData()};
imageLoader.save(out, imageType);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
if (exists)
file.setContents(in, true, false, null);
else
file.create(in, true, null);
file.getParent().refreshLocal(IResource.DEPTH_ZERO, null);
} catch (CoreException e) {
PDEPlugin.log(e);
}
}
}
}
return null;
}
private int getImageType(final IPath path) {
String extension = path.getFileExtension();
if ("gif".equalsIgnoreCase(extension)) //$NON-NLS-1$
return SWT.IMAGE_GIF;
else if ("bmp".equalsIgnoreCase(extension)) //$NON-NLS-1$
return SWT.IMAGE_BMP;
else if ("png".equalsIgnoreCase(extension)) //$NON-NLS-1$
return SWT.IMAGE_PNG;
else if ("ico".equalsIgnoreCase(extension)) //$NON-NLS-1$
return SWT.IMAGE_ICO;
return SWT.IMAGE_PNG;
}
}