Work on backups and file metadata indexing.
[lgpl/argeo-commons.git] / org.argeo.osgi.boot / src / org / argeo / osgi / boot / internal / springutil / Bootstrap.java
diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/internal/springutil/Bootstrap.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/internal/springutil/Bootstrap.java
new file mode 100644 (file)
index 0000000..2ac4562
--- /dev/null
@@ -0,0 +1,101 @@
+package org.argeo.osgi.boot.internal.springutil;
+
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Bootstrap {
+
+       public static void main(String[] args) {
+               try {
+                       String configurationArea = "file:" + System.getProperty("user.dir") + "/state";
+                       String instanceArea = "file:" + System.getProperty("user.dir") + "/data";
+                       String log4jUrl = "file:" + System.getProperty("user.dir") + "/log4j.properties";
+
+                       System.setProperty("org.osgi.service.http.port", "7070");
+                       System.setProperty("log4j.configuration", log4jUrl);
+
+                       System.setProperty("osgi.console", "2323");
+                       Map<String, String> props = new HashMap<String, String>();
+                       props.put("osgi.clean", "true");
+//                     props.put("osgi.console", "2323");
+                       props.put("osgi.configuration.area", configurationArea);
+                       props.put("osgi.instance.area", instanceArea);
+
+                       System.setProperty("argeo.osgi.start.2.node",
+                                       "org.eclipse.equinox.console,org.eclipse.equinox.http.servlet,org.eclipse.equinox.ds,"
+                                                       + "org.eclipse.equinox.metatype,org.eclipse.equinox.cm,org.eclipse.rap.rwt.osgi");
+                       System.setProperty("argeo.osgi.start.3.node", "org.argeo.cms");
+
+                       // URL osgiJar =
+                       // Bootstrap.class.getClassLoader().getResource("/usr/share/osgi/boot/org.eclipse.org.jar");
+                       URL osgiJar = new URL(
+                                       "file:///home/mbaudier/dev/git/apache2/argeo-commons/demo/exec/cms-e4-rap/backup/share/osgi/boot/org.eclipse.org.jar");
+                       URL osgiBootJar = new URL(
+                                       "file:///home/mbaudier/dev/git/apache2/argeo-commons/demo/exec/cms-e4-rap/backup/share/osgi/boot/org.argeo.osgi.boot.jar");
+                       URL[] jarUrls = { osgiJar };
+                       try (URLClassLoader urlCl = new URLClassLoader(jarUrls)) {
+
+                               // Class<?> factoryClass =
+                               // urlCl.loadClass("/org/eclipse/osgi/launch/EquinoxFactory");
+                               Class<?> factoryClass = urlCl.loadClass("org.eclipse.osgi.launch.EquinoxFactory");
+                               Class<?> frameworkClass = urlCl.loadClass("org.osgi.framework.launch.Framework");
+                               Class<?> bundleContextClass = urlCl.loadClass("org.osgi.framework.BundleContext");
+                               Class<?> bundleClass = urlCl.loadClass("org.osgi.framework.Bundle");
+
+                               Object factory = factoryClass.getConstructor().newInstance();
+                               Method newFrameworkMethod = factoryClass.getMethod("newFramework", Map.class);
+                               Object framework = newFrameworkMethod.invoke(factory, props);
+                               Method startFramework = frameworkClass.getMethod("start", new Class[] {});
+                               startFramework.invoke(framework);
+                               Method getBundleContext = frameworkClass.getMethod("getBundleContext", new Class[] {});
+                               Object bundleContext = getBundleContext.invoke(framework);
+                               Class<?>[] installArgs = { String.class, InputStream.class };
+                               Method install = bundleContextClass.getMethod("installBundle", installArgs);
+                               Method startBundle = bundleClass.getMethod("start");
+                               Method getSymbolicName = bundleClass.getMethod("getSymbolicName");
+
+                               Path basePath = Paths.get(
+                                               "/home/mbaudier/dev/git/apache2/argeo-commons/demo/exec/cms-e4-rap/backup/share/osgi/boot/");
+                               List<Object> bundles = new ArrayList<>();
+                               for (Path p : Files.newDirectoryStream(basePath)) {
+                                       try (InputStream in = Files.newInputStream(p)) {
+                                               Object bundle = install.invoke(bundleContext, "file:" + p, in);
+                                               bundles.add(bundle);
+                                               System.out.println("Installed " + bundle);
+                                       } catch (Exception e) {
+                                               if (!p.getFileName().toString().startsWith("org.eclipse.osgi")) {
+                                                       System.err.println(p);
+                                                       e.printStackTrace();
+                                               }
+                                       }
+                               }
+
+//                             for (Object bundle : bundles) {
+//                                     try {
+//                                             String symbolicName = getSymbolicName.invoke(bundle).toString();
+//                                             startBundle.invoke(bundle);
+//                                     } catch (Exception e) {
+//                                             // TODO Auto-generated catch block
+//                                             e.printStackTrace();
+//                                     }
+//                             }
+
+                               Object osgiBootBundle = install.invoke(bundleContext, osgiBootJar.toString(), osgiBootJar.openStream());
+                               startBundle.invoke(osgiBootBundle);
+                       }
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+}