Improve nested OSGi runtimes
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / api / init / RuntimeManager.java
index 302237f5ef932d4380fb1740bbe39b50b902c950..17c330c60045d998a93a1fc89c0bb267e81cd731 100644 (file)
@@ -16,29 +16,53 @@ public interface RuntimeManager {
        String JVM_ARGS = "jvm.args";
        String STATE = "state";
        String DATA = "data";
+       String SHARED = "shared";
 
        public void startRuntime(String relPath, Consumer<Map<String, String>> configCallback);
 
        public void closeRuntime(String relPath, boolean async);
 
        default void startRuntime(String relPath, String props) {
+               startRuntime(relPath, (config) -> {
+                       loadProperties(config, props);
+               });
+       }
+
+       static void loadProperties(Map<String, String> config, Properties properties) {
+               for (Object key : properties.keySet()) {
+                       config.put(key.toString(), properties.getProperty(key.toString()));
+               }
+       }
+
+       static void loadProperties(Map<String, String> config, String props) {
                Properties properties = new Properties();
                try (Reader reader = new StringReader(props)) {
                        properties.load(reader);
                } catch (IOException e) {
                        throw new IllegalArgumentException("Cannot load properties", e);
                }
-               startRuntime(relPath, (config) -> {
-                       for (Object key : properties.keySet()) {
-                               config.put(key.toString(), properties.getProperty(key.toString()));
-                       }
-               });
+               loadProperties(config, properties);
+       }
+
+       static void loadProperties(Map<String, String> config, InputStream in) throws IOException {
+               Properties properties = new Properties();
+               properties.load(in);
+               loadProperties(config, properties);
+       }
+
+       static void loadDefaults(Map<String, String> config) {
+               try (InputStream in = RuntimeManager.class.getResourceAsStream("defaults.ini")) {
+                       loadProperties(config, in);
+               } catch (IOException e) {
+                       throw new IllegalStateException("Could not load runtime defaults", e);
+               }
        }
 
        /**
         * Load configs recursively starting with the parent directories, until a
         * jvm.args file is found.
         */
+       @Deprecated
        static void loadConfig(Path dir, Map<String, String> config) {
                try {
                        Path jvmArgsPath = dir.resolve(RuntimeManager.JVM_ARGS);
@@ -63,6 +87,7 @@ public interface RuntimeManager {
         * starts with a '+' character, itis expected that the last character is a
         * separator and it will be prepended to the existing value.
         */
+       @Deprecated
        static void loadConfig(InputStream in, Map<String, String> config) throws IOException {
                Properties props = new Properties();
                props.load(in);