123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- ///////////////////////////////////////////////////////////////////////////
- // Copyright (c) 2018 Intel Corporation. //
- // //
- // 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: //
- // Intel Corporation - initial implementation and documentation //
- ///////////////////////////////////////////////////////////////////////////
- package com.intel.sgx.handlers;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import javax.swing.JOptionPane;
- import org.eclipse.core.commands.ExecutionEvent;
- import org.eclipse.core.commands.ExecutionException;
- import org.eclipse.core.commands.IHandler;
- import org.eclipse.core.commands.IHandlerListener;
- import org.eclipse.core.resources.IProject;
- import org.eclipse.core.resources.IResource;
- import org.eclipse.core.runtime.CoreException;
- import org.eclipse.jface.viewers.ISelection;
- import org.eclipse.jface.viewers.IStructuredSelection;
- import org.eclipse.swt.widgets.Shell;
- import org.eclipse.ui.PlatformUI;
- import org.eclipse.ui.handlers.HandlerUtil;
- /**
- * Utility base class for all Handlers The derived classes must implement
- * executeSgxStuff() instead of execute(). The user may call methods cancel(),
- * quitWithError() & info()
- *
- * @author mlutescu
- *
- */
- public abstract class SGXHandler implements IHandler {
- public String projectPath = null;
- protected IProject project;
- protected Shell shell;
- /**
- * Throwing this IS an error. Means that the process can't continue
- *
- * @author mlutescu
- *
- */
- static protected class ErrorException extends Exception {
- public ErrorException(String message) {
- super(message);
- }
- }
- /**
- * Throwing this is not an error; just signals stop of execution because the
- * user cancels
- *
- * @author mlutescu
- *
- */
- static protected class CancelException extends Exception {
- public CancelException() {
- super();
- }
- }
- @Override
- public final Object execute(ExecutionEvent event) throws ExecutionException {
- try {
- initializeShell();
- initializeProject(event);
- return executeSGXStuff();
- } catch (ErrorException e) {
- e.printStackTrace();
- } catch (CancelException e) {
- // do nothing by design ; it's Ok to not handle this exception.
- }
- return null;
- }
- protected abstract Object executeSGXStuff() throws ErrorException,
- CancelException;
- public SGXHandler() {
- super();
- }
- public static void copyFile(File source, File dest) throws ErrorException {
- byte[] bytes = new byte[4092];
- if (source != null && dest != null) {
- if (source.isFile()) {
- FileInputStream in = null;
- FileOutputStream out = null;
- try {
- in = new FileInputStream(source);
- out = new FileOutputStream(dest);
- int len;
- while ((len = in.read(bytes)) != -1) {
- out.write(bytes, 0, len);
- }
- } catch (IOException e) {
- System.err.println("Error: " + e.toString());
- quitWithError("Could not copy from\n" + "'"
- + source.getAbsolutePath() + "'\n" + "to\n" + "'"
- + dest.getAbsolutePath());
- } finally {
- try {
- if (in != null) {
- in.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (out != null) {
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- }
- }
- protected static void quitWithError(String message) throws ErrorException {
- JOptionPane.showMessageDialog(null, message, "Two Step Enclave Sign",
- JOptionPane.ERROR_MESSAGE);
- throw new ErrorException(message);
- }
- static protected void cancel() throws CancelException {
- throw new CancelException();
- }
- protected void initializeProject(ExecutionEvent event)
- throws ErrorException {
- project = null;
- ISelection selection = HandlerUtil.getCurrentSelection(event);
- Object element = null;
- if (selection instanceof IStructuredSelection) {
- element = ((IStructuredSelection) selection).getFirstElement();
- if (element instanceof IResource) {
- project = ((IResource) element).getProject();
- }
- }
- if (!project.exists()) {
- quitWithError("Project not found");
- }
- }
- @Override
- public boolean isEnabled() {
- return true;
- }
- @Override
- public boolean isHandled() {
- return true;
- }
- @Override
- public void removeHandlerListener(IHandlerListener arg0) {
- }
- @Override
- public void addHandlerListener(IHandlerListener arg0) {
- }
- @Override
- public void dispose() {
- }
- protected void initializeShell() {
- shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- }
- protected void refreshProject() throws ErrorException {
- try {
- project.refreshLocal(IResource.DEPTH_INFINITE, null);
- } catch (CoreException e1) {
- quitWithError(e1.getLocalizedMessage());
- }
- }
-
- protected void info(String windowName, String message) {
- JOptionPane.showMessageDialog(null, message,windowName,
- JOptionPane.INFORMATION_MESSAGE);
- }
- }
|