package org.argeo.slc.detached.admin;
-import java.util.ArrayList;
import java.util.List;
+import java.util.ArrayList;
import java.util.Properties;
import java.util.StringTokenizer;
public DetachedSession execute(DetachedRequest request,
BundleContext bundleContext) {
- MinimalBundlesManager bundlesManager = new MinimalBundlesManager(bundleContext);
DetachedSession session = new DetachedSession();
session.setUuid(Long.toString(System.currentTimeMillis()));
String refreshedBundles = props
.getProperty("slc.detached.refreshedBundles");
if (refreshedBundles != null) {
+
List refreshedBundleNames = new ArrayList();
StringTokenizer st = new StringTokenizer(refreshedBundles, ",");
while (st.hasMoreTokens()) {
refreshedBundleNames.add(st.nextElement());
- }
+ }
- Bundle[] bundles = bundleContext.getBundles();
+ Bundle[] allBundles = bundleContext.getBundles();
+ Bundle[] bundlesToRefresh = new Bundle[refreshedBundleNames.size()];
- List bundlesToRefresh = new ArrayList();
- for (int i = 0; i < bundles.length; i++) {
- if (refreshedBundleNames.contains(bundles[i].getSymbolicName())) {
- bundlesToRefresh.add(bundles[i]);
- }
+ log.debug("Bundles to refresh for DetachedSession:");
+
+ for(int i = 0; i < bundlesToRefresh.length; ++i) {
+ bundlesToRefresh[i] = getBundleForName((String)refreshedBundleNames.get(i), allBundles);
+ if(log.isDebugEnabled())
+ log.debug(" " + refreshedBundleNames.get(i));
}
- for (int i = 0; i < bundlesToRefresh.size(); i++) {
- Bundle bundle = (Bundle) bundlesToRefresh.get(i);
- try {
- bundlesManager.upgradeSynchronous(bundle);
-// bundle.stop();
-// bundle.update();
-// bundle.start();
- log.info("Refreshed bundle " + bundle.getSymbolicName());
-
-// try {
-// Thread.sleep(2000);
-// } catch (InterruptedException e) {
-// e.printStackTrace();
-// }
-
- } catch (Exception e) {
- throw new DetachedException("Could not refresh bundle "
- + bundle.getSymbolicName(), e);
- }
- }
+ (new MinimalBundlesManager(bundleContext)).upgradeSynchronous(bundlesToRefresh);
}
return session;
}
+
+ private Bundle getBundleForName(String symbolicName, Bundle[] bundles) {
+ for (int i = 0; i < bundles.length; i++) {
+ if (symbolicName.equals(bundles[i].getSymbolicName())) {
+ return bundles[i];
+ }
+ }
+ throw new DetachedException("No Bundle found for symbolic name " + symbolicName);
+ }
}