]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeDeployConfig.java
Remove deprecated APIs
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeDeployConfig.java
1 package org.argeo.cms.internal.kernel;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.Writer;
6 import java.net.URI;
7 import java.net.URISyntaxException;
8 import java.nio.file.Files;
9 import java.nio.file.Path;
10 import java.nio.file.Paths;
11 import java.util.Dictionary;
12 import java.util.Hashtable;
13 import java.util.SortedMap;
14 import java.util.function.Function;
15
16 import javax.naming.InvalidNameException;
17 import javax.naming.directory.Attributes;
18 import javax.naming.ldap.LdapName;
19
20 import org.argeo.cms.CmsException;
21 import org.argeo.naming.AttributesDictionary;
22 import org.argeo.naming.LdifParser;
23 import org.argeo.naming.LdifWriter;
24 import org.argeo.node.NodeConstants;
25
26 class NodeDeployConfig {
27 private final String BASE = "ou=deploy,ou=node";
28 private final Path path;
29 private final Function<String, String> getter;
30
31 private final SortedMap<LdapName, Attributes> configurations;
32
33 public NodeDeployConfig(Function<String, String> getter) {
34 String osgiConfigurationArea = getter.apply(KernelUtils.OSGI_CONFIGURATION_AREA);
35 try {
36 this.path = Paths.get(new URI(osgiConfigurationArea));
37 } catch (URISyntaxException e) {
38 throw new IllegalArgumentException("Cannot parse " + getter.apply(KernelUtils.OSGI_CONFIGURATION_AREA), e);
39 }
40 this.getter = getter;
41
42 if (!Files.exists(path))
43 try (Writer writer = Files.newBufferedWriter(path)) {
44 Files.createFile(path);
45 LdifWriter ldifWriter = new LdifWriter(writer);
46 } catch (IOException e) {
47 throw new CmsException("Cannot create " + path, e);
48 }
49
50 try (InputStream in = Files.newInputStream(path)) {
51 configurations = new LdifParser().read(in);
52 } catch (IOException e) {
53 throw new CmsException("Cannot read " + path, e);
54 }
55 }
56
57 public Dictionary<String, Object> getConfiguration(String servicePid) {
58 LdapName dn;
59 try {
60 dn = new LdapName("ou=" + servicePid + "," + BASE);
61 } catch (InvalidNameException e) {
62 throw new IllegalArgumentException("Cannot parse DN", e);
63 }
64 if (configurations.containsKey(dn))
65 return new AttributesDictionary(configurations.get(dn));
66 else
67 return null;
68 }
69
70 static Dictionary<String, Object> getStatePropertiesFromEnvironment(Function<String, String> getter) {
71 Hashtable<String, Object> props = new Hashtable<>();
72 // i18n
73 copyFrameworkProp(getter, NodeConstants.I18N_DEFAULT_LOCALE, props);
74 copyFrameworkProp(getter, NodeConstants.I18N_LOCALES, props);
75 // user admin
76 copyFrameworkProp(getter, NodeConstants.ROLES_URI, props);
77 copyFrameworkProp(getter, NodeConstants.USERADMIN_URIS, props);
78 // data
79 for (RepoConf repoConf : RepoConf.values())
80 copyFrameworkProp(getter, NodeConstants.NODE_REPO_PROP_PREFIX + repoConf.name(), props);
81 // TODO add other environment sources
82 return props;
83 }
84
85 static Dictionary<String, Object> getUserAdminPropertiesFromEnvironment(Function<String, String> getter) {
86 Hashtable<String, Object> props = new Hashtable<>();
87 copyFrameworkProp(getter, NodeConstants.ROLES_URI, props);
88 copyFrameworkProp(getter, NodeConstants.USERADMIN_URIS, props);
89 return props;
90 }
91
92 private static void copyFrameworkProp(Function<String, String> getter, String key,
93 Dictionary<String, Object> props) {
94 String value = getter.apply(key);
95 if (value != null)
96 props.put(key, value);
97 }
98
99 }