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 2020/04/14 12:13:19 UTC

[sling-whiteboard] branch master updated: Rename entities to have the 'Feature' prefix

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 6aac83e  Rename entities to have the 'Feature' prefix
6aac83e is described below

commit 6aac83e878aee805376e3354cc908c530c715fba
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Tue Apr 14 13:13:02 2020 +0100

    Rename entities to have the 'Feature' prefix
---
 .../org/osgi/util/features/BuilderFactory.java     |   8 +-
 .../main/java/org/osgi/util/features/Feature.java  |   8 +-
 .../{Artifact.java => FeatureArtifact.java}        |   2 +-
 .../org/osgi/util/features/FeatureBuilder.java     |   6 +-
 .../features/{Bundle.java => FeatureBundle.java}   |   2 +-
 ...undleBuilder.java => FeatureBundleBuilder.java} |  10 +--
 ...onfiguration.java => FeatureConfiguration.java} |   2 +-
 ...ilder.java => FeatureConfigurationBuilder.java} |  10 +--
 .../{Extension.java => FeatureExtension.java}      |   2 +-
 ...onBuilder.java => FeatureExtensionBuilder.java} |  26 +++---
 .../java/org/osgi/util/features/MergeContext.java  |   6 +-
 .../osgi/util/features/MergeContextBuilder.java    |   6 +-
 .../org/osgi/util/features/impl/ArtifactImpl.java  |   4 +-
 .../util/features/impl/BuilderFactoryImpl.java     |  18 ++--
 .../osgi/util/features/impl/BundleBuilderImpl.java |  14 +--
 .../features/impl/ConfigurationBuilderImpl.java    |  16 ++--
 .../util/features/impl/ExtensionBuilderImpl.java   |  24 ++---
 .../util/features/impl/FeatureBuilderImpl.java     |  38 ++++----
 .../util/features/impl/FeatureServiceImpl.java     | 100 ++++++++++-----------
 .../features/impl/MergeContextBuilderImpl.java     |  36 ++++----
 .../util/features/impl/FeatureServiceImplTest.java |  40 ++++-----
 21 files changed, 189 insertions(+), 189 deletions(-)

diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/BuilderFactory.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/BuilderFactory.java
index 4a464bc..cb30443 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/BuilderFactory.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/BuilderFactory.java
@@ -25,14 +25,14 @@ public interface BuilderFactory {
      * @param id The artifact ID for the bundle object being built.
      * @return The builder.
      */
-    BundleBuilder newBundleBuilder(ID id);
+    FeatureBundleBuilder newBundleBuilder(ID id);
 
     /**
      * Obtain a new builder for Configuration objects.
      * @param pid The persistent ID for the Configuration being built.
      * @return The builder.
      */
-    ConfigurationBuilder newConfigurationBuilder(String pid);
+    FeatureConfigurationBuilder newConfigurationBuilder(String pid);
 
     /**
      * Obtain a new builder for Factory Configuration objects.
@@ -41,7 +41,7 @@ public interface BuilderFactory {
      * will be the factoryPid + '~' + name
      * @return The builder.
      */
-    ConfigurationBuilder newConfigurationBuilder(String factoryPid, String name);
+    FeatureConfigurationBuilder newConfigurationBuilder(String factoryPid, String name);
 
     /**
      * Obtain a new builder for Feature objects.
@@ -57,7 +57,7 @@ public interface BuilderFactory {
      * @param kind The kind of extension: Mandatory, Optional or Transient.
      * @return The builder.
      */
-    ExtensionBuilder newExtensionBuilder(String name, Extension.Type type, Extension.Kind kind);
+    FeatureExtensionBuilder newExtensionBuilder(String name, FeatureExtension.Type type, FeatureExtension.Kind kind);
 
     /**
      * Obtain a new builder for MergeContext objects.
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/Feature.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/Feature.java
index ab6a728..498abba 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/Feature.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/Feature.java
@@ -23,7 +23,7 @@ import java.util.Map;
  * The Feature Model Feature.
  * @ThreadSafe
  */
-public interface Feature extends Artifact {
+public interface Feature extends FeatureArtifact {
     /**
      * Get the title.
      * @return The title.
@@ -70,19 +70,19 @@ public interface Feature extends Artifact {
      * Get the bundles.
      * @return The bundles.
      */
-    List<Bundle> getBundles();
+    List<FeatureBundle> getBundles();
 
     /**
      * Get the configurations.
      * @return The configurations.
      */
-    Map<String, Configuration> getConfigurations();
+    Map<String, FeatureConfiguration> getConfigurations();
 
     /**
      * Get the extensions.
      * @return The extensions.
      */
-    Map<String, Extension> getExtensions();
+    Map<String, FeatureExtension> getExtensions();
 
     /**
      * Get the variables.
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/Artifact.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureArtifact.java
similarity index 96%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/Artifact.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureArtifact.java
index f91a0cf..4cccbb6 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/Artifact.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureArtifact.java
@@ -19,7 +19,7 @@ package org.osgi.util.features;
 /**
  * An Artifact is an entity with an ID.
  */
-public interface Artifact {
+public interface FeatureArtifact {
     /**
      * Get the artifact's ID.
      * @return The ID of this artifact.
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBuilder.java
index 7bd4268..b01db04 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBuilder.java
@@ -78,21 +78,21 @@ public interface FeatureBuilder {
      * @param bundles The Bundles to add.
      * @return This builder.
      */
-    FeatureBuilder addBundles(Bundle ... bundles);
+    FeatureBuilder addBundles(FeatureBundle ... bundles);
 
     /**
      * Add Configurations to the Feature.
      * @param configs The Configurations to add.
      * @return This builder.
      */
-    FeatureBuilder addConfigurations(Configuration ... configs);
+    FeatureBuilder addConfigurations(FeatureConfiguration ... configs);
 
     /**
      * Add Extensions to the Feature
      * @param extensions The Extensions to add.
      * @return This builder.
      */
-    FeatureBuilder addExtensions(Extension ... extensions);
+    FeatureBuilder addExtensions(FeatureExtension ... extensions);
 
     /**
      * Add a variable to the Feature. If a variable with the specified key
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/Bundle.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundle.java
similarity index 94%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/Bundle.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundle.java
index a242aa0..a447463 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/Bundle.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundle.java
@@ -22,7 +22,7 @@ import java.util.Map;
  * A Bundle which is part of a feature.
  * @ThreadSafe
  */
-public interface Bundle extends Artifact {
+public interface FeatureBundle extends FeatureArtifact {
     /**
      * Get the metadata for this bundle.
      * @return The metadata.
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/BundleBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundleBuilder.java
similarity index 85%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/BundleBuilder.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundleBuilder.java
index d734fac..2208a82 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/BundleBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureBundleBuilder.java
@@ -19,10 +19,10 @@ package org.osgi.util.features;
 import java.util.Map;
 
 /**
- * A builder for Feature Model {@link Bundle} objects.
+ * A builder for Feature Model {@link FeatureBundle} objects.
  * @NotThreadSafe
  */
-public interface BundleBuilder {
+public interface FeatureBundleBuilder {
 
     /**
      * Add metadata for this Bundle.
@@ -30,7 +30,7 @@ public interface BundleBuilder {
      * @param value Metadata value.
      * @return This builder.
      */
-    BundleBuilder addMetadata(String key, Object value);
+    FeatureBundleBuilder addMetadata(String key, Object value);
 
     /**
      * Add metadata for this Bundle by providing a map. All
@@ -39,12 +39,12 @@ public interface BundleBuilder {
      * @param md The map with metadata.
      * @return This builder.
      */
-    BundleBuilder addMetadata(Map<String, Object> md);
+    FeatureBundleBuilder addMetadata(Map<String, Object> md);
 
     /**
      * Build the Bundle object. Can only be called once on a builder. After
      * calling this method the current builder instance cannot be used any more.
      * @return The Bundle.
      */
-    Bundle build();
+    FeatureBundle build();
 }
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/Configuration.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfiguration.java
similarity index 97%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/Configuration.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfiguration.java
index a1ae47b..8ff71fe 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/Configuration.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfiguration.java
@@ -22,7 +22,7 @@ import java.util.Map;
  * Represents an OSGi Configuration in the Feature Model.
  * @ThreadSafe
  */
-public interface Configuration {
+public interface FeatureConfiguration {
     /**
      * Get the PID from the configuration.
      * @return The PID.
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/ConfigurationBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfigurationBuilder.java
similarity index 85%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/ConfigurationBuilder.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfigurationBuilder.java
index 4be8eab..87b1f2d 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/ConfigurationBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureConfigurationBuilder.java
@@ -19,10 +19,10 @@ package org.osgi.util.features;
 import java.util.Map;
 
 /**
- * A builder for Feature Model {@link Configuration} objects.
+ * A builder for Feature Model {@link FeatureConfiguration} objects.
  * @NotThreadSafe
  */
-public interface ConfigurationBuilder {
+public interface FeatureConfigurationBuilder {
 
     /**
      * Add a configuration value for this Configuration object. If a
@@ -32,7 +32,7 @@ public interface ConfigurationBuilder {
      * @param value The configuration value. Acceptable data types are: TODO list
      * @return This builder.
      */
-    ConfigurationBuilder addValue(String key, Object value);
+    FeatureConfigurationBuilder addValue(String key, Object value);
 
     /**
      * Add a map of configuration values for this Configuration object. All values
@@ -40,12 +40,12 @@ public interface ConfigurationBuilder {
      * @param cfg
      * @return This builder.
      */
-    ConfigurationBuilder addValues(Map<String, Object> cfg);
+    FeatureConfigurationBuilder addValues(Map<String, Object> cfg);
 
     /**
      * Build the Configuration object. Can only be called once on a builder. After
      * calling this method the current builder instance cannot be used any more.
      * @return The Configuration.
      */
-    Configuration build();
+    FeatureConfiguration build();
 }
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/Extension.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtension.java
similarity index 98%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/Extension.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtension.java
index 737c3f1..1456810 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/Extension.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtension.java
@@ -31,7 +31,7 @@ import java.util.List;
  * </ul>
  * @ThreadSafe
  */
-public interface Extension {
+public interface FeatureExtension {
     enum Kind { MANDATORY, OPTIONAL, TRANSIENT };
     enum Type { JSON, TEXT, ARTIFACTS };
 
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/ExtensionBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtensionBuilder.java
similarity index 75%
rename from osgi-featuremodel/src/main/java/org/osgi/util/features/ExtensionBuilder.java
rename to osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtensionBuilder.java
index f7eb096..6e7210b 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/ExtensionBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/FeatureExtensionBuilder.java
@@ -17,48 +17,48 @@
 package org.osgi.util.features;
 
 /**
- * A builder for Feature Model {@link Extension} objects.
+ * A builder for Feature Model {@link FeatureExtension} objects.
  * @NotThreadSafe
  */
-public interface ExtensionBuilder {
+public interface FeatureExtensionBuilder {
 
     /**
      * Add text to the extension. Can only be called for extensions of type
-     * {@link Extension.Type.TEXT}.
+     * {@link FeatureExtension.Type.TEXT}.
      * @param text The text to be added.
      * @return This builder.
      */
-    ExtensionBuilder addText(String text);
+    FeatureExtensionBuilder addText(String text);
 
     /**
      * Add JSON in String form to the extension. Can only be called for extensions
-     * of type {@link Extension.Type.JSON}.
+     * of type {@link FeatureExtension.Type.JSON}.
      * @param json The JSON to be added.
      * @return This builder.
      */
-    ExtensionBuilder setJSON(String json);
+    FeatureExtensionBuilder setJSON(String json);
 
     /**
      * Add an Artifact to the extension. Can only be called for extensions of type
-     * {@link Extension.Type.ARTIFACT}.
+     * {@link FeatureExtension.Type.ARTIFACT}.
      * @param aid The ArtifactID of the artifact to add.
      * @return This builder.
      */
-    ExtensionBuilder addArtifact(ID aid);
+    FeatureExtensionBuilder addArtifact(ID aid);
 
     /**
      * Add an Artifact to the extension. Can only be called for extensions of type
-     * {@link Extension.Type.ARTIFACT}.
+     * {@link FeatureExtension.Type.ARTIFACT}.
      * @param groupId The Group ID of the artifact to add.
      * @param artifactId The Artifact ID of the artifact to add.
      * @param version The Version of the artifact to add.
      * @return This builder.
      */
-    ExtensionBuilder addArtifact(String groupId, String artifactId, String version);
+    FeatureExtensionBuilder addArtifact(String groupId, String artifactId, String version);
 
     /**
      * Add an Artifact to the extension. Can only be called for extensions of type
-     * {@link Extension.Type.ARTIFACT}.
+     * {@link FeatureExtension.Type.ARTIFACT}.
      * @param groupId The Group ID of the artifact to add.
      * @param artifactId The Artifact ID of the artifact to add.
      * @param version The Version of the artifact to add.
@@ -66,13 +66,13 @@ public interface ExtensionBuilder {
      * @param classifier The classifier of the artifact to add.
      * @return This builder.
      */
-    ExtensionBuilder addArtifact(String groupId, String artifactId, String version, String at, String classifier);
+    FeatureExtensionBuilder addArtifact(String groupId, String artifactId, String version, String at, String classifier);
 
     /**
      * Build the Extension. Can only be called once on a builder. After
      * calling this method the current builder instance cannot be used any more.
      * @return The Extension.
      */
-    Extension build();
+    FeatureExtension build();
 
 }
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContext.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContext.java
index 26f2821..13a548b 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContext.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContext.java
@@ -33,7 +33,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> handleBundleConflict(Feature f1, Bundle b1, Feature f2, Bundle b2);
+    List<FeatureBundle> handleBundleConflict(Feature f1, FeatureBundle b1, Feature f2, FeatureBundle b2);
 
     /**
      * If two merged features both contain the same configuration PID, this method
@@ -44,7 +44,7 @@ public interface MergeContext {
      * @param c2 The second configuration.
      * @return The merged configuration to use.
      */
-    Configuration handleConfigurationConflict(Feature f1, Configuration c1, Feature f2, Configuration c2);
+    FeatureConfiguration handleConfigurationConflict(Feature f1, FeatureConfiguration c1, Feature f2, FeatureConfiguration c2);
 
     /**
      * If two merged features both contain an extension with the same IF, this method
@@ -55,5 +55,5 @@ public interface MergeContext {
      * @param e2 The second extension.
      * @return The merged extension.
      */
-    Extension handleExtensionConflict(Feature f1, Extension e1, Feature f2, Extension e2);
+    FeatureExtension handleExtensionConflict(Feature f1, FeatureExtension e1, Feature f2, FeatureExtension e2);
 }
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContextBuilder.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContextBuilder.java
index 2ca1a9c..102f2d6 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContextBuilder.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/MergeContextBuilder.java
@@ -28,21 +28,21 @@ public interface MergeContextBuilder {
      * @param bh The Conflict Resolver.
      * @return This builder.
      */
-    MergeContextBuilder bundleConflictHandler(ConflictResolver<Bundle, List<Bundle>> bh);
+    MergeContextBuilder bundleConflictHandler(ConflictResolver<FeatureBundle, List<FeatureBundle>> bh);
 
     /**
      * Set the Configuration Conflict Resolver.
      * @param ch The Conflict Resolver.
      * @return This builder.
      */
-    MergeContextBuilder configConflictHandler(ConflictResolver<Configuration, Configuration> ch);
+    MergeContextBuilder configConflictHandler(ConflictResolver<FeatureConfiguration, FeatureConfiguration> ch);
 
     /**
      * Set the Extension Conflict Resolver.
      * @param eh The Conflict Resolver.
      * @return This builder.
      */
-    MergeContextBuilder extensionConflictHandler(ConflictResolver<Extension, Extension> eh);
+    MergeContextBuilder extensionConflictHandler(ConflictResolver<FeatureExtension, FeatureExtension> eh);
 
     /**
      * Build the Merge Context. Can only be called once on a builder. After
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ArtifactImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ArtifactImpl.java
index b85486f..f972ad7 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ArtifactImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ArtifactImpl.java
@@ -16,12 +16,12 @@
  */
 package org.osgi.util.features.impl;
 
-import org.osgi.util.features.Artifact;
+import org.osgi.util.features.FeatureArtifact;
 import org.osgi.util.features.ID;
 
 import java.util.Objects;
 
-class ArtifactImpl implements Artifact {
+class ArtifactImpl implements FeatureArtifact {
     private final ID id;
 
     ArtifactImpl(ID id) {
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BuilderFactoryImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BuilderFactoryImpl.java
index 5494bf1..8cd0228 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BuilderFactoryImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BuilderFactoryImpl.java
@@ -18,27 +18,27 @@ package org.osgi.util.features.impl;
 
 import org.osgi.util.features.ID;
 import org.osgi.util.features.BuilderFactory;
-import org.osgi.util.features.BundleBuilder;
-import org.osgi.util.features.ConfigurationBuilder;
-import org.osgi.util.features.ExtensionBuilder;
+import org.osgi.util.features.FeatureBundleBuilder;
+import org.osgi.util.features.FeatureConfigurationBuilder;
+import org.osgi.util.features.FeatureExtensionBuilder;
 import org.osgi.util.features.FeatureBuilder;
 import org.osgi.util.features.MergeContextBuilder;
-import org.osgi.util.features.Extension.Kind;
-import org.osgi.util.features.Extension.Type;
+import org.osgi.util.features.FeatureExtension.Kind;
+import org.osgi.util.features.FeatureExtension.Type;
 
 class BuilderFactoryImpl implements BuilderFactory {
     @Override
-    public BundleBuilder newBundleBuilder(ID id) {
+    public FeatureBundleBuilder newBundleBuilder(ID id) {
         return new BundleBuilderImpl(id);
     }
 
     @Override
-    public ConfigurationBuilder newConfigurationBuilder(String pid) {
+    public FeatureConfigurationBuilder newConfigurationBuilder(String pid) {
         return new ConfigurationBuilderImpl(pid);
     }
 
     @Override
-    public ConfigurationBuilder newConfigurationBuilder(String factoryPid, String name) {
+    public FeatureConfigurationBuilder newConfigurationBuilder(String factoryPid, String name) {
         return new ConfigurationBuilderImpl(factoryPid, name);
     }
 
@@ -48,7 +48,7 @@ class BuilderFactoryImpl implements BuilderFactory {
     }
 
     @Override
-    public ExtensionBuilder newExtensionBuilder(String name, Type type, Kind kind) {
+    public FeatureExtensionBuilder newExtensionBuilder(String name, Type type, Kind kind) {
         return new ExtensionBuilderImpl(name, type, kind);
     }
 
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BundleBuilderImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BundleBuilderImpl.java
index bd3903c..efabaca 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BundleBuilderImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/BundleBuilderImpl.java
@@ -17,15 +17,15 @@
 package org.osgi.util.features.impl;
 
 import org.osgi.util.features.ID;
-import org.osgi.util.features.Bundle;
-import org.osgi.util.features.BundleBuilder;
+import org.osgi.util.features.FeatureBundle;
+import org.osgi.util.features.FeatureBundleBuilder;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
-class BundleBuilderImpl implements BundleBuilder {
+class BundleBuilderImpl implements FeatureBundleBuilder {
     private final ID id;
 
     private final Map<String,Object> metadata = new HashMap<>();
@@ -35,23 +35,23 @@ class BundleBuilderImpl implements BundleBuilder {
     }
 
     @Override
-    public BundleBuilder addMetadata(String key, Object value) {
+    public FeatureBundleBuilder addMetadata(String key, Object value) {
         this.metadata.put(key, value);
         return this;
     }
 
     @Override
-    public BundleBuilder addMetadata(Map<String,Object> md) {
+    public FeatureBundleBuilder addMetadata(Map<String,Object> md) {
         this.metadata.putAll(md);
         return this;
     }
 
     @Override
-    public Bundle build() {
+    public FeatureBundle build() {
         return new BundleImpl(id, metadata);
     }
 
-    private static class BundleImpl extends ArtifactImpl implements Bundle {
+    private static class BundleImpl extends ArtifactImpl implements FeatureBundle {
         private final Map<String, Object> metadata;
 
         private BundleImpl(ID id, Map<String, Object> metadata) {
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ConfigurationBuilderImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ConfigurationBuilderImpl.java
index 4ef254c..6db1403 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ConfigurationBuilderImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ConfigurationBuilderImpl.java
@@ -16,15 +16,15 @@
  */
 package org.osgi.util.features.impl;
 
-import org.osgi.util.features.Configuration;
-import org.osgi.util.features.ConfigurationBuilder;
+import org.osgi.util.features.FeatureConfiguration;
+import org.osgi.util.features.FeatureConfigurationBuilder;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
-class ConfigurationBuilderImpl implements ConfigurationBuilder {
+class ConfigurationBuilderImpl implements FeatureConfigurationBuilder {
     private final String p;
     private final String name;
 
@@ -40,7 +40,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
         this.name = name;
     }
 
-    ConfigurationBuilderImpl(Configuration c) {
+    ConfigurationBuilderImpl(FeatureConfiguration c) {
         if (c.getFactoryPid() == null) {
             p = c.getPid();
             name = null;
@@ -54,21 +54,21 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     }
 
     @Override
-    public ConfigurationBuilder addValue(String key, Object value) {
+    public FeatureConfigurationBuilder addValue(String key, Object value) {
         // TODO can do some validation on the configuration
         this.values.put(key, value);
         return this;
     }
 
     @Override
-    public ConfigurationBuilder addValues(Map<String, Object> cfg) {
+    public FeatureConfigurationBuilder addValues(Map<String, Object> cfg) {
         // TODO can do some validation on the configuration
         this.values.putAll(cfg);
         return this;
     }
 
     @Override
-    public Configuration build() {
+    public FeatureConfiguration build() {
         if (name == null) {
             return new ConfigurationImpl(p, null, values);
         } else {
@@ -76,7 +76,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
         }
     }
 
-    private static class ConfigurationImpl implements Configuration {
+    private static class ConfigurationImpl implements FeatureConfiguration {
         private final String pid;
         private final String factoryPid;
         private final Map<String, Object> values;
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ExtensionBuilderImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ExtensionBuilderImpl.java
index 0e83694..e6946e5 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ExtensionBuilderImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/ExtensionBuilderImpl.java
@@ -17,10 +17,10 @@
 package org.osgi.util.features.impl;
 
 import org.osgi.util.features.ID;
-import org.osgi.util.features.Extension;
-import org.osgi.util.features.ExtensionBuilder;
-import org.osgi.util.features.Extension.Kind;
-import org.osgi.util.features.Extension.Type;
+import org.osgi.util.features.FeatureExtension;
+import org.osgi.util.features.FeatureExtensionBuilder;
+import org.osgi.util.features.FeatureExtension.Kind;
+import org.osgi.util.features.FeatureExtension.Type;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -29,7 +29,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
-class ExtensionBuilderImpl implements ExtensionBuilder {
+class ExtensionBuilderImpl implements FeatureExtensionBuilder {
     private final String name;
     private final Type type;
     private final Kind kind;
@@ -43,7 +43,7 @@ class ExtensionBuilderImpl implements ExtensionBuilder {
     }
 
     @Override
-    public ExtensionBuilder addText(String text) {
+    public FeatureExtensionBuilder addText(String text) {
         if (type != Type.TEXT)
             throw new IllegalStateException("Cannot add text to extension of type " + type);
 
@@ -52,7 +52,7 @@ class ExtensionBuilderImpl implements ExtensionBuilder {
     }
 
     @Override
-    public ExtensionBuilder setJSON(String json) {
+    public FeatureExtensionBuilder setJSON(String json) {
         if (type != Type.JSON)
             throw new IllegalStateException("Cannot add text to extension of type " + type);
 
@@ -62,18 +62,18 @@ class ExtensionBuilderImpl implements ExtensionBuilder {
     }
 
     @Override
-    public ExtensionBuilder addArtifact(ID aid) {
+    public FeatureExtensionBuilder addArtifact(ID aid) {
         addArtifact(aid.getGroupId(), aid.getArtifactId(), aid.getVersion(), aid.getType(), aid.getClassifier());
         return this;
     }
 
     @Override
-    public ExtensionBuilder addArtifact(String groupId, String artifactId, String version) {
+    public FeatureExtensionBuilder addArtifact(String groupId, String artifactId, String version) {
         return addArtifact(groupId, artifactId, version, null, null);
     }
 
     @Override
-    public ExtensionBuilder addArtifact(String groupId, String artifactId, String version, String at, String classifier) {
+    public FeatureExtensionBuilder addArtifact(String groupId, String artifactId, String version, String at, String classifier) {
         if (type != Type.ARTIFACTS)
             throw new IllegalStateException("Cannot add artifacts to extension of type " + type);
 
@@ -96,11 +96,11 @@ class ExtensionBuilderImpl implements ExtensionBuilder {
     }
 
     @Override
-    public Extension build() {
+    public FeatureExtension build() {
         return new ExtensionImpl(name, type, kind, content.toString());
     }
 
-    private static class ExtensionImpl implements Extension {
+    private static class ExtensionImpl implements FeatureExtension {
         private final String name;
         private final Type type;
         private final Kind kind;
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureBuilderImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureBuilderImpl.java
index 3d75475..4fa3eee 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureBuilderImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureBuilderImpl.java
@@ -17,9 +17,9 @@
 package org.osgi.util.features.impl;
 
 import org.osgi.util.features.ID;
-import org.osgi.util.features.Bundle;
-import org.osgi.util.features.Configuration;
-import org.osgi.util.features.Extension;
+import org.osgi.util.features.FeatureBundle;
+import org.osgi.util.features.FeatureConfiguration;
+import org.osgi.util.features.FeatureExtension;
 import org.osgi.util.features.Feature;
 import org.osgi.util.features.FeatureBuilder;
 
@@ -42,9 +42,9 @@ class FeatureBuilderImpl implements FeatureBuilder {
     private boolean complete;
     private boolean isFinal;
 
-    private final List<Bundle> bundles = new ArrayList<>();
-    private final Map<String,Configuration> configurations = new HashMap<>();
-    private final Map<String,Extension> extensions = new HashMap<>();
+    private final List<FeatureBundle> bundles = new ArrayList<>();
+    private final Map<String,FeatureConfiguration> configurations = new HashMap<>();
+    private final Map<String,FeatureExtension> extensions = new HashMap<>();
     private final Map<String,String> variables = new HashMap<>();
 
     FeatureBuilderImpl(ID id) {
@@ -94,22 +94,22 @@ class FeatureBuilderImpl implements FeatureBuilder {
     }
 
     @Override
-    public FeatureBuilder addBundles(Bundle ... bundles) {
+    public FeatureBuilder addBundles(FeatureBundle ... bundles) {
         this.bundles.addAll(Arrays.asList(bundles));
         return this;
     }
 
     @Override
-    public FeatureBuilder addConfigurations(Configuration ... configs) {
-        for (Configuration cfg : configs) {
+    public FeatureBuilder addConfigurations(FeatureConfiguration ... configs) {
+        for (FeatureConfiguration cfg : configs) {
             this.configurations.put(cfg.getPid(), cfg);
         }
         return this;
     }
 
     @Override
-    public FeatureBuilder addExtensions(Extension ... extensions) {
-        for (Extension ex : extensions) {
+    public FeatureBuilder addExtensions(FeatureExtension ... extensions) {
+        for (FeatureExtension ex : extensions) {
             this.extensions.put(ex.getName(), ex);
         }
         return this;
@@ -143,14 +143,14 @@ class FeatureBuilderImpl implements FeatureBuilder {
         private final boolean complete;
         private final boolean isFinal;
 
-        private final List<Bundle> bundles;
-        private final Map<String,Configuration> configurations;
-        private final Map<String,Extension> extensions;
+        private final List<FeatureBundle> bundles;
+        private final Map<String,FeatureConfiguration> configurations;
+        private final Map<String,FeatureExtension> extensions;
         private final Map<String,String> variables;
 
         private FeatureImpl(ID id, String aTitle, String desc, String vnd, String lic, String loc,
-                boolean comp, boolean fin, List<Bundle> bs, Map<String,Configuration> cs,
-                Map<String,Extension> es, Map<String,String> vars) {
+                boolean comp, boolean fin, List<FeatureBundle> bs, Map<String,FeatureConfiguration> cs,
+                Map<String,FeatureExtension> es, Map<String,String> vars) {
             super(id);
 
             title = aTitle;
@@ -203,17 +203,17 @@ class FeatureBuilderImpl implements FeatureBuilder {
         }
 
         @Override
-        public List<Bundle> getBundles() {
+        public List<FeatureBundle> getBundles() {
             return bundles;
         }
 
         @Override
-        public Map<String,Configuration> getConfigurations() {
+        public Map<String,FeatureConfiguration> getConfigurations() {
             return configurations;
         }
 
         @Override
-        public Map<String,Extension> getExtensions() {
+        public Map<String,FeatureExtension> getExtensions() {
             return extensions;
         }
 
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureServiceImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureServiceImpl.java
index 7eb571e..c93dc74 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureServiceImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/FeatureServiceImpl.java
@@ -18,12 +18,12 @@ package org.osgi.util.features.impl;
 
 import org.osgi.util.features.ID;
 import org.osgi.util.features.BuilderFactory;
-import org.osgi.util.features.Bundle;
-import org.osgi.util.features.BundleBuilder;
-import org.osgi.util.features.Configuration;
-import org.osgi.util.features.ConfigurationBuilder;
-import org.osgi.util.features.Extension;
-import org.osgi.util.features.ExtensionBuilder;
+import org.osgi.util.features.FeatureBundle;
+import org.osgi.util.features.FeatureBundleBuilder;
+import org.osgi.util.features.FeatureConfiguration;
+import org.osgi.util.features.FeatureConfigurationBuilder;
+import org.osgi.util.features.FeatureExtension;
+import org.osgi.util.features.FeatureExtensionBuilder;
 import org.osgi.util.features.Feature;
 import org.osgi.util.features.FeatureBuilder;
 import org.osgi.util.features.FeatureService;
@@ -76,18 +76,18 @@ class FeatureServiceImpl implements FeatureService {
         return builder.build();
     }
 
-    private Bundle[] getBundles(JsonObject json) {
+    private FeatureBundle[] getBundles(JsonObject json) {
         JsonArray ja = json.getJsonArray("bundles");
         if (ja == null)
-            return new Bundle[] {};
+            return new FeatureBundle[] {};
 
-        List<Bundle> bundles = new ArrayList<>();
+        List<FeatureBundle> bundles = new ArrayList<>();
 
         for (JsonValue val : ja) {
             if (val.getValueType() == JsonValue.ValueType.OBJECT) {
                 JsonObject jo = val.asJsonObject();
                 String bid = jo.getString("id");
-                BundleBuilder builder = builderFactory.newBundleBuilder(ID.fromMavenID(bid));
+                FeatureBundleBuilder builder = builderFactory.newBundleBuilder(ID.fromMavenID(bid));
 
                 for (Map.Entry<String, JsonValue> entry : jo.entrySet()) {
                     if (entry.getKey().equals("id"))
@@ -112,15 +112,15 @@ class FeatureServiceImpl implements FeatureService {
             }
         }
 
-        return bundles.toArray(new Bundle[0]);
+        return bundles.toArray(new FeatureBundle[0]);
     }
 
-    private Configuration[] getConfigurations(JsonObject json) {
+    private FeatureConfiguration[] getConfigurations(JsonObject json) {
         JsonObject jo = json.getJsonObject("configurations");
         if (jo == null)
-            return new Configuration[] {};
+            return new FeatureConfiguration[] {};
 
-        List<Configuration> configs = new ArrayList<>();
+        List<FeatureConfiguration> configs = new ArrayList<>();
 
         for (Map.Entry<String, JsonValue> entry : jo.entrySet()) {
 
@@ -132,7 +132,7 @@ class FeatureServiceImpl implements FeatureService {
                 p = p.substring(idx + 1);
             }
 
-            ConfigurationBuilder builder;
+            FeatureConfigurationBuilder builder;
             if (factoryPid == null) {
                 builder = builderFactory.newConfigurationBuilder(p);
             } else {
@@ -167,32 +167,32 @@ class FeatureServiceImpl implements FeatureService {
             configs.add(builder.build());
         }
 
-        return configs.toArray(new Configuration[] {});
+        return configs.toArray(new FeatureConfiguration[] {});
     }
 
-    private Extension[] getExtensions(JsonObject json) {
+    private FeatureExtension[] getExtensions(JsonObject json) {
         JsonObject jo = json.getJsonObject("extensions");
         if (jo == null)
-            return new Extension[] {};
+            return new FeatureExtension[] {};
 
-        List<Extension> extensions = new ArrayList<>();
+        List<FeatureExtension> extensions = new ArrayList<>();
 
         for (Map.Entry<String,JsonValue> entry : jo.entrySet()) {
             JsonObject exData = entry.getValue().asJsonObject();
-            Extension.Type type;
+            FeatureExtension.Type type;
             if (exData.containsKey("text")) {
-                type = Extension.Type.TEXT;
+                type = FeatureExtension.Type.TEXT;
             } else if (exData.containsKey("artifacts")) {
-                type = Extension.Type.ARTIFACTS;
+                type = FeatureExtension.Type.ARTIFACTS;
             } else if (exData.containsKey("json")) {
-                type = Extension.Type.JSON;
+                type = FeatureExtension.Type.JSON;
             } else {
                 throw new IllegalStateException("Invalid extension: " + entry);
             }
             String k = exData.getString("kind", "optional");
-            Extension.Kind kind = Extension.Kind.valueOf(k.toUpperCase());
+            FeatureExtension.Kind kind = FeatureExtension.Kind.valueOf(k.toUpperCase());
 
-            ExtensionBuilder builder = builderFactory.newExtensionBuilder(entry.getKey(), type, kind);
+            FeatureExtensionBuilder builder = builderFactory.newExtensionBuilder(entry.getKey(), type, kind);
 
             switch (type) {
             case TEXT:
@@ -214,7 +214,7 @@ class FeatureServiceImpl implements FeatureService {
             extensions.add(builder.build());
         }
 
-        return extensions.toArray(new Extension[] {});
+        return extensions.toArray(new FeatureExtension[] {});
     }
 
     @Override
@@ -237,21 +237,21 @@ class FeatureServiceImpl implements FeatureService {
         return fb.build();
     }
 
-    private Bundle[] mergeBundles(Feature f1, Feature f2, MergeContext ctx) {
-        List<Bundle> bundles = new ArrayList<>(f1.getBundles());
-        List<Bundle> addedBundles = new ArrayList<>();
+    private FeatureBundle[] mergeBundles(Feature f1, Feature f2, MergeContext ctx) {
+        List<FeatureBundle> bundles = new ArrayList<>(f1.getBundles());
+        List<FeatureBundle> addedBundles = new ArrayList<>();
 
-        for (Bundle b : f2.getBundles()) {
+        for (FeatureBundle b : f2.getBundles()) {
             ID bID = b.getID();
             boolean found = false;
-            for (Iterator<Bundle> it = bundles.iterator(); it.hasNext(); ) {
-                Bundle orgb = it.next();
+            for (Iterator<FeatureBundle> it = bundles.iterator(); it.hasNext(); ) {
+                FeatureBundle orgb = it.next();
                 ID orgID = orgb.getID();
 
                 if (bID.getGroupId().equals(orgID.getGroupId()) &&
                         bID.getArtifactId().equals(orgID.getArtifactId())) {
                     found = true;
-                    List<Bundle> res = new ArrayList<>(ctx.handleBundleConflict(f1, b, f2, orgb));
+                    List<FeatureBundle> res = new ArrayList<>(ctx.handleBundleConflict(f1, b, f2, orgb));
                     if (res.contains(orgb)) {
                         res.remove(orgb);
                     } else {
@@ -265,19 +265,19 @@ class FeatureServiceImpl implements FeatureService {
             }
         }
         bundles.addAll(addedBundles);
-        return bundles.toArray(new Bundle[] {});
+        return bundles.toArray(new FeatureBundle[] {});
     }
 
-    private Configuration[] mergeConfigs(Feature f1, Feature f2, MergeContext ctx) {
-        Map<String,Configuration> configs = new HashMap<>(f1.getConfigurations());
-        Map<String,Configuration> addConfigs = new HashMap<>();
+    private FeatureConfiguration[] mergeConfigs(Feature f1, Feature f2, MergeContext ctx) {
+        Map<String,FeatureConfiguration> configs = new HashMap<>(f1.getConfigurations());
+        Map<String,FeatureConfiguration> addConfigs = new HashMap<>();
 
-        for (Map.Entry<String,Configuration> cfgEntry : f2.getConfigurations().entrySet()) {
+        for (Map.Entry<String,FeatureConfiguration> cfgEntry : f2.getConfigurations().entrySet()) {
             String pid = cfgEntry.getKey();
-            Configuration newCfg = cfgEntry.getValue();
-            Configuration orgCfg = configs.get(pid);
+            FeatureConfiguration newCfg = cfgEntry.getValue();
+            FeatureConfiguration orgCfg = configs.get(pid);
             if (orgCfg != null) {
-                Configuration resCfg = ctx.handleConfigurationConflict(f1, orgCfg, f2, newCfg);
+                FeatureConfiguration resCfg = ctx.handleConfigurationConflict(f1, orgCfg, f2, newCfg);
                 if (!resCfg.equals(orgCfg)) {
                     configs.remove(pid);
                     addConfigs.put(pid, resCfg);
@@ -288,19 +288,19 @@ class FeatureServiceImpl implements FeatureService {
         }
 
         configs.putAll(addConfigs);
-        return configs.values().toArray(new Configuration[] {});
+        return configs.values().toArray(new FeatureConfiguration[] {});
     }
 
-    private Extension[] mergeExtensions(Feature f1, Feature f2, MergeContext ctx) {
-        Map<String,Extension> extensions = new HashMap<>(f1.getExtensions());
-        Map<String,Extension> addExtensions = new HashMap<>();
+    private FeatureExtension[] mergeExtensions(Feature f1, Feature f2, MergeContext ctx) {
+        Map<String,FeatureExtension> extensions = new HashMap<>(f1.getExtensions());
+        Map<String,FeatureExtension> addExtensions = new HashMap<>();
 
-        for (Map.Entry<String,Extension> exEntry : f2.getExtensions().entrySet()) {
+        for (Map.Entry<String,FeatureExtension> exEntry : f2.getExtensions().entrySet()) {
             String key = exEntry.getKey();
-            Extension newEx = exEntry.getValue();
-            Extension orgEx = extensions.get(key);
+            FeatureExtension newEx = exEntry.getValue();
+            FeatureExtension orgEx = extensions.get(key);
             if (orgEx != null) {
-                Extension resEx = ctx.handleExtensionConflict(f1, orgEx, f2, newEx);
+                FeatureExtension resEx = ctx.handleExtensionConflict(f1, orgEx, f2, newEx);
                 if (!resEx.equals(orgEx)) {
                     extensions.remove(key);
                     addExtensions.put(key, resEx);
@@ -311,7 +311,7 @@ class FeatureServiceImpl implements FeatureService {
         }
 
         extensions.putAll(addExtensions);
-        return extensions.values().toArray(new Extension[] {});
+        return extensions.values().toArray(new FeatureExtension[] {});
     }
 
     private void copyAttrs(Feature f, FeatureBuilder fb) {
diff --git a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/MergeContextBuilderImpl.java b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/MergeContextBuilderImpl.java
index 2811551..392d76f 100644
--- a/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/MergeContextBuilderImpl.java
+++ b/osgi-featuremodel/src/main/java/org/osgi/util/features/impl/MergeContextBuilderImpl.java
@@ -16,10 +16,10 @@
  */
 package org.osgi.util.features.impl;
 
-import org.osgi.util.features.Bundle;
-import org.osgi.util.features.Configuration;
+import org.osgi.util.features.FeatureBundle;
+import org.osgi.util.features.FeatureConfiguration;
 import org.osgi.util.features.ConflictResolver;
-import org.osgi.util.features.Extension;
+import org.osgi.util.features.FeatureExtension;
 import org.osgi.util.features.Feature;
 import org.osgi.util.features.MergeContext;
 import org.osgi.util.features.MergeContextBuilder;
@@ -27,24 +27,24 @@ import org.osgi.util.features.MergeContextBuilder;
 import java.util.List;
 
 class MergeContextBuilderImpl implements MergeContextBuilder {
-    private ConflictResolver<Bundle, List<Bundle>> bundleHandler;
-    private ConflictResolver<Configuration, Configuration> configHandler;
-    private ConflictResolver<Extension, Extension> extensionHandler;
+    private ConflictResolver<FeatureBundle, List<FeatureBundle>> bundleHandler;
+    private ConflictResolver<FeatureConfiguration, FeatureConfiguration> configHandler;
+    private ConflictResolver<FeatureExtension, FeatureExtension> extensionHandler;
 
     @Override
-    public MergeContextBuilder bundleConflictHandler(ConflictResolver<Bundle, List<Bundle>> bh) {
+    public MergeContextBuilder bundleConflictHandler(ConflictResolver<FeatureBundle, List<FeatureBundle>> bh) {
         bundleHandler = bh;
         return this;
     }
 
     @Override
-    public MergeContextBuilder configConflictHandler(ConflictResolver<Configuration, Configuration> ch) {
+    public MergeContextBuilder configConflictHandler(ConflictResolver<FeatureConfiguration, FeatureConfiguration> ch) {
         configHandler = ch;
         return this;
     }
 
     @Override
-    public MergeContextBuilder extensionConflictHandler(ConflictResolver<Extension, Extension> eh) {
+    public MergeContextBuilder extensionConflictHandler(ConflictResolver<FeatureExtension, FeatureExtension> eh) {
         extensionHandler = eh;
         return this;
     }
@@ -55,31 +55,31 @@ class MergeContextBuilderImpl implements MergeContextBuilder {
     }
 
     private static class MergeContextImpl implements MergeContext {
-        private final ConflictResolver<Bundle, List<Bundle>> bundleHandler;
-        private final ConflictResolver<Configuration, Configuration> configHandler;
-        private final ConflictResolver<Extension, Extension> extensionHandler;
+        private final ConflictResolver<FeatureBundle, List<FeatureBundle>> bundleHandler;
+        private final ConflictResolver<FeatureConfiguration, FeatureConfiguration> configHandler;
+        private final ConflictResolver<FeatureExtension, FeatureExtension> extensionHandler;
 
 
-        MergeContextImpl(ConflictResolver<Bundle, List<Bundle>> bundleHandler,
-                ConflictResolver<Configuration, Configuration> configHandler,
-                ConflictResolver<Extension, Extension> extensionHandler) {
+        MergeContextImpl(ConflictResolver<FeatureBundle, List<FeatureBundle>> bundleHandler,
+                ConflictResolver<FeatureConfiguration, FeatureConfiguration> configHandler,
+                ConflictResolver<FeatureExtension, FeatureExtension> extensionHandler) {
             this.bundleHandler = bundleHandler;
             this.configHandler = configHandler;
             this.extensionHandler = extensionHandler;
         }
 
         @Override
-        public List<Bundle> handleBundleConflict(Feature f1, Bundle b1, Feature f2, Bundle b2) {
+        public List<FeatureBundle> handleBundleConflict(Feature f1, FeatureBundle b1, Feature f2, FeatureBundle b2) {
             return bundleHandler.resolve(f1, b1, f2, b2);
         }
 
         @Override
-        public Configuration handleConfigurationConflict(Feature f1, Configuration c1, Feature f2, Configuration c2) {
+        public FeatureConfiguration handleConfigurationConflict(Feature f1, FeatureConfiguration c1, Feature f2, FeatureConfiguration c2) {
             return configHandler.resolve(f1, c1, f2, c2);
         }
 
         @Override
-        public Extension handleExtensionConflict(Feature f1, Extension e1, Feature f2, Extension e2) {
+        public FeatureExtension handleExtensionConflict(Feature f1, FeatureExtension e1, Feature f2, FeatureExtension e2) {
             return extensionHandler.resolve(f1, e1, f2, e2);
         }
     }
diff --git a/osgi-featuremodel/src/test/java/org/osgi/util/features/impl/FeatureServiceImplTest.java b/osgi-featuremodel/src/test/java/org/osgi/util/features/impl/FeatureServiceImplTest.java
index bac8140..a868111 100644
--- a/osgi-featuremodel/src/test/java/org/osgi/util/features/impl/FeatureServiceImplTest.java
+++ b/osgi-featuremodel/src/test/java/org/osgi/util/features/impl/FeatureServiceImplTest.java
@@ -19,9 +19,9 @@ package org.osgi.util.features.impl;
 import org.junit.Test;
 import org.osgi.util.features.ID;
 import org.osgi.util.features.BuilderFactory;
-import org.osgi.util.features.Bundle;
-import org.osgi.util.features.Configuration;
-import org.osgi.util.features.Extension;
+import org.osgi.util.features.FeatureBundle;
+import org.osgi.util.features.FeatureConfiguration;
+import org.osgi.util.features.FeatureExtension;
 import org.osgi.util.features.Feature;
 import org.osgi.util.features.FeatureService;
 import org.osgi.util.features.MergeContext;
@@ -56,15 +56,15 @@ public class FeatureServiceImplTest {
             assertNull(f.getTitle());
             assertEquals("The feature description", f.getDescription());
 
-            List<Bundle> bundles = f.getBundles();
+            List<FeatureBundle> bundles = f.getBundles();
             assertEquals(3, bundles.size());
 
-            Bundle bundle = bf.newBundleBuilder(new ID("org.osgi", "osgi.promise", "7.0.1"))
+            FeatureBundle bundle = bf.newBundleBuilder(new ID("org.osgi", "osgi.promise", "7.0.1"))
                     .addMetadata("hash", "4632463464363646436")
                     .addMetadata("start-order", 1L)
                     .build();
 
-            Bundle ba = bundles.get(0);
+            FeatureBundle ba = bundles.get(0);
             ba.equals(bundle);
 
             assertTrue(bundles.contains(bundle));
@@ -101,22 +101,22 @@ public class FeatureServiceImplTest {
         Feature f3 = fs.mergeFeatures(tid, f1, f2, ctx);
         assertEquals(tid, f3.getID());
 
-        List<Bundle> bundles = f3.getBundles();
+        List<FeatureBundle> bundles = f3.getBundles();
         assertEquals(5, bundles.size());
 
         assertTrue(bundles.contains(bf.newBundleBuilder(new ID("org.slf4j", "slf4j-api", "1.7.29")).build()));
         assertTrue(bundles.contains(bf.newBundleBuilder(new ID("org.slf4j", "slf4j-api", "1.7.30")).build()));
         assertTrue(bundles.contains(bf.newBundleBuilder(new ID("org.slf4j", "slf4j-nop", "1.7.30")).build()));
 
-        Map<String, Configuration> configs = f3.getConfigurations();
+        Map<String, FeatureConfiguration> configs = f3.getConfigurations();
         assertEquals(2, configs.size());
 
-        Configuration cfg1 = configs.get("my.factory.pid~name");
+        FeatureConfiguration cfg1 = configs.get("my.factory.pid~name");
         assertEquals("my.factory.pid~name", cfg1.getPid());
         assertEquals("my.factory.pid", cfg1.getFactoryPid());
         assertEquals(Collections.singletonMap("a.value", "yeah"), cfg1.getValues());
 
-        Configuration cfg2 = configs.get("my.pid");
+        FeatureConfiguration cfg2 = configs.get("my.pid");
         assertEquals("my.pid", cfg2.getPid());
         assertNull(cfg2.getFactoryPid());
         Map<String,Object> expected = new HashMap<>();
@@ -154,24 +154,24 @@ public class FeatureServiceImplTest {
         ID tid = new ID("g", "a", "1.2.3");
         Feature f3 = fs.mergeFeatures(tid, f1, f2, ctx);
 
-        Map<String, Extension> extensions = f3.getExtensions();
+        Map<String, FeatureExtension> extensions = f3.getExtensions();
         assertEquals(3, extensions.size());
-        Extension txtEx = extensions.get("my-text-ex");
+        FeatureExtension txtEx = extensions.get("my-text-ex");
         assertEquals("ABCDEF", txtEx.getText());
-        assertEquals(Extension.Kind.OPTIONAL, txtEx.getKind());
-        assertEquals(Extension.Type.TEXT, txtEx.getType());
+        assertEquals(FeatureExtension.Kind.OPTIONAL, txtEx.getKind());
+        assertEquals(FeatureExtension.Type.TEXT, txtEx.getType());
 
-        Extension artEx = extensions.get("my-art-ex");
-        assertEquals(Extension.Kind.MANDATORY, artEx.getKind());
-        assertEquals(Extension.Type.ARTIFACTS, artEx.getType());
+        FeatureExtension artEx = extensions.get("my-art-ex");
+        assertEquals(FeatureExtension.Kind.MANDATORY, artEx.getKind());
+        assertEquals(FeatureExtension.Type.ARTIFACTS, artEx.getType());
         List<ID> artifacts = artEx.getArtifacts();
         assertEquals(2, artifacts.size());
         assertTrue(artifacts.contains(new ID("g", "a", "1")));
         assertTrue(artifacts.contains(new ID("g", "a", "2")));
 
-        Extension jsonEx = extensions.get("my-json-ex");
-        assertEquals(Extension.Kind.TRANSIENT, jsonEx.getKind());
-        assertEquals(Extension.Type.JSON, jsonEx.getType());
+        FeatureExtension jsonEx = extensions.get("my-json-ex");
+        assertEquals(FeatureExtension.Kind.TRANSIENT, jsonEx.getKind());
+        assertEquals(FeatureExtension.Type.JSON, jsonEx.getType());
         assertEquals("{\"foo\":[1,2,3]}", jsonEx.getJSON());
     }
 }