X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fosgi%2FDeployConfig.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fosgi%2FDeployConfig.java;h=c575b1da31cefa66f32140c823ad7c836ca58080;hb=b843d903237a2a4192c40d8c933e71137284050b;hp=deb33047502d325b006a63c0e69a928a14c24cc1;hpb=7974745f1de448353bf47012b5df36b451dce2fa;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/osgi/DeployConfig.java b/org.argeo.cms/src/org/argeo/cms/internal/osgi/DeployConfig.java index deb330475..c575b1da3 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/osgi/DeployConfig.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/osgi/DeployConfig.java @@ -7,7 +7,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Dictionary; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -35,6 +37,16 @@ import org.osgi.service.cm.ConfigurationListener; /** Manages the LDIF-based deployment configuration. */ public class DeployConfig implements ConfigurationListener { + private final static LdapName USER_ADMIN_BASE_DN; + static { + try { + USER_ADMIN_BASE_DN = new LdapName( + CmsConstants.OU + "=" + CmsConstants.NODE_USER_ADMIN_PID + "," + CmsConstants.DEPLOY_BASEDN); + } catch (InvalidNameException e) { + throw new IllegalArgumentException(e); + } + } + private final CmsLog log = CmsLog.getLog(getClass()); // private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); @@ -48,24 +60,6 @@ public class DeployConfig implements ConfigurationListener { private ConfigurationAdmin configurationAdmin; - public DeployConfig() { -// this.dataModels = dataModels; - // ConfigurationAdmin configurationAdmin = -// // bc.getService(bc.getServiceReference(ConfigurationAdmin.class)); -// try { -// if (!isInitialized()) { // first init -// isFirstInit = true; -// firstInit(); -// } -// this.configurationAdmin = configurationAdmin; -//// init(configurationAdmin, isClean, isFirstInit); -// } catch (IOException e) { -// throw new RuntimeException("Could not init deploy configs", e); -// } - // FIXME check race conditions during initialization - // bc.registerService(ConfigurationListener.class, this, null); - } - private void firstInit() throws IOException { log.info("## FIRST INIT ##"); Files.createDirectories(deployConfigPath.getParent()); @@ -140,31 +134,37 @@ public class DeployConfig implements ConfigurationListener { // .getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, CmsConstants.DEFAULT)); } - public void start() throws IOException { - if (!isInitialized()) { // first init - isFirstInit = true; - firstInit(); - } - - boolean isClean; + public void start() { try { - Configuration[] confs = configurationAdmin - .listConfigurations("(service.factoryPid=" + CmsConstants.NODE_USER_ADMIN_PID + ")"); - isClean = confs == null || confs.length == 0; - } catch (Exception e) { - throw new IllegalStateException("Cannot analyse clean state", e); - } + if (!isInitialized()) { // first init + isFirstInit = true; + firstInit(); + } - try (InputStream in = Files.newInputStream(deployConfigPath)) { - deployConfigs = new LdifParser().read(in); - } - if (isClean) { - if (log.isDebugEnabled()) - log.debug("Clean state, loading from framework properties..."); - setFromFrameworkProperties(isFirstInit); - loadConfigs(); + boolean isClean = true; + if (configurationAdmin != null) + try { + Configuration[] confs = configurationAdmin + .listConfigurations("(service.factoryPid=" + CmsConstants.NODE_USER_ADMIN_PID + ")"); + isClean = confs == null || confs.length == 0; + } catch (Exception e) { + throw new IllegalStateException("Cannot analyse clean state", e); + } + + try (InputStream in = Files.newInputStream(deployConfigPath)) { + deployConfigs = new LdifParser().read(in); + } + if (isClean) { + if (log.isDebugEnabled()) + log.debug("Clean state, loading from framework properties..."); + setFromFrameworkProperties(isFirstInit); + if (configurationAdmin != null) + loadConfigs(); + } + // TODO check consistency if not clean + } catch (IOException e) { + throw new RuntimeException("Cannot load deploy configuration", e); } - // TODO check consistency if not clean } public void stop() { @@ -220,6 +220,17 @@ public class DeployConfig implements ConfigurationListener { } + public Set> getUserDirectoryConfigs() { + Set> res = new HashSet<>(); + for (LdapName dn : deployConfigs.keySet()) { + if (dn.endsWith(USER_ADMIN_BASE_DN)) { + Attributes attributes = deployConfigs.get(dn); + res.add(new AttributesDictionary(attributes)); + } + } + return res; + } + @Override public void configurationEvent(ConfigurationEvent event) { try { @@ -312,6 +323,10 @@ public class DeployConfig implements ConfigurationListener { } public boolean hasDomain() { + // FIXME lookup deploy configs directly + if (configurationAdmin == null) + return false; + Configuration[] configs; try { configs = configurationAdmin