You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2019/12/19 15:07:07 UTC
[sling-whiteboard] branch master updated: Add ConflictResolver
interface
This is an automated email from the ASF dual-hosted git repository.
davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new 2d098e8 Add ConflictResolver interface
2d098e8 is described below
commit 2d098e8b6b427dbd05cddf577789f2607d2bdd0c
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Thu Dec 19 15:06:40 2019 +0000
Add ConflictResolver interface
---
.../java/org/osgi/feature/ConflictResolver.java | 21 ++++++++++++
.../main/java/org/osgi/feature/MergeContext.java | 6 ++--
.../osgi/feature/builder/MergeContextBuilder.java | 40 ++++++++++++----------
.../org/osgi/feature/impl/FeatureServiceImpl.java | 6 ++--
.../osgi/feature/impl/FeatureServiceImplTest.java | 6 ++--
5 files changed, 51 insertions(+), 28 deletions(-)
diff --git a/osgi-featuremodel/src/main/java/org/osgi/feature/ConflictResolver.java b/osgi-featuremodel/src/main/java/org/osgi/feature/ConflictResolver.java
new file mode 100644
index 0000000..2cedced
--- /dev/null
+++ b/osgi-featuremodel/src/main/java/org/osgi/feature/ConflictResolver.java
@@ -0,0 +1,21 @@
+/*
+ * 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.osgi.feature;
+
+public interface ConflictResolver<T, R> {
+ R resolve(Feature f1, T o1, Feature f2, T o2);
+}
diff --git a/osgi-featuremodel/src/main/java/org/osgi/feature/MergeContext.java b/osgi-featuremodel/src/main/java/org/osgi/feature/MergeContext.java
index 8d504e7..761daa1 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/feature/MergeContext.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/feature/MergeContext.java
@@ -32,7 +32,7 @@ public interface MergeContext {
* @return Return a list of bundles that should be used in this case. This could
* be one or both of the provided bundles, or a different bundle altogether.
*/
- List<Bundle> resolveBundleConflict(Bundle b1, Bundle b2);
+ List<Bundle> handleBundleConflict(Feature f1, Bundle b1, Feature f2, Bundle b2);
/**
* If two merged features both contain the same configuration PID, this method
@@ -41,7 +41,7 @@ public interface MergeContext {
* @param c2 The second configuration.
* @return The configuration to use.
*/
- Configuration resolveConfigurationConflict(Configuration c1, Configuration c2);
+ Configuration handleConfigurationConflict(Feature f1, Configuration c1, Feature f2, Configuration c2);
- Extension resolveExtensionConflict(Extension e1, Extension e2);
+ Extension handleExtensionConflict(Feature f1, Extension e1, Feature f2, Extension e2);
}
diff --git a/osgi-featuremodel/src/main/java/org/osgi/feature/builder/MergeContextBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/feature/builder/MergeContextBuilder.java
index 100d01b..31dac73 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/feature/builder/MergeContextBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/feature/builder/MergeContextBuilder.java
@@ -18,28 +18,29 @@ package org.osgi.feature.builder;
import org.osgi.feature.Bundle;
import org.osgi.feature.Configuration;
+import org.osgi.feature.ConflictResolver;
import org.osgi.feature.Extension;
+import org.osgi.feature.Feature;
import org.osgi.feature.MergeContext;
import java.util.List;
-import java.util.function.BiFunction;
public class MergeContextBuilder {
- private BiFunction<Bundle, Bundle, List<Bundle>> bundleHandler;
- private BiFunction<Configuration, Configuration, Configuration> configHandler;
- private BiFunction<Extension, Extension, Extension> extensionHandler;
+ private ConflictResolver<Bundle, List<Bundle>> bundleHandler;
+ private ConflictResolver<Configuration, Configuration> configHandler;
+ private ConflictResolver<Extension, Extension> extensionHandler;
- public MergeContextBuilder bundleConflictHandler(BiFunction<Bundle, Bundle, List<Bundle>> bh) {
+ public MergeContextBuilder bundleConflictHandler(ConflictResolver<Bundle, List<Bundle>> bh) {
bundleHandler = bh;
return this;
}
- public MergeContextBuilder configConflictHandler(BiFunction<Configuration, Configuration, Configuration> ch) {
+ public MergeContextBuilder configConflictHandler(ConflictResolver<Configuration, Configuration> ch) {
configHandler = ch;
return this;
}
- public MergeContextBuilder extensionConflictHandler(BiFunction<Extension, Extension, Extension> eh) {
+ public MergeContextBuilder extensionConflictHandler(ConflictResolver<Extension, Extension> eh) {
extensionHandler = eh;
return this;
}
@@ -49,31 +50,32 @@ public class MergeContextBuilder {
}
private static class MergeContextImpl implements MergeContext {
- private final BiFunction<Bundle, Bundle, List<Bundle>> bundleHandler;
- private final BiFunction<Configuration, Configuration, Configuration> configHandler;
- private final BiFunction<Extension, Extension, Extension> extensionHandler;
+ private final ConflictResolver<Bundle, List<Bundle>> bundleHandler;
+ private final ConflictResolver<Configuration, Configuration> configHandler;
+ private final ConflictResolver<Extension, Extension> extensionHandler;
- private MergeContextImpl(BiFunction<Bundle, Bundle, List<Bundle>> bundleHandler,
- BiFunction<Configuration, Configuration, Configuration> configHandler,
- BiFunction<Extension, Extension, Extension> extensionHandler) {
+
+ public MergeContextImpl(ConflictResolver<Bundle, List<Bundle>> bundleHandler,
+ ConflictResolver<Configuration, Configuration> configHandler,
+ ConflictResolver<Extension, Extension> extensionHandler) {
this.bundleHandler = bundleHandler;
this.configHandler = configHandler;
this.extensionHandler = extensionHandler;
}
@Override
- public List<Bundle> resolveBundleConflict(Bundle b1, Bundle b2) {
- return bundleHandler.apply(b1, b2);
+ public List<Bundle> handleBundleConflict(Feature f1, Bundle b1, Feature f2, Bundle b2) {
+ return bundleHandler.resolve(f1, b1, f2, b2);
}
@Override
- public Configuration resolveConfigurationConflict(Configuration c1, Configuration c2) {
- return configHandler.apply(c1, c2);
+ public Configuration handleConfigurationConflict(Feature f1, Configuration c1, Feature f2, Configuration c2) {
+ return configHandler.resolve(f1, c1, f2, c2);
}
@Override
- public Extension resolveExtensionConflict(Extension e1, Extension e2) {
- return extensionHandler.apply(e1, e2);
+ public Extension handleExtensionConflict(Feature f1, Extension e1, Feature f2, Extension e2) {
+ return extensionHandler.resolve(f1, e1, f2, e2);
}
}
}
diff --git a/osgi-featuremodel/src/main/java/org/osgi/feature/impl/FeatureServiceImpl.java b/osgi-featuremodel/src/main/java/org/osgi/feature/impl/FeatureServiceImpl.java
index 6bbc926..e0aebf0 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/feature/impl/FeatureServiceImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/feature/impl/FeatureServiceImpl.java
@@ -245,7 +245,7 @@ public class FeatureServiceImpl implements FeatureService {
if (bID.getGroupId().equals(orgID.getGroupId()) &&
bID.getArtifactId().equals(orgID.getArtifactId())) {
found = true;
- List<Bundle> res = new ArrayList<>(ctx.resolveBundleConflict(b, orgb));
+ List<Bundle> res = new ArrayList<>(ctx.handleBundleConflict(f1, b, f2, orgb));
if (res.contains(orgb)) {
res.remove(orgb);
} else {
@@ -271,7 +271,7 @@ public class FeatureServiceImpl implements FeatureService {
Configuration newCfg = cfgEntry.getValue();
Configuration orgCfg = configs.get(pid);
if (orgCfg != null) {
- Configuration resCfg = ctx.resolveConfigurationConflict(orgCfg, newCfg);
+ Configuration resCfg = ctx.handleConfigurationConflict(f1, orgCfg, f2, newCfg);
if (!resCfg.equals(orgCfg)) {
configs.remove(pid);
addConfigs.put(pid, resCfg);
@@ -294,7 +294,7 @@ public class FeatureServiceImpl implements FeatureService {
Extension newEx = exEntry.getValue();
Extension orgEx = extensions.get(key);
if (orgEx != null) {
- Extension resEx = ctx.resolveExtensionConflict(orgEx, newEx);
+ Extension resEx = ctx.handleExtensionConflict(f1, orgEx, f2, newEx);
if (!resEx.equals(orgEx)) {
extensions.remove(key);
addExtensions.put(key, resEx);
diff --git a/osgi-featuremodel/src/test/java/org/osgi/feature/impl/FeatureServiceImplTest.java b/osgi-featuremodel/src/test/java/org/osgi/feature/impl/FeatureServiceImplTest.java
index 0c28e78..91e819a 100644
--- a/osgi-featuremodel/src/test/java/org/osgi/feature/impl/FeatureServiceImplTest.java
+++ b/osgi-featuremodel/src/test/java/org/osgi/feature/impl/FeatureServiceImplTest.java
@@ -89,8 +89,8 @@ public class FeatureServiceImplTest {
}
MergeContext ctx = new MergeContextBuilder()
- .bundleConflictHandler((b1, b2) -> Arrays.asList(b1, b2))
- .configConflictHandler((c1, c2) -> new ConfigurationBuilder(c1)
+ .bundleConflictHandler((cf1, b1, cf2, b2) -> Arrays.asList(b1, b2))
+ .configConflictHandler((cf1, c1, cf2, c2) -> new ConfigurationBuilder(c1)
.addValues(c2.getValues()).build())
.build();
@@ -141,7 +141,7 @@ public class FeatureServiceImplTest {
}
MergeContext ctx = new MergeContextBuilder()
- .extensionConflictHandler((e1, e2) ->
+ .extensionConflictHandler((cf1, e1, cf2, e2) ->
new ExtensionBuilder(e1.getName(), e1.getType(), e1.getKind())
.addText(e1.getText())
.addText(e2.getText())