Refactor Argeo init
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / osgi / Activator.java
index 5a9527041bf01e5c99bb8cc9598d40c620a6b1ee..057c2178663f7a11ec5288eff28013133469e8e0 100644 (file)
@@ -1,9 +1,11 @@
 package org.argeo.init.osgi;
 
-import java.util.Enumeration;
-import java.util.ResourceBundle;
-import java.util.Vector;
+import java.lang.System.Logger;
+import java.lang.System.Logger.Level;
+import java.util.Objects;
 
+import org.argeo.init.ServiceMain;
+import org.argeo.init.logging.ThinLoggerFinder;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
@@ -13,44 +15,49 @@ import org.osgi.framework.BundleContext;
  * //wiki.eclipse.org/Configurator</a>
  */
 public class Activator implements BundleActivator {
-       private Long checkpoint = null;
-
-       public void start(final BundleContext bundleContext) throws Exception {
-               // admin thread
-               Thread adminThread = new AdminThread(bundleContext);
-               adminThread.start();
-
-               // bootstrap
-               OsgiBoot osgiBoot = new OsgiBoot(bundleContext);
-               if (checkpoint == null) {
-                       osgiBoot.bootstrap();
-                       checkpoint = System.currentTimeMillis();
-               } else {
-                       osgiBoot.update();
-                       checkpoint = System.currentTimeMillis();
-               }
+       static {
+               // must be called first
+               ThinLoggerFinder.lazyInit();
        }
+       private final static Logger logger = System.getLogger(Activator.class.getName());
 
-       public void stop(BundleContext context) throws Exception {
-       }
+       private Long checkpoint = null;
 
-       class JournaldResourceBundle extends ResourceBundle {
+       private boolean argeoInit = false;
+       /** Not null if we created it ourselves. */
+       private OsgiRuntimeContext runtimeContext;
 
-               @Override
-               protected Object handleGetObject(String key) {
-                       switch (key) {
-                       case "ERROR":
-                               return "<5>";
+       public void start(final BundleContext bundleContext) throws Exception {
+               // The OSGi runtime was created by us, and therefore already initialized
+               argeoInit = Boolean.parseBoolean(bundleContext.getProperty(ServiceMain.PROP_ARGEO_INIT_MAIN));
+               if (!argeoInit) {
+                       if (runtimeContext == null) {
+                               runtimeContext = new OsgiRuntimeContext(bundleContext);
+                               logger.log(Level.DEBUG, () -> "Argeo init via OSGi activator");
                        }
-                       return null;
-               }
 
-               @Override
-               public Enumeration<String> getKeys() {
-                       Vector<String> keys = new Vector<>();
-                       keys.add("ERROR");
-                       return keys.elements();
+                       // admin thread
+//             Thread adminThread = new AdminThread(bundleContext);
+//             adminThread.start();
+
+                       // bootstrap
+//             OsgiBoot osgiBoot = new OsgiBoot(bundleContext);
+                       if (checkpoint == null) {
+//                     osgiBoot.bootstrap();
+                               checkpoint = System.currentTimeMillis();
+                       } else {
+                               runtimeContext.update();
+                               checkpoint = System.currentTimeMillis();
+                       }
                }
+       }
 
+       public void stop(BundleContext context) throws Exception {
+               if (!argeoInit) {
+                       Objects.nonNull(runtimeContext);
+                       runtimeContext.stop(context);
+                       runtimeContext = null;
+               }
        }
+
 }