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