X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.ide.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fide%2Fui%2Flaunch%2Fosgi%2FOsgiLaunchHelper.java;h=31aaf136f68dd9f82fc4f3aaf5fb0617e7c7092b;hb=9b15274f8e1425882bee220a1dd7f9ab9e5aba6f;hp=ebf41c0a4387e52cb537f92b7f3084a980e4ac47;hpb=2e19686a72dfca196f79774741c7e4145f84e204;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java b/eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java index ebf41c0a4..31aaf136f 100644 --- a/eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java +++ b/eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java @@ -1,8 +1,10 @@ package org.argeo.slc.ide.ui.launch.osgi; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; @@ -10,25 +12,61 @@ import java.util.StringTokenizer; import org.argeo.slc.ide.ui.SlcIdeUiPlugin; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.variables.IStringVariableManager; +import org.eclipse.core.variables.VariablesPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.IVMInstall2; import org.eclipse.jdt.launching.IVMInstallType; import org.eclipse.jdt.launching.JavaRuntime; +import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.pde.ui.launcher.IPDELauncherConstants; +import org.eclipse.swt.widgets.Display; -public class OsgiLaunchHelper { +public class OsgiLaunchHelper implements OsgiLauncherConstants { private static Boolean debug = false; + /** Expect properties file to be set as mapped resources */ public static void updateLaunchConfiguration( + ILaunchConfigurationWorkingCopy configuration) { + try { + IFile propertiesFile = (IFile) configuration.getMappedResources()[0]; + propertiesFile.refreshLocal(IResource.DEPTH_ONE, null); + + Properties properties = OsgiLaunchHelper + .readProperties(propertiesFile); + + List bundlesToStart = new ArrayList(); + Map systemPropertiesToAppend = new HashMap(); + OsgiLaunchHelper.interpretProperties(properties, bundlesToStart, + systemPropertiesToAppend); + + File workingDir = getWorkingDirectory(configuration); + File dataDir = new File(workingDir, "data"); + + OsgiLaunchHelper.updateLaunchConfiguration(configuration, + bundlesToStart, systemPropertiesToAppend, dataDir + .getAbsolutePath()); + } catch (Exception e) { + ErrorDialog.openError(Display.getCurrent().getActiveShell(), + "Error", "Cannot read properties", + new Status(IStatus.ERROR, SlcIdeUiPlugin.ID, + e.getMessage(), e)); + return; + } + } + + static void updateLaunchConfiguration( ILaunchConfigurationWorkingCopy configuration, List bundlesToStart, - Map systemPropertiesToAppend, String workingDir, - String dataDir) throws CoreException { + Map systemPropertiesToAppend, String dataDir) + throws CoreException { // Convert bundle lists String targetBundles = configuration.getAttribute( IPDELauncherConstants.TARGET_BUNDLES, ""); @@ -43,14 +81,46 @@ public class OsgiLaunchHelper { // Update other default information configuration.setAttribute(IPDELauncherConstants.DEFAULT_AUTO_START, false); - configuration.setAttribute(IPDELauncherConstants.CONFIG_CLEAR_AREA, - true); + + // VM arguments (system properties) String defaultVmArgs = configuration.getAttribute( OsgiLauncherConstants.ATTR_DEFAULT_VM_ARGS, ""); StringBuffer vmArgs = new StringBuffer(defaultVmArgs); - vmArgs.append(" -Xmx256m"); + // Data dir system property + if (dataDir != null) + addSysProperty(vmArgs, OsgiLauncherConstants.ARGEO_OSGI_DATA_DIR, + dataDir); // Add locations of JVMs + if (configuration.getAttribute(ATTR_ADD_JVM_PATHS, false)) + addVms(vmArgs); + + // Add other system properties + for (String key : systemPropertiesToAppend.keySet()) + addSysProperty(vmArgs, key, systemPropertiesToAppend.get(key)); + + vmArgs.append(" ").append( + configuration.getAttribute(ATTR_ADDITIONAL_VM_ARGS, "")); + + configuration.setAttribute( + IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, vmArgs + .toString()); + + // Program arguments + StringBuffer progArgs = new StringBuffer(""); + if (dataDir != null) { + progArgs.append("-data "); + progArgs.append(surroundSpaces(dataDir)); + } + String additionalProgramArgs = configuration.getAttribute( + OsgiLauncherConstants.ATTR_ADDITIONAL_PROGRAM_ARGS, ""); + progArgs.append(' ').append(additionalProgramArgs); + configuration.setAttribute( + IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, + progArgs.toString()); + } + + protected static void addVms(StringBuffer vmArgs) { addVmSysProperty(vmArgs, "default", JavaRuntime.getDefaultVMInstall()); IVMInstallType[] vmTypes = JavaRuntime.getVMInstallTypes(); for (IVMInstallType vmType : vmTypes) { @@ -75,36 +145,6 @@ public class OsgiLaunchHelper { } } - // Add other system properties - for (String key : systemPropertiesToAppend.keySet()) - addSysProperty(vmArgs, key, systemPropertiesToAppend.get(key)); - - if (dataDir != null) - addSysProperty(vmArgs, OsgiLauncherConstants.ARGEO_OSGI_DATA_DIR, - dataDir); - - configuration.setAttribute( - IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, vmArgs - .toString()); - - // Program arguments - String defaultProgArgs = configuration.getAttribute( - OsgiLauncherConstants.ATTR_DEFAULT_PROGRAM_ARGS, ""); - StringBuffer progArgs = new StringBuffer(defaultProgArgs); - if (dataDir != null) { - progArgs.append(" -data "); - progArgs.append(surroundSpaces(dataDir)); - } - configuration.setAttribute( - IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, - progArgs.toString()); - - // String dir = findWorkingDirectory(); - if (workingDir != null) - configuration.setAttribute( - IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, - workingDir); - } protected static void addVmSysProperty(StringBuffer vmArgs, String suffix, @@ -115,14 +155,15 @@ public class OsgiLaunchHelper { protected static void addSysProperty(StringBuffer vmArgs, String key, String value) { + surroundSpaces(value); String str = "-D" + key + "=" + value; - surroundSpaces(str); - vmArgs.append(" " + str); + // surroundSpaces(str); + vmArgs.append(' ').append(str); } protected static String surroundSpaces(String str) { - if (str.contains(" ")) - return "\"" + str + "\""; + if (str.indexOf(' ') >= 0) + return '\"' + str + '\"'; else return str; } @@ -196,7 +237,7 @@ public class OsgiLaunchHelper { while (st.hasMoreTokens()) bundlesToStart.add(st.nextToken()); } - + propKeys: for (Object keyObj : properties.keySet()) { String key = keyObj.toString(); if (OsgiLauncherConstants.ARGEO_OSGI_START.equals(key)) @@ -212,4 +253,39 @@ public class OsgiLaunchHelper { } } + + // Hacked from + // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getWorkingDirectory(ILaunchConfiguration) + public static File getWorkingDirectory(ILaunchConfiguration configuration) + throws CoreException { + String working; + try { + working = configuration.getAttribute( + IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, + new File(".").getCanonicalPath()); //$NON-NLS-1$ + } catch (IOException e) { + working = "${workspace_loc}/../"; //$NON-NLS-1$ + } + File dir = new File(getSubstitutedString(working)); + if (!dir.exists()) + dir.mkdirs(); + return dir; + } + + // Hacked from + // org.eclipse.pde.internal.ui.launcher.LaunchArgumentsHelper.getSubstitutedString(String) + private static String getSubstitutedString(String text) + throws CoreException { + if (text == null) + return ""; //$NON-NLS-1$ + IStringVariableManager mgr = VariablesPlugin.getDefault() + .getStringVariableManager(); + return mgr.performStringSubstitution(text); + } + + // static void initializeConfiguration( + // ILaunchConfigurationWorkingCopy configuration) { + // new OSGiLaunchConfigurationInitializer().initialize(configuration); + // } + }