]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java
Remove deprecated APIs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / Activator.java
1 package org.argeo.cms.internal.kernel;
2
3 import java.io.IOException;
4 import java.net.URL;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.util.Dictionary;
8 import java.util.List;
9 import java.util.Locale;
10
11 import org.argeo.cms.CmsException;
12 import org.argeo.node.ArgeoLogger;
13 import org.argeo.node.NodeConstants;
14 import org.argeo.node.NodeDeployment;
15 import org.argeo.node.NodeInstance;
16 import org.argeo.node.NodeState;
17 import org.argeo.util.LangUtils;
18 import org.osgi.framework.BundleActivator;
19 import org.osgi.framework.BundleContext;
20 import org.osgi.framework.Constants;
21 import org.osgi.framework.ServiceReference;
22 import org.osgi.service.log.LogReaderService;
23
24 /**
25 * Activates the {@link Kernel} from the provided {@link BundleContext}. Gives
26 * access to kernel information for the rest of the bundle (and only it)
27 */
28 public class Activator implements BundleActivator {
29 private static Activator instance;
30
31 private BundleContext bc;
32 private LogReaderService logReaderService;
33 // private ConfigurationAdmin configurationAdmin;
34
35 private NodeLogger logger;
36 private CmsState nodeState;
37 private CmsDeployment nodeDeployment;
38 private CmsInstance nodeInstance;
39
40 @Override
41 public void start(BundleContext bundleContext) throws Exception {
42 instance = this;
43 this.bc = bundleContext;
44 this.logReaderService = getService(LogReaderService.class);
45 // this.configurationAdmin = getService(ConfigurationAdmin.class);
46
47 initSecurity();// must be first
48 initArgeoLogger();
49 try {
50 initNode();
51 } catch (Exception e) {
52 e.printStackTrace();
53 throw new CmsException("Cannot initialize node", e);
54 }
55 }
56
57 private void initSecurity() {
58 URL url = getClass().getClassLoader().getResource(
59 KernelConstants.JAAS_CONFIG);
60 System.setProperty("java.security.auth.login.config",
61 url.toExternalForm());
62 }
63
64 private void initArgeoLogger() {
65 logger = new NodeLogger(logReaderService);
66 bc.registerService(ArgeoLogger.class, logger, null);
67 }
68
69 private void initNode() throws IOException {
70 // Node state
71 Path stateUuidPath = bc.getDataFile("stateUuid").toPath();
72 String stateUuid;
73 if (Files.exists(stateUuidPath)) {
74 stateUuid = Files.readAllLines(stateUuidPath).get(0);
75 } else {
76 stateUuid = bc.getProperty(Constants.FRAMEWORK_UUID);
77 Files.write(stateUuidPath, stateUuid.getBytes());
78 }
79 nodeState = new CmsState(stateUuid);
80 Dictionary<String, Object> regProps = LangUtils.dico(
81 Constants.SERVICE_PID, NodeConstants.NODE_STATE_PID);
82 regProps.put(NodeConstants.CN, stateUuid);
83 bc.registerService(NodeState.class, nodeState, regProps);
84
85 // Node deployment
86 nodeDeployment = new CmsDeployment();
87 bc.registerService(NodeDeployment.class, nodeDeployment, null);
88
89 // Node instance
90 nodeInstance = new CmsInstance();
91 bc.registerService(NodeInstance.class, nodeInstance, null);
92 }
93
94 @Override
95 public void stop(BundleContext bundleContext) throws Exception {
96 nodeInstance.shutdown();
97 nodeDeployment.shutdown();
98 nodeState.shutdown();
99
100 instance = null;
101 this.bc = null;
102 this.logReaderService = null;
103 // this.configurationAdmin = null;
104 }
105
106 private <T> T getService(Class<T> clazz) {
107 ServiceReference<T> sr = bc.getServiceReference(clazz);
108 if (sr == null)
109 throw new CmsException("No service available for " + clazz);
110 return bc.getService(sr);
111 }
112
113 public static NodeState getNodeState() {
114 return instance.nodeState;
115 }
116
117 public String[] getLocales() {
118 // TODO optimize?
119 List<Locale> locales = getNodeState().getLocales();
120 String[] res = new String[locales.size()];
121 for (int i = 0; i < locales.size(); i++)
122 res[i] = locales.get(i).toString();
123 return res;
124 }
125
126 }