+ public static void computeStartLevels(
+ SortedMap/* <Integer, List<String>> */startLevels,
+ Properties properties, Integer defaultStartLevel) {
+
+ // default (and previously, only behaviour)
+ appendToStartLevels(startLevels, defaultStartLevel,
+ properties.getProperty(PROP_ARGEO_OSGI_START, ""));
+
+ // list argeo.osgi.start.* system properties
+ Iterator/* <String> */keys = properties.keySet().iterator();
+ final String prefix = PROP_ARGEO_OSGI_START + ".";
+ while (keys.hasNext()) {
+ String key = (String) keys.next();
+ if (key.startsWith(prefix)) {
+ Integer startLevel;
+ String suffix = key.substring(prefix.length());
+ String[] tokens = suffix.split("\\.");
+ if (tokens.length > 0 && !tokens[0].trim().equals(""))
+ try {
+ // first token is start level
+ startLevel = new Integer(tokens[0]);
+ } catch (NumberFormatException e) {
+ startLevel = defaultStartLevel;
+ }
+ else
+ startLevel = defaultStartLevel;
+
+ // append bundle names
+ String bundleNames = properties.getProperty(key);
+ appendToStartLevels(startLevels, startLevel, bundleNames);
+ }
+ }
+ }
+
+ /** Append a comma-separated list of bundles to the start levels. */
+ private static void appendToStartLevels(
+ SortedMap/* <Integer, List<String>> */startLevels,
+ Integer startLevel, String str) {
+ if (str == null || str.trim().equals(""))
+ return;
+
+ if (!startLevels.containsKey(startLevel))
+ startLevels.put(startLevel, new ArrayList());
+ String[] bundleNames = str.split(",");
+ for (int i = 0; i < bundleNames.length; i++) {
+ if (bundleNames[i] != null && !bundleNames[i].trim().equals(""))
+ ((List) startLevels.get(startLevel)).add(bundleNames[i]);
+ }
+ }
+
+ /**
+ * Convenience method accepting a comma-separated list of bundle to start
+ *
+ * @deprecated
+ */