/** * 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.django.debug.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.window.Window; import org.python.pydev.editor.actions.PyAction; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.ui.dialogs.SelectExistingOrCreateNewDialog; import org.python.pydev.ui.dialogs.TreeSelectionDialog; /** * Command to execute a custom (not predefined) django action. */ public class DjangoCustomCommand extends DjangoAction { private static final String SHELL_MEMENTO_ID = "org.python.pydev.django.debug.ui.actions.DjangoCustomCommand.shell"; private static final String DJANGO_CUSTOM_COMMANDS_PREFERENCE_KEY = "DJANGO_CUSTOM_COMMANDS"; public void run(IAction action) { try { String command = chooseCommand(); if (command != null) { launchDjangoCommand(command, true); } } catch (Exception e) { throw new RuntimeException(e); } } /** * Opens a dialog so that the user can enter a command to be executed. * * @return the command to be executed or null if no command was selected for execution. */ private String chooseCommand() { final IPreferenceStore preferenceStore = PydevPlugin.getDefault().getPreferenceStore(); TreeSelectionDialog dialog = new SelectExistingOrCreateNewDialog(PyAction.getShell(), preferenceStore, DJANGO_CUSTOM_COMMANDS_PREFERENCE_KEY, SHELL_MEMENTO_ID); dialog.setTitle("Select the command to run or enter a new command"); dialog.setMessage("Select the command to run or enter a new command"); dialog.setInitialFilter(""); int open = dialog.open(); if (open != Window.OK) { return null; } Object[] result = dialog.getResult(); if (result != null && result.length == 1) { return result[0].toString(); } return null; } }