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
.naming
.AttributesDictionary
;
22 import org
.argeo
.naming
.LdifParser
;
23 import org
.argeo
.naming
.LdifWriter
;
24 import org
.argeo
.node
.NodeConstants
;
26 class NodeDeployConfig
{
27 private final String BASE
= "ou=deploy,ou=node";
28 private final Path path
;
29 private final Function
<String
, String
> getter
;
31 private final SortedMap
<LdapName
, Attributes
> configurations
;
33 public NodeDeployConfig(Function
<String
, String
> getter
) {
34 String osgiConfigurationArea
= getter
.apply(KernelUtils
.OSGI_CONFIGURATION_AREA
);
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
);
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
);
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
);
57 public Dictionary
<String
, Object
> getConfiguration(String servicePid
) {
60 dn
= new LdapName("ou=" + servicePid
+ "," + BASE
);
61 } catch (InvalidNameException e
) {
62 throw new IllegalArgumentException("Cannot parse DN", e
);
64 if (configurations
.containsKey(dn
))
65 return new AttributesDictionary(configurations
.get(dn
));
70 static Dictionary
<String
, Object
> getStatePropertiesFromEnvironment(Function
<String
, String
> getter
) {
71 Hashtable
<String
, Object
> props
= new Hashtable
<>();
73 copyFrameworkProp(getter
, NodeConstants
.I18N_DEFAULT_LOCALE
, props
);
74 copyFrameworkProp(getter
, NodeConstants
.I18N_LOCALES
, props
);
76 copyFrameworkProp(getter
, NodeConstants
.ROLES_URI
, props
);
77 copyFrameworkProp(getter
, NodeConstants
.USERADMIN_URIS
, props
);
79 for (RepoConf repoConf
: RepoConf
.values())
80 copyFrameworkProp(getter
, NodeConstants
.NODE_REPO_PROP_PREFIX
+ repoConf
.name(), props
);
81 // TODO add other environment sources
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
);
92 private static void copyFrameworkProp(Function
<String
, String
> getter
, String key
,
93 Dictionary
<String
, Object
> props
) {
94 String value
= getter
.apply(key
);
96 props
.put(key
, value
);