From 176666aaa8b762a1da432b0f72d479232cebee58 Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Tue, 2 Sep 2014 12:45:41 -0300 Subject: [PATCH] JBIDE-18004: Created Wizard handler to open Forge wizards --- plugins/org.jboss.tools.forge.ui/plugin.xml | 22 +++++ .../ext/dialog/UICommandListDialog.java | 26 +++-- .../ext/dialog/WizardDialogHelper.java | 6 ++ .../ext/handlers/OpenWizardHandler.java | 97 +++++++++++++++++++ 4 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/handlers/OpenWizardHandler.java diff --git a/plugins/org.jboss.tools.forge.ui/plugin.xml b/plugins/org.jboss.tools.forge.ui/plugin.xml index 7d5c4d56c..5fb0aee98 100644 --- a/plugins/org.jboss.tools.forge.ui/plugin.xml +++ b/plugins/org.jboss.tools.forge.ui/plugin.xml @@ -66,6 +66,28 @@ categoryId="org.jboss.tools.forge.ui" id="org.jboss.tools.forge.ui.command.runForgeCommand" name="Run a Forge Command" /> + + + + + + + + diff --git a/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/UICommandListDialog.java b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/UICommandListDialog.java index 8daa6f543..fe20b1cab 100644 --- a/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/UICommandListDialog.java +++ b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/UICommandListDialog.java @@ -73,16 +73,7 @@ public UICommandListDialog(IWorkbenchWindow window) { true, true, "Run a Forge command", "JBoss Forge v." + FurnaceRuntime.INSTANCE.getVersion() + " - Start typing to filter the list"); - ISelection selection = window.getSelectionService().getSelection(); - IStructuredSelection currentSelection = null; - if (selection instanceof TreeSelection) { - currentSelection = (TreeSelection) selection; - } else { - Object activeEditorFile = getActiveEditorInput(window); - if (activeEditorFile != null) { - currentSelection = new StructuredSelection(activeEditorFile); - } - } + IStructuredSelection currentSelection = getCurrentSelection(window); wizardHelper = new WizardDialogHelper(getParentShell(), currentSelection); UISelectionImpl uiSelection = wizardHelper.getContext() @@ -99,6 +90,21 @@ public UICommandListDialog(IWorkbenchWindow window) { } } + public static IStructuredSelection getCurrentSelection( + IWorkbenchWindow window) { + ISelection selection = window.getSelectionService().getSelection(); + IStructuredSelection currentSelection = null; + if (selection instanceof TreeSelection) { + currentSelection = (TreeSelection) selection; + } else { + Object activeEditorFile = getActiveEditorInput(window); + if (activeEditorFile != null) { + currentSelection = new StructuredSelection(activeEditorFile); + } + } + return currentSelection; + } + /** * Retrieves the {@link IFile} represented by the active editor */ diff --git a/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/WizardDialogHelper.java b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/WizardDialogHelper.java index cf6993146..6b6d2bb55 100644 --- a/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/WizardDialogHelper.java +++ b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/dialog/WizardDialogHelper.java @@ -70,6 +70,12 @@ public List getAllCandidatesAsList() { return result; } + public UICommand getCommand(String name) { + CommandFactory commandFactory = FurnaceService.INSTANCE + .lookup(CommandFactory.class); + return commandFactory.getCommandByName(context, name); + } + public Map getAllCandidatesAsMap() { Map result = new TreeMap<>(); CommandFactory commandFactory = FurnaceService.INSTANCE diff --git a/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/handlers/OpenWizardHandler.java b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/handlers/OpenWizardHandler.java new file mode 100644 index 000000000..6cb0a6778 --- /dev/null +++ b/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/internal/ext/handlers/OpenWizardHandler.java @@ -0,0 +1,97 @@ +/** + * Copyright 2014 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.jboss.tools.forge.ui.internal.ext.handlers; + +import java.io.File; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.handlers.HandlerUtil; +import org.jboss.forge.addon.ui.command.UICommand; +import org.jboss.tools.forge.core.furnace.FurnaceRuntime; +import org.jboss.tools.forge.core.runtime.ForgeRuntimeState; +import org.jboss.tools.forge.ui.internal.ForgeUIPlugin; +import org.jboss.tools.forge.ui.internal.ext.dialog.UICommandListDialog; +import org.jboss.tools.forge.ui.internal.ext.dialog.WizardDialogHelper; +import org.jboss.tools.forge.ui.internal.part.ForgeConsoleView; +import org.jboss.tools.forge.ui.util.ForgeHelper; + +/** + * A handler to open Forge wizards + * + * @author George Gastaldi + */ +public class OpenWizardHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + // Parameters + final String wizardName = event + .getParameter("org.jboss.tools.forge.ui.openWizard.wizardName"); + // Unused for now + final String wizardTitle = event + .getParameter("org.jboss.tools.forge.ui.openWizard.wizardTitle"); + final String path = event + .getParameter("org.jboss.tools.forge.ui.command.openWizard.wizardPath"); + + try { + ForgeConsoleView forgeConsoleView = ForgeHelper + .findForgeConsoleView(); + if (forgeConsoleView != null && forgeConsoleView.isShowing()) { + ForgeHelper.showRuntime(FurnaceRuntime.INSTANCE); + } + final IWorkbenchWindow window = HandlerUtil + .getActiveWorkbenchWindowChecked(event); + if (!ForgeRuntimeState.RUNNING.equals(FurnaceRuntime.INSTANCE + .getState())) { + Job job = ForgeHelper + .createStartRuntimeJob(FurnaceRuntime.INSTANCE); + job.addJobChangeListener(new JobChangeAdapter() { + @Override + public void done(IJobChangeEvent event) { + Display.getDefault().asyncExec(new Runnable() { + @Override + public void run() { + openWizard(wizardName, wizardTitle, path, + window); + } + }); + } + }); + job.schedule(); + } else { + openWizard(wizardName, wizardTitle, path, window); + } + } catch (Exception e) { + ForgeUIPlugin.log(e); + } + return null; + } + + private void openWizard(String wizardName, String wizardTitle, String path, + IWorkbenchWindow window) { + IStructuredSelection currentSelection; + if (path == null) { + currentSelection = UICommandListDialog.getCurrentSelection(window); + } else { + currentSelection = new StructuredSelection(new File(path)); + } + WizardDialogHelper helper = new WizardDialogHelper(window.getShell(), + currentSelection); + UICommand command = helper.getCommand(wizardName); + helper.openWizard(wizardName, command); + } +}