]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.jcr/src/org/argeo/cms/internal/jcr/JcrInitUtils.java
Make time based UUID generation more robust.
[lgpl/argeo-commons.git] / org.argeo.cms.jcr / src / org / argeo / cms / internal / jcr / JcrInitUtils.java
1 package org.argeo.cms.internal.jcr;
2
3 import java.net.URI;
4 import java.net.URISyntaxException;
5 import java.util.Dictionary;
6 import java.util.HashMap;
7 import java.util.Hashtable;
8 import java.util.Map;
9
10 import javax.jcr.Repository;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.RepositoryFactory;
13
14 import org.argeo.api.cms.CmsDeployment;
15 import org.argeo.api.cms.CmsLog;
16 import org.argeo.api.cms.CmsConstants;
17 import org.argeo.jackrabbit.client.ClientDavexRepositoryFactory;
18 import org.argeo.jcr.JcrException;
19 import org.argeo.util.naming.LdapAttrs;
20 import org.osgi.framework.BundleContext;
21 import org.osgi.framework.Constants;
22 import org.osgi.framework.FrameworkUtil;
23
24 /** JCR specific init utilities. */
25 public class JcrInitUtils {
26 private final static CmsLog log = CmsLog.getLog(JcrInitUtils.class);
27 private final static BundleContext bundleContext = FrameworkUtil.getBundle(JcrInitUtils.class).getBundleContext();
28
29 public static void addToDeployment(CmsDeployment nodeDeployment) {
30 // node repository
31 // Dictionary<String, Object> provided = null;
32 Dictionary<String, Object> provided = nodeDeployment.getProps(CmsConstants.NODE_REPOS_FACTORY_PID,
33 CmsConstants.NODE);
34 Dictionary<String, Object> nodeConfig = JcrInitUtils.getNodeRepositoryConfig(provided);
35 // node repository is mandatory
36 nodeDeployment.addFactoryDeployConfig(CmsConstants.NODE_REPOS_FACTORY_PID, nodeConfig);
37
38 // additional repositories
39 // dataModels: for (DataModels.DataModel dataModel : dataModels.getNonAbstractDataModels()) {
40 // if (NodeConstants.NODE_REPOSITORY.equals(dataModel.getName()))
41 // continue dataModels;
42 // Dictionary<String, Object> config = JcrInitUtils.getRepositoryConfig(dataModel.getName(),
43 // getProps(NodeConstants.NODE_REPOS_FACTORY_PID, dataModel.getName()));
44 // if (config.size() != 0)
45 // putFactoryDeployConfig(NodeConstants.NODE_REPOS_FACTORY_PID, config);
46 // }
47
48 }
49
50 /** Override the provided config with the framework properties */
51 public static Dictionary<String, Object> getNodeRepositoryConfig(Dictionary<String, Object> provided) {
52 Dictionary<String, Object> props = provided != null ? provided : new Hashtable<String, Object>();
53 for (RepoConf repoConf : RepoConf.values()) {
54 Object value = getFrameworkProp(CmsConstants.NODE_REPO_PROP_PREFIX + repoConf.name());
55 if (value != null) {
56 props.put(repoConf.name(), value);
57 if (log.isDebugEnabled())
58 log.debug("Set node repo configuration " + repoConf.name() + " to " + value);
59 }
60 }
61 props.put(CmsConstants.CN, CmsConstants.NODE_REPOSITORY);
62 return props;
63 }
64
65 public static Dictionary<String, Object> getRepositoryConfig(String dataModelName,
66 Dictionary<String, Object> provided) {
67 if (dataModelName.equals(CmsConstants.NODE_REPOSITORY) || dataModelName.equals(CmsConstants.EGO_REPOSITORY))
68 throw new IllegalArgumentException("Data model '" + dataModelName + "' is reserved.");
69 Dictionary<String, Object> props = provided != null ? provided : new Hashtable<String, Object>();
70 for (RepoConf repoConf : RepoConf.values()) {
71 Object value = getFrameworkProp(
72 CmsConstants.NODE_REPOS_PROP_PREFIX + dataModelName + '.' + repoConf.name());
73 if (value != null) {
74 props.put(repoConf.name(), value);
75 if (log.isDebugEnabled())
76 log.debug("Set " + dataModelName + " repo configuration " + repoConf.name() + " to " + value);
77 }
78 }
79 if (props.size() != 0)
80 props.put(CmsConstants.CN, dataModelName);
81 return props;
82 }
83
84 private static void registerRemoteInit(String uri) {
85 try {
86 Repository repository = createRemoteRepository(new URI(uri));
87 Hashtable<String, Object> properties = new Hashtable<>();
88 properties.put(CmsConstants.CN, CmsConstants.NODE_INIT);
89 properties.put(LdapAttrs.labeledURI.name(), uri);
90 properties.put(Constants.SERVICE_RANKING, -1000);
91 bundleContext.registerService(Repository.class, repository, properties);
92 } catch (RepositoryException e) {
93 throw new JcrException(e);
94 } catch (URISyntaxException e) {
95 throw new IllegalArgumentException(e);
96 }
97 }
98
99 private static Repository createRemoteRepository(URI uri) throws RepositoryException {
100 RepositoryFactory repositoryFactory = new ClientDavexRepositoryFactory();
101 Map<String, String> params = new HashMap<String, String>();
102 params.put(ClientDavexRepositoryFactory.JACKRABBIT_DAVEX_URI, uri.toString());
103 // TODO make it configurable
104 params.put(ClientDavexRepositoryFactory.JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, CmsConstants.SYS_WORKSPACE);
105 return repositoryFactory.getRepository(params);
106 }
107
108 private static String getFrameworkProp(String key, String def) {
109 String value;
110 if (bundleContext != null)
111 value = bundleContext.getProperty(key);
112 else
113 value = System.getProperty(key);
114 if (value == null)
115 return def;
116 return value;
117 }
118
119 private static String getFrameworkProp(String key) {
120 return getFrameworkProp(key, null);
121 }
122
123 }