X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.osgiboot%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fosgiboot%2FActivator.java;h=5d70b769a49694a7a400335373303d7c3716252e;hb=2b38f185dd4a334fe1a76422319e13f2bca56a7c;hp=0051c1b91264494ce15d5aee52700fb0a12b8c50;hpb=7beaa7b00689e51eabe523402c7571c4f2507f77;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java b/runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java index 0051c1b91..5d70b769a 100644 --- a/runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java +++ b/runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java @@ -1,42 +1,29 @@ package org.argeo.slc.osgiboot; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -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_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()); + osgiBoot.installUrls( osgiBoot.getLocationsUrls()); - List urls = getMavenUrls(); - installUrls(bundleContext, urls); +// installUrls(bundleContext, getMavenUrls()); - startBundles(bundleContext); + osgiBoot.startBundles(); info("SLC OSGi bootstrap completed"); } catch (Exception e) { @@ -48,139 +35,7 @@ public class Activator implements BundleActivator { public void stop(BundleContext context) throws Exception { } - protected static void installUrls(BundleContext bundleContext, - List urls) { - Map 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 getLocationsUrls() { - List urlsProvided = new ArrayList(); - - 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 getDevLocationsUrls() { - List urls = new ArrayList(); - - 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 bases = new ArrayList(); - 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 patterns = new ArrayList(); - st = new StringTokenizer(devPatterns, ";"); - while (st.hasMoreTokens()) { - patterns.add(st.nextToken().trim()); - } - - List matched = new ArrayList(); - 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 void match(PathMatcher matcher, List 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) - if (file.isDirectory()) - 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 { - File[] files = new File((base + currentPath).replace('/', - File.separatorChar)).listFiles(); - 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); - - } - } - } - } - } - +/* protected List getMavenUrls() throws Exception { String baseUrl = "reference:file:" + System.getProperty("user.home") + "/.m2/repository/"; @@ -207,44 +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 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 getInstalledBundles( - BundleContext bundleContext) { - Map installedBundles = new HashMap(); - for (Bundle bundle : bundleContext.getBundles()) - installedBundles.put(bundle.getLocation(), bundle); - return installedBundles; - } - - protected static Map getBundles(BundleContext bundleContext) { - Map installedBundles = new HashMap(); - for (Bundle bundle : bundleContext.getBundles()) - installedBundles.put(bundle.getSymbolicName(), bundle); - return installedBundles; - } - +*/ +/* protected static List asUrls(String baseUrl, List mavenFiles) { List urls = new ArrayList(); @@ -270,28 +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) { - 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; @@ -359,5 +191,5 @@ public class Activator implements BundleActivator { } } - +*/ }