diff options
author | Simon Kaegi | 2008-04-27 20:01:12 +0000 |
---|---|---|
committer | Simon Kaegi | 2008-04-27 20:01:12 +0000 |
commit | 8ec2891df924d26e81c6df45603aef3913ac9a46 (patch) | |
tree | 0dfd36e6cfd4e36a77f7015ce7feafc9f0148282 /bundles/org.eclipse.equinox.frameworkadmin.equinox/src | |
parent | 12123d085e50591909bcd3b3e36551cab7a7ded7 (diff) | |
download | rt.equinox.p2-8ec2891df924d26e81c6df45603aef3913ac9a46.tar.gz rt.equinox.p2-8ec2891df924d26e81c6df45603aef3913ac9a46.tar.xz rt.equinox.p2-8ec2891df924d26e81c6df45603aef3913ac9a46.zip |
Bug 228998 Support osgi.shared.configuration.area in frameworkadmin
Diffstat (limited to 'bundles/org.eclipse.equinox.frameworkadmin.equinox/src')
4 files changed, 80 insertions, 14 deletions
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxConstants.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxConstants.java index f7b4875ee..f02b86f52 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxConstants.java +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxConstants.java @@ -46,6 +46,7 @@ public class EquinoxConstants { public static final String PROP_OSGI_FW = "osgi.framework"; //$NON-NLS-1$ public static final String PROP_LAUNCHER_PATH = "osgi.launcherPath"; //$NON-NLS-1$ public static final String PROP_LAUNCHER_NAME = "osgi.launcherIni"; //$NON-NLS-1$ + public static final String PROP_SHARED_CONFIGURATION_AREA = "osgi.sharedConfiguration.area"; //$NON-NLS-1$ public static final String INI_EXTENSION = ".ini"; //$NON-NLS-1$ public static final String EXE_EXTENSION = ".exe"; //$NON-NLS-1$ diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java index d04e47b76..118b8dcd4 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java @@ -240,24 +240,24 @@ public class EquinoxFwConfigFileParser { LauncherData launcherData = manipulator.getLauncherData(); configData.initialize(); - //Load properties - Properties props = new Properties(); - InputStream is = null; - try { - is = new FileInputStream(inputFile); - props.load(is); - } finally { - try { - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - is = null; - } + // load configuration properties + Properties props = loadProperties(inputFile); //Start figuring out stuffs URL rootURL = launcherData.getLauncher() != null ? launcherData.getLauncher().getParentFile().toURL() : null; + // look for shared configuration to merge + String sharedConfigurationArea = props.getProperty(EquinoxConstants.PROP_SHARED_CONFIGURATION_AREA); + if (sharedConfigurationArea != null) { + File sharedConfigIni = findSharedConfigIniFile(rootURL, sharedConfigurationArea); + if (sharedConfigIni != null && sharedConfigIni.exists()) { + Properties sharedProps = loadProperties(sharedConfigIni); + // merge: shared properties are over-written by user customizations + sharedProps.putAll(props); + props = sharedProps; + } + } + //Extracting fwkJar location needs to be done first String launcherName = null; String launcherPath = null; @@ -304,6 +304,63 @@ public class EquinoxFwConfigFileParser { Log.log(LogService.LOG_INFO, NLS.bind(Messages.log_configFile, inputFile.getAbsolutePath())); } + private static Properties loadProperties(File inputFile) throws FileNotFoundException, IOException { + Properties props = new Properties(); + InputStream is = null; + try { + is = new FileInputStream(inputFile); + props.load(is); + } finally { + try { + is.close(); + } catch (IOException e) { + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_failed_reading_properties, inputFile)); + } + is = null; + } + return props; + } + + private File findSharedConfigIniFile(URL rootURL, String sharedConfigurationArea) { + URL sharedConfigurationURL = null; + try { + sharedConfigurationURL = new URL(sharedConfigurationArea); + } catch (MalformedURLException e) { + // unexpected since this was written by the framework + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_shared_config_url, sharedConfigurationArea)); + return null; + } + + // check for a relative URL + if (!sharedConfigurationURL.getPath().startsWith("/")) { //$NON-NLS-1$ + + if (!rootURL.getProtocol().equals(sharedConfigurationURL.getProtocol())) { + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_shared_config_relative_url, rootURL.toExternalForm(), sharedConfigurationArea)); + return null; + } + try { + sharedConfigurationURL = new URL(rootURL, sharedConfigurationArea); + } catch (MalformedURLException e) { + // unexpected since this was written by the framework + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_shared_config_relative_url, rootURL.toExternalForm(), sharedConfigurationArea)); + return null; + } + } + File sharedConfigurationFolder = new File(sharedConfigurationURL.getPath()); + if (!sharedConfigurationFolder.isDirectory()) { + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_shared_config_file_missing, sharedConfigurationFolder)); + return null; + } + + File sharedConfigIni = new File(sharedConfigurationFolder, EquinoxConstants.CONFIG_INI); + if (!sharedConfigIni.exists()) { + Log.log(LogService.LOG_WARNING, NLS.bind(Messages.log_shared_config_file_missing, sharedConfigIni)); + return null; + } + + return sharedConfigIni; + } + private static Properties makeRelative(Properties props, URL rootURL, File fwJar, File configArea, File osgiInstallArea) throws IOException { for (int i = 0; i < PATHS.length; i++) { String path = props.getProperty(PATHS[i]); diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java index 77a80e9be..a8994e0ed 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/Messages.java @@ -23,6 +23,10 @@ public class Messages extends NLS { public static String log_configProps; public static String log_renameSuccessful; public static String log_fwConfigSave; + public static String log_shared_config_url; + public static String log_shared_config_relative_url; + public static String log_shared_config_file_missing; + public static String log_failed_reading_properties; public static String msg_ConfigFileHeader; diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties index 1eb78cf51..3b9b8afcb 100644 --- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties +++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/messages.properties @@ -18,5 +18,9 @@ log_configFile= Configuration file ({0}) has been read successfully. log_configProps= Configuration properties is empty. log_renameSuccessful= Successfully renamed {0} to {1}. log_fwConfigSave= Framework Configuration was saved successfully in {0}. +log_shared_config_url=Failed creating shared configuration url for {0}. +log_shared_config_relative_url=Failed creating shared configuration url for root: {0} and sharedConfiguration: {1}. +log_shared_config_file_missing=Failed creating shared configuration. File missing: {0}. +log_failed_reading_properties=Failed reading properties from file: {0}. msg_ConfigFileHeader= This configuration file was written by {0}.
\ No newline at end of file |