/* * Copyright (c) 2007-2009, Osmorc Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list * of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this * list of conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. * * Neither the name of 'Osmorc Development Team' nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.osmorc.frameworkintegration.impl.equinox; import com.intellij.conversion.CannotConvertException; import com.intellij.conversion.ConversionProcessor; import com.intellij.conversion.ProjectConverter; import com.intellij.conversion.RunManagerSettings; import com.intellij.openapi.util.WriteExternalException; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.osmorc.run.OsgiRunConfiguration; import org.osmorc.run.ui.SelectedBundle; import java.util.ArrayList; import java.util.Collection; /** * @author Robert F. Beeger (robert@beeger.net) */ public class EquinoxRunConfigurationConverter extends ProjectConverter { @Override public ConversionProcessor<RunManagerSettings> createRunConfigurationsConverter() { return new ActualConverter(); } private static final class ActualConverter extends ConversionProcessor<RunManagerSettings> { @Override public boolean isConversionNeeded(RunManagerSettings runManagerSettings) { for (Element element : runManagerSettings.getRunConfigurations()) { final String confType = element.getAttributeValue("type"); if (EQUINOX_RUN_CONFIGURATION_TYPE.equals(confType)) { return true; } } return false; } @Override public void process(RunManagerSettings runManagerSettings) throws CannotConvertException { for (Element element : runManagerSettings.getRunConfigurations()) { final String confType = element.getAttributeValue("type"); if (EQUINOX_RUN_CONFIGURATION_TYPE.equals(confType)) { String application = element.getAttributeValue(APPLICATION_ATTRIBUTE); String product = element.getAttributeValue(PRODUCT_ATTRIBUTE); String workingDir = element.getAttributeValue(WORKING_DIR_ATTRIBUTE); String configDir = element.getAttributeValue(CONFIG_DIR_ATTRIBUTE); String jvmArgs = element.getAttributeValue(JVM_ARGS_ATTRIBUTE); String additionalEquinoxArgs = element.getAttributeValue(ADDITIONAL_ARGS_ATTRIBUTE); boolean equinoxConsole = Boolean.valueOf(element.getAttributeValue(EQUINOX_CONSOLE, "false")); boolean equinoxDebug = Boolean.valueOf(element.getAttributeValue(EQUINOX_DEBUG, "false")); boolean clean = Boolean.valueOf(element.getAttributeValue(CLEAN, "true")); element.removeAttribute(APPLICATION_ATTRIBUTE); element.removeAttribute(PRODUCT_ATTRIBUTE); element.removeAttribute(WORKING_DIR_ATTRIBUTE); element.removeAttribute(CONFIG_DIR_ATTRIBUTE); element.removeAttribute(JVM_ARGS_ATTRIBUTE); element.removeAttribute(ADDITIONAL_ARGS_ATTRIBUTE); element.removeAttribute(EQUINOX_CONSOLE); element.removeAttribute(EQUINOX_DEBUG); element.removeAttribute(USE_UPDATE_CONFIGURATOR); element.removeAttribute(CLEAN); OsgiRunConfiguration osgiRunConfiguration = new OsgiRunConfiguration(null, null, null); osgiRunConfiguration.setWorkingDir(workingDir); osgiRunConfiguration.setVmParameters(jvmArgs); osgiRunConfiguration.setProgramParameters(additionalEquinoxArgs); EquinoxRunProperties runProperties = new EquinoxRunProperties(osgiRunConfiguration.getAdditionalProperties()); runProperties.setEquinoxApplication(application); runProperties.setEquinoxProduct(product); runProperties.setStartConsole(equinoxConsole); runProperties.setDebugMode(equinoxDebug); osgiRunConfiguration.putAdditionalProperties(runProperties.getProperties()); ArrayList<SelectedBundle> bundles = new ArrayList<SelectedBundle>(); bundles.add(new SelectedBundle("legacyLoader", "org.osmorc.frameworkintegration.impl.equinox.LegacyEquinoxOsgiRunConfigurationLoader", SelectedBundle.BundleType.FrameworkBundle)); osgiRunConfiguration.setBundlesToDeploy(bundles); element.setAttribute("type", "#org.osmorc.OsgiConfigurationType"); element.setAttribute("factoryName", "OSGi Bundles"); try { osgiRunConfiguration.writeExternal(element); } catch (WriteExternalException e) { throw new CannotConvertException("Error while converting legacy Eclipse Equinox run configuration", e); } } } } private static final String EQUINOX_RUN_CONFIGURATION_TYPE = "#org.osmorc.EquinoxConfigurationType"; @NonNls private static final String APPLICATION_ATTRIBUTE = "application"; @NonNls private static final String PRODUCT_ATTRIBUTE = "product"; @NonNls private static final String WORKING_DIR_ATTRIBUTE = "workingDir"; @NonNls private static final String CONFIG_DIR_ATTRIBUTE = "configDir"; @NonNls private static final String JVM_ARGS_ATTRIBUTE = "jvmArgs"; @NonNls private static final String ADDITIONAL_ARGS_ATTRIBUTE = "additionalEquinoxArgs"; @NonNls private static final String EQUINOX_CONSOLE = "equinoxConsole"; @NonNls private static final String EQUINOX_DEBUG = "equinoxDebug"; @NonNls private static final String USE_UPDATE_CONFIGURATOR = "useUpdateConfigurator"; @NonNls private static final String CLEAN = "clean"; } }