package org.hibernate.eclipse.console.utils; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.osgi.util.NLS; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.console.KnownConfigurations; import org.hibernate.eclipse.console.HibernateConsoleMessages; import org.hibernate.eclipse.console.HibernateConsolePlugin; import org.hibernate.eclipse.console.actions.AddConfigurationAction; import org.hibernate.eclipse.launch.ICodeGenerationLaunchConstants; @SuppressWarnings("restriction") public class LaunchHelper { public static ILaunchConfiguration findHibernateLaunchConfig(String name) throws CoreException { return findLaunchConfigurationByName( ICodeGenerationLaunchConstants.CONSOLE_CONFIGURATION_LAUNCH_TYPE_ID, name); } /** * UI elements should use this method as it does filtering of launch configuration related * to deleted or closed projects if the settings are set. * @return * @throws CoreException */ public static ILaunchConfiguration[] findFilteredHibernateLaunchConfigs() throws CoreException{ ILaunchConfiguration[] allHibernateLaunchConfigurations = findHibernateLaunchConfigs(); List<ILaunchConfiguration> launchConfigurations = new ArrayList<ILaunchConfiguration>(); for (ILaunchConfiguration config : allHibernateLaunchConfigurations) { if (DebugUIPlugin.doLaunchConfigurationFiltering(config)) launchConfigurations.add(config); } return launchConfigurations.toArray(new ILaunchConfiguration[launchConfigurations.size()]); } /** * UI elements should use this method as it does filtering of console configuration related * to deleted or closed projects if the settings are set. * @return * @throws CoreException */ public static ConsoleConfiguration[] findFilteredSortedConsoleConfigs() { ConsoleConfiguration[] ccs = KnownConfigurations.getInstance().getConfigurationsSortedByName(); List<ConsoleConfiguration> consoleConfigurations = new ArrayList<ConsoleConfiguration>(); for (ConsoleConfiguration cc : ccs) { boolean isAccepted = true; try { ILaunchConfiguration config = LaunchHelper.findHibernateLaunchConfig(cc.getName()); if (config != null){ isAccepted = DebugUIPlugin.doLaunchConfigurationFiltering(config); } } catch (CoreException e) { HibernateConsolePlugin.getDefault().showError(null, e.getLocalizedMessage(), e); } if (isAccepted){ consoleConfigurations .add(cc); } } return consoleConfigurations.toArray(new ConsoleConfiguration[consoleConfigurations.size()]); } public static ILaunchConfigurationType getHibernateLaunchConfigsType(){ ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); return launchManager.getLaunchConfigurationType( ICodeGenerationLaunchConstants.CONSOLE_CONFIGURATION_LAUNCH_TYPE_ID); } public static ILaunchConfiguration[] findHibernateLaunchConfigs() throws CoreException { ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); return launchManager.getLaunchConfigurations(getHibernateLaunchConfigsType()); } public static ILaunchConfiguration findLaunchConfigurationByName(String launchConfigurationTypeId, String name) throws CoreException { Assert.isNotNull(launchConfigurationTypeId, HibernateConsoleMessages.LaunchHelper_launch_cfg_type_cannot_be_null); ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); ILaunchConfigurationType launchConfigurationType = launchManager .getLaunchConfigurationType(launchConfigurationTypeId); ILaunchConfiguration[] launchConfigurations = launchManager .getLaunchConfigurations(launchConfigurationType); for (int i = 0; i < launchConfigurations.length; i++) { // can't believe // there is no // look up by // name API ILaunchConfiguration launchConfiguration = launchConfigurations[i]; if (launchConfiguration.getName().equals(name)) { return launchConfiguration; } } return null; } public static ILaunchConfiguration[] findProjectRelatedHibernateLaunchConfigs(String projectName) throws CoreException { ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); ILaunchConfiguration[] configs = launchManager.getLaunchConfigurations(getHibernateLaunchConfigsType()); List<ILaunchConfiguration> list = new ArrayList<ILaunchConfiguration>(); for(int i = 0; i < configs.length && configs[i].exists(); i++) { String project = configs[i].getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null); if (projectName.equals(project)) list.add(configs[i]); } return list.toArray(new ILaunchConfiguration[list.size()]); } public static String verifyConfigurationName(String currentName) { if (currentName == null || currentName.length() < 1) { return HibernateConsoleMessages.ConsoleConfigurationWizardPage_name_must_specified; } if (Platform.OS_WIN32.equals(Platform.getOS())) { String[] badnames = new String[] { "aux", "clock$", "com1", "com2", "com3", "com4", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ "com5", "com6", "com7", "com8", "com9", "con", "lpt1", "lpt2", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9", "nul", "prn" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ for (int i = 0; i < badnames.length; i++) { if (currentName.equals(badnames[i])) { return NLS.bind(HibernateConsoleMessages.ConsoleConfigurationWizardPage_bad_name, currentName); } } } // See if name contains any characters that we deem illegal. // '@' and '&' are disallowed because they corrupt menu items. char[] disallowedChars = new char[] { '@', '&', '\\', '/', ':', '*', '?', '"', '<', '>', '|', '\0' }; for (int i = 0; i < disallowedChars.length; i++) { char c = disallowedChars[i]; if (currentName.indexOf(c) > -1) { return NLS.bind(HibernateConsoleMessages.ConsoleConfigurationWizardPage_bad_char, c); } } if(existingLaunchConfiguration(currentName)) { return HibernateConsoleMessages.ConsoleConfigurationWizardPage_config_name_already_exist; } return null; } public static boolean existingLaunchConfiguration(String name) { try { ILaunchConfiguration config = findHibernateLaunchConfig(name); if(config != null && !config.getAttribute(AddConfigurationAction.TEMPORARY_CONFIG_FLAG, false)) { if (name.equalsIgnoreCase(config.getName())) { return true; } } } catch (CoreException e) { HibernateConsolePlugin.getDefault().logErrorMessage(e.getMessage(), e); } return false; } //***************************** Hibernate Code Generation Launch Configurations ************ public static ILaunchConfiguration[] filterCodeGenerationConfigs(ILaunchConfiguration[] launchConfigs) throws CoreException{ List<ILaunchConfiguration> res = new ArrayList<ILaunchConfiguration>(); for (ILaunchConfiguration config : launchConfigs) { if (DebugUIPlugin.doLaunchConfigurationFiltering(config)) { res.add(config); } } return res.toArray(new ILaunchConfiguration[res.size()]); } public static ILaunchConfiguration[] findFilteredCodeGenerationConfigs() throws CoreException{ return filterCodeGenerationConfigs(findCodeGenerationConfigs()); } public static ILaunchConfiguration[] findFilteredCodeGenerationConfigsSorted() throws CoreException{ return filterCodeGenerationConfigs(findCodeGenerationConfigsSortedByName()); } public static ILaunchConfiguration[] findCodeGenerationConfigs() throws CoreException { ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); return launchManager.getLaunchConfigurations(getCodeGenerationType()); } public static ILaunchConfiguration[] findCodeGenerationConfigsSortedByName() throws CoreException { ILaunchConfiguration[] launchConfigs = findCodeGenerationConfigs(); Comparator<ILaunchConfiguration> comparator = new Comparator<ILaunchConfiguration>() { public int compare(ILaunchConfiguration o1, ILaunchConfiguration o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }; Arrays.sort(launchConfigs, comparator); return launchConfigs; } public static ILaunchConfigurationType getCodeGenerationType(){ ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); return launchManager.getLaunchConfigurationType( ICodeGenerationLaunchConstants.CODE_GENERATION_LAUNCH_TYPE_ID); } }