1 package org
.argeo
.cms
.internal
.jcr
;
4 import java
.net
.URISyntaxException
;
5 import java
.util
.Dictionary
;
6 import java
.util
.HashMap
;
7 import java
.util
.Hashtable
;
10 import javax
.jcr
.Repository
;
11 import javax
.jcr
.RepositoryException
;
12 import javax
.jcr
.RepositoryFactory
;
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
;
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();
30 public static void addToDeployment(NodeDeployment nodeDeployment
) {
32 // Dictionary<String, Object> provided = null;
33 Dictionary
<String
, Object
> provided
= nodeDeployment
.getProps(NodeConstants
.NODE_REPOS_FACTORY_PID
,
35 Dictionary
<String
, Object
> nodeConfig
= JcrInitUtils
.getNodeRepositoryConfig(provided
);
36 // node repository is mandatory
37 nodeDeployment
.addFactoryDeployConfig(NodeConstants
.NODE_REPOS_FACTORY_PID
, nodeConfig
);
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);
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());
57 props
.put(repoConf
.name(), value
);
58 if (log
.isDebugEnabled())
59 log
.debug("Set node repo configuration " + repoConf
.name() + " to " + value
);
62 props
.put(NodeConstants
.CN
, NodeConstants
.NODE_REPOSITORY
);
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());
75 props
.put(repoConf
.name(), value
);
76 if (log
.isDebugEnabled())
77 log
.debug("Set " + dataModelName
+ " repo configuration " + repoConf
.name() + " to " + value
);
80 if (props
.size() != 0)
81 props
.put(NodeConstants
.CN
, dataModelName
);
85 private static void registerRemoteInit(String uri
) {
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
);
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
);
109 private static String
getFrameworkProp(String key
, String def
) {
111 if (bundleContext
!= null)
112 value
= bundleContext
.getProperty(key
);
114 value
= System
.getProperty(key
);
120 private static String
getFrameworkProp(String key
) {
121 return getFrameworkProp(key
, null);