GitLab will be shut down on June 25 to move to a new facility. https://www.eclipsestatus.io/incidents/5ffy27gwcbx7

Commit eb871f4a authored by amccaskey's avatar amccaskey
Browse files

Adding new Launch New ICE Instance developer menu action.



This action opens a list dialog that users select any plugins they'd
like to add to the newly created ICE instance. This is convenient for
creating new Item plugins, and launch a new ICE with those plugins
activated. 
Signed-off-by: default avataramccaskey <mccaskeyaj@ornl.gov>
parent 7b26e112
......@@ -18,6 +18,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.11.0",
org.eclipse.equinox.security;bundle-version="1.2.100",
org.eclipse.m2e.core;bundle-version="1.6.0"
Import-Package: org.apache.commons.io;version="2.2.0",
org.apache.commons.lang,
org.eclipse.egit.github.core;version="4.0.0",
org.eclipse.egit.github.core.service;version="4.0.0",
org.eclipse.jgit.api;version="4.0.0",
......
......@@ -31,6 +31,10 @@
commandName="Build ICE"
implementation="org.eclipse.ice.developer.actions.BuildICEHandler">
</command>
<command
commandName="Launch New ICE Instance"
implementation="org.eclipse.ice.developer.actions.LaunchNewICEHandler">
</command>
</code>
</extension>
<extension
......
/*******************************************************************************
* Copyright (c) 2015 UT-Battelle, LLC.
* 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:
* Alex McCaskey - Initial API and implementation and/or initial documentation
*
*******************************************************************************/
package org.eclipse.ice.developer.actions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.SystemUtils;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class extends the Eclipse AbstractHandler to provide an action to
* the ICE Developer Menu that let's users launch a new instance of ICE with a
* the addition of new plugins and without having to go through the usual
* Eclipse Run Configuration wizard.
*
* @author Alex McCaskey
*
*/
public class LaunchNewICEHandler extends AbstractHandler {
/**
* Logger for handling event messages and other information.
*/
protected static final Logger logger = LoggerFactory.getLogger(GitCloneHandler.class);
/*
* (non-Javadoc)
*
* @see
* org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
* ExecutionEvent)
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
// Get the Launch Manager
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
if (manager != null) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject productProject = root.getProject("org.eclipse.ice.product");
if (productProject != null) {
// Local Declarations
ArrayList<String> currentPlugins = new ArrayList<String>();
ArrayList<String> notIncludedProjects = new ArrayList<String>();
String fileName = "", currentPluginsStr = "", key = "selected_workspace_plugins";
String vmArgs = "", vmArgsKey = "org.eclipse.jdt.launching.VM_ARGUMENTS";
String[] plugins;
// Get the proper file name
if (SystemUtils.IS_OS_WINDOWS) {
fileName = "ice.product_WINDOWS.launch";
} else if (SystemUtils.IS_OS_MAC_OSX) {
fileName = "ice.macosx_product.launch";
} else if (SystemUtils.IS_OS_LINUX) {
fileName = "ice.product_linux.launch";
} else {
throw new ExecutionException("Could not get the current OS. Cannot launch new version of ICE.");
}
// Get the Launch Configurations files
IFile launchICE = productProject.getFile("modified_" + fileName);
if (!launchICE.exists()) {
IFile tempCopy = productProject.getFile(fileName);
try {
launchICE.create(tempCopy.getContents(), true, null);
} catch (CoreException e1) {
e1.printStackTrace();
logger.error("Could not create file withe name modified_" + fileName, e1);
}
}
// Get the Launch Configuration from those files
ILaunchConfiguration launchConfig = manager.getLaunchConfiguration(launchICE);
try {
currentPluginsStr = launchConfig.getAttribute(key, "");
vmArgs = launchConfig.getAttribute(vmArgsKey, "");
vmArgs = vmArgs.replace("org.eclipse.equinox.http.jetty.http.port=8081", "org.eclipse.equinox.http.jetty.http.port=8082");
// Put all workspace plugins in the launch config into a
// list
plugins = currentPluginsStr.split(",");
for (String s : plugins) {
currentPlugins.add(s.split("@")[0]);
}
// Get any project name that is not currently in the run
// config
List<String> pluginsToIgnore = Arrays.asList("org.eclipse.ice.aggregator", "reflectivity", "xsede",
"ICEDocCleaner", "all", "default", "developerMenu", "dynamicUI", "fileFormats",
"installation", "introToPTP", "itemDB", "moose-tutorial", "newItemGeneration",
"org.eclipse.ice.examples.reflectivity", "org.eclipse.ice.installer",
"org.eclipse.ice.parent", "org.eclipse.ice.product", "org.eclipse.ice.repository");
for (IProject p : root.getProjects()) {
String name = p.getName();
if (!currentPlugins.contains(p.getName()) && !name.contains("test")
&& !name.contains("Tutorial")
&& !name.contains("target.") && !name.contains("feature")
&& !pluginsToIgnore.contains(name)) {
notIncludedProjects.add(p.getName());
}
}
// Display a list selection for the user to select which
// plugins to add.
ListSelectionDialog dialog = new ListSelectionDialog(
PlatformUI.getWorkbench().getDisplay().getActiveShell(), notIncludedProjects.toArray(),
ArrayContentProvider.getInstance(), new LabelProvider(),
"Select new plugins to include in the new ICE instance.");
dialog.setTitle("Plugin Addition Selection");
// Open the dialog
int ok = dialog.open();
if (ok == Window.OK) {
// Get the results
Object[] results = dialog.getResult();
for (Object s : results) {
currentPluginsStr = s.toString() + "@default:true," + currentPluginsStr;
}
ILaunchConfigurationWorkingCopy wc = launchConfig.getWorkingCopy();
// Set the launch configs list of plugins
wc.setAttribute(key, currentPluginsStr);
wc.setAttribute(vmArgsKey, vmArgs);
// Save the configuration
ILaunchConfiguration config = wc.doSave();
// Create and launch the Job.
Job job = new WorkspaceJob("Launching New Instance of ICE") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
config.launch(ILaunchManager.RUN_MODE, monitor);
return Status.OK_STATUS;
}
};
// Launch the job
job.schedule();
}
} catch (CoreException e) {
e.printStackTrace();
logger.error("Could not create or launch new run configuration.", e);
}
}
}
return null;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment