You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2015/07/30 11:21:22 UTC
svn commit: r1693398 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
Oak.java core/ContentRepositoryImpl.java util/AggregatingDescriptors.java
Author: stefanegli
Date: Thu Jul 30 09:21:22 2015
New Revision: 1693398
URL: http://svn.apache.org/r1693398
Log:
OAK-3145 : introduce possibility to hook in additional repository descriptors via osgi services
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1693398&r1=1693397&r2=1693398&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Thu Jul 30 09:21:22 2015
@@ -55,6 +55,7 @@ import com.google.common.io.Closer;
import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.Descriptors;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.jmx.QueryEngineSettingsMBean;
import org.apache.jackrabbit.oak.api.jmx.RepositoryManagementMBean;
@@ -97,9 +98,11 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.whiteboard.CompositeRegistration;
import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardAware;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
+import org.apache.jackrabbit.oak.util.AggregatingDescriptors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -611,13 +614,16 @@ public class Oak {
regs.add(registerMBean(whiteboard, RepositoryManagementMBean.class, repositoryManager,
RepositoryManagementMBean.TYPE, repositoryManager.getName()));
+ final Tracker<Descriptors> t = whiteboard.track(Descriptors.class);
+
return new ContentRepositoryImpl(
store,
CompositeHook.compose(commitHooks),
defaultWorkspaceName,
queryEngineSettings,
indexProvider,
- securityProvider) {
+ securityProvider,
+ new AggregatingDescriptors(t)) {
@Override
public void close() throws IOException {
super.close();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1693398&r1=1693397&r2=1693398&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Thu Jul 30 09:21:22 2015
@@ -116,6 +116,7 @@ public class ContentRepositoryImpl imple
private final SecurityProvider securityProvider;
private final QueryIndexProvider indexProvider;
private final QueryEngineSettings queryEngineSettings;
+ private final Descriptors baseDescriptors;
private GenericDescriptors descriptors;
@@ -134,13 +135,15 @@ public class ContentRepositoryImpl imple
@Nonnull String defaultWorkspaceName,
QueryEngineSettings queryEngineSettings,
@Nullable QueryIndexProvider indexProvider,
- @Nonnull SecurityProvider securityProvider) {
+ @Nonnull SecurityProvider securityProvider,
+ @Nullable Descriptors baseDescriptors) {
this.nodeStore = checkNotNull(nodeStore);
this.commitHook = checkNotNull(commitHook);
this.defaultWorkspaceName = checkNotNull(defaultWorkspaceName);
this.securityProvider = checkNotNull(securityProvider);
this.queryEngineSettings = queryEngineSettings != null ? queryEngineSettings : new QueryEngineSettings();
this.indexProvider = indexProvider != null ? indexProvider : new CompositeQueryIndexProvider();
+ this.baseDescriptors = baseDescriptors;
}
@Nonnull
@@ -185,7 +188,7 @@ public class ContentRepositoryImpl imple
final Value trueValue = valueFactory.createValue(true);
final Value falseValue = valueFactory.createValue(false);
- GenericDescriptors gd = new GenericDescriptors()
+ GenericDescriptors gd = new GenericDescriptors(baseDescriptors)
.put(IDENTIFIER_STABILITY, valueFactory.createValue(Repository.IDENTIFIER_STABILITY_METHOD_DURATION), true, true)
.put(LEVEL_1_SUPPORTED, trueValue, true, true)
.put(LEVEL_2_SUPPORTED, trueValue, true, true)
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java?rev=1693398&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java Thu Jul 30 09:21:22 2015
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.util;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.jcr.Value;
+
+import org.apache.jackrabbit.oak.api.Descriptors;
+import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
+
+/**
+ * An AggregatingDescriptors is an implementation of Descriptors
+ * that allows to aggregate multiple Descriptors (which are
+ * provided dynamically via a whiteboard tracker).
+ */
+public class AggregatingDescriptors implements Descriptors {
+
+ private final Tracker<Descriptors> tracker;
+
+ /**
+ * Create an AggregatingDescriptors which uses descriptors.getServices()
+ * at method invocation time
+ */
+ public AggregatingDescriptors(final Tracker<Descriptors> tracker) {
+ if (tracker==null) {
+ throw new IllegalArgumentException("tracker must not be null");
+ }
+ this.tracker = tracker;
+ }
+
+ private List<Descriptors> getDescriptors() {
+ final List<Descriptors> descriptors = tracker.getServices();
+ if (descriptors==null) {
+ return Collections.emptyList();
+ } else {
+ return descriptors;
+ }
+ }
+
+ @Override
+ public String[] getKeys() {
+ Set<String> keys = new HashSet<String>();
+ for (Iterator<Descriptors> it = getDescriptors().iterator(); it.hasNext();) {
+ Descriptors descriptors = it.next();
+ Collections.addAll(keys, descriptors.getKeys());
+ }
+ return keys.toArray(new String[keys.size()]);
+ }
+
+ @Override
+ public boolean isStandardDescriptor(@Nonnull String key) {
+ for (Iterator<Descriptors> it = getDescriptors().iterator(); it.hasNext();) {
+ Descriptors descriptors = it.next();
+ if (descriptors.isStandardDescriptor(key)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isSingleValueDescriptor(@Nonnull String key) {
+ for (Iterator<Descriptors> it = getDescriptors().iterator(); it.hasNext();) {
+ Descriptors descriptors = it.next();
+ if (descriptors.isSingleValueDescriptor(key)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @CheckForNull
+ @Override
+ public Value getValue(@Nonnull String key) {
+ for (Iterator<Descriptors> it = getDescriptors().iterator(); it.hasNext();) {
+ Descriptors descriptors = it.next();
+ Value value = descriptors.getValue(key);
+ if (value!=null) {
+ return value;
+ }
+ }
+ return null;
+ }
+
+ @CheckForNull
+ @Override
+ public Value[] getValues(@Nonnull String key) {
+ for (Iterator<Descriptors> it = getDescriptors().iterator(); it.hasNext();) {
+ Descriptors descriptors = it.next();
+ Value[] values = descriptors.getValues(key);
+ if (values!=null) {
+ return values;
+ }
+ }
+ return null;
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AggregatingDescriptors.java
------------------------------------------------------------------------------
svn:eol-style = native