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 ba...@apache.org on 2024/05/27 15:06:07 UTC

(jackrabbit-oak) branch issue/oak-6773 updated: OAK-6773: Convert oak-store-composite to OSGi R7 annotations

This is an automated email from the ASF dual-hosted git repository.

baedke pushed a commit to branch issue/oak-6773
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/issue/oak-6773 by this push:
     new 81325f770e OAK-6773: Convert oak-store-composite to OSGi R7 annotations
81325f770e is described below

commit 81325f770e06d809c630a0888245b418120be898
Author: Manfred Baedke <ma...@gmail.com>
AuthorDate: Mon May 27 17:02:11 2024 +0200

    OAK-6773: Convert oak-store-composite to OSGi R7 annotations
    
    Explicitly added bind/unbind methods for OSGi service references which have previously been auto-generated by the Felix SCR plugin (to avoid major version changes).
---
 .../oak/composite/CompositeNodeStoreService.java   | 54 ++++++++++++++++++++--
 .../CrossMountReferenceValidatorProvider.java      | 15 +++++-
 .../composite/PrivateStoreValidatorProvider.java   | 13 ++++++
 .../composite/checks/NodeStoreChecksService.java   | 22 +++++++--
 .../checks/NodeTypeMountedNodeStoreChecker.java    | 15 ++++--
 .../oak/composite/checks/package-info.java         | 18 +++++++-
 .../jackrabbit/oak/composite/package-info.java     |  2 +-
 7 files changed, 122 insertions(+), 17 deletions(-)

diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java
index bbebbb7150..fbcadd2a3a 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java
@@ -67,7 +67,11 @@ public class CompositeNodeStoreService {
 
     private static final String MOUNT_ROLE_PREFIX = "composite-mount-";
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC)
+    @Reference(
+            cardinality = ReferenceCardinality.MANDATORY,
+            bind = "bindMountInfoProvider",
+            unbind = "unbindMountInfoProvider",
+            policy = ReferencePolicy.STATIC)
     private MountInfoProvider mountInfoProvider;
 
     private List<NodeStoreWithProps> nodeStores = new ArrayList<>();
@@ -78,6 +82,10 @@ public class CompositeNodeStoreService {
     @Reference
     private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
 
+    private static final String ENABLE_CHECKS = "enableChecks";
+    private static final String PROP_SEED_MOUNT = "seedMount";
+    private static final String PATH_STATS = "pathStats";
+
     @ComponentPropertyType
     @interface Config {
         @AttributeDefinition(
@@ -116,11 +124,11 @@ public class CompositeNodeStoreService {
     private boolean enableChecks;
 
     @Activate
-    protected void activate(ComponentContext context, Config config) throws IOException, CommitFailedException {
+    protected void activate(ComponentContext context, Map<String, ?> config) throws IOException, CommitFailedException {
         this.context = context;
-        seedMount = config.seedMount();
-        pathStats = config.pathStats();
-        enableChecks = config.enableChecks();
+        seedMount = PropertiesUtil.toString(config.get(PROP_SEED_MOUNT), null);
+        pathStats = PropertiesUtil.toBoolean(config.get(PATH_STATS), false);
+        enableChecks = PropertiesUtil.toBoolean(config.get(ENABLE_CHECKS), true);
         registerCompositeNodeStore();
     }
 
@@ -293,6 +301,42 @@ public class CompositeNodeStoreService {
         }
     }
 
+    @SuppressWarnings("unused")
+    protected void bindMountInfoProvider(MountInfoProvider mip) {
+        this.mountInfoProvider = mip;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindMountInfoProvider(MountInfoProvider mip) {
+        if (this.mountInfoProvider == mip) {
+            this.mountInfoProvider = null;
+        }
+    }
+
+    @SuppressWarnings("unused")
+    protected void bindChecks(NodeStoreChecks checks) {
+        this.checks = checks;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindChecks(NodeStoreChecks checks) {
+        if (this.checks == checks) {
+            this.checks = null;
+        }
+    }
+
+    @SuppressWarnings("unused")
+    protected void bindStatisticsProvider(StatisticsProvider sp) {
+        this.statisticsProvider = sp;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindStatisticsProvider(StatisticsProvider sp) {
+        if (this.statisticsProvider == sp) {
+            this.statisticsProvider = null;
+        }
+    }
+
     private static class NodeStoreWithProps {
 
         private final NodeStoreProvider nodeStore;
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CrossMountReferenceValidatorProvider.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CrossMountReferenceValidatorProvider.java
index 8cb5157726..52b352105d 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CrossMountReferenceValidatorProvider.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CrossMountReferenceValidatorProvider.java
@@ -50,7 +50,7 @@ public class CrossMountReferenceValidatorProvider extends ValidatorProvider {
 
     private boolean failOnDetection;
 
-    @Reference
+    @Reference(bind = "bindMountInfoProvider", unbind = "unbindMountInfoProvider")
     private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider();
 
     public CrossMountReferenceValidatorProvider() {
@@ -80,4 +80,17 @@ public class CrossMountReferenceValidatorProvider extends ValidatorProvider {
         this.failOnDetection = failOnDetection;
         return this;
     }
+
+    @SuppressWarnings("unused")
+    protected void bindMountInfoProvider(MountInfoProvider mip) {
+        this.mountInfoProvider = mip;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindMountInfoProvider(MountInfoProvider mip) {
+        if (this.mountInfoProvider == mip) {
+            this.mountInfoProvider = null;
+        }
+
+    }
 }
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/PrivateStoreValidatorProvider.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/PrivateStoreValidatorProvider.java
index 9a8eb93dc3..bd93d97cbc 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/PrivateStoreValidatorProvider.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/PrivateStoreValidatorProvider.java
@@ -98,6 +98,19 @@ public class PrivateStoreValidatorProvider extends ValidatorProvider {
         return failOnDetection;
     }
 
+    @SuppressWarnings("unused")
+    protected void bindMountInfoProvider(MountInfoProvider mip) {
+        this.mountInfoProvider = mip;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindMountInfoProvider(MountInfoProvider mip) {
+        if (this.mountInfoProvider == mip) {
+            this.mountInfoProvider = null;
+        }
+
+    }
+
     private class PrivateStoreValidator extends DefaultValidator {
         private final String path;
 
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeStoreChecksService.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeStoreChecksService.java
index 8e8dba9d75..592a1f5fad 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeStoreChecksService.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeStoreChecksService.java
@@ -42,7 +42,7 @@ public class NodeStoreChecksService implements NodeStoreChecks {
             service = MountedNodeStoreChecker.class)
     private List<MountedNodeStoreChecker<?>> checkers = new CopyOnWriteArrayList<>();
     
-    @Reference
+    @Reference(bind = "bindMip", unbind = "unbindMip")
     private MountInfoProvider mip;
 
     // used by SCR
@@ -100,13 +100,27 @@ public class NodeStoreChecksService implements NodeStoreChecks {
         if ( ( mounted || under ) && keepGoing ) {
             tree.getChildren().forEach( child -> visit(child, mountedStore, errorHolder, context, c));
         }
-    }    
-    
+    }
+
+    @SuppressWarnings("unused")
     protected void bindChecker(MountedNodeStoreChecker<?> checker) {
         checkers.add(checker);
     }
-    
+
+    @SuppressWarnings("unused")
     protected void unbindChecker(MountedNodeStoreChecker<?> checker) {
         checkers.remove(checker);
     }
+
+    @SuppressWarnings("unused")
+    protected void bindMip(MountInfoProvider mip) {
+        this.mip = mip;
+    }
+
+    @SuppressWarnings("unused")
+    protected void unbindMip(MountInfoProvider mip) {
+        if (this.mip == mip) {
+            this.mip = null;
+        }
+    }
 }
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
index 3375eab708..88ddb19b12 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
@@ -26,6 +26,7 @@ import org.osgi.service.component.annotations.ConfigurationPolicy;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PropertiesUtil;
 import org.apache.jackrabbit.oak.composite.MountedNodeStore;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
@@ -43,7 +44,11 @@ public class NodeTypeMountedNodeStoreChecker implements
         MountedNodeStoreChecker<NodeTypeMountedNodeStoreChecker.Context>  {
     
     private final Logger log = LoggerFactory.getLogger(getClass());
-    
+
+    private static final String INVALID_NODE_TYPE = "invalidNodeType";
+    private static final String ERROR_LABEL = "errorLabel";
+    private static final String EXCLUDED_NODE_TYPES = "excludedNodeTypes";
+
     @ComponentPropertyType
     @interface Config {
         @AttributeDefinition(
@@ -79,10 +84,10 @@ public class NodeTypeMountedNodeStoreChecker implements
         this.excludedNodeTypes = ImmutableSet.copyOf(excludedNodeTypes);
     }
 
-    protected void activate(ComponentContext ctx, Config config) {
-        invalidNodeType = checkNotNull(config.invalidNodeType(), "invalidNodeType");
-        errorLabel = checkNotNull(config.errorLabel(), "errorLabel");
-        excludedNodeTypes = ImmutableSet.copyOf(config.excludedNodeTypes());
+    protected void activate(ComponentContext ctx) {
+        invalidNodeType = checkNotNull(PropertiesUtil.toString(ctx.getProperties().get(INVALID_NODE_TYPE), null), INVALID_NODE_TYPE);
+        errorLabel = checkNotNull(PropertiesUtil.toString(ctx.getProperties().get(ERROR_LABEL), null), ERROR_LABEL);
+        excludedNodeTypes = ImmutableSet.copyOf(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES), new String[0]));
     }
 
     @Override
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/package-info.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/package-info.java
index 8dfb422328..ecbd27d417 100755
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/package-info.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/package-info.java
@@ -1,4 +1,20 @@
-@Version("1.0.0")
+/*
+ * 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.
+ */
+@Version("0.0.1")
 package org.apache.jackrabbit.oak.composite.checks;
 
 import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/package-info.java b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/package-info.java
index bac267ef1b..6efb8de2a2 100644
--- a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/package-info.java
+++ b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/package-info.java
@@ -55,7 +55,7 @@
  *  This is obviously correct but may be slow.
  *  {@link org.apache.jackrabbit.oak.composite.CompositionContext#getContributingStores(java.lang.String, java.util.function.Function)}
  */
-@Version("1.0.0")
+@Version("0.5.1")
 package org.apache.jackrabbit.oak.composite;
 
 import org.osgi.annotation.versioning.Version;
\ No newline at end of file