]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/admin/OpenSession.java
Migrate detached to new runtime
[gpl/argeo-slc.git] / runtime / org.argeo.slc.detached / src / main / java / org / argeo / slc / detached / admin / OpenSession.java
1 package org.argeo.slc.detached.admin;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Properties;
6 import java.util.StringTokenizer;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.slc.detached.DetachedAdminCommand;
11 import org.argeo.slc.detached.DetachedException;
12 import org.argeo.slc.detached.DetachedRequest;
13 import org.argeo.slc.detached.DetachedSession;
14 import org.osgi.framework.Bundle;
15 import org.osgi.framework.BundleContext;
16 import org.osgi.framework.BundleException;
17
18 public class OpenSession implements DetachedAdminCommand {
19 private final static Log log = LogFactory.getLog(OpenSession.class);
20
21 public DetachedSession execute(DetachedRequest request,
22 BundleContext bundleContext) {
23 DetachedSession session = new DetachedSession();
24 session.setUuid(Long.toString(System.currentTimeMillis()));
25
26 Properties props = request.getProperties();
27 if (props.containsKey(DetachedSession.PROP_DO_IT_AGAIN_POLICY))
28 session.setDoItAgainPolicy(props
29 .getProperty(DetachedSession.PROP_DO_IT_AGAIN_POLICY));
30
31 String refreshedBundles = props
32 .getProperty("slc.detached.refreshedBundles");
33 if (refreshedBundles != null) {
34 List refreshedBundleNames = new ArrayList();
35 StringTokenizer st = new StringTokenizer(refreshedBundles, ",");
36 while (st.hasMoreTokens()) {
37 refreshedBundleNames.add(st.nextElement());
38 }
39
40 Bundle[] bundles = bundleContext.getBundles();
41
42 List bundlesToRefresh = new ArrayList();
43 for (int i = 0; i < bundles.length; i++) {
44 if (refreshedBundleNames.contains(bundles[i].getSymbolicName())) {
45 bundlesToRefresh.add(bundles[i]);
46 }
47 }
48
49 for (int i = 0; i < bundlesToRefresh.size(); i++) {
50 Bundle bundle = (Bundle) bundlesToRefresh.get(i);
51 try {
52 bundle.stop();
53 bundle.update();
54 bundle.start();
55 log.info("Refreshed bundle " + bundle.getSymbolicName());
56 } catch (BundleException e) {
57 throw new DetachedException("Could not refresh bundle "
58 + bundle.getSymbolicName(), e);
59 }
60 }
61 }
62
63 return session;
64 }
65 }