You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2016/12/12 16:13:06 UTC

[3/5] incubator-tamaya-sandbox git commit: Added tests for OSGI support, simplified OSGI support. Implemented base functionality for metamodel support, including first testing.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/ItemFactoryManager.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/ItemFactoryManager.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/ItemFactoryManager.java
new file mode 100644
index 0000000..4578640
--- /dev/null
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/ItemFactoryManager.java
@@ -0,0 +1,145 @@
+/*
+ * 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.tamaya.metamodel.spi;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Created by atsticks on 04.12.16.
+ */
+public final class ItemFactoryManager {
+
+    private static final Logger LOG = Logger.getLogger(ItemFactoryManager.class.getName());
+
+    private Map<Class, List<ItemFactory<?>>> factoryRegistry = new ConcurrentHashMap<>();
+
+    private static ItemFactoryManager INSTANCE = new ItemFactoryManager();
+
+    private ItemFactoryManager(){
+    }
+
+    public static ItemFactoryManager getInstance(){
+        return INSTANCE;
+    }
+
+    public <T> List<ItemFactory<T>> getFactories(Class<T> type){
+        List<ItemFactory<?>> factories = factoryRegistry.get(type);
+        if(factories==null){
+            Collection<ItemFactory> allFactories =
+                    ServiceContextManager.getServiceContext().getServices(ItemFactory.class);
+            for(ItemFactory fact:allFactories){
+                registerItemFactory(fact);
+            }
+        }
+        factories = factoryRegistry.get(type);
+        if(factories==null){
+            return Collections.emptyList();
+        }
+        return List.class.cast(factories);
+    }
+
+    public <T> ItemFactory<T> getFactory(Class<T> type, String id) {
+        List<ItemFactory<T>> factories = getFactories(type);
+        for(ItemFactory<T> f:factories){
+            if(id.equals(f.getName())){
+                return f;
+            }
+        }
+        // try creating a new factory with the given id as fully qualified class name...
+        try{
+            Class<? extends ItemFactory> instanceType = (Class<? extends ItemFactory>) Class.forName(id);
+            ItemFactory<T> factory = new SimpleItemFactory(type, instanceType);
+            registerItemFactory(factory);
+            return factory;
+        }catch(Exception e){
+            LOG.severe("Failed to create factory for configured class: " + type.getName() +
+                    " and type: " + id);
+            return null;
+        }
+    }
+
+    public <T> void registerItemFactory(ItemFactory<T> factory) {
+        List<ItemFactory<?>> factories = factoryRegistry.get(factory.getType());
+        if(factories==null){
+            factories = new ArrayList<>();
+            factoryRegistry.put(factory.getType(), factories);
+        }
+        factories.add(factory);
+    }
+
+    private static class SimpleItemFactory<I> implements ItemFactory<I> {
+
+        private Class<I> type;
+        private Class<? extends I> instanceType;
+
+        public SimpleItemFactory(Class<I> type, Class<? extends I> instanceType) {
+            this.type = Objects.requireNonNull(type);
+            this.instanceType = Objects.requireNonNull(instanceType);
+        }
+
+        @Override
+        public String getName() {
+            return getType().getName();
+        }
+
+        @Override
+        public I create(Map<String, String> parameters) {
+            try {
+                return instanceType.newInstance();
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Failed to create configured instance of type:" + instanceType, e);
+                return null;
+            }
+        }
+
+        @Override
+        public Class<I> getType() {
+            return type;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (!(o instanceof SimpleItemFactory)) return false;
+            SimpleItemFactory<?> that = (SimpleItemFactory<?>) o;
+            return Objects.equals(getType(), that.getType()) &&
+                    Objects.equals(instanceType, that.instanceType);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(getType(), instanceType);
+        }
+
+        @Override
+        public String toString() {
+            return "SimpleItemFactory{" +
+                    "type=" + type +
+                    ", instanceType=" + instanceType +
+                    '}';
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
index c9718a9..005aa24 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
@@ -18,14 +18,12 @@
  */
 package org.apache.tamaya.metamodel.spi;
 
-import org.apache.tamaya.metamodel.Context;
 import org.apache.tamaya.spi.ConfigurationContextBuilder;
 import org.w3c.dom.Document;
 
-import java.net.URL;
-
 /**
- * Created by atsticks on 03.11.16.
+ * Reader that reads meta configuration from the meta configuration XML source.
+ * This SPI allows to allow different aspects to be configured by different modules.
  */
 public interface MetaConfigurationReader {
 
@@ -36,6 +34,6 @@ public interface MetaConfigurationReader {
      * @param document the meta-configuration document
      * @param contextBuilder the context builder to use.
      */
-    void read(Document document, Context context, ConfigurationContextBuilder contextBuilder);
+    void read(Document document, ConfigurationContextBuilder contextBuilder);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceFactory.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceFactory.java
deleted file mode 100644
index 7da2e58..0000000
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceFactory.java
+++ /dev/null
@@ -1,48 +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.
- */
-package org.apache.tamaya.metamodel.spi;
-
-import org.apache.tamaya.metamodel.internal.SourceConfig;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.Map;
-
-
-/**
- * {@link PropertySource} and {@link SourceConfig} instances that
- * implement configurable are configured with the according configuration
- * settings provided in the {@code tamaya-config.xml} meta-configuration.
- */
-public interface PropertySourceFactory {
-
-    /**
-     * Resolve the given expression (without the key part).
-     * @param config any further extended configuration, not null, but may be
-     *                       empty.
-     * @return the property source, or null.
-     */
-    PropertySource create(Map<String, String> config);
-
-    /**
-     * Get the property source type. The type is used to identify the correct factory instance
-     * to resolve a configured property source.
-     * @return the (unique) type key, never null and not empty.
-     */
-    String getType();
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceProviderFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceProviderFactory.java
deleted file mode 100644
index 41ea3a5..0000000
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/PropertySourceProviderFactory.java
+++ /dev/null
@@ -1,49 +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.
- */
-package org.apache.tamaya.metamodel.spi;
-
-import org.apache.tamaya.metamodel.internal.SourceConfig;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import java.util.Map;
-
-
-/**
- * {@link PropertySource} and {@link SourceConfig} instances that
- * implement configurable are configured with the according configuration
- * settings provided in the {@code tamaya-config.xml} meta-configuration.
- */
-public interface PropertySourceProviderFactory {
-
-    /**
-     * Resolve the given expression (without the key part).
-     * @param config any further extended configuration, not null, but may be
-     *                       empty.
-     * @return the property source, or null.
-     */
-    PropertySourceProvider create(Map<String, String> config);
-
-    /**
-     * Get the property source type. The type is used to identify the correct factory instance
-     * to resolve a configured property source.
-     * @return the (unique) type key, never null and not empty.
-     */
-    String getType();
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider
----------------------------------------------------------------------
diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider
deleted file mode 100644
index f2b1843..0000000
--- a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.DSLPropertySourceProvider
+++ /dev/null
@@ -1,20 +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 current 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.
-#
-org.apache.tamaya.metamodel.dsl.internal.NamedDSLPropertySourceProvider
-org.apache.tamaya.metamodel.dsl.internal.ResourceDSLPropertySourceProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ItemFactory
----------------------------------------------------------------------
diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ItemFactory b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ItemFactory
new file mode 100644
index 0000000..7b73763
--- /dev/null
+++ b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ItemFactory
@@ -0,0 +1,26 @@
+#
+# 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.
+#
+org.apache.tamaya.metamodel.internal.factories.CLIArgumentsFactory
+org.apache.tamaya.metamodel.internal.factories.EnvPropertiesFactory
+org.apache.tamaya.metamodel.internal.factories.FilePropertySourceFactory
+org.apache.tamaya.metamodel.internal.factories.ResourcePropertySourceFactory
+org.apache.tamaya.metamodel.internal.factories.SysPropertiesFactory
+org.apache.tamaya.metamodel.internal.factories.URLPropertySourceFactory
+
+org.apache.tamaya.metamodel.internal.factories.ResourcePropertySourceProviderFactory

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader
----------------------------------------------------------------------
diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader
new file mode 100644
index 0000000..cd2af30
--- /dev/null
+++ b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader
@@ -0,0 +1,26 @@
+#
+# 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.
+#
+
+org.apache.tamaya.metamodel.internal.PropertyFilterReader
+org.apache.tamaya.metamodel.internal.PropertyConverterReader
+org.apache.tamaya.metamodel.internal.PropertySourceReader
+org.apache.tamaya.metamodel.internal.ContextReader
+org.apache.tamaya.metamodel.internal.CombinationPolicyReader
+org.apache.tamaya.metamodel.internal.PropertyFilterOrderingReader
+org.apache.tamaya.metamodel.internal.PropertySourceOrderingReader
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
----------------------------------------------------------------------
diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
index 6406156..f9a7797 100644
--- a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
+++ b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
@@ -16,4 +16,5 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.tamaya.metamodel.dsl.internal.DSLLoadingConfigurationProviderSpi
\ No newline at end of file
+
+org.apache.tamaya.metamodel.internal.DSLLoadingConfigurationProviderSpi
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/test/resources/IntegrationTests/empty-config.xml
----------------------------------------------------------------------
diff --git a/metamodel/src/test/resources/IntegrationTests/empty-config.xml b/metamodel/src/test/resources/IntegrationTests/empty-config.xml
new file mode 100644
index 0000000..42faaed
--- /dev/null
+++ b/metamodel/src/test/resources/IntegrationTests/empty-config.xml
@@ -0,0 +1,24 @@
+<!--
+// 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 current 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.
+// -->
+<configuration>
+
+    <!-- This is an empty config, which results in an empty and unusable configuration. -->
+
+</configuration>
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/metamodel/src/test/resources/tamaya-config.xml
----------------------------------------------------------------------
diff --git a/metamodel/src/test/resources/tamaya-config.xml b/metamodel/src/test/resources/tamaya-config.xml
index 1d25beb..eb44f83 100644
--- a/metamodel/src/test/resources/tamaya-config.xml
+++ b/metamodel/src/test/resources/tamaya-config.xml
@@ -20,44 +20,68 @@
     <!-- Context is evaluated first. -->
     <context>
         <context-entry name="stage">${properties:system:STAGE?default=DEV}</context-entry>
+        <context-entry name="configdir">${properties:system:configdir?default=.}</context-entry>
         <context-entry name="app">${properties:system.APP?default=NONE}</context-entry>
         <context-entry name="context">${java:org.apache.tamaya.context.Context#id()}</context-entry>
         <context-entry name="company">Trivadis</context-entry>
         <context-entry name="default-formats">yaml,json</context-entry>
+        <context-entry name="default-refresh-period">5 SECOND</context-entry>
     </context>
+    <context name="APP">
+        <context-entry name="application">someAppName</context-entry>
+    </context>
+
+    <!-- combinationPolicy type="" / -->
 
     <!-- Configuration definition. -->
 
-    <config-sources>
+    <property-sources>
        <source enabled="${stage=TEST || stage=PTA || stage=PROD}"
-           uri="properties:environment">
-           <filter type="mapping">ENV.</filter>
-           <filter type="access-control">
+           type="env-properties">
+           <filter type="PropertyMapping">
+               <param name="mapTarget">ENV.</param>
+           </filter>
+           <filter type="AccessMask">
                <param name="roles">admin,power-user</param>
                <param name="policy">mask</param>
+               <param name="mask">*****</param>
+               <param name="matchExpression">SEC_</param>
            </filter>
        </source>
-       <source uri="properties:system"/>
-       <source name="FILE:config.json" refresh-period="5000"
-               uri="file:/./config.json" >
-           <param name="observe-period">20000</param>
-           <param name="formats">json</param>
+       <source type="sys-properties" >
+           <filter type="ImmutablePropertySource" />
        </source>
-       <source-provider name="classpath:application-config.yml" uri="classpath*://META-INF/application-config.yml">
-           <param name="formats">yaml</param>
-       </source-provider>
-       <source name="MINE" uri="class:ch.mypack.MyClassSource">
-           <param name="locale">de</param>
+       <source type="file" refreshable="true">
+           <name>config.json</name>
+           <param name="location">config.json</param>
+       </source>
+        <source type="file" refreshable="true">
+            <name>config.xml</name>
+            <param name="location">config.xml</param>
+            <param name="formats">xml-properties</param>
         </source>
-       <include enabled="${stage==TEST}">TEST-config.xml</include>
-       <source-provider name="CONFIG-DIR" uri="resource:/${CONFIG-DIR}/**/*.json"/>
-       <source name="SERVER" uri="https://www.confdrive.com/cfg/customerId=${}">
-           <param name="locale">de</param>
+       <source-provider type="resource">
+           <name>classpath:application-config.yml</name>
+           <param name="location">/META-INF/application-config.yml</param>
+       </source-provider>
+       <source type="ch.mypack.MyClassSource" />
+       <!--<include enabled="${stage==TEST}">TEST-config.xml</include>-->
+       <source-provider type="resource" enabled="${configdir != null}">
+           <name>config-dir</name>
+           <param name="location">/${configdir}/**/*.json</param>
+       </source-provider>
+       <source type="url" refreshable="true">
+           <name>remote</name>
+           <param name="location">https://www.confdrive.com/cfg/customerId=1234</param>
+           <param name="formats">json</param>
+           <filter type="CachedPropertySource">
+               <param name="ttl">30 SECOND</param>
+           </filter>
        </source>
-    </config-sources>
-    <config-filters>
+    </property-sources>
+    <property-filters>
         <filter type="UsageTrackerFilter"/>
-        <filter type="access-control">
+        <filter type="AccessControl">
             <param name="roles">admin,power-user</param>
             <param name="policy">hide</param>
             <param name="expression">*.secret</param>
@@ -66,10 +90,11 @@
             <param name="ttl">30000</param>
             <param name="expression">cached.*</param>
         </filter>
-    </config-filters>
-    <!--<converters>-->
+    </property-filters>
+    <property-converters>
     <!--<converter type="AllInOneConverter"/>-->
-    <!--</converters>-->
+        <default-converters/>
+    </property-converters>
 
 </configuration>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/afc19d0e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 63240ed..9d5b629 100644
--- a/pom.xml
+++ b/pom.xml
@@ -249,6 +249,71 @@ under the License.
             </dependency>
 
             <dependency>
+                <groupId>org.jboss.arquillian</groupId>
+                <artifactId>arquillian-bom</artifactId>
+                <version>${arquillian.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-container-managed</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-container-common</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-main</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-protocol-arquillian</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-protocol-wire</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.jboss.arquillian.daemon</groupId>
+                <artifactId>arquillian-daemon-server</artifactId>
+                <version>${arquillian.deamon.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>org.mockito</groupId>
+                <artifactId>mockito-core</artifactId>
+                <version>${mockito.version}</version>
+                <scope>test</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.hamcrest</groupId>
+                        <artifactId>hamcrest-core</artifactId>
+                    </exclusion>
+                </exclusions>
+
+            </dependency>
+
+            <dependency>
                 <groupId>rubygems</groupId>
                 <artifactId>asciidoctor-diagram</artifactId>
                 <version>${asciidoctor-diagramm.version}</version>
@@ -260,24 +325,420 @@ under the License.
                 <artifactId>geronimo-json_1.0_spec</artifactId>
                 <version>${json.spec.version}</version>
             </dependency>
+
             <dependency>
                 <groupId>org.apache.johnzon</groupId>
                 <artifactId>johnzon-core</artifactId>
                 <version>${johnzon.version}</version>
             </dependency>
-            <dependency>
-                <groupId>org.hamcrest</groupId>
-                <artifactId>hamcrest-library</artifactId>
-                <version>${hamcrest.version}</version>
-                <scope>test</scope>
-            </dependency>
+
         </dependencies>
     </dependencyManagement>
 
     <build>
       <defaultGoal>clean install</defaultGoal>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.jacoco</groupId>
+                    <artifactId>jacoco-maven-plugin</artifactId>
+                    <version>0.7.7.201606060606</version>
+                </plugin>
+                <plugin>
+                    <groupId>de.saumya.mojo</groupId>
+                    <artifactId>gem-maven-plugin</artifactId>
+                    <version>${gem.plugin}</version>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-checkstyle-plugin</artifactId>
+                    <version>${checkstyle.version}</version>
+                    <executions>
+                        <execution>
+                            <id>verify-style</id>
+                            <phase>process-classes</phase>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <logViolationsToConsole>true</logViolationsToConsole>
+                        <configLocation>checkstyle/style.xml</configLocation>
+                    </configuration>
+
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.tamaya</groupId>
+                            <artifactId>buildconfigurations</artifactId>
+                            <version>${project.version}</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>com.puppycrawl.tools</groupId>
+                            <artifactId>checkstyle</artifactId>
+                            <version>6.2</version>
+                            <exclusions><!-- MCHECKSTYLE-156 -->
+                                <exclusion>
+                                    <groupId>com.sun</groupId>
+                                    <artifactId>tools</artifactId>
+                                </exclusion>
+                            </exclusions>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-source-plugin</artifactId>
+                    <version>${sources.plugin}</version>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-toolchains-plugin</artifactId>
+                    <version>${toolchains.plugin}</version>
+                </plugin>
+<!--
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>findbugs-maven-plugin</artifactId>
+                    <version>${findbugs.version}</version>
+
+                    <executions>
+                        <execution>
+                            <id>findbugs-analyze</id>
+                            <phase>compile</phase>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <effort>Max</effort>
+                        <threshold>Low</threshold>
+                        <failOnError>true</failOnError>
+                        <excludeFilterFile>findbugs/findbugs-exclude.xml</excludeFilterFile>
+                    </configuration>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.tamaya</groupId>
+                            <artifactId>buildconfigurations</artifactId>
+                            <version>${project.version}</version>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+-->
+                <plugin>
+                    <groupId>org.asciidoctor</groupId>
+                    <artifactId>asciidoctor-maven-plugin</artifactId>
+                    <version>${asciidoctor.version}</version>
+                    <dependencies>
+                        <dependency>
+                            <!-- See TAMAYA-10 for details on this dependency -->
+                            <groupId>org.asciidoctor</groupId>
+                            <artifactId>asciidoctorj</artifactId>
+                            <version>${asciidoctorj.version}</version>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.5.1</version>
+                    <configuration>
+                        <debug>true</debug>
+                        <optimize>${maven.compile.optimize}</optimize>
+                        <source>${maven.compile.sourceLevel}</source>
+                        <target>${maven.compile.targetLevel}</target>
+                        <encoding>${project.build.sourceEncoding}</encoding>
+                        <showDeprecation>${maven.compile.deprecation}</showDeprecation>
+                    </configuration>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-failsafe-plugin</artifactId>
+                    <inherited>true</inherited>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>integration-test</goal>
+                                <goal>verify</goal>
+                            </goals>
+                            <configuration>
+                                <argLine>-Xms512m -Xmx1048m -XX:MaxPermSize=512m</argLine>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <inherited>true</inherited>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <configuration>
+                        <archive>
+                            <addMavenDescriptor>false</addMavenDescriptor>
+                            <manifestEntries>
+                                <Specification-Title>Apache ${project.name}</Specification-Title>
+                                <Specification-Version>${project.version}</Specification-Version>
+                                <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
+                                <Implementation-Title>${project.name}</Implementation-Title>
+                                <Implementation-Version>${project.version} ${buildNumber}</Implementation-Version>
+                                <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
+                                <SCM-Revision>${buildNumber}</SCM-Revision>
+                                <SCM-url>${project.scm.url}</SCM-url>
+                            </manifestEntries>
+                        </archive>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>biz.aQute.bnd</groupId>
+                    <artifactId>bnd-maven-plugin</artifactId>
+                    <version>3.3.0</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>ch.qos.logback</groupId>
+                            <artifactId>logback-core</artifactId>
+                            <version>1.1.3</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>org.slf4j</groupId>
+                            <artifactId>slf4j-api</artifactId>
+                            <version>1.7.13</version>
+                        </dependency>
+                    </dependencies>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>bnd-process</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-scm-publish-plugin</artifactId>
+                    <version>1.1</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-site-plugin</artifactId>
+                    <!-- 20160816: 3.5.1 generates a broken site, maybe due to old asciidoc version?! -->
+                    <version>3.4</version>
+                    <inherited>true</inherited>
+                    <dependencies>
+                        <!-- 3.5.1: Fixes class not found
+                         executing org.apache.maven.plugins:maven-site-plugin:3.5.1:site: org/apache/maven/doxia/sink/impl/XhtmlBaseSink
+                        <dependency>
+                            <groupId>org.apache.maven.doxia</groupId>
+                            <artifactId>doxia-core</artifactId>
+                            <version>1.7</version>
+                        </dependency>
+                        -->
+                        <dependency><!-- add support for ssh/scp -->
+                            <groupId>org.apache.maven.wagon</groupId>
+                            <artifactId>wagon-ssh</artifactId>
+                            <version>2.10</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>org.asciidoctor</groupId>
+                            <artifactId>asciidoctor-maven-plugin</artifactId>
+                            <version>${asciidoctor.version}</version>
+                        </dependency>
+                        <dependency>
+                            <groupId>lt.velykis.maven.skins</groupId>
+                            <artifactId>reflow-velocity-tools</artifactId>
+                            <version>${reflow-skin.version}</version>
+                        </dependency>
+                        <!-- Reflow skin requires Velocity >= 1.7  -->
+                        <dependency>
+                            <groupId>org.apache.velocity</groupId>
+                            <artifactId>velocity</artifactId>
+                            <version>1.7</version>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-release-plugin</artifactId>
+                    <version>2.5.3</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.rat</groupId>
+                    <artifactId>apache-rat-plugin</artifactId>
+                    <version>${rat.version}</version>
+                    <configuration>
+                        <excludes>
+                            <exclude>**/*banner.txt</exclude>
+                            <exclude>banner.txt</exclude>
+                            <exclude>.git</exclude>
+                            <exclude>derby.log</exclude>
+                            <exclude>**/bootstrap-*</exclude>
+                            <exclude>**/js/jquery-*</exclude>
+                            <!-- json can't get comments -->
+                            <exclude>**/*.json</exclude>
+                            <exclude>**/*.md</exclude>
+                            <exclude>**/*.md.vm</exclude>
+                            <exclude>src/site/asciidoc/temp-properties-files-for-site/attributes.adoc</exclude>
+                            <exclude>readme/**</exclude>
+                        </excludes>
+                        <includes>
+                            <include>src/**/*</include>
+                            <include>pom.xml</include>
+                        </includes>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <phase>validate</phase>
+                            <goals>
+                                <goal>check</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+
+
         <plugins>
             <plugin>
+                <groupId>org.apache.karaf.tooling</groupId>
+                <artifactId>karaf-maven-plugin</artifactId>
+                <version>4.0.5</version>
+                <extensions>true</extensions>
+                <executions>
+                    <execution>
+                        <id>generate</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>features-generate-descriptor</goal>
+                        </goals>
+                        <configuration>
+                            <startLevel>80</startLevel>
+                            <aggregateFeatures>true</aggregateFeatures>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>bal</id>
+                        <phase>pre-site</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <inherited>false</inherited>
+                        <configuration>
+                            <outputDirectory>${project.basedir}/temp-properties-files-for-site</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.basedir}/src/main/resources</directory>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>${enforcer.version}</version>
+                <executions>
+                    <execution>
+                        <id>enforce-versions</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireMavenVersion>
+                                    <version>3.0.5</version>
+                                </requireMavenVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${javadoc.version}</version>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <detectLinks>false</detectLinks>
+                    <keywords>true</keywords>
+                    <linksource>false</linksource>
+                    <failOnError>true</failOnError>
+                    <source>${maven.compile.sourceLevel}</source>
+                    <verbose>false</verbose>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>source-jar</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+            </plugin>
+            <!-- we need to tweak the maven-release-plugin for GIT -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <pushChanges>false</pushChanges>
+                    <localCheckout>true</localCheckout>
+                    <autoVersionSubmodules>true</autoVersionSubmodules>
+
+                    <releaseProfiles>release</releaseProfiles>
+                    <preparationGoals>clean install</preparationGoals>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.7</source>
+                    <target>1.7</target>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>biz.aQute.bnd</groupId>
                 <artifactId>bnd-maven-plugin</artifactId>
                 <version>3.3.0</version>
@@ -291,10 +752,12 @@ under the License.
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>2.5</version>
                 <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
+                    <archive>
+                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+                    </archive>
                 </configuration>
             </plugin>
         </plugins>
@@ -315,7 +778,181 @@ under the License.
         <!--<module>ui</module>-->
         <module>osgi</module>
         <module>management</module>
-        <!--<module>metamodel</module>-->
+        <module>metamodel</module>
     </modules>
 
+    <profiles>
+        <!-- The release profile. It ensures that all checks
+             will be done and everything will be build what need
+             to be build. -->
+        <profile>
+            <id>release</id>
+            <activation>
+                <property>
+                    <name>release</name>
+                </property>
+            </activation>
+            <properties>
+                <enforcer.skip>false</enforcer.skip>
+                <findbugs.skip>false</findbugs.skip>
+                <maven.javadoc.skip>false</maven.javadoc.skip>
+                <rat.skip>false</rat.skip>
+            </properties>
+        </profile>
+
+        <profile>
+            <id>release-sign-artifacts</id>
+            <activation>
+                <property>
+                    <name>performRelease</name>
+                    <value>true</value>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <version>1.6</version>
+                        <executions>
+                            <execution>
+                                <id>sign-artifacts</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <!-- Do a fast build by skipping all code analysis tools -->
+        <profile>
+            <id>fast</id>
+            <activation>
+                <property>
+                    <name>fast</name>
+                </property>
+            </activation>
+
+            <properties>
+                <checkstyle.skip>true</checkstyle.skip>
+                <findbugs.skip>true</findbugs.skip>
+                <rat.skip>true</rat.skip>
+                <maven.javadoc.skip>true</maven.javadoc.skip>
+                <source.skip>true</source.skip>
+                <assembly.skipAssembly>true</assembly.skipAssembly>
+                <maven.test.skip>true</maven.test.skip>
+            </properties>
+        </profile>
+
+        <profile>
+            <id>javadoc</id>
+            <activation>
+                <property>
+                    <name>javadoc</name>
+                </property>
+            </activation>
+            <properties>
+                <maven.javadoc.skip>false</maven.javadoc.skip>
+            </properties>
+        </profile>
+
+        <profile>
+            <id>java8</id>
+            <activation>
+                <jdk>[1.8,)</jdk>
+            </activation>
+            <properties>
+                <additionalparam>-Xdoclint:none</additionalparam>
+            </properties>
+        </profile>
+    </profiles>
+
+    <reporting>
+        <plugins>
+            <plugin>
+                <inherited>true</inherited>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>2.9</version>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <report>index</report>
+                            <report>project-team</report>
+                            <report>license</report>
+                            <report>mailing-list</report>
+                            <report>issue-tracking</report>
+                            <report>scm</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>${javadoc.version}</version>
+                <configuration>
+                    <notimestamp>true</notimestamp>
+                    <additionalparam>-Xdoclint:none</additionalparam>
+                    <detectLinks>false</detectLinks>
+                    <keywords>true</keywords>
+                    <linksource>false</linksource>
+                    <failOnError>false</failOnError>
+                    <source>${maven.compile.sourceLevel}</source>
+                    <verbose>false</verbose>
+                </configuration>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <report>javadoc</report>
+                        </reports>
+                    </reportSet>
+                    <reportSet>
+                        <inherited>false</inherited>
+                        <reports>
+                            <report>aggregate</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-changes-plugin</artifactId>
+                <version>2.12</version>
+                <inherited>false</inherited>
+                <configuration>
+                    <columnNames>Type,Fix Version,Key,Summary,Assignee,Status,Created</columnNames>
+                    <maxEntries>200</maxEntries>
+                    <onlyCurrentVersion>true</onlyCurrentVersion>
+                    <resolutionIds>Fixed</resolutionIds>
+                    <statusIds>Closed,Resolved</statusIds>
+                    <sortColumnNames>Type</sortColumnNames>
+                    <useJql>true</useJql>
+                </configuration>
+                <reportSets>
+                    <reportSet>
+                        <reports>
+                            <report>jira-report</report>
+                        </reports>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <version>${findbugs.version}</version>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </reporting>
 </project>