package org.argeo.cms.internal.jcr; import java.net.URI; import java.net.URISyntaxException; import java.util.Dictionary; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.RepositoryFactory; import org.argeo.api.cms.CmsDeployment; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsConstants; import org.argeo.jackrabbit.client.ClientDavexRepositoryFactory; import org.argeo.jcr.JcrException; import org.argeo.util.naming.LdapAttrs; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.FrameworkUtil; /** JCR specific init utilities. */ @Deprecated public class JcrInitUtils { private final static CmsLog log = CmsLog.getLog(JcrInitUtils.class); private final static BundleContext bundleContext = FrameworkUtil.getBundle(JcrInitUtils.class).getBundleContext(); // public static void addToDeployment(CmsDeployment nodeDeployment) { // // node repository //// Dictionary provided = null; // Dictionary provided = nodeDeployment.getProps(CmsConstants.NODE_REPOS_FACTORY_PID, // CmsConstants.NODE); // Dictionary nodeConfig = JcrInitUtils.getNodeRepositoryConfig(provided); // // node repository is mandatory // nodeDeployment.addFactoryDeployConfig(CmsConstants.NODE_REPOS_FACTORY_PID, nodeConfig); // // // additional repositories //// dataModels: for (DataModels.DataModel dataModel : dataModels.getNonAbstractDataModels()) { //// if (NodeConstants.NODE_REPOSITORY.equals(dataModel.getName())) //// continue dataModels; //// Dictionary config = JcrInitUtils.getRepositoryConfig(dataModel.getName(), //// getProps(NodeConstants.NODE_REPOS_FACTORY_PID, dataModel.getName())); //// if (config.size() != 0) //// putFactoryDeployConfig(NodeConstants.NODE_REPOS_FACTORY_PID, config); //// } // // } /** Override the provided config with the framework properties */ public static Dictionary getNodeRepositoryConfig(Dictionary provided) { Dictionary props = provided != null ? provided : new Hashtable(); for (RepoConf repoConf : RepoConf.values()) { Object value = getFrameworkProp(CmsConstants.NODE_REPO_PROP_PREFIX + repoConf.name()); if (value != null) { props.put(repoConf.name(), value); if (log.isDebugEnabled()) log.debug("Set node repo configuration " + repoConf.name() + " to " + value); } } props.put(CmsConstants.CN, CmsConstants.NODE_REPOSITORY); return props; } // public static Dictionary getRepositoryConfig(String dataModelName, // Dictionary provided) { // if (dataModelName.equals(CmsConstants.NODE_REPOSITORY) || dataModelName.equals(CmsConstants.EGO_REPOSITORY)) // throw new IllegalArgumentException("Data model '" + dataModelName + "' is reserved."); // Dictionary props = provided != null ? provided : new Hashtable(); // for (RepoConf repoConf : RepoConf.values()) { // Object value = getFrameworkProp( // CmsConstants.NODE_REPOS_PROP_PREFIX + dataModelName + '.' + repoConf.name()); // if (value != null) { // props.put(repoConf.name(), value); // if (log.isDebugEnabled()) // log.debug("Set " + dataModelName + " repo configuration " + repoConf.name() + " to " + value); // } // } // if (props.size() != 0) // props.put(CmsConstants.CN, dataModelName); // return props; // } private static void registerRemoteInit(String uri) { try { Repository repository = createRemoteRepository(new URI(uri)); Hashtable properties = new Hashtable<>(); properties.put(CmsConstants.CN, CmsConstants.NODE_INIT); properties.put(LdapAttrs.labeledURI.name(), uri); properties.put(Constants.SERVICE_RANKING, -1000); bundleContext.registerService(Repository.class, repository, properties); } catch (RepositoryException e) { throw new JcrException(e); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } } private static Repository createRemoteRepository(URI uri) throws RepositoryException { RepositoryFactory repositoryFactory = new ClientDavexRepositoryFactory(); Map params = new HashMap(); params.put(ClientDavexRepositoryFactory.JACKRABBIT_DAVEX_URI, uri.toString()); // TODO make it configurable params.put(ClientDavexRepositoryFactory.JACKRABBIT_REMOTE_DEFAULT_WORKSPACE, CmsConstants.SYS_WORKSPACE); return repositoryFactory.getRepository(params); } private static String getFrameworkProp(String key, String def) { String value; if (bundleContext != null) value = bundleContext.getProperty(key); else value = System.getProperty(key); if (value == null) return def; return value; } private static String getFrameworkProp(String key) { return getFrameworkProp(key, null); } }