X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FDeployConfig.java;h=a9b30681bc32419f2858a7f59b9397f60336ae6d;hb=85688af22a77f82e7762e11e6eb38c6367eddb6c;hp=376323aac0fbdc8c2ba49bee6eb6836e11e7a922;hpb=a7970d75a320e1702ff62392242499e7c2527ba3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java index 376323aac..a9b30681b 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java @@ -6,6 +6,7 @@ import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.util.Dictionary; +import java.util.List; import java.util.SortedMap; import java.util.TreeMap; @@ -18,28 +19,27 @@ import javax.naming.ldap.Rdn; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; -import org.argeo.jcr.ArgeoJcrConstants; +import org.argeo.naming.AttributesDictionary; +import org.argeo.naming.LdifParser; +import org.argeo.naming.LdifWriter; import org.argeo.node.NodeConstants; -import org.argeo.node.NodeState; -import org.argeo.util.naming.AttributesDictionary; -import org.argeo.util.naming.LdifParser; -import org.argeo.util.naming.LdifWriter; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.cm.ConfigurationEvent; -import org.osgi.service.cm.SynchronousConfigurationListener; +import org.osgi.service.cm.ConfigurationListener; -class DeployConfig implements SynchronousConfigurationListener { +class DeployConfig implements ConfigurationListener { private final Log log = LogFactory.getLog(getClass()); private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); private Path deployConfigPath = KernelUtils.getOsgiInstancePath(KernelConstants.DEPLOY_CONFIG_PATH); private SortedMap deployConfigs = new TreeMap<>(); - public DeployConfig(boolean isClean) { - ConfigurationAdmin configurationAdmin = bc.getService(bc.getServiceReference(ConfigurationAdmin.class)); + public DeployConfig(ConfigurationAdmin configurationAdmin,boolean isClean) { + // ConfigurationAdmin configurationAdmin = + // bc.getService(bc.getServiceReference(ConfigurationAdmin.class)); try { if (!Files.exists(deployConfigPath)) { // first init firstInit(); @@ -48,7 +48,8 @@ class DeployConfig implements SynchronousConfigurationListener { } catch (IOException e) { throw new CmsException("Could not init deploy configs", e); } - bc.registerService(SynchronousConfigurationListener.class, this, null); + // FIXME check race conditions during initialization + // bc.registerService(ConfigurationListener.class, this, null); } private void firstInit() throws IOException { @@ -64,17 +65,29 @@ class DeployConfig implements SynchronousConfigurationListener { deployConfigs = new LdifParser().read(in); } + // node repository Dictionary nodeConfig = firstInit - .getNodeRepositoryConfig(getProps(NodeConstants.NODE_REPOS_FACTORY_PID, ArgeoJcrConstants.ALIAS_NODE)); + .getNodeRepositoryConfig(getProps(NodeConstants.NODE_REPOS_FACTORY_PID, NodeConstants.ALIAS_NODE)); // node repository is mandatory putFactoryDeployConfig(NodeConstants.NODE_REPOS_FACTORY_PID, nodeConfig); + // user admin + + List> userDirectoryConfigs = firstInit.getUserDirectoryConfigs(); + for (int i = 0; i < userDirectoryConfigs.size(); i++) { + Dictionary userDirectoryConfig = userDirectoryConfigs.get(i); + String cn = Integer.toString(i); + userDirectoryConfig.put(NodeConstants.CN, cn); + putFactoryDeployConfig(NodeConstants.NODE_USER_ADMIN_PID, userDirectoryConfig); + } + + // http server Dictionary webServerConfig = firstInit - .getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, ArgeoJcrConstants.ALIAS_NODE)); + .getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, NodeConstants.DEFAULT)); if (!webServerConfig.isEmpty()) putFactoryDeployConfig(KernelConstants.JETTY_FACTORY_PID, webServerConfig); - saveDeployedConfigs(); + save(); } private void init(ConfigurationAdmin configurationAdmin, boolean isClean) throws IOException { @@ -144,7 +157,7 @@ class DeployConfig implements SynchronousConfigurationListener { assert attrs != null; AttributesDictionary.copy(conf.getProperties(), attrs); } - saveDeployedConfigs(); + save(); if (log.isDebugEnabled()) log.debug("Updated deploy config " + serviceDn(factoryPid, cn.toString())); } else { @@ -156,7 +169,7 @@ class DeployConfig implements SynchronousConfigurationListener { Attributes attrs = deployConfigs.get(serviceDn); assert attrs != null; AttributesDictionary.copy(conf.getProperties(), attrs); - saveDeployedConfigs(); + save(); if (log.isDebugEnabled()) log.debug("Updated deploy config " + serviceDn); } else { @@ -189,9 +202,11 @@ class DeployConfig implements SynchronousConfigurationListener { deployConfigs.put(serviceDn, attrs); } - void saveDeployedConfigs() throws IOException { + void save() { try (Writer writer = Files.newBufferedWriter(deployConfigPath)) { new LdifWriter(writer).write(deployConfigs); + } catch (IOException e) { + throw new CmsException("Cannot save deploy configs", e); } } @@ -222,7 +237,7 @@ class DeployConfig implements SynchronousConfigurationListener { } } - private Dictionary getProps(String factoryPid, String cn) { + Dictionary getProps(String factoryPid, String cn) { Attributes attrs = deployConfigs.get(serviceDn(factoryPid, cn)); if (attrs != null) return new AttributesDictionary(attrs);