1 package org
.argeo
.slc
.detached
.admin
;
3 import java
.util
.ArrayList
;
5 import java
.util
.Properties
;
6 import java
.util
.StringTokenizer
;
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
;
18 public class OpenSession
implements DetachedAdminCommand
{
19 private final static Log log
= LogFactory
.getLog(OpenSession
.class);
21 public DetachedSession
execute(DetachedRequest request
,
22 BundleContext bundleContext
) {
23 DetachedSession session
= new DetachedSession();
24 session
.setUuid(Long
.toString(System
.currentTimeMillis()));
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
));
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());
40 Bundle
[] bundles
= bundleContext
.getBundles();
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
]);
49 for (int i
= 0; i
< bundlesToRefresh
.size(); i
++) {
50 Bundle bundle
= (Bundle
) bundlesToRefresh
.get(i
);
55 log
.info("Refreshed bundle " + bundle
.getSymbolicName());
56 } catch (BundleException e
) {
57 throw new DetachedException("Could not refresh bundle "
58 + bundle
.getSymbolicName(), e
);