]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiExecutionModulesManager.java
Some more UI functionalities :
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.osgi / src / main / java / org / argeo / slc / osgi / OsgiExecutionModulesManager.java
index 4ae06f8b3e53bb154a4a91faed1d83be33aea792..d46ad48c5b3b09b71247dbcea719ec1a28d2a947 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -45,7 +45,7 @@ import org.argeo.slc.execution.ExecutionFlowDescriptor;
 import org.argeo.slc.execution.ExecutionFlowDescriptorConverter;
 import org.argeo.slc.execution.ExecutionModuleDescriptor;
 import org.argeo.slc.execution.ExecutionModulesListener;
-import org.argeo.slc.process.RealizedFlow;
+import org.argeo.slc.execution.RealizedFlow;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.BundleException;
@@ -100,6 +100,8 @@ public class OsgiExecutionModulesManager extends
                        log.debug("Launch unique flow " + flow + " from module " + module);
                try {
                        OsgiBundle osgiBundle = bundlesManager.findFromPattern(module);
+                       if (osgiBundle == null)
+                               throw new SlcException("No OSGi bundle found for " + module);
                        Bundle moduleBundle = bundlesManager.findRelatedBundle(osgiBundle);
                        bundlesManager.startSynchronous(moduleBundle);
                        RealizedFlow lastLaunch = findRealizedFlow(module, flow);
@@ -189,28 +191,41 @@ public class OsgiExecutionModulesManager extends
 
        protected ExecutionFlow findExecutionFlow(String moduleName,
                        String moduleVersion, String flowName) {
-               String filter = "(&(Bundle-SymbolicName=" + moduleName
-                               + ")(org.springframework.osgi.bean.name=" + flowName + "))";
+               String filter = moduleVersion == null || moduleVersion.equals("0.0.0") ? "(&(Bundle-SymbolicName="
+                               + moduleName
+                               + ")(org.springframework.osgi.bean.name="
+                               + flowName + "))"
+                               : "(&(Bundle-SymbolicName=" + moduleName + ")(Bundle-Version="
+                                               + moduleVersion
+                                               + ")(org.springframework.osgi.bean.name=" + flowName
+                                               + "))";
                return bundlesManager.getSingleServiceStrict(ExecutionFlow.class,
                                filter, true);
        }
 
        protected ExecutionContext findExecutionContext(String moduleName,
                        String moduleVersion) {
-               String filter = "(&(Bundle-SymbolicName=" + moduleName
-                               + ")(Bundle-Version=" + moduleVersion + "))";
+               String filter = moduleFilter(moduleName, moduleVersion);
                return bundlesManager.getSingleServiceStrict(ExecutionContext.class,
                                filter, true);
        }
 
        protected ExecutionFlowDescriptorConverter findExecutionFlowDescriptorConverter(
                        String moduleName, String moduleVersion) {
-               String filter = "(&(Bundle-SymbolicName=" + moduleName
-                               + ")(Bundle-Version=" + moduleVersion + "))";
+               String filter = moduleFilter(moduleName, moduleVersion);
                return bundlesManager.getSingleService(
                                ExecutionFlowDescriptorConverter.class, filter, false);
        }
 
+       /** Only based on symbolic name if version is null or "0.0.0" */
+       protected String moduleFilter(String moduleName, String moduleVersion) {
+               return moduleVersion == null || moduleVersion.equals("0.0.0") ? "(Bundle-SymbolicName="
+                               + moduleName + ")"
+                               : "(&(Bundle-SymbolicName=" + moduleName + ")(Bundle-Version="
+                                               + moduleVersion + "))";
+
+       }
+
        /**
         * Builds a minimal realized flow, based on the provided information
         * (typically from the command line).
@@ -291,6 +306,10 @@ public class OsgiExecutionModulesManager extends
                try {
                        Bundle bundle = bundlesManager.findRelatedBundle(new OsgiBundle(
                                        nameVersion));
+                       if (bundle == null)
+                               throw new SlcException("Counld not find bundle for "
+                                               + nameVersion);
+
                        bundlesManager.startSynchronous(bundle);
                        if (isSpringInstrumented(bundle)) {
                                // Wait for Spring application context to be ready