]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java
Improve SSH support
[gpl/argeo-slc.git] / runtime / org.argeo.slc.osgiboot / src / main / java / org / argeo / slc / osgiboot / Activator.java
index c5f23e5012aae2a76e0a01dfa95248359f2d7e92..5d70b769a49694a7a400335373303d7c3716252e 100644 (file)
@@ -1,45 +1,29 @@
 package org.argeo.slc.osgiboot;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
-import org.argeo.slc.osgiboot.internal.springutil.AntPathMatcher;
-import org.argeo.slc.osgiboot.internal.springutil.PathMatcher;
-import org.argeo.slc.osgiboot.internal.springutil.SystemPropertyUtils;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 
 public class Activator implements BundleActivator {
-       public final static String PROP_SLC_OSGI_START = "slc.osgi.start";
-       public final static String PROP_SLC_OSGI_BUNDLES = "slc.osgi.bundles";
-       public final static String PROP_SLC_OSGI_DEV_BASES = "slc.osgi.devBases";
-       public final static String PROP_SLC_OSGI_DEV_PATTERNS = "slc.osgi.devPatterns";
-       public final static String PROP_SLC_OSGI_LOCATIONS = "slc.osgi.locations";
-       public final static String PROP_SLC_MAVEN_DEPENDENCY_FILE = "slc.maven.dependencyFile";
-
-       private static Boolean debug = false;
-
+       
        public void start(BundleContext bundleContext) throws Exception {
                try {
                        info("SLC OSGi bootstrap starting...");
-                       installUrls(bundleContext, getDevLocationsUrls());
+                       OsgiBoot osgiBoot = new OsgiBoot(bundleContext);
+                       
+                       osgiBoot.installUrls( osgiBoot.getBundlesUrls());
 
-                       installUrls(bundleContext, getLocationsUrls());
-                       installUrls(bundleContext, getBundlesUrls());
+                       osgiBoot.installUrls( osgiBoot.getLocationsUrls());
 
-                       List<String> urls = getMavenUrls();
-                       installUrls(bundleContext, urls);
+//                     installUrls(bundleContext, getMavenUrls());
 
-                       startBundles(bundleContext);
+                       osgiBoot.startBundles();
 
                        info("SLC OSGi bootstrap completed");
                } catch (Exception e) {
@@ -51,232 +35,7 @@ public class Activator implements BundleActivator {
        public void stop(BundleContext context) throws Exception {
        }
 
-       protected static void installUrls(BundleContext bundleContext,
-                       List<String> urls) {
-               Map<String, Bundle> installedBundles = getInstalledBundles(bundleContext);
-               for (String url : urls) {
-                       try {
-
-                               if (installedBundles.containsKey(url)) {
-                                       Bundle bundle = installedBundles.get(url);
-                                       // bundle.update();
-                                       if (debug)
-                                               debug("Bundle " + bundle.getSymbolicName()
-                                                               + " already installed from " + url);
-                               } else {
-                                       Bundle bundle = bundleContext.installBundle(url);
-                                       if (debug)
-                                               debug("Installed bundle " + bundle.getSymbolicName()
-                                                               + " from " + url);
-                               }
-                       } catch (BundleException e) {
-                               warn("Could not install bundle from " + url + ": "
-                                               + e.getMessage());
-                       }
-               }
-
-       }
-
-       protected List<String> getLocationsUrls() {
-               List<String> urlsProvided = new ArrayList<String>();
-
-               String bundlesList = getProperty(PROP_SLC_OSGI_LOCATIONS);
-               if (bundlesList == null)
-                       return urlsProvided;
-               bundlesList = SystemPropertyUtils.resolvePlaceholders(bundlesList);
-
-               StringTokenizer st = new StringTokenizer(bundlesList,
-                               File.pathSeparator);
-               while (st.hasMoreTokens()) {
-                       urlsProvided.add("reference:file:" + st.nextToken().trim());
-               }
-               return urlsProvided;
-       }
-
-       protected List<String> getDevLocationsUrls() {
-               List<String> urls = new ArrayList<String>();
-
-               String devBase = getProperty(PROP_SLC_OSGI_DEV_BASES);
-               String devPatterns = getProperty(PROP_SLC_OSGI_DEV_PATTERNS);
-               if (devBase == null)
-                       return urls;
-               devBase = SystemPropertyUtils.resolvePlaceholders(devBase);
-               devBase = devBase.replace(File.separatorChar, '/');
-               devPatterns = SystemPropertyUtils.resolvePlaceholders(devPatterns);
-
-               List<String> bases = new ArrayList<String>();
-               StringTokenizer st = new StringTokenizer(devBase, ",");
-               while (st.hasMoreTokens()) {
-                       String token = st.nextToken().trim();
-                       char lastChar = token.charAt(token.length() - 1);
-                       if (lastChar != '/')
-                               token = token + '/';
-                       bases.add(token);
-               }
-
-               List<String> patterns = new ArrayList<String>();
-               st = new StringTokenizer(devPatterns, ";");
-               while (st.hasMoreTokens()) {
-                       patterns.add(st.nextToken().trim());
-               }
-
-               List<String> matched = new ArrayList<String>();
-               PathMatcher matcher = new AntPathMatcher();
-               for (String base : bases)
-                       for (String pattern : patterns)
-                               match(matcher, matched, base, null, pattern);
-
-               for (String fullPath : matched)
-                       urls.add("reference:file:" + fullPath);
-
-               return urls;
-       }
-
-       protected List<String> getBundlesUrls() {
-               List<String> urls = new ArrayList<String>();
-
-               List<BundlesSet> bundlesSets = new ArrayList<BundlesSet>();
-               String bundles = getProperty(PROP_SLC_OSGI_BUNDLES);
-               if (bundles == null)
-                       return urls;
-               info(PROP_SLC_OSGI_BUNDLES + "=" + bundles);
-
-               StringTokenizer st = new StringTokenizer(bundles, ",");
-               while (st.hasMoreTokens()) {
-                       bundlesSets.add(new BundlesSet(st.nextToken()));
-               }
-
-               List<String> included = new ArrayList<String>();
-               PathMatcher matcher = new AntPathMatcher();
-               for (BundlesSet bundlesSet : bundlesSets)
-                       for (String pattern : bundlesSet.getIncludes())
-                               match(matcher, included, bundlesSet.getDir(), null, pattern);
-
-               List<String> excluded = new ArrayList<String>();
-               for (BundlesSet bundlesSet : bundlesSets)
-                       for (String pattern : bundlesSet.getExcludes())
-                               match(matcher, excluded, bundlesSet.getDir(), null, pattern);
-
-               for (String fullPath : included) {
-                       if (!excluded.contains(fullPath))
-                               urls.add("reference:file:" + fullPath);
-               }
-
-               return urls;
-       }
-
-       private class BundlesSet {
-               private String baseUrl = "reference:file";
-               private final String dir;
-               private List<String> includes = new ArrayList<String>();
-               private List<String> excludes = new ArrayList<String>();
-
-               public BundlesSet(String def) {
-                       StringTokenizer st = new StringTokenizer(def, ";");
-
-                       if (!st.hasMoreTokens())
-                               throw new RuntimeException("Base dir not defined.");
-                       try {
-                               String dirPath = st.nextToken();
-                               dir = new File(dirPath.replace('/', File.separatorChar))
-                                               .getCanonicalPath();
-                               if (debug)
-                                       debug("Base dir: " + dir);
-                       } catch (IOException e) {
-                               throw new RuntimeException("Cannot convert to absolute path", e);
-                       }
-
-                       while (st.hasMoreTokens()) {
-                               String tk = st.nextToken();
-                               StringTokenizer stEq = new StringTokenizer(tk, "=");
-                               String type = stEq.nextToken();
-                               String pattern = stEq.nextToken();
-                               if ("in".equals(type) || "include".equals(type)) {
-                                       includes.add(pattern);
-                               } else if ("ex".equals(type) || "exclude".equals(type)) {
-                                       excludes.add(pattern);
-                               } else if ("baseUrl".equals(type)) {
-                                       baseUrl = pattern;
-                               } else {
-                                       System.err.println("Unkown bundles pattern type " + type);
-                               }
-                       }
-               }
-
-               public String getDir() {
-                       return dir;
-               }
-
-               public List<String> getIncludes() {
-                       return includes;
-               }
-
-               public List<String> getExcludes() {
-                       return excludes;
-               }
-
-               public String getBaseUrl() {
-                       return baseUrl;
-               }
-
-       }
-
-       protected void match(PathMatcher matcher, List<String> matched,
-                       String base, String currentPath, String pattern) {
-               if (currentPath == null) {
-                       // Init
-                       File baseDir = new File(base.replace('/', File.separatorChar));
-                       File[] files = baseDir.listFiles();
-
-                       if (files == null) {
-                               warn("Base dir " + baseDir + " has no children, exists="
-                                               + baseDir.exists() + ", isDirectory="
-                                               + baseDir.isDirectory());
-                               return;
-                       }
-
-                       for (File file : files)
-                               match(matcher, matched, base, file.getName(), pattern);
-               } else {
-                       String fullPath = base + '/' + currentPath;
-                       if (matched.contains(fullPath))
-                               return;// don't try deeper if already matched
-
-                       boolean ok = matcher.match(pattern, currentPath);
-                       if (debug)
-                               debug(currentPath + " " + (ok ? "" : " not ")
-                                               + " matched with " + pattern);
-                       if (ok) {
-                               matched.add(fullPath);
-                               return;
-                       } else {
-                               String newFullPath = (base + '/' + currentPath).replace('/',
-                                               File.separatorChar);
-                               File[] files = new File(newFullPath).listFiles();
-                               if (files != null) {
-                                       for (File file : files)
-                                               if (file.isDirectory()) {
-                                                       String newCurrentPath = currentPath + '/'
-                                                                       + file.getName();
-                                                       if (matcher.matchStart(pattern, newCurrentPath)) {
-                                                               // recurse only if start matches
-                                                               match(matcher, matched, base, newCurrentPath,
-                                                                               pattern);
-                                                       } else {
-                                                               if (debug)
-                                                                       debug(newCurrentPath
-                                                                                       + " does not start match with "
-                                                                                       + pattern);
-
-                                                       }
-                                               }
-                               } else {
-                                       warn("Not a directory: " + newFullPath);
-                               }
-                       }
-               }
-       }
-
+/*
        protected List<String> getMavenUrls() throws Exception {
                String baseUrl = "reference:file:" + System.getProperty("user.home")
                                + "/.m2/repository/";
@@ -303,45 +62,8 @@ public class Activator implements BundleActivator {
 
                return asUrls(baseUrl, mavenFiles);
        }
-
-       protected void startBundles(BundleContext bundleContext) throws Exception {
-               String bundlesToStart = getProperty(PROP_SLC_OSGI_START);
-               if (bundlesToStart == null)
-                       return;
-
-               StringTokenizer st = new StringTokenizer(bundlesToStart, ",");
-               Map<String, Bundle> bundles = getBundles(bundleContext);
-               while (st.hasMoreTokens()) {
-                       String name = st.nextToken().trim();
-                       Bundle bundle = bundles.get(name);
-                       if (bundle != null)
-                               try {
-                                       bundle.start();
-                               } catch (Exception e) {
-                                       warn("Bundle " + name + " cannot be started: "
-                                                       + e.getMessage());
-                               }
-                       else
-                               warn("Bundle " + name + " not installed.");
-
-               }
-       }
-
-       protected static Map<String, Bundle> getInstalledBundles(
-                       BundleContext bundleContext) {
-               Map<String, Bundle> installedBundles = new HashMap<String, Bundle>();
-               for (Bundle bundle : bundleContext.getBundles())
-                       installedBundles.put(bundle.getLocation(), bundle);
-               return installedBundles;
-       }
-
-       protected static Map<String, Bundle> getBundles(BundleContext bundleContext) {
-               Map<String, Bundle> installedBundles = new HashMap<String, Bundle>();
-               for (Bundle bundle : bundleContext.getBundles())
-                       installedBundles.put(bundle.getSymbolicName(), bundle);
-               return installedBundles;
-       }
-
+*/
+/*
        protected static List<String> asUrls(String baseUrl,
                        List<MavenFile> mavenFiles) {
                List<String> urls = new ArrayList<String>();
@@ -367,31 +89,41 @@ public class Activator implements BundleActivator {
                component.setScope(st.nextToken());
                return component;
        }
+*//*
+       protected static String getProperty(String name, String defaultValue) {
+               final String value;
+               if (defaultValue != null)
+                       value = System.getProperty(name, defaultValue);
+               else
+                       value = System.getProperty(name);
 
-       protected String getProperty(String name) {
-               String value = System.getProperty(name);
                if (value == null || value.equals(""))
                        return null;
                else
                        return value;
        }
 
+       protected static String getProperty(String name) {
+               return getProperty(name, null);
+       }
+*/
        private static void info(Object obj) {
                System.out.println("# INFO " + obj);
        }
-
+/*
        private static void debug(Object obj) {
                if (debug)
                        System.out.println("# DBUG " + obj);
        }
 
        private static void warn(Object obj) {
-               if (System.getProperty("os.name").contains("Windows"))
-                       System.out.println("# WARN " + obj);
-               else
-                       System.err.println("# WARN " + obj);
+               System.out.println("# WARN " + obj);
+               // if (System.getProperty("os.name").contains("Windows"))
+               // System.out.println("# WARN " + obj);
+               // else
+               // System.err.println("# WARN " + obj);
        }
-
+*//*
        static class MavenFile {
                private String groupId;
                private String artifactId;
@@ -459,5 +191,5 @@ public class Activator implements BundleActivator {
                }
 
        }
-
+*/
 }