1 package org
.argeo
.cms
.internal
.kernel
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
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
;
16 import javax
.naming
.InvalidNameException
;
17 import javax
.naming
.directory
.Attributes
;
18 import javax
.naming
.ldap
.LdapName
;
20 import org
.argeo
.cms
.CmsException
;
21 import org
.argeo
.node
.NodeConstants
;
22 import org
.argeo
.node
.RepoConf
;
23 import org
.argeo
.util
.naming
.AttributesDictionary
;
24 import org
.argeo
.util
.naming
.LdifParser
;
25 import org
.argeo
.util
.naming
.LdifWriter
;
27 class NodeDeployConfig
{
28 private final String BASE
= "ou=deploy,ou=node";
29 private final Path path
;
30 private final Function
<String
, String
> getter
;
32 private final SortedMap
<LdapName
, Attributes
> configurations
;
34 public NodeDeployConfig(Function
<String
, String
> getter
) {
35 String osgiConfigurationArea
= getter
.apply(KernelUtils
.OSGI_CONFIGURATION_AREA
);
37 this.path
= Paths
.get(new URI(osgiConfigurationArea
));
38 } catch (URISyntaxException e
) {
39 throw new IllegalArgumentException("Cannot parse " + getter
.apply(KernelUtils
.OSGI_CONFIGURATION_AREA
), e
);
43 if (!Files
.exists(path
))
44 try (Writer writer
= Files
.newBufferedWriter(path
)) {
45 Files
.createFile(path
);
46 LdifWriter ldifWriter
= new LdifWriter(writer
);
47 } catch (IOException e
) {
48 throw new CmsException("Cannot create " + path
, e
);
51 try (InputStream in
= Files
.newInputStream(path
)) {
52 configurations
= new LdifParser().read(in
);
53 } catch (IOException e
) {
54 throw new CmsException("Cannot read " + path
, e
);
58 public Dictionary
<String
, Object
> getConfiguration(String servicePid
) {
61 dn
= new LdapName("ou=" + servicePid
+ "," + BASE
);
62 } catch (InvalidNameException e
) {
63 throw new IllegalArgumentException("Cannot parse DN", e
);
65 if (configurations
.containsKey(dn
))
66 return new AttributesDictionary(configurations
.get(dn
));
71 static Dictionary
<String
, Object
> getStatePropertiesFromEnvironment(Function
<String
, String
> getter
) {
72 Hashtable
<String
, Object
> props
= new Hashtable
<>();
74 copyFrameworkProp(getter
, NodeConstants
.I18N_DEFAULT_LOCALE
, props
);
75 copyFrameworkProp(getter
, NodeConstants
.I18N_LOCALES
, props
);
77 copyFrameworkProp(getter
, NodeConstants
.ROLES_URI
, props
);
78 copyFrameworkProp(getter
, NodeConstants
.USERADMIN_URIS
, props
);
80 for (RepoConf repoConf
: RepoConf
.values())
81 copyFrameworkProp(getter
, NodeConstants
.NODE_REPO_PROP_PREFIX
+ repoConf
.name(), props
);
82 // TODO add other environment sources
86 static Dictionary
<String
, Object
> getUserAdminPropertiesFromEnvironment(Function
<String
, String
> getter
) {
87 Hashtable
<String
, Object
> props
= new Hashtable
<>();
88 copyFrameworkProp(getter
, NodeConstants
.ROLES_URI
, props
);
89 copyFrameworkProp(getter
, NodeConstants
.USERADMIN_URIS
, props
);
93 private static void copyFrameworkProp(Function
<String
, String
> getter
, String key
,
94 Dictionary
<String
, Object
> props
) {
95 String value
= getter
.apply(key
);
97 props
.put(key
, value
);