/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.hibernate.eclipse.console.actions;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IViewPart;
import org.hibernate.console.ImageConstants;
import org.hibernate.eclipse.console.HibernateConsoleMessages;
import org.hibernate.eclipse.console.HibernateConsolePlugin;
import org.hibernate.eclipse.console.utils.EclipseImages;
import org.hibernate.eclipse.console.utils.LaunchHelper;
/**
*
* Action that creates a ConsoleConfiguration
* @author max
*
*/
public class AddConfigurationAction extends Action {
public static final String ADDCONFIG_ACTIONID = "actionid.addconfig"; //$NON-NLS-1$
/** Constant used to avoid unnecessary broadcast which is caused by the workaround for having the ClassPathTab not throwing
* and exception on unsaved configurations */
public static final String TEMPORARY_CONFIG_FLAG = "_TEMPORARY_CONFIG_"; //$NON-NLS-1$
private final IViewPart part;
public AddConfigurationAction(IViewPart part) {
this.part = part;
setText(HibernateConsoleMessages.AddConfigurationAction_add_config);
setImageDescriptor(EclipseImages.getImageDescriptor(ImageConstants.ADD) );
setId(ADDCONFIG_ACTIONID);
}
public void run() {
doAddConfiguration();
}
protected void doAddConfiguration() {
/*ConsoleConfigurationCreationWizard wizard = new ConsoleConfigurationCreationWizard();
wizard.init(PlatformUI.getWorkbench(), null); // initializes the wizard
WizardDialog dialog = new WizardDialog(part.getSite().getShell(), wizard);
dialog.open(); // This opens a dialog
*/
try {
ILaunchConfiguration wc = createTemporaryLaunchConfiguration();
int res = DebugUITools.openLaunchConfigurationPropertiesDialog( part.getSite().getShell(), wc, "org.eclipse.debug.ui.launchGroup.run" ); //$NON-NLS-1$
if (res != Window.OK) {
deleteTemporaryLaunchConfigurations();
} else {
makeTemporaryLaunchConfigurationsPermanent();
}
} catch (CoreException ce) {
HibernateConsolePlugin.getDefault().showError( part.getSite().getShell(), HibernateConsoleMessages.AddConfigurationAction_problem_add_console_config, ce);
}
}
static public ILaunchConfiguration createTemporaryLaunchConfiguration()
throws CoreException {
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType launchConfigurationType = LaunchHelper.getHibernateLaunchConfigsType();
String launchName = launchManager.generateLaunchConfigurationName(HibernateConsoleMessages.AddConfigurationAction_hibernate);
//ILaunchConfiguration[] launchConfigurations = launchManager.getLaunchConfigurations( launchConfigurationType );
ILaunchConfigurationWorkingCopy wc = launchConfigurationType.newInstance(null, launchName);
wc.setAttribute(TEMPORARY_CONFIG_FLAG, true);
return wc.doSave();
}
static public void makeTemporaryLaunchConfigurationsPermanent() throws CoreException {
List<ILaunchConfiguration> listTempConfigs = getTemporaryLaunchConfigurations();
ILaunchConfigurationWorkingCopy wc;
for (int i = 0; i < listTempConfigs.size(); i++) {
wc = listTempConfigs.get(i).getWorkingCopy();
wc.setAttribute(TEMPORARY_CONFIG_FLAG, (String)null); // Must be set to null since it should never be in the actual saved configuration!
wc.doSave();
}
}
static public void deleteTemporaryLaunchConfigurations() throws CoreException {
List<ILaunchConfiguration> listTempConfigs = getTemporaryLaunchConfigurations();
for (int i = 0; i < listTempConfigs.size(); i++) {
listTempConfigs.get(i).delete();
}
}
static private List<ILaunchConfiguration> getTemporaryLaunchConfigurations()
throws CoreException {
List<ILaunchConfiguration> listTempConfigs = new ArrayList<ILaunchConfiguration>();
ILaunchConfiguration[] configs = LaunchHelper.findHibernateLaunchConfigs();
for (int i = 0; i < configs.length; i++) {
boolean temporary = configs[i].getAttribute(AddConfigurationAction.TEMPORARY_CONFIG_FLAG, false);
if (temporary) {
listTempConfigs.add(configs[i]);
}
}
return listTempConfigs;
}
}