X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FActivator.java;h=03cbbd90df2473c0bbc74848364a2c9d7fb1bec9;hb=89ad04528a66488eb3ad6f51c198d5df3c81b04c;hp=1997b73ce21bd3c58043ef993a2103c9c055a07f;hpb=06acf73a99f0e3908fe8998f1ff08dee109c5562;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java index 1997b73ce..03cbbd90d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/Activator.java @@ -4,11 +4,13 @@ import java.io.IOException; import java.net.URL; import java.util.Dictionary; import java.util.Hashtable; +import java.util.List; +import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.ArgeoLogger; import org.argeo.cms.CmsException; +import org.argeo.node.ArgeoLogger; import org.argeo.node.NodeConstants; import org.argeo.node.NodeState; import org.argeo.node.RepoConf; @@ -17,7 +19,6 @@ import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.cm.ManagedService; @@ -38,7 +39,7 @@ public class Activator implements BundleActivator { // System.setProperty(SYSTEM_KEY_PROPERTY, systemKey); // } -// private static Kernel kernel; + // private static Kernel kernel; private static Activator instance; private BundleContext bc; @@ -83,18 +84,20 @@ public class Activator implements BundleActivator { private void initNodeState() throws IOException { nodeState = new CmsState(); - bc.registerService(LangUtils.names(NodeState.class, ManagedService.class), nodeState, - LangUtils.init(Constants.SERVICE_PID, NodeConstants.NODE_STATE_PID)); + Object cn; Configuration nodeConf = configurationAdmin.getConfiguration(NodeConstants.NODE_STATE_PID); Dictionary props = nodeConf.getProperties(); if (props == null) { if (log.isDebugEnabled()) log.debug("Clean node state"); Dictionary envProps = getStatePropertiesFromEnvironment(); + // Use the UUID of the first framework run as state UUID + cn = bc.getProperty(Constants.FRAMEWORK_UUID); + envProps.put(NodeConstants.CN, cn); nodeConf.update(envProps); } else { - // Check id state is in line with environment + // Check if state is in line with environment Dictionary envProps = getStatePropertiesFromEnvironment(); for (String key : LangUtils.keys(envProps)) { Object envValue = envProps.get(key); @@ -106,8 +109,15 @@ public class Activator implements BundleActivator { throw new CmsException("State value for " + key + "=" + storedValue + " is different from env value =" + envValue + ", please clean the OSGi configuration."); } + cn = props.get(NodeConstants.CN); + if (cn == null) + throw new CmsException("No state UUID available"); } + Dictionary regProps = LangUtils.init(Constants.SERVICE_PID, NodeConstants.NODE_STATE_PID); + regProps.put(NodeConstants.CN, cn); + bc.registerService(LangUtils.names(NodeState.class, ManagedService.class), nodeState, regProps); + } @Override @@ -120,10 +130,10 @@ public class Activator implements BundleActivator { this.logReaderService = null; this.configurationAdmin = null; -// if (kernel != null) { -// kernel.destroy(); -// kernel = null; -// } + // if (kernel != null) { + // kernel.destroy(); + // kernel = null; + // } } @@ -158,4 +168,14 @@ public class Activator implements BundleActivator { public static NodeState getNodeState() { return instance.nodeState; } + + public String[] getLocales() { + // TODO optimize? + List locales = getNodeState().getLocales(); + String[] res = new String[locales.size()]; + for (int i = 0; i < locales.size(); i++) + res[i] = locales.get(i).toString(); + return res; + } + }