]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/kernel/FirstInitProperties.java
Stabilise deployment
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / FirstInitProperties.java
1 package org.argeo.cms.internal.kernel;
2
3 import static org.argeo.cms.internal.kernel.KernelUtils.getFrameworkProp;
4
5 import java.io.File;
6 import java.io.FileFilter;
7 import java.io.IOException;
8 import java.util.Dictionary;
9 import java.util.Hashtable;
10
11 import org.apache.commons.io.FileUtils;
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14 import org.argeo.cms.CmsException;
15 import org.argeo.jcr.ArgeoJcrConstants;
16 import org.argeo.node.NodeConstants;
17 import org.argeo.node.RepoConf;
18 import org.eclipse.equinox.http.jetty.JettyConstants;
19
20 /**
21 * Interprets framework properties in order to generate the initial deploy
22 * configuration.
23 */
24 class FirstInitProperties {
25 private final static Log log = LogFactory.getLog(FirstInitProperties.class);
26
27 public FirstInitProperties() {
28 log.info("## FIRST INIT ##");
29 }
30
31 /** Override the provided config with the framework properties */
32 Dictionary<String, Object> getNodeRepositoryConfig(Dictionary<String, Object> provided) {
33 Dictionary<String, Object> props = provided != null ? provided : new Hashtable<String, Object>();
34 for (RepoConf repoConf : RepoConf.values()) {
35 Object value = getFrameworkProp(NodeConstants.NODE_REPO_PROP_PREFIX + repoConf.name());
36 if (value != null)
37 props.put(repoConf.name(), value);
38 }
39 props.put(NodeConstants.CN, ArgeoJcrConstants.ALIAS_NODE);
40 props.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, ArgeoJcrConstants.ALIAS_NODE);
41 return props;
42 }
43
44 Dictionary<String, Object> getHttpServerConfig(Dictionary<String, Object> provided) {
45 String httpPort = getFrameworkProp("org.osgi.service.http.port");
46 String httpsPort = getFrameworkProp("org.osgi.service.http.port.secure");
47 /// TODO make it more generic
48 String httpHost = getFrameworkProp("org.eclipse.equinox.http.jetty.http.host");
49
50 final Hashtable<String, Object> props = new Hashtable<String, Object>();
51 // try {
52 if (httpPort != null || httpsPort != null) {
53 if (httpPort != null) {
54 props.put(JettyConstants.HTTP_PORT, httpPort);
55 props.put(JettyConstants.HTTP_ENABLED, true);
56 }
57 if (httpsPort != null) {
58 props.put(JettyConstants.HTTPS_PORT, httpsPort);
59 props.put(JettyConstants.HTTPS_ENABLED, true);
60 props.put(JettyConstants.SSL_KEYSTORETYPE, "PKCS12");
61 // jettyProps.put(JettyConstants.SSL_KEYSTORE,
62 // nodeSecurity.getHttpServerKeyStore().getCanonicalPath());
63 props.put(JettyConstants.SSL_PASSWORD, "changeit");
64 props.put(JettyConstants.SSL_WANTCLIENTAUTH, true);
65 }
66 if (httpHost != null) {
67 props.put(JettyConstants.HTTP_HOST, httpHost);
68 }
69 props.put(NodeConstants.CN, "default");
70 }
71 return props;
72 }
73
74 /**
75 * Called before node initialisation, in order populate OSGi instance are
76 * with some files (typically LDIF, etc).
77 */
78 void prepareInstanceArea() {
79 String nodeInit = getFrameworkProp(NodeConstants.NODE_INIT);
80 if (nodeInit == null)
81 nodeInit = "../../init";
82 if (nodeInit.startsWith("http")) {
83 // remoteFirstInit(nodeInit);
84 return;
85 }
86
87 // TODO use java.nio.file
88 File initDir;
89 if (nodeInit.startsWith("."))
90 initDir = KernelUtils.getExecutionDir(nodeInit);
91 else
92 initDir = new File(nodeInit);
93 // TODO also uncompress archives
94 if (initDir.exists())
95 try {
96 FileUtils.copyDirectory(initDir, KernelUtils.getOsgiInstanceDir(), new FileFilter() {
97
98 @Override
99 public boolean accept(File pathname) {
100 if (pathname.getName().equals(".svn") || pathname.getName().equals(".git"))
101 return false;
102 return true;
103 }
104 });
105 log.info("CMS initialized from " + initDir.getCanonicalPath());
106 } catch (IOException e) {
107 throw new CmsException("Cannot initialize from " + initDir, e);
108 }
109 }
110
111 }