X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeRepositoryFactory.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeRepositoryFactory.java;h=74a9208c1d5042b30576611ddf9f0f4fdd16c9b3;hb=b4c772a263e0f19f6c283dbbb87d04794072b284;hp=0000000000000000000000000000000000000000;hpb=82dbb6068c494047bce1ab170f2f6b8b608b2a42;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java new file mode 100644 index 000000000..74a9208c1 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeRepositoryFactory.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.cms.internal.kernel; + +import java.util.Collection; + +import javax.jcr.Repository; + +import org.argeo.jackrabbit.JackrabbitRepositoryFactory; +import org.argeo.jcr.ArgeoJcrException; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; + +/** + * OSGi-aware Jackrabbit repository factory which can retrieve/publish + * {@link Repository} as OSGi services. + */ +class NodeRepositoryFactory extends JackrabbitRepositoryFactory { + private final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); + + @Override + protected Repository getRepositoryByAlias(String alias) { + try { + Collection> srs = bundleContext.getServiceReferences(Repository.class, + "(" + JCR_REPOSITORY_ALIAS + "=" + alias + ")"); + if (srs.size() == 0) + throw new ArgeoJcrException("No repository with alias " + alias + " found in OSGi registry"); + else if (srs.size() > 1) + throw new ArgeoJcrException( + srs.size() + " repositories with alias " + alias + " found in OSGi registry"); + return bundleContext.getService(srs.iterator().next()); + } catch (InvalidSyntaxException e) { + throw new ArgeoJcrException("Cannot find repository with alias " + alias, e); + } + } + +// private void publish(String alias, Repository repository, Properties properties) { +// if (bundleContext != null) { +// // do not modify reference +// Hashtable props = new Hashtable(); +// props.putAll(props); +// props.put(JCR_REPOSITORY_ALIAS, alias); +// bundleContext.registerService(Repository.class.getName(), repository, props); +// } +// } +}