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
.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
;
24 /** JCR specific init utilities. */
26 public class JcrInitUtils
{
27 private final static CmsLog log
= CmsLog
.getLog(JcrInitUtils
.class);
28 private final static BundleContext bundleContext
= FrameworkUtil
.getBundle(JcrInitUtils
.class).getBundleContext();
30 // public static void addToDeployment(CmsDeployment nodeDeployment) {
32 //// Dictionary<String, Object> provided = null;
33 // Dictionary<String, Object> provided = nodeDeployment.getProps(CmsConstants.NODE_REPOS_FACTORY_PID,
34 // CmsConstants.NODE);
35 // Dictionary<String, Object> nodeConfig = JcrInitUtils.getNodeRepositoryConfig(provided);
36 // // node repository is mandatory
37 // nodeDeployment.addFactoryDeployConfig(CmsConstants.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(CmsConstants
.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(CmsConstants
.CN
, CmsConstants
.NODE_REPOSITORY
);
66 // public static Dictionary<String, Object> getRepositoryConfig(String dataModelName,
67 // Dictionary<String, Object> provided) {
68 // if (dataModelName.equals(CmsConstants.NODE_REPOSITORY) || dataModelName.equals(CmsConstants.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 // CmsConstants.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);
80 // if (props.size() != 0)
81 // props.put(CmsConstants.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(CmsConstants
.CN
, CmsConstants
.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
, CmsConstants
.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);