/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.customizations.app_engine.actions; import java.io.File; import java.util.Map; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IContainer; import org.eclipse.jface.dialogs.MessageDialog; import org.python.pydev.core.IPythonPathNature; import org.python.pydev.core.log.Log; import org.python.pydev.customizations.app_engine.launching.AppEngineConstants; import org.python.pydev.customizations.common.CustomizationCommons; import org.python.pydev.editor.actions.PyAction; /** * Abstract class for classes that are executed based on the app engine / target folder. */ public abstract class AbstractAppEngineHandler extends AbstractHandler { public Object execute(ExecutionEvent event) throws ExecutionException { throw new RuntimeException("Not used anymore!"); //Note: HandlerUtil is not available in eclipse 3.2 // ISelection sel = HandlerUtil.getCurrentSelectionChecked(event); // if(sel instanceof IStructuredSelection){ // IStructuredSelection selection = (IStructuredSelection) sel; // Object firstElement = selection.getFirstElement(); // // return executeInObject(firstElement); // // } // return null; } public Object executeInObject(Object firstElement) { IContainer container = CustomizationCommons.getContainerFromObject(firstElement); if (container == null) { return null; } IPythonPathNature pythonPathNature = CustomizationCommons.getPythonPathNatureFromObject(firstElement); if (pythonPathNature == null) { return null; } Map<String, String> variableSubstitution; try { variableSubstitution = pythonPathNature.getVariableSubstitution(); //Only consider a google app engine a project that has a google app engine variable! if (variableSubstitution == null || !variableSubstitution.containsKey(AppEngineConstants.GOOGLE_APP_ENGINE_VARIABLE)) { return null; } File appEngineLocation = new File(variableSubstitution.get(AppEngineConstants.GOOGLE_APP_ENGINE_VARIABLE)); if (!appEngineLocation.isDirectory()) { MessageDialog.openError(PyAction.getShell(), "Error", "Expected: " + appEngineLocation + " to be a directory."); return null; } File appcfg = new File(appEngineLocation, "appcfg.py"); if (!appcfg.isFile()) { MessageDialog.openError(PyAction.getShell(), "Error", "Expected: " + appcfg + " to be a file."); return null; } handleExecution(container, pythonPathNature, appcfg, appEngineLocation); } catch (Exception e) { Log.log(e); } return null; } /** * Subclasses should override this method to properly handle the execution of the action (this is called when * all things are already validated). */ protected abstract void handleExecution(IContainer container, IPythonPathNature pythonPathNature, File appcfg, File appEngineLocation); }