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

[01/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-110: Add Support for integrating with Spring Environment and Configuration. Feature added. TAMAYA-111: Add Classloader aware ServiceContext.

Repository: incubator-tamaya-sandbox
Updated Branches:
  refs/heads/master [created] e4b68dfb9


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredClass.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredClass.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredClass.java
deleted file mode 100644
index 952f5ed..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredClass.java
+++ /dev/null
@@ -1,124 +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.
- *
- */
-package org.apache.tamaya.integration.cdi;
-
-import java.beans.PropertyChangeEvent;
-import java.math.BigDecimal;
-
-import javax.inject.Singleton;
-
-import org.apache.tamaya.event.ObservesConfigChange;
-import org.apache.tamaya.inject.ConfiguredProperty;
-import org.apache.tamaya.inject.DefaultValue;
-
-/**
- * Class to be loaded from CDI to ensure fields are correctly configured using CDI injection mechanisms.
- */
-@Singleton
-public class ConfiguredClass{
-
-    @ConfiguredProperty
-    private String testProperty;
-
-    @ConfiguredProperty(keys = {"a.b.c.key1","a.b.c.key2","a.b.c.key3"})
-    @DefaultValue("The current \\${JAVA_HOME} env property is ${env:JAVA_HOME}.")
-    String value1;
-
-    @ConfiguredProperty(keys = {"foo","a.b.c.key2"})
-    private String value2;
-
-    @ConfiguredProperty
-    @DefaultValue("N/A")
-    private String runtimeVersion;
-
-    @ConfiguredProperty
-    @DefaultValue("${sys:java.version}")
-    private String javaVersion2;
-
-    @ConfiguredProperty
-    @DefaultValue("5")
-    private Integer int1;
-
-    @ConfiguredProperty
-    private int int2;
-
-    @ConfiguredProperty
-    private boolean booleanT;
-
-    @ConfiguredProperty(keys = "BD")
-    private BigDecimal bigNumber;
-
-    @ConfiguredProperty(keys = "double1")
-    private double doubleValue;
-
-    @ObservesConfigChange
-    public void changeListener1(PropertyChangeEvent configChange){
-        // will be called
-    }
-
-    public String getTestProperty() {
-        return testProperty;
-    }
-
-    public String getValue1() {
-        return value1;
-    }
-
-    public String getValue2() {
-        return value2;
-    }
-
-    public String getRuntimeVersion() {
-        return runtimeVersion;
-    }
-
-    public String getJavaVersion2() {
-        return javaVersion2;
-    }
-
-    public Integer getInt1() {
-        return int1;
-    }
-
-    public int getInt2() {
-        return int2;
-    }
-
-    public boolean isBooleanT() {
-        return booleanT;
-    }
-
-    public BigDecimal getBigNumber() {
-        return bigNumber;
-    }
-
-    public double getDoubleValue() {
-        return doubleValue;
-    }
-
-    @Override
-	public String toString(){
-        return super.toString() + ": testProperty="+testProperty+", value1="+value1+", value2="+value2
-                +", int1="+int1+", int2="+int2+", booleanT="+booleanT+", bigNumber="+bigNumber
-                +", runtimeVersion="+runtimeVersion+", javaVersion2="+javaVersion2;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredTest.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredTest.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredTest.java
deleted file mode 100644
index b0e85be..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/ConfiguredTest.java
+++ /dev/null
@@ -1,85 +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.
- *
- */
-package org.apache.tamaya.integration.cdi;
-
-import org.apache.deltaspike.testcontrol.api.TestControl;
-import org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner;
-import org.hamcrest.MatcherAssert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.spi.CDI;
-import javax.inject.Singleton;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Tests for CDI integration.
- */
-@RunWith(CdiTestRunner.class)
-@TestControl(startScopes = {ApplicationScoped.class, Singleton.class})
-public class ConfiguredTest{
-
-    @Test
-    public void test_Configuration_is_injected_correctly(){
-        ConfiguredClass item = CDI.current().select(ConfiguredClass.class).get();
-        System.out.println("********************************************");
-        System.out.println(item);
-        System.out.println("********************************************");
-
-        double actual = 1234.5678;
-
-        MatcherAssert.assertThat(item.getDoubleValue(), is(actual));
-    }
-
-    @Test
-    public void test_Default_injections_are_accessible(){
-        InjectedClass injectedClass =  CDI.current().select(InjectedClass.class).get();
-        System.out.println("********************************************");
-        System.out.println(injectedClass);
-        System.out.println("********************************************");
-        assertNotNull(injectedClass.builder1);
-        assertNotNull(injectedClass.builder2);
-        assertNotNull(injectedClass.config);
-        assertNotNull(injectedClass.configContext);
-    }
-
-    @Test
-    public void test_Injected_builders_are_notSame(){
-        InjectedClass injectedClass =  CDI.current().select(InjectedClass.class).get();
-        assertTrue(injectedClass.builder1 != injectedClass.builder2);
-    }
-
-    @Test
-    public void test_Injected_configs_are_same(){
-        InjectedClass injectedClass =  CDI.current().select(InjectedClass.class).get();
-        assertTrue(injectedClass.config == injectedClass.config2);
-    }
-
-    @Test
-    public void test_Injected_configContexts_are_same(){
-        InjectedClass injectedClass =  CDI.current().select(InjectedClass.class).get();
-        assertTrue(injectedClass.configContext == injectedClass.configContext2);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/InjectedClass.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/InjectedClass.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/InjectedClass.java
deleted file mode 100644
index 9b7bd23..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/InjectedClass.java
+++ /dev/null
@@ -1,62 +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.
- *
- */
-package org.apache.tamaya.integration.cdi;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/**
- * Class loaded by CDI to test correct injection of Configuration API artifacts.
- */
-@Singleton
-public class InjectedClass {
-
-    @Inject
-    Configuration config;
-
-    @Inject
-    Configuration config2;
-
-    @Inject
-    ConfigurationContext configContext;
-
-    @Inject
-    ConfigurationContext configContext2;
-
-    @Inject
-    ConfigurationContextBuilder builder1;
-
-    @Inject
-    ConfigurationContextBuilder builder2;
-
-    @Override
-    public String toString() {
-        return "InjectedClass{" +
-                "config=" + config +
-                ", configContext=" + configContext +
-                ", builder1=" + builder1 +
-                ", builder2=" + builder2 +
-                '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
deleted file mode 100644
index 1c383b4..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
+++ /dev/null
@@ -1,66 +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.
- *
- */
-package org.apache.tamaya.integration.cdi.cfg;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import javax.enterprise.inject.Vetoed;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by Anatole on 17.09.2015.
- */
-@Vetoed
-class ProvidedPropertySource implements PropertySource{
-
-    final Map<String,String> config = new HashMap<>();
-
-    public ProvidedPropertySource(){
-        config.put("a.b.c.key3", "keys current a.b.c.key3");
-        config.put("a.b.c.key4", "keys current a.b.c.key4");
-        config.put("{meta}source.type:"+getClass().getName(), "PropertySourceProvider");
-    }
-
-    @Override
-    public int getOrdinal() {
-        return 10;
-    }
-
-    @Override
-    public String getName() {
-        return getClass().getName();
-    }
-
-    @Override
-    public String get(String key) {
-        return config.get(key);
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return config;
-    }
-
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestConfigProvider.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestConfigProvider.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestConfigProvider.java
deleted file mode 100644
index 7b89fba..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestConfigProvider.java
+++ /dev/null
@@ -1,45 +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.
- */
-package org.apache.tamaya.integration.cdi.cfg;
-
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import javax.enterprise.context.ApplicationScoped;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Created by Anatole on 29.09.2014.
- */
-@ApplicationScoped
-public class TestConfigProvider implements PropertySourceProvider {
-
-    private List<PropertySource> configs = new ArrayList<>();
-
-    public TestConfigProvider(){
-        configs.add(new ProvidedPropertySource());
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        return configs;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java b/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
deleted file mode 100644
index 1db3d2c..0000000
--- a/integration/cdi/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
+++ /dev/null
@@ -1,78 +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.
- *
- */
-package org.apache.tamaya.integration.cdi.cfg;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import javax.inject.Singleton;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by Anatole on 17.09.2015.
- */
-@Singleton
-public class TestPropertySource implements PropertySource{
-
-    final Map<String,String> config = new HashMap<>();
-
-    public TestPropertySource(){
-        config.put("a.b.c.key1", "keys current a.b.c.key1");
-        config.put("a.b.c.key2", "keys current a.b.c.key2");
-        config.put("a.b.key3", "keys current a.b.key3");
-        config.put("a.b.key4", "keys current a.b.key4");
-        config.put("a.key5", "keys current a.key5");
-        config.put("a.key6", "keys current a.key6");
-        config.put("int1", "123456");
-        config.put("int2", "111222");
-        config.put("testProperty", "testPropertyValue!");
-        config.put("booleanT", "true");
-        config.put("double1", "1234.5678");
-        config.put("BD", "123456789123456789123456789123456789.123456789123456789123456789123456789");
-        config.put("testProperty", "keys current testProperty");
-        config.put("runtimeVersion", "${java.version}");
-        config.put("{meta}source.type:"+getClass().getName(), "PropertySource");
-    }
-
-    @Override
-    public int getOrdinal() {
-        return 10;
-    }
-
-    @Override
-    public String getName() {
-        return getClass().getName();
-    }
-
-    @Override
-    public String get(String key) {
-        return config.get(key);
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return config;
-    }
-
-    @Override
-    public boolean isScannable() {
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/test/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/integration/cdi/src/test/resources/META-INF/beans.xml b/integration/cdi/src/test/resources/META-INF/beans.xml
deleted file mode 100644
index adee378..0000000
--- a/integration/cdi/src/test/resources/META-INF/beans.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
-
-</beans>
-


[41/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-149 Final fixes restabilizing modules after Tomcat is now used.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java b/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
deleted file mode 100644
index 78297d2..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
+++ /dev/null
@@ -1,80 +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.ui.views;
-
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.Label;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.CurrentUser;
-import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewProvider;
-import org.apache.tamaya.ui.components.VerticalSpacedLayout;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import javax.annotation.Priority;
-
-
-public class HomeView extends VerticalSpacedLayout implements View {
-
-    @Priority(0)
-    public static final class Provider implements ViewProvider{
-
-        @Override
-        public ViewLifecycle getLifecycle() {
-            return ViewLifecycle.CREATE;
-        }
-
-        @Override
-        public String getUrlPattern() {
-            return "";
-        }
-
-        @Override
-        public String getDisplayName() {
-            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-                    .getMessage("view.home.name");
-        }
-
-        @Override
-        public View createView(){
-            return new HomeView();
-        }
-    }
-
-    public HomeView() {
-        Label caption = new Label("Welcome, " + CurrentUser.get().getUserID());
-        Label description = new Label(
-                "<b>Apache Tamaya</b> is an API and extendable framework for accessing and managing configuration.<br/> \n" +
-                        "Please check the project's home page <a href='http://tamaya.incubator.apache.org'>http://tamaya.incubator.apache.org</a>.",
-                ContentMode.HTML);
-
-        addComponents(caption, description);
-
-        caption.addStyleName(UIConstants.LABEL_HUGE);
-        description.addStyleName(UIConstants.LABEL_LARGE);
-
-    }
-
-    @Override
-    public void enter(ViewChangeListener.ViewChangeEvent event) {
-
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
deleted file mode 100644
index 049d885..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.tamaya.ui.views.login;
-
-import com.vaadin.event.ShortcutAction;
-import com.vaadin.ui.*;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.User;
-import org.apache.tamaya.ui.event.EventBus;
-import org.apache.tamaya.ui.services.MessageProvider;
-import org.apache.tamaya.ui.services.UserService;
-
-
-public class LoginBox extends VerticalLayout {
-
-    private UserService userService = new UserService() {
-        @Override
-        public User login(String userId, String credentials) {
-            if("admin".equals(userId)){
-                return new User("admin", "Administrator");
-            }
-            return null;
-        }
-    }; // TODO Load
-    private TextField username;
-    private PasswordField password;
-
-    public LoginBox() {
-        setWidth("400px");
-        addStyleName(UIConstants.LOGIN_BOX);
-        setSpacing(true);
-        setMargin(true);
-
-        addCaption();
-        addForm();
-        addButtons();
-    }
-
-    private void addCaption() {
-        Label caption = new Label("Login to system");
-        addComponent(caption);
-
-        caption.addStyleName(UIConstants.LABEL_H1);
-    }
-
-    private void addForm() {
-        FormLayout loginForm = new FormLayout();
-        MessageProvider mp = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
-        username = new TextField(mp.getMessage("default.label.username"));
-        password = new PasswordField(mp.getMessage("default.label.password"));
-        loginForm.addComponents(username, password);
-        addComponent(loginForm);
-        loginForm.setSpacing(true);
-        for(Component component:loginForm){
-            component.setWidth("100%");
-        }
-        username.focus();
-    }
-
-    private void addButtons() {
-        HorizontalLayout buttonsLayout = new HorizontalLayout();
-        Button forgotButton = new Button("Forgot", new Button.ClickListener() {
-            @Override
-            public void buttonClick(Button.ClickEvent clickEvent) {
-                Notification.show("Not implemented", Notification.Type.TRAY_NOTIFICATION);
-            }
-        });
-        Button loginButton = new Button("Login", new Button.ClickListener() {
-            @Override
-            public void buttonClick(Button.ClickEvent clickEvent) {
-                login();
-            }
-        });
-        buttonsLayout.addComponents(forgotButton, loginButton);
-        addComponent(buttonsLayout);
-        buttonsLayout.setSpacing(true);
-        forgotButton.addStyleName(UIConstants.BUTTON_LINK);
-        loginButton.addStyleName(UIConstants.BUTTON_PRIMARY);
-        loginButton.setClickShortcut(ShortcutAction.KeyCode.ENTER);
-        setComponentAlignment(buttonsLayout, Alignment.BOTTOM_RIGHT);
-    }
-
-    private void login() {
-        User user = userService.login(username.getValue(), password.getValue());
-        if(user!=null){
-            EventBus.post(new LoginEvent(user));
-        }else{
-            Notification.show("Login failed.", "Hint: use any non-empty strings", Notification.Type.WARNING_MESSAGE);
-            username.focus();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
deleted file mode 100644
index b6ba2b4..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.apache.tamaya.ui.views.login;
-
-import org.apache.tamaya.ui.User;
-
-public class LoginEvent {
-    private User user;
-
-    public LoginEvent(User user) {
-        this.user = user;
-    }
-
-    public User getUser() {
-        return user;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
deleted file mode 100644
index e1181d1..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.tamaya.ui.views.login;
-
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.VerticalLayout;
-
-public class LoginView extends VerticalLayout {
-
-    public LoginView() {
-        setSizeFull();
-        setDefaultComponentAlignment(Alignment.MIDDLE_CENTER);
-        addComponent(new LoginBox());
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
deleted file mode 100644
index eeb467b..0000000
--- a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
+++ /dev/null
@@ -1,21 +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.ui.views.HomeView$Provider
-org.apache.tamaya.ui.views.ConfigView$Provider
-org.apache.tamaya.ui.views.ComponentView$Provider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
deleted file mode 100644
index 6ce4a9f..0000000
--- a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
+++ /dev/null
@@ -1,19 +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.ui.internal.ConfigurationBasedMessageProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/config/application.yml b/ui/src/main/resources/config/application.yml
deleted file mode 100644
index a22ec36..0000000
--- a/ui/src/main/resources/config/application.yml
+++ /dev/null
@@ -1,28 +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.
-#
-
-server:
-  type: default
-  maxThreads: 1024
-  applicationConnectors:
-      - type: http
-        port: 8090
-  adminConnectors:
-      - type: http
-        port: 8091
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/resources/ui/lang/tamaya.properties
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/ui/lang/tamaya.properties b/ui/src/main/resources/ui/lang/tamaya.properties
deleted file mode 100644
index 16880d4..0000000
--- a/ui/src/main/resources/ui/lang/tamaya.properties
+++ /dev/null
@@ -1,28 +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.
-#
-project.name=Apache Tamaya
-default.label.logout=Log out
-default.label.unknown=<unknown>
-default.label.username=Username
-default.label.password=Password
-default.label.components=Components
-
-view.config.name=Configuration
-view.home.name=Home
-view.components.name=Components

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/test/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/test/resources/config/application.yml b/ui/src/test/resources/config/application.yml
deleted file mode 100644
index 33c353c..0000000
--- a/ui/src/test/resources/config/application.yml
+++ /dev/null
@@ -1,32 +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.
-#
-
-server:
-  type: default
-  maxThreads: 1024
-  applicationConnectors:
-      - type: http
-        port: 8090
-      - type: https
-        port: 8453
-  adminConnectors:
-      - type: http
-        port: 8091
-      - type: https
-        port: 8453
\ No newline at end of file


[33/50] [abbrv] incubator-tamaya-sandbox git commit: Fixed versions and distribution.

Posted by pl...@apache.org.
Fixed versions and distribution.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/c005f288
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/c005f288
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/c005f288

Branch: refs/heads/master
Commit: c005f2889ca6508d8eb35cc8df90bbdfbd6c67a7
Parents: b4586e1
Author: anatole <an...@apache.org>
Authored: Tue Mar 8 17:07:53 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Tue Mar 8 17:07:53 2016 +0100

----------------------------------------------------------------------
 pom.xml                                         |   1 +
 remote/pom.xml                                  |  76 ++++++++++
 .../tamaya/remote/BaseRemotePropertySource.java | 149 +++++++++++++++++++
 3 files changed, 226 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c005f288/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ba43998..543b896 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@ under the License.
         <module>jodatime</module>
         <module>sysprops</module>
         <module>ui</module>
+        <module>remote</module>
     </modules>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c005f288/remote/pom.xml
----------------------------------------------------------------------
diff --git a/remote/pom.xml b/remote/pom.xml
new file mode 100644
index 0000000..e47b2bf
--- /dev/null
+++ b/remote/pom.xml
@@ -0,0 +1,76 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-extensions</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-remote</artifactId>
+    <name>Apache Tamaya Modules - Remote PropertySource</name>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <jdkVersion>1.7</jdkVersion>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>tamaya-json</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>
+                            org.apache.tamaya.remote
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c005f288/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
----------------------------------------------------------------------
diff --git a/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java b/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
new file mode 100644
index 0000000..0fd1c67
--- /dev/null
+++ b/remote/src/main/java/org/apache/tamaya/remote/BaseRemotePropertySource.java
@@ -0,0 +1,149 @@
+/*
+ * 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.remote;
+
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.json.JSONFormat;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Abstract base class for implementing a PropertySource that reads configuration data from a remote resource. It uses
+ * by default the JSON format as defined by the JSON module.
+ */
+public abstract class BaseRemotePropertySource implements PropertySource{
+
+    private static final ConfigurationFormat DEFAULT_FORMAT = new JSONFormat();
+
+    private Map<String,String> properties = new HashMap<>();
+
+    protected BaseRemotePropertySource(){
+        reload();
+    }
+
+    @Override
+    public String getName() {
+        return getClass().getSimpleName();
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    /**
+     * Reloads the remote configuration. If reloads fails to whatever reasons the already loaded configuration will
+     * stay untouched.
+     */
+    public void reload(){
+        ConfigurationFormat format = getConfigurationFormat();
+        for(URL url:getAccessURLs()) {
+            try(InputStream is = url.openStream()) {
+                ConfigurationData data = format.readConfiguration(url.toExternalForm(), is);
+                if(data!=null){
+                    Map<String,String> newProperties = mapConfigurationData(data);
+                    // the configs served by the tamaya server module has a 'data' root section containing the
+                    // config  entries. if not present, we assume an alternate format, which is sued as is...
+                    if(!newProperties.isEmpty()){
+                        this.properties = newProperties;
+                        Logger.getLogger(getClass().getName()).info(
+                                "Reloaded remote config from: " + url + ", entries read: " + this.properties.size());
+                    }
+                }
+            }
+            catch(Exception e){
+                Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Failed to load config from url: " + url, e);
+            }
+        }
+    }
+
+    protected abstract Collection<URL> getAccessURLs();
+
+    protected ConfigurationFormat getConfigurationFormat(){
+        return DEFAULT_FORMAT;
+    }
+
+    protected Map<String,String> mapConfigurationData(ConfigurationData data){
+        Map<String,String> readProperties;
+        if(data!=null){
+            readProperties = data.getCombinedProperties();
+            if(readProperties!=null){
+                Map<String,String> newProperties = new HashMap<>();
+                for(Map.Entry<String,String> en:readProperties.entrySet()){
+                    // filter data entries
+                    newProperties.put(en.getKey(), en.getValue());
+                }
+                // the configs served by the tamaya server module has a 'data' root section containing the
+                // config  entries. if not present, we assume an alternate format, which is sued as is...
+                if(newProperties.isEmpty()){
+                    Logger.getLogger(getClass().getName()).info(
+                            "Loaded remote config from: " + data.getResource() + ", does not have a data section, using as is...");
+                    newProperties = readProperties;
+                }
+                Logger.getLogger(getClass().getName()).info(
+                        "Reloaded remote config from: " + data.getResource() + ", entriea read: " + this.properties.size());
+                return newProperties;
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public boolean isScannable(){
+        return true;
+    }
+
+    @Override
+    public PropertyValue get(String key) {
+        return PropertyValue.of(key,getProperties().get(key),getName());
+    }
+
+    @Override
+    public int getOrdinal(){
+        PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
+        if(configuredOrdinal!=null){
+            try{
+                return Integer.parseInt(configuredOrdinal.getValue());
+            } catch(Exception e){
+                Logger.getLogger(getClass().getName()).log(Level.WARNING,
+                        "Configured Ordinal is not an int number: " + configuredOrdinal, e);
+            }
+        }
+        return getDefaultOrdinal();
+    }
+
+    /**
+     * Returns the  default ordinal used, when no ordinal is set, or the ordinal was not parseable to an int value.
+     * @return the  default ordinal used, by default 0.
+     */
+    public int getDefaultOrdinal(){
+        return 0;
+    }
+
+}


[39/50] [abbrv] incubator-tamaya-sandbox git commit: Fixed UI module, adding modularity. Added initial version for the vents module.

Posted by pl...@apache.org.
Fixed UI module, adding modularity. Added initial version for the vents module.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/043a2556
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/043a2556
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/043a2556

Branch: refs/heads/master
Commit: 043a2556dfab70ebd3f9a2a82fa19943d4347b33
Parents: ae0a9f1
Author: anatole <an...@apache.org>
Authored: Sat Apr 16 08:21:36 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:43 2016 +0200

----------------------------------------------------------------------
 ui/pom.xml                                      |  5 ++
 .../org/apache/tamaya/ui/ApplicationLayout.java | 44 ++++++++++-----
 .../java/org/apache/tamaya/ui/CurrentUser.java  | 18 ++++++
 .../main/java/org/apache/tamaya/ui/Header.java  | 44 ---------------
 ui/src/main/java/org/apache/tamaya/ui/MyUI.java |  2 -
 .../main/java/org/apache/tamaya/ui/NavBar.java  | 28 +++++++++-
 .../java/org/apache/tamaya/ui/UIConstants.java  | 23 ++++++--
 ui/src/main/java/org/apache/tamaya/ui/User.java | 25 ++++++++-
 .../java/org/apache/tamaya/ui/ViewConfig.java   | 20 -------
 .../tamaya/ui/components/LazyProvider.java      | 36 ++++++++++--
 .../tamaya/ui/components/PageTitleUpdater.java  | 33 +++++++++--
 .../ui/components/VerticalSpacedLayout.java     | 18 ++++++
 .../org/apache/tamaya/ui/event/EventBus.java    | 18 ++++++
 .../org/apache/tamaya/ui/event/LogoutEvent.java | 18 ++++++
 .../apache/tamaya/ui/event/NavigationEvent.java | 18 ++++++
 .../apache/tamaya/ui/services/LoginService.java | 12 ----
 .../apache/tamaya/ui/views/ComponentView.java   | 58 ++++++++++++++++++--
 .../org/apache/tamaya/ui/views/ConfigView.java  | 57 +++++++++++++++++--
 .../org/apache/tamaya/ui/views/ErrorView.java   | 19 +++++++
 .../org/apache/tamaya/ui/views/HomeView.java    | 50 ++++++++++++++++-
 .../apache/tamaya/ui/views/login/LoginBox.java  | 14 +++--
 ui/src/main/resources/config/application.yml    | 19 +++++++
 ui/src/test/resources/config/application.yml    | 19 +++++++
 23 files changed, 470 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index f11aa75..3441951 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -89,6 +89,11 @@ under the License.
             <version>${project.version}</version>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!--<dependency>-->
             <!--<groupId>javax.servlet</groupId>-->
             <!--<artifactId>javax.servlet-api</artifactId>-->

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
index 7d57362..c3aeabb 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
@@ -1,15 +1,32 @@
+/*
+ * 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.ui;
 
 import com.vaadin.navigator.Navigator;
-import com.vaadin.navigator.View;
 import com.vaadin.ui.HorizontalLayout;
 import com.vaadin.ui.Panel;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.components.LazyProvider;
 import org.apache.tamaya.ui.components.PageTitleUpdater;
-import org.apache.tamaya.ui.views.ComponentView;
-import org.apache.tamaya.ui.views.ConfigView;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.views.ErrorView;
-import org.apache.tamaya.ui.views.HomeView;
+
 
 public class ApplicationLayout extends HorizontalLayout {
 
@@ -50,32 +67,31 @@ public class ApplicationLayout extends HorizontalLayout {
     }
 
     private void registerViews() {
-        addView(HomeView.class);
-        addView(ConfigView.class);
-        addView(ComponentView.class);
+        for(ViewProvider provider: ServiceContextManager.getServiceContext().getServices(ViewProvider.class)) {
+            addView(provider);
+        }
         navigator.setErrorView(ErrorView.class);
     }
 
     /**
      * Registers av given view to the navigator and adds it to the NavBar
      */
-    private void addView(Class<? extends View> viewClass) {
-        ViewConfig viewConfig = viewClass.getAnnotation(ViewConfig.class);
+    private void addView(ViewProvider provider) {
 
-        switch (viewConfig.createMode()) {
+        switch (provider.getLifecycle()) {
             case CREATE:
-                navigator.addView(viewConfig.uri(), viewClass);
+                navigator.addView(provider.getUrlPattern(), provider.createView());
                 break;
             case LAZY:
-                navigator.addProvider(new LazyProvider(viewConfig.uri(), viewClass));
+                navigator.addProvider(new LazyProvider(provider.getUrlPattern(), provider));
                 break;
             case EAGER:
                 try {
-                    navigator.addView(viewConfig.uri(), viewClass.newInstance());
+                    navigator.addView(provider.getUrlPattern(), provider.createView());
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
         }
-        navBar.addView(viewConfig.uri(), viewConfig.displayName());
+        navBar.addView(provider.getUrlPattern(), provider.getDisplayName());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java b/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
index c894420..8c754e2 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui;
 
 import com.vaadin.server.VaadinSession;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/Header.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/Header.java b/ui/src/main/java/org/apache/tamaya/ui/Header.java
deleted file mode 100644
index 3e92dac..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/Header.java
+++ /dev/null
@@ -1,44 +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.ui;
-
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Link;
-import sun.awt.HorizBagLayout;
-
-import java.io.Serializable;
-
-/**
- * Created by atsticks on 29.03.16.
- */
-public class Header extends HorizontalLayout implements Serializable{
-
-    private Label titleLabel = new Label("Apache Tamaya");
-    private HorizontalLayout buttonBar = new HorizontalLayout();
-    private Label iconLabel = new Label();
-
-    public Header(){
-        buttonBar.addComponents(new Button("About"), new Button("Konfiguration"), new Button("PluginManagement"));
-        addComponents(titleLabel, buttonBar, iconLabel);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/MyUI.java b/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
index 845c400..0dce440 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
@@ -50,9 +50,7 @@ import org.apache.tamaya.ui.views.login.LoginView;
 @Title("Tamaya")
 public class MyUI extends UI {
 
-    private Header header = new Header();
     private Content content = new Content();
-    private Navigator navigator;
 
     @Override
     protected void init(VaadinRequest vaadinRequest) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
index caed4cd..5b3537a 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui;
 
 import com.vaadin.navigator.ViewChangeListener;
@@ -6,9 +24,12 @@ import com.vaadin.shared.ui.label.ContentMode;
 import com.vaadin.ui.Button;
 import com.vaadin.ui.CssLayout;
 import com.vaadin.ui.Label;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.event.EventBus;
 import org.apache.tamaya.ui.event.LogoutEvent;
 import org.apache.tamaya.ui.event.NavigationEvent;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
+import org.apache.tamaya.ui.services.MessageProvider;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -21,8 +42,8 @@ public class NavBar extends CssLayout implements ViewChangeListener {
         setHeight("100%");
         addStyleName(UIConstants.MENU_ROOT);
         addStyleName(UIConstants.NAVBAR);
-
-        Label logo = new Label("<strong>Apache Tamaya</strong>", ContentMode.HTML);
+        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        Label logo = new Label("<strong>"+ messages.getMessage("project.name")+"</strong>", ContentMode.HTML);
         logo.addStyleName(UIConstants.MENU_TITLE);
         addComponent(logo);
 
@@ -30,7 +51,8 @@ public class NavBar extends CssLayout implements ViewChangeListener {
     }
 
     private void addLogoutButton() {
-        Button logout = new Button("Log out", new Button.ClickListener() {
+        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        Button logout = new Button(messages.getMessage("default.label.logout"), new Button.ClickListener() {
             @Override
             public void buttonClick(Button.ClickEvent clickEvent) {
                 EventBus.post(new LogoutEvent());

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java b/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
index 1631e0b..2f75b5c 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui;
 
 import com.vaadin.ui.themes.ValoTheme;
@@ -14,9 +32,4 @@ public class UIConstants extends ValoTheme {
 
 
     public static final String BUTTON_LOGOUT = "logout";
-    public static final String ORDER_LAYOUT = "order-layout";
-    public static final String ORDER_ID = "order-id";
-    public static final String ORDER_TOTAL = "order-total";
-
-    public static final String LAYOUT_VIEW = "layout-view";
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/User.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/User.java b/ui/src/main/java/org/apache/tamaya/ui/User.java
index bf01664..4cb6f5a 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/User.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/User.java
@@ -1,5 +1,27 @@
+/*
+ * 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.ui;
 
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
+import org.apache.tamaya.ui.services.MessageProvider;
+
 import java.util.Date;
 import java.util.Objects;
 
@@ -9,7 +31,8 @@ import java.util.Objects;
 public class User {
 
     private String userID = "-";
-    private String fulLName = "<unknown>";
+    private String fulLName = ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("default.label.unknown");
     private Date logInDate = new Date();
 
     public User(String userID, String fullName){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java b/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
deleted file mode 100644
index 0ab0c66..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.tamaya.ui;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation for easily collecting View meta info.
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ViewConfig {
-
-    enum CreateMode {CREATE, LAZY, EAGER}
-
-    String uri();
-    String displayName();
-    CreateMode createMode() default CreateMode.CREATE;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java b/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
index ca36a21..867b802 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
@@ -1,23 +1,49 @@
+/*
+ * 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.ui.components;
 
-import com.vaadin.navigator.Navigator;
 import com.vaadin.navigator.View;
+import org.apache.tamaya.ui.ViewProvider;
+
+import java.util.Objects;
 
 /**
  * Lazily initializes a view when it's first accessed, then always returns the
  * same instance on subsequent calls.
  */
-public class LazyProvider extends Navigator.ClassBasedViewProvider {
+public class LazyProvider implements com.vaadin.navigator.ViewProvider {
+    private ViewProvider provider;
     private View view;
 
-    public LazyProvider(String viewName, Class<? extends View> viewClass) {
-        super(viewName, viewClass);
+    public LazyProvider(String viewName, ViewProvider provider) {
+        this.provider = Objects.requireNonNull(provider);
+    }
+
+    @Override
+    public String getViewName(String s) {
+        return provider.getDisplayName();
     }
 
     @Override
     public View getView(String viewName) {
         if (view == null) {
-            view = super.getView(viewName);
+            view = provider.createView();
         }
         return view;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
index 37a6e8f..9f95ae7 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
@@ -1,11 +1,33 @@
+/*
+ * 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.ui.components;
 
 import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.server.Page;
-import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
+import org.apache.tamaya.ui.services.MessageProvider;
+
 
 public class PageTitleUpdater implements ViewChangeListener {
+
     @Override
     public boolean beforeViewChange(ViewChangeEvent event) {
         return true;
@@ -13,12 +35,11 @@ public class PageTitleUpdater implements ViewChangeListener {
 
     @Override
     public void afterViewChange(ViewChangeEvent event) {
-
         View view = event.getNewView();
-        ViewConfig viewConfig = view.getClass().getAnnotation(ViewConfig.class);
-
-        if (viewConfig != null) {
-            Page.getCurrent().setTitle(viewConfig.displayName());
+        String displayName = ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                .getMessage("view."+view.getClass().getSimpleName()+".name");
+        if (displayName != null) {
+            Page.getCurrent().setTitle(displayName);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java b/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
index 52fe525..94fc980 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui.components;
 
 import com.vaadin.ui.VerticalLayout;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java b/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
index d269dc3..ffa9ba4 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui.event;
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
index 3168a76..ec00a42 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui.event;
 
 public class LogoutEvent {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
index 0ec1ec5..9d3b744 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui.event;
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java b/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
deleted file mode 100644
index ceb4cc0..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.apache.tamaya.ui.services;
-
-import org.apache.tamaya.ui.User;
-
-/**
- * Created by atsticks on 29.03.16.
- */
-public interface LoginService {
-
-    User login(String userId, String credentials);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
index abfdb11..19211f1 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
@@ -1,26 +1,74 @@
+/*
+ * 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.ui.views;
 
 import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.*;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.*;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.ViewProvider;
 import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
 
+import javax.annotation.Priority;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 
 
-@ViewConfig(uri = "/components", displayName = "Components")
 public class ComponentView extends VerticalSpacedLayout implements View {
 
-    private Tree configTree = new Tree("Components");
+
+    @Priority(20)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.CREATE;
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/components";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.components.name");
+        }
+
+        @Override
+        public View createView(){
+            return new ComponentView();
+        }
+    }
+
+
+    private Tree configTree = new Tree(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("default.label.components"));
 
 
     public ComponentView() {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
index c3828f9..79e3389 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
@@ -1,21 +1,70 @@
+/*
+ * 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.ui.views;
 
 import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.*;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
 import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.ui.CurrentUser;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.ViewProvider;
 import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
 
+import javax.annotation.Priority;
 import java.util.Map;
 
 
-@ViewConfig(uri = "/config", displayName = "Configuration")
 public class ConfigView extends VerticalSpacedLayout implements View {
 
+    @Priority(10)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.CREATE;
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/config";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.config.name");
+        }
+
+        @Override
+        public View createView(){
+            return new ConfigView();
+        }
+    }
+
     private TextField keyFilter = new TextField("Key filter");
     private TextField valueFilter = new TextField("Value filter");
     private Tree tree = new Tree("Current Configuration");

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
index ba16bf2..ef3fa2e 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.ui.views;
 
 import com.vaadin.navigator.View;
@@ -8,6 +26,7 @@ import com.vaadin.ui.VerticalLayout;
 import org.apache.tamaya.ui.UIConstants;
 
 public class ErrorView extends VerticalLayout implements View {
+
     @Override
     public void enter(ViewChangeListener.ViewChangeEvent event) {
         setSizeFull();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java b/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
index c656389..78297d2 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
@@ -1,18 +1,64 @@
+/*
+ * 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.ui.views;
 
 import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.shared.ui.label.ContentMode;
 import com.vaadin.ui.Label;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.CurrentUser;
 import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.ViewProvider;
 import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
 
 
-@ViewConfig(uri = "", displayName = "Home")
 public class HomeView extends VerticalSpacedLayout implements View {
 
+    @Priority(0)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.CREATE;
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.home.name");
+        }
+
+        @Override
+        public View createView(){
+            return new HomeView();
+        }
+    }
+
     public HomeView() {
         Label caption = new Label("Welcome, " + CurrentUser.get().getUserID());
         Label description = new Label(

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
index 83d6b20..8bdcbee 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
@@ -2,15 +2,18 @@ package org.apache.tamaya.ui.views.login;
 
 import com.vaadin.event.ShortcutAction;
 import com.vaadin.ui.*;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.UIConstants;
 import org.apache.tamaya.ui.User;
 import org.apache.tamaya.ui.event.EventBus;
-import org.apache.tamaya.ui.services.LoginService;
+import org.apache.tamaya.ui.services.MessageProvider;
+import org.apache.tamaya.ui.services.UserService;
 
 
 public class LoginBox extends VerticalLayout {
 
-    private LoginService loginService = new LoginService() {
+    private UserService userService = new UserService() {
         @Override
         public User login(String userId, String credentials) {
             if("admin".equals(userId)){
@@ -42,8 +45,9 @@ public class LoginBox extends VerticalLayout {
 
     private void addForm() {
         FormLayout loginForm = new FormLayout();
-        username = new TextField("Username");
-        password = new PasswordField("Password");
+        MessageProvider mp = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        username = new TextField(mp.getMessage("default.label.username"));
+        password = new PasswordField(mp.getMessage("default.label.password"));
         loginForm.addComponents(username, password);
         addComponent(loginForm);
         loginForm.setSpacing(true);
@@ -77,7 +81,7 @@ public class LoginBox extends VerticalLayout {
     }
 
     private void login() {
-        User user = loginService.login(username.getValue(), password.getValue());
+        User user = userService.login(username.getValue(), password.getValue());
         if(user!=null){
             EventBus.post(new LoginEvent(user));
         }else{

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/main/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/config/application.yml b/ui/src/main/resources/config/application.yml
index a0a6fad..a22ec36 100644
--- a/ui/src/main/resources/config/application.yml
+++ b/ui/src/main/resources/config/application.yml
@@ -1,3 +1,22 @@
+#
+# 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.
+#
+
 server:
   type: default
   maxThreads: 1024

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/043a2556/ui/src/test/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/test/resources/config/application.yml b/ui/src/test/resources/config/application.yml
index 9ec8d5b..33c353c 100644
--- a/ui/src/test/resources/config/application.yml
+++ b/ui/src/test/resources/config/application.yml
@@ -1,3 +1,22 @@
+#
+# 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.
+#
+
 server:
   type: default
   maxThreads: 1024



[48/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-145: Added logic for dynamic ordering of PropertySources.

Posted by pl...@apache.org.
TAMAYA-145: Added logic for dynamic ordering of PropertySources.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/97b5f438
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/97b5f438
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/97b5f438

Branch: refs/heads/master
Commit: 97b5f438249f740b443c6b3cf96f5bd7dff6cb88
Parents: 0b33f92
Author: anatole <an...@apache.org>
Authored: Wed May 11 04:20:26 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Wed May 11 04:20:26 2016 +0200

----------------------------------------------------------------------
 .../tamaya/dsl/WrappedPropertySource.java       | 100 +++++++++++++++++++
 .../DSLLoadingConfigurationProviderSpi.java     |  82 +++++++++++++++
 .../NamedDSLPropertySourceProvider.java         |  53 ++++++++++
 .../ResourceDSLPropertySourceProvider.java      |  82 +++++++++++++++
 ...g.apache.tamaya.spi.ConfigurationProviderSpi |  19 ++++
 ....tamaya.staged.spi.DSLPropertySourceProvider |  20 ++++
 6 files changed, 356 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/97b5f438/metamodels/staged/src/main/java/org/apache/tamaya/dsl/WrappedPropertySource.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/WrappedPropertySource.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/WrappedPropertySource.java
new file mode 100644
index 0000000..15e6089
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/WrappedPropertySource.java
@@ -0,0 +1,100 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Wrapped property source that allows dynamically reassigning the property source's
+ * ordinal value. This is needed for reordering the property sources to
+ * match the DSL configured ordering.
+ */
+final class WrappedPropertySource implements PropertySource {
+
+    private Integer ordinalAssigned;
+    private PropertySource wrapped;
+
+    private WrappedPropertySource(PropertySource wrapped){
+        this.wrapped = Objects.requireNonNull(wrapped);
+    }
+
+    /**
+     * Wraps a given property source.
+     * @param propertySource the property source to be wrapped.
+     * @return a wrapped property source.
+     */
+    public static WrappedPropertySource of(PropertySource propertySource){
+        if(propertySource instanceof WrappedPropertySource){
+            return (WrappedPropertySource)propertySource;
+        }
+        return new WrappedPropertySource(propertySource);
+    }
+
+    @Override
+    public int getOrdinal() {
+        return ordinalAssigned!=null?ordinalAssigned.intValue():wrapped.getOrdinal();
+    }
+
+    /**
+     * Applies the given ordinal to the instance.
+     * @param ordinal the new ordinal.
+     */
+    public void setOrdinal(int ordinal){
+        this.ordinalAssigned = ordinal;
+    }
+
+    /**
+     * Resetting the ordinal to the one of the wrapped property source.
+     */
+    public void resetOrdinal(){
+        this.ordinalAssigned = null;
+    }
+
+    @Override
+    public String getName() {
+        return wrapped.getName();
+    }
+
+    @Override
+    public PropertyValue get(String key) {
+        return wrapped.get(key);
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return wrapped.getProperties();
+    }
+
+    @Override
+    public boolean isScannable() {
+        return wrapped.isScannable();
+    }
+
+    @Override
+    public String toString() {
+        return "WrappedPropertySource{" +
+                "ordinalAssigned=" + ordinalAssigned +
+                ", wrapped=" + wrapped +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/97b5f438/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/DSLLoadingConfigurationProviderSpi.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/DSLLoadingConfigurationProviderSpi.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/DSLLoadingConfigurationProviderSpi.java
new file mode 100644
index 0000000..8538609
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/DSLLoadingConfigurationProviderSpi.java
@@ -0,0 +1,82 @@
+/*
+ * 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.dsl.internal;
+
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.dsl.TamayaConfigurator;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spi.ConfigurationProviderSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.spisupport.DefaultConfigurationContext;
+
+import javax.annotation.Priority;
+
+/**
+ * ConfigurationContext that uses {@link TamayaConfigurator} to configure the
+ * Tamaya runtime context.
+ */
+@Priority(10)
+public class DSLLoadingConfigurationProviderSpi implements ConfigurationProviderSpi{
+
+    private boolean configured;
+
+    private ConfigurationContext context = new DefaultConfigurationContext();
+    private Configuration config = new DefaultConfiguration(context);
+
+
+    @Override
+    public ConfigurationContextBuilder getConfigurationContextBuilder() {
+        return ServiceContextManager.getServiceContext().getService(ConfigurationContextBuilder.class);
+    }
+
+    @Override
+    public void setConfigurationContext(ConfigurationContext context){
+        // TODO think on a SPI or move event part into API...
+        this.config = new DefaultConfiguration(context);
+        this.context = context;
+    }
+
+    @Override
+    public boolean isConfigurationContextSettable() {
+        return true;
+    }
+
+    @Override
+    public Configuration getConfiguration() {
+        checkInitialized();
+        return config;
+    }
+
+    @Override
+    public ConfigurationContext getConfigurationContext() {
+        checkInitialized();
+        return context;
+    }
+
+    private void checkInitialized() {
+        if(!configured){
+            synchronized (context) {
+                TamayaConfigurator.getInstance().configure();
+                configured = true;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/97b5f438/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/NamedDSLPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/NamedDSLPropertySourceProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/NamedDSLPropertySourceProvider.java
new file mode 100644
index 0000000..0bc71da
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/NamedDSLPropertySourceProvider.java
@@ -0,0 +1,53 @@
+/*
+ * 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.dsl.internal;
+
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.staged.spi.DSLPropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/**
+ * DSL provider implementation that allows to use registered {@link PropertySource} instances
+ * by matching {@link PropertySource#getName()} with the configured value and overriding the
+ * {@link PropertySource#getOrdinal()} method.
+ */
+public class NamedDSLPropertySourceProvider implements DSLPropertySourceProvider{
+
+    private static final Logger LOG = Logger.getLogger(NamedDSLPropertySourceProvider.class.getName());
+
+    @Override
+    public List<PropertySource> resolve(String sourceExpression, Map<String, PropertySource> defaultPropertySources) {
+        List<PropertySource> result = new ArrayList<>();
+        PropertySource ps = defaultPropertySources.get(sourceExpression);
+        if(ps==null){
+            LOG.warning("No such property source provider found: " + sourceExpression);
+        }
+        result.add(ps);
+        return result;
+    }
+
+    @Override
+    public String getKey() {
+        return "named:";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/97b5f438/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/ResourceDSLPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/ResourceDSLPropertySourceProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/ResourceDSLPropertySourceProvider.java
new file mode 100644
index 0000000..394562d
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/internal/ResourceDSLPropertySourceProvider.java
@@ -0,0 +1,82 @@
+/*
+ * 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.dsl.internal;
+
+import org.apache.tamaya.dsl.DSLFormatManager;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spisupport.MapPropertySource;
+import org.apache.tamaya.staged.spi.DSLPropertySourceProvider;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * DSL provider implementation that allows to use registered {@link PropertySource} instances
+ * by matching {@link PropertySource#getName()} with the configured value and overriding the
+ * {@link PropertySource#getOrdinal()} method.
+ */
+public class ResourceDSLPropertySourceProvider implements DSLPropertySourceProvider{
+
+    private static final Logger LOG = Logger.getLogger(ResourceDSLPropertySourceProvider.class.getName());
+
+    @Override
+    public List<PropertySource> resolve(String sourceExpression, Map<String, PropertySource> defaultPropertySources) {
+        List<PropertySource> result = new ArrayList<>();
+        List<URL> resources = new ArrayList<>();
+        if(sourceExpression.contains("SUFFIX")) {
+            for (String suffix : DSLFormatManager.getInstance().getSuffixes()) {
+                Collection<URL> locations = ConfigResources.getResourceResolver().getResources(getClass().getClassLoader(),
+                        sourceExpression.replace("SUFFIX", suffix));
+                loadPropertySources(locations, result);
+            }
+        }else {
+            Collection<URL> locations = ConfigResources.getResourceResolver().getResources(getClass().getClassLoader(),
+                    sourceExpression);
+            loadPropertySources(locations, result);
+        }
+        return result;
+    }
+
+    private void loadPropertySources(Collection<URL> locations, List<PropertySource> result) {
+        for(URL url:locations){
+            for(ConfigurationFormat format: DSLFormatManager.getInstance().getFormats()) {
+                try(InputStream is = url.openStream()){
+                    ConfigurationData data = format.readConfiguration(url.toString(),is);
+                    result.add(new MapPropertySource(url.toString(), data.getCombinedProperties()));
+                }catch(Exception e){
+                    LOG.log(Level.FINEST, "Format failed: " + format.getName() + " for " + url, e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public String getKey() {
+        return "resource:";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/97b5f438/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
new file mode 100644
index 0000000..8ef0643
--- /dev/null
+++ b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.ConfigurationProviderSpi
@@ -0,0 +1,19 @@
+#
+# 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.dsl.internal.DSLLoadingConfigurationProviderSpi
\ No newline at end of file

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


[32/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-87 Implemeted support for org.joda.time.DateTimeZone.

Posted by pl...@apache.org.
TAMAYA-87 Implemeted support for org.joda.time.DateTimeZone.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/b4586e1d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/b4586e1d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/b4586e1d

Branch: refs/heads/master
Commit: b4586e1db25d8ddd5f0f725c3690c6ff29496ead
Parents: 1b70d6a
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sun Mar 6 23:24:01 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sun Mar 6 23:24:01 2016 +0100

----------------------------------------------------------------------
 .../tamaya/jodatime/DateTimeZoneConverter.java  | 22 +++++++++++++++++---
 .../jodatime/DateTimeZoneConverterTest.java     | 20 ++++++++++++++----
 2 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/b4586e1d/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
index bf18393..198a345 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
@@ -26,14 +26,25 @@ import java.util.regex.Pattern;
 
 import static java.util.Objects.requireNonNull;
 
+/**
+ * Converter, converting from {@code String} to Joda-Time's
+ * {@code DateTimeZone}.
+ *
+ * This converter supports the conversion from a numerich time zone
+ * information in the format {@code [+-]hh:mm} as well as from
+ * all time zone ids supported by Joda Time.
+ *
+ * @see DateTimeZone
+ * @see DateTimeZone#getAvailableIDs()
+ */
 public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> {
-    private static final Pattern IS_INTEGER_VALUE = Pattern.compile("(\\+|-)?\\d+");
+    private static final String PATTERN_REGEX = "(\\+|-)?\\d+";
+    private static final Pattern IS_INTEGER_VALUE = Pattern.compile(PATTERN_REGEX);
 
     @Override
     public DateTimeZone convert(String value, ConversionContext context) {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
-
         String trimmed = requireNonNull(value).trim();
+        addSupportedFormats(context);
 
         DateTimeZone result = null;
 
@@ -52,6 +63,11 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> {
         return result;
     }
 
+    private void addSupportedFormats(ConversionContext context) {
+        context.addSupportedFormats(DateTimeZoneConverter.class, "Time zone in the form [+-]hh:mm via the regex " + PATTERN_REGEX);
+        context.addSupportedFormats(DateTimeZoneConverter.class, "All time zone ids supported by Joda Time");
+    }
+
     private boolean isSingleIntegerValue(String value) {
         boolean match = IS_INTEGER_VALUE.matcher(value).matches();
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/b4586e1d/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
index 6620044..babbe06 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.ConversionContext.Builder;
 import org.joda.time.DateTimeZone;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -28,11 +30,13 @@ import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
 
 public class DateTimeZoneConverterTest {
     private DateTimeZoneConverter converter = new DateTimeZoneConverter();
 
-    @Ignore
     @Test
     public void canConvertDateTimeZoneInformation() {
         Object[][] inputResultPairs = {
@@ -63,7 +67,6 @@ public class DateTimeZoneConverterTest {
         }
     }
 
-    @Ignore
     @Test
     public void invalidInputValuesResultInReturningNull() {
         String[] inputValues = {
@@ -83,10 +86,19 @@ public class DateTimeZoneConverterTest {
         }
     }
 
-    @Ignore
     @Test
     public void allSupportedFormatsAreAddedToTheConversionContext() {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+        String firstFormat = "Time zone in the form [+-]hh:mm via the regex (\\+|-)?\\d+ (DateTimeZoneConverter)";
+        String secondFormat = "All time zone ids supported by Joda Time (DateTimeZoneConverter)";
+
+        ConversionContext context = new Builder(TypeLiteral.of(DateTimeZone.class)).build();
+
+        DateTimeZone result = converter.convert("+01:00", context);
+
+        assertThat(result, notNullValue());
+        assertThat(context.getSupportedFormats(), hasSize(2));
+        assertThat(context.getSupportedFormats(), hasItem(firstFormat));
+        assertThat(context.getSupportedFormats(), hasItem(secondFormat));
     }
 
 }


[14/50] [abbrv] incubator-tamaya-sandbox git commit: Moved mutable config module to sandbox.

Posted by pl...@apache.org.
Moved mutable config module to sandbox.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/a4799717
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/a4799717
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/a4799717

Branch: refs/heads/master
Commit: a4799717e6146dc0022dbae61c0bc05977a80f4f
Parents: 90f544d
Author: Anatole Tresch <an...@apache.org>
Authored: Wed Oct 28 02:12:13 2015 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Wed Oct 28 02:12:13 2015 +0100

----------------------------------------------------------------------
 mutable-config/pom.xml                          |  81 +++++++++++
 .../tamaya/mutableconfig/ChangeSummary.java     | 105 ++++++++++++++
 .../mutableconfig/ConfigChangeProvider.java     |  50 +++++++
 .../mutableconfig/ConfigChangeRequest.java      | 136 +++++++++++++++++++
 .../spi/ConfigurationChangeProviderSpi.java     |  37 +++++
 pom.xml                                         |   1 +
 6 files changed, 410 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/mutable-config/pom.xml
----------------------------------------------------------------------
diff --git a/mutable-config/pom.xml b/mutable-config/pom.xml
new file mode 100644
index 0000000..c20a60a
--- /dev/null
+++ b/mutable-config/pom.xml
@@ -0,0 +1,81 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-extensions</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-mutable-config</artifactId>
+    <name>Apache Tamaya Mutable Configuration Support</name>
+    <description>This module provides abstraction, if your scenario needs to actively change configuration entries
+        and write changes back to some property sources, files etc.</description>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <jdkVersion>1.7</jdkVersion>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>
+                            org.apache.tamaya.mutableconfig
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
new file mode 100644
index 0000000..63d084c
--- /dev/null
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
@@ -0,0 +1,105 @@
+/*
+ * 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.mutableconfig;
+
+import org.apache.tamaya.events.delta.ConfigurationChange;
+import org.apache.tamaya.events.delta.PropertySourceChange;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * Summaray class of a configuration change operation.
+ * This class is immutable, read-only and thread-safe.
+ */
+public final class ChangeSummary implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    private String changeId;
+    private ConfigurationChange configChange;
+    private List<PropertySourceChange> sourceChanges = new ArrayList<>();
+    private long commitTS;
+
+    private ChangeSummary(Builder builder){
+        this.changeId = builder.changeId;
+        this.commitTS = builder.commitTS;
+        this.configChange = Objects.requireNonNull(builder.configChange);
+        this.sourceChanges.addAll(builder.sourceChanges);
+    }
+
+    public String getChangeId(){
+        return changeId;
+    }
+
+    public long getTimestampMillis(){
+        return commitTS;
+    }
+
+    public ConfigurationChange getConfigurationChange(){
+        return configChange;
+    }
+
+    public Collection<PropertySourceChange> getPropertySourceChanges(){
+        return Collections.unmodifiableList(this.sourceChanges);
+    }
+
+
+
+
+
+    public static final class Builder {
+
+        private String changeId;
+        private ConfigurationChange configChange;
+        private List<PropertySourceChange> sourceChanges = new ArrayList<>();
+        private long commitTS = System.currentTimeMillis();
+
+        public Builder(){
+            this(UUID.randomUUID().toString());
+        }
+
+        public Builder(String changeId){
+            this.changeId = Objects.requireNonNull(changeId);
+        }
+
+        public Builder setConfigChange(ConfigurationChange configChange){
+            this.configChange = configChange;
+            return this;
+        }
+
+        public Builder addPropertySourceChange(PropertySourceChange propertyChange){
+            this.sourceChanges.add(propertyChange);
+            return this;
+        }
+
+        public Builder setTimestamp(long timestamp){
+            this.commitTS = timestamp;
+            return this;
+        }
+
+        public ChangeSummary build(){
+            return new ChangeSummary(this);
+        }
+
+
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
new file mode 100644
index 0000000..f8842ea
--- /dev/null
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
@@ -0,0 +1,50 @@
+/*
+ * 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.mutableconfig;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.mutableconfig.spi.ConfigurationChangeProviderSpi;
+import org.apache.tamaya.spi.ServiceContextManager;
+
+/**
+ * Accessor for creating {@link ConfigChangeRequest} instances to change and commite configuration.
+ */
+public final class ConfigChangeProvider {
+
+    /**
+     * Creates a new change request for the given Configuration.
+     * @param config the configuration.
+     * @return a new ChangeRequest
+     * @throws UnsupportedOperationException if no change providers are registered.
+     */
+    public static ConfigChangeRequest createChangeRequest(Configuration config){
+        return ServiceContextManager.getServiceContext().getService(ConfigurationChangeProviderSpi.class)
+                .createChangeRequest(config);
+    }
+
+    /**
+     * Creates a new change request for the current Configuration.
+     * @return a new ChangeRequest
+     */
+    public static ConfigChangeRequest createChangeRequest(){
+        return createChangeRequest(ConfigurationProvider.getConfiguration());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
new file mode 100644
index 0000000..6d393cf
--- /dev/null
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.mutableconfig;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.Configuration;
+
+import java.util.Collection;
+import java.util.Map;
+
+
+/**
+ * This interface extends the Configuration interface hereby adding methods to change configuration entries.
+ * Hereby not all configuration entries are necessarily mutable, since some entries may be read from non
+ * mutable areas of configuration. Of course, it is always possible to add a mutable shadow layer on top of all
+ * configuration to enable whatever changes applied. The exact management and storage persistence algorithm should be
+ * transparent.<br/>
+ * As a consequence clients should first check, using the corresponding methods, if entries are to edited or removed
+ * actually are eligible for change/creation or removal.
+ */
+public interface ConfigChangeRequest{
+
+    /**
+     * Returns the configuration onto which the change should be applied.
+     * @return the corresponding configuration, not null.
+     */
+    Configuration getConfiguration();
+
+    /**
+     * Checks if a configuration key is writable (or it can be added).
+     *
+     * @param keyExpression the key to be cheched for write access (including creation), not null. Here this could also
+     *                      be a regulat expression, such "as a.b.c.*".
+     */
+    boolean isWritable(String keyExpression);
+
+    /**
+     * Checks if a configuration key is removable. This also implies that it is writable, but there might be writable
+     * keys that cannot be removed.
+     *
+     * @param keyExpression the keyExpression the key to be cheched for write access (including creation), not null. Here this could also
+     *                      be a regulat expression, such "as a.b.c.*".
+     */
+    boolean isRemovable(String keyExpression);
+
+    /**
+     * Sets a property.
+     *
+     * @param key the property's key, not null.
+     * @param value the property's value, not null.
+     * @return the former property value, or null.
+     * @throws ConfigException if the key/value cannot be added.
+     */
+    String put(String key, String value);
+
+    /**
+     * Puts all given configuration entries. This method should check that all given properties are
+     * basically removable, as defined by #isWritable. If any of the passed keys is not writable during this initial
+     * check, the operation should not perform any configuration changes and throw a {@link ConfigException}. If errors
+     * occur afterwards, when the properties are effectively written back to the backends, the errors should be
+     * collected and returned as part of the ConfigException payload. Nevertheless the operation should in that case
+     * remove all entries as far as possible and abort the writing operation.
+     *
+     * @param properties the properties tobe written, not null.
+     * @throws ConfigException if any of the given properties could not be written.
+     */
+    void putAll(Map<String, String> properties);
+
+    /**
+     * Removes a configuration entry.
+     *
+     * @param key the property's key, not null.
+     * @throws ConfigException if the given cannot be removed.
+     * @return the property's keys.
+     */
+    void remove(String key);
+
+    /**
+     * Removes all given configuration entries. This method should check that all given properties are
+     * basically removable, as defined by #isRemovable. If any of the passed keys is not removable during this initial
+     * check, the operation should not perform any configuration changes and throw a {@link ConfigException}. If errors
+     * occur afterwards, when the properties are effectively written back to the backends, the errors should be
+     * collected and returned as part of the ConfigException payload. Nevertheless the operation should in that case
+     * remove all entries as far as possible and abort the writing operation.
+     *
+     * @param keys the property's keys to be removed, not null.
+     * @throws ConfigException if any of the given keys could not be removed.
+     */
+    void removeAll(Collection<String> keys);
+
+    /**
+     * Resets all changes, leaving the request still open for further operations.
+     */
+    void reset();
+
+    /**
+     * Closes the request, sby default any uncommitted changes are committed.
+     */
+    void commit();
+
+    /**
+     * Closes the request,
+     * @param saveChanges flag to control if  any uncommitted changes ahould be written (default: yes).
+     */
+    void commit(boolean saveChanges);
+
+    /**
+     * Operation to check, if the current request is closed. Closed requests are read-only and can not be used
+     * for preparing/submitting any configuration changes.
+     * @return true, if this instance is closed.
+     */
+    boolean isCommitted();
+
+    /**
+     * Access the summary of the changes applied
+     * @return
+     */
+    ChangeSummary getChangeSummary();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
new file mode 100644
index 0000000..e378c0d
--- /dev/null
+++ b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
@@ -0,0 +1,37 @@
+/*
+ * 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.mutableconfig.spi;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
+
+/**
+ * Provider SPI for the {@link org.apache.tamaya.mutableconfig.ConfigChangeProvider}.
+ */
+public interface ConfigurationChangeProviderSpi {
+
+   /**
+    * Creates a new change request for the given Configuration.
+    * @param config the configuration.
+    * @return a new ChangeRequest
+    * @throws UnsupportedOperationException if no change providers are registered.
+    */
+    ConfigChangeRequest createChangeRequest(Configuration config);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a4799717/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4f8c9c8..8168c47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,7 @@ under the License.
         <module>sysprops</module>
         <module>environment</module>
         <module>collections</module>
+        <module>mutable-config</module>
         <module>ui</module>
     </modules>
 


[13/50] [abbrv] incubator-tamaya-sandbox git commit: Added initial code for a JSF based UI. Added final declaration.

Posted by pl...@apache.org.
Added initial code for a JSF based UI.
Added final declaration.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/90f544d5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/90f544d5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/90f544d5

Branch: refs/heads/master
Commit: 90f544d59b855adfaa84667f78d2451b033b3e11
Parents: 390c22a
Author: anatole <an...@apache.org>
Authored: Fri Oct 16 23:43:58 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Fri Oct 16 23:43:58 2015 +0200

----------------------------------------------------------------------
 pom.xml                          |   1 +
 ui/jsf/pom.xml                   | 157 ++++++++++++++++++++++++++++++++++
 ui/jsf/src/main/webapp/index.jsf |  15 ++++
 ui/pom.xml                       |  38 ++++++++
 4 files changed, 211 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/90f544d5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 93ac8e8..4f8c9c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,7 @@ under the License.
         <module>sysprops</module>
         <module>environment</module>
         <module>collections</module>
+        <module>ui</module>
     </modules>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/90f544d5/ui/jsf/pom.xml
----------------------------------------------------------------------
diff --git a/ui/jsf/pom.xml b/ui/jsf/pom.xml
new file mode 100644
index 0000000..1d36834
--- /dev/null
+++ b/ui/jsf/pom.xml
@@ -0,0 +1,157 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-ui</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>tamaya-ui-jsf</artifactId>
+    <name>Apache Tamaya Modules UI - JSF</name>
+    <packaging>war</packaging>
+
+    <properties>
+        <jsf.version>4.2.1.RELEASE</jsf.version>
+        <primefaces.version>1.2.6.RELEASE</primefaces.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-agent</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>
+                            org.apache.tamaya.ui.jsf
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.primefaces</groupId>
+            <artifactId>primefaces</artifactId>
+            <version>5.2</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-library</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-injection</artifactId>
+            <version>0.2-incubating-SNAPSHOT</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet.jsp</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>2.1</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>5.0.1.Final</version>
+        </dependency>
+
+        <!-- File Upload -->
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.3</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.2</version>
+        </dependency>
+
+        <!-- Themes -->
+        <dependency>
+            <groupId>org.primefaces.themes</groupId>
+            <artifactId>all-themes</artifactId>
+            <version>1.0.10</version>
+        </dependency>
+
+        <!-- GraphicImage -->
+        <dependency>
+            <groupId>net.sourceforge.barbecue</groupId>
+            <artifactId>barbecue</artifactId>
+            <version>1.5-beta1</version>
+        </dependency>
+        <dependency>
+            <groupId>jfree</groupId>
+            <artifactId>jfreechart</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/90f544d5/ui/jsf/src/main/webapp/index.jsf
----------------------------------------------------------------------
diff --git a/ui/jsf/src/main/webapp/index.jsf b/ui/jsf/src/main/webapp/index.jsf
new file mode 100644
index 0000000..28018ae
--- /dev/null
+++ b/ui/jsf/src/main/webapp/index.jsf
@@ -0,0 +1,15 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:p="http://primefaces.org/mobile">
+
+<h:head>
+
+</h:head>
+
+<h:body>
+
+    <p:spinner />
+
+</h:body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/90f544d5/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
new file mode 100644
index 0000000..bb524f4
--- /dev/null
+++ b/ui/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-integration-sandbox</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+    </parent>
+
+    <packaging>pom</packaging>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>tamaya-ui</artifactId>
+
+    <modules>
+        <module>jsf</module>
+    </modules>
+
+</project>
\ No newline at end of file


[26/50] [abbrv] incubator-tamaya-sandbox git commit: Simplified implementation, defined final parameter naming, synched with documentation.

Posted by pl...@apache.org.
Simplified implementation, defined final parameter naming, synched with documentation.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/715293d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/715293d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/715293d4

Branch: refs/heads/master
Commit: 715293d4a075edc3d3aeca04604dcf6866866196
Parents: e94ac73
Author: anatole <an...@apache.org>
Authored: Wed Feb 17 22:13:46 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Feb 17 22:13:46 2016 +0100

----------------------------------------------------------------------
 .../internal/AdaptiveCombinationPolicy.java     | 133 ++++++++++---------
 .../internal/ArrayListConverter.java            |   5 +-
 .../internal/ConcurrentHashMapConverter.java    |  32 +----
 .../collections/internal/HashMapConverter.java  |  49 ++-----
 .../collections/internal/HashSetConverter.java  |  29 ++--
 .../collections/internal/ItemTokenizer.java     |   5 +-
 .../internal/LinkedListConverter.java           |  30 ++---
 .../collections/internal/TreeMapConverter.java  |  18 ++-
 .../collections/internal/TreeSetConverter.java  |  30 ++---
 .../collections/CollectionAdvancedTests.java    |  21 +++
 .../META-INF/javaconfiguration.properties       |   6 +-
 11 files changed, 161 insertions(+), 197 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index ac5af36..3234e37 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -33,13 +33,45 @@ import java.util.logging.Logger;
 
 /**
  * PropertyValueCombinationPolicy that allows to configure a PropertyValueCombinationPolicy for each key
- * individually, by adding a configured entry of the form {@code key{combinationPolicy}=fqPolicyClassName}.
+ * individually, by adding a configured entry of the form
+ * {@code _key.combination-policy=collect|override|fqPolicyClassName}.
  */
 @Priority(100)
 public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy {
-
+    /** Logger. */
     private static final Logger LOG = Logger.getLogger(AdaptiveCombinationPolicy.class.getName());
 
+    /**
+     * Collecting combination policy using (optional) {@code item-separator} parameter for determining the sparator
+     * to combine multiple config entries found.
+     */
+    private static final PropertyValueCombinationPolicy COLLECTING_POLICY = new PropertyValueCombinationPolicy(){
+        @Override
+        public Map<String, String> collect(Map<String, String> currentValue, String key, PropertySource propertySource) {
+            // check for default collection combination policies for lists, sets, maps etc.
+            final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".item-separator", ",");
+            PropertyValue newValue = propertySource.get(key);
+            if(newValue!=null){
+                Map<String,String> newMapValue = new HashMap<>();
+                if(currentValue!=null){
+                    newMapValue.putAll(currentValue);
+                }
+                String oldVal = newMapValue.get(key);
+                newMapValue.putAll(newValue.getConfigEntries());
+                if(oldVal!=null){
+                    newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
+                }
+                return newMapValue;
+            }else{
+                if(currentValue!=null){
+                    return currentValue;
+                }
+                return Collections.emptyMap();
+            }
+        }
+    };
+
+    /** Cache for loaded custom combination policies. */
     private Map<Class, PropertyValueCombinationPolicy> configuredPolicies = new ConcurrentHashMap<>();
 
     @Override
@@ -51,69 +83,44 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
             }
             return currentValue;
         }
-        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().get('_' + key+".combinationPolicy");
-        if(adaptiveCombinationPolicyClass!=null){
-            PropertyValueCombinationPolicy delegatePolicy = null;
-            try{
-                Class clazz = Class.forName(adaptiveCombinationPolicyClass);
-                delegatePolicy = configuredPolicies.get(clazz);
-                if(delegatePolicy==null){
-                    delegatePolicy = PropertyValueCombinationPolicy.class.cast(clazz.newInstance());
-                    configuredPolicies.put(clazz, delegatePolicy);
+        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().getOrDefault(
+                '_' + key+".combination-policy", "override");
+        PropertyValueCombinationPolicy combinationPolicy = null;
+        switch(adaptiveCombinationPolicyClass){
+            case "collect":
+            case "COLLECT":
+                if(LOG.isLoggable(Level.FINEST)){
+                    LOG.finest("Using collecting combination policy for key: " + key + ".");
                 }
-                return delegatePolicy.collect(currentValue, key, propertySource);
-            }
-            catch(Exception e){
-                LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for key: " + key, e);
-            }
-        }
-        // check for default collection combination policies for lists, sets, maps etc.
-        final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".collection-separator", ",");
-        String collectionType = ConfigurationProvider.getConfiguration().get('_' + key+".collection-type");
-        if(collectionType!=null) {
-            if (collectionType.startsWith("java.util.")) {
-                collectionType = collectionType.substring("java.util.".length());
-            }
-            switch(collectionType){
-                case "List":
-                case "ArrayList":
-                case "LinkedList":
-                case "Collection":
-                case "Set":
-                case "HashSet":
-                case "TreeSet":
-                case "SortedSet":
-                case "Map":
-                case "HashMap":
-                case "ConcurrentHashMap":
-                case "TreeMap":
-                case "SortedMap":
-                    PropertyValue newValue = propertySource.get(key);
-                    if(newValue!=null){
-                        Map<String,String> newMapValue = new HashMap<>();
-                        if(currentValue!=null){
-                            newMapValue.putAll(currentValue);
-                        }
-                        String oldVal = newMapValue.get(key);
-                        newMapValue.putAll(newValue.getConfigEntries());
-                        if(oldVal!=null){
-                            newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
-                        }
-                        return newMapValue;
-                    }else{
-                        if(currentValue!=null){
-                            return currentValue;
-                        }
-                        return Collections.emptyMap();
+                combinationPolicy = COLLECTING_POLICY;
+                break;
+            case "override":
+            case "OVERRIDE":
+                if(LOG.isLoggable(Level.FINEST)){
+                    LOG.finest("Using default (overriding) combination policy for key: " + key + ".");
+                }
+                combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
+                break;
+            default:
+                try{
+                    Class<PropertyValueCombinationPolicy> clazz = (Class<PropertyValueCombinationPolicy>)
+                            Class.forName(adaptiveCombinationPolicyClass);
+                    combinationPolicy = configuredPolicies.get(clazz);
+                    if(combinationPolicy==null){
+                        combinationPolicy = clazz.newInstance();
+                        configuredPolicies.put(clazz, combinationPolicy);
                     }
-                default:
-                    LOG.log(Level.SEVERE, "Unsupported collection-type for key: " + key + ": " + collectionType);
-            }
-        }
-        PropertyValue newValue = propertySource.get(key);
-        if(newValue!=null){
-            return newValue.getConfigEntries();
+                    if(LOG.isLoggable(Level.FINEST)){
+                        LOG.finest("Using custom combination policy "+adaptiveCombinationPolicyClass+" for " +
+                                "key: " + key + ".");
+                    }
+                }
+                catch(Exception e){
+                    LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for " +
+                            "key: " + key + ", using default (overriding) policy.", e);
+                    combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
+                }
         }
-        return currentValue;
+        return combinationPolicy.collect(currentValue, key, propertySource);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
index 3e95438..8281395 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -48,10 +48,7 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
 
     @Override
     public ArrayList convert(String value, ConversionContext context) {
-        final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + context.getKey()+".collection-separator", ",");
-        List<String> rawList = ItemTokenizer.split(value, SEPARATOR);
-
+        List<String> rawList = ItemTokenizer.split(value, context);
         ArrayList<Object> mlist = new ArrayList<>();
         for(String raw:rawList){
             Object convValue = ItemTokenizer.convertValue(raw, context);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
index 07aecc8..131b41c 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
@@ -22,6 +22,7 @@ import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
@@ -47,33 +48,14 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
     @Override
     public ConcurrentHashMap convert(String value, ConversionContext context) {
         List<String> rawList = ItemTokenizer.split(value, context);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                ConcurrentHashMap<String,Object> mlist = new ConcurrentHashMap<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                        context.getConfigurationContext(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    String[] items = ItemTokenizer.splitMapEntry(raw, context);
-                    Object convValue = valueConverter.convert(items[1], ctx);
-                    if(convValue!=null){
-                        mlist.put(items[0], convValue);
-                        continue;
-                    }
-                }
-                return mlist;
-
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
-            }
-        }
-        ConcurrentHashMap<String,String> result = new ConcurrentHashMap<>();
+        ConcurrentHashMap result = new ConcurrentHashMap(rawList.size());
         for(String raw:rawList){
             String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            if(items!=null){
-                result.put(items[0], items[1]);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.put(items[0], convValue);
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
         }
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 29d7ad7..6a3ac97 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -47,51 +47,18 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
     @Override
     public HashMap convert(String value, ConversionContext context) {
         List<String> rawList = ItemTokenizer.split(value, context);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                HashMap<String,Object> mlist = new HashMap<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                        context.getConfigurationContext(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    String[] items = splitItems(raw);
-                    Object convValue = valueConverter.convert(items[1], ctx);
-                    if(convValue!=null){
-                        mlist.put(items[0], convValue);
-                        continue;
-                    }
-                }
-                return mlist;
-
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
-            }
-        }
-        HashMap<String,String> result = new HashMap<>();
+        HashMap result = new HashMap(rawList.size());
         for(String raw:rawList){
-            String[] items = splitItems(raw);
-            if(items!=null){
-                result.put(items[0], items[1]);
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.put(items[0], convValue);
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
         }
         return result;
     }
 
-    static String[] splitItems(String raw) {
-        String[] items = raw.split("::");
-        if(items[0].trim().startsWith("[")){
-            items[0]= items[0].trim();
-            items[0] = items[0].substring(1);
-        }else{
-            items[0]= items[0].trim();
-        }
-        if(items[1].trim().endsWith("]")){
-            items[1] = items[1].substring(0,items[1].length()-1);
-        }else{
-            items[1]= items[1].trim();
-        }
-        return items;
-    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
index 47c32f6..40b204f 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -50,27 +50,16 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
     @Override
     public HashSet convert(String value, ConversionContext context) {
         List<String> rawList = ItemTokenizer.split(value, context);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                HashSet<Object> mlist = new HashSet<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                        context.getConfigurationContext(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    Object convValue = valueConverter.convert(raw, ctx);
-                    if(convValue!=null){
-                        mlist.add(convValue);
-                        continue;
-                    }
-                }
-                return mlist;
-
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+        HashSet<Object> result = new HashSet<>();
+        for(String raw:rawList){
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.add(convValue);
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
         }
-        return new HashSet(rawList);
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
index 37f7cf1..98831e1 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
@@ -50,7 +50,8 @@ final class ItemTokenizer {
      */
     public static List<String> split(String value, ConversionContext context){
         return split(value, ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + context.getKey()+".collection-separator", ","));
+                '_' + context.getKey()+"." +
+                        "item-separator", ","));
     }
 
     /**
@@ -91,7 +92,7 @@ final class ItemTokenizer {
      */
     public static String[] splitMapEntry(String mapEntry, ConversionContext context){
         return splitMapEntry(mapEntry, ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + context.getKey()+".collection-map-separator", ","));
+                '_' + context.getKey()+".map-entry-separator", "::"));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index 986a303..4389a54 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -47,28 +47,18 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> {
     @Override
     public LinkedList convert(String value, ConversionContext context) {
         List<String> rawList = ItemTokenizer.split(value, context);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                LinkedList<Object> mlist = new LinkedList<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                        context.getConfigurationContext(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    Object convValue = valueConverter.convert(raw, ctx);
-                    if(convValue!=null){
-                        mlist.add(convValue);
-                        continue;
-                    }
-                }
-                return mlist;
-
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+        LinkedList<Object> result = new LinkedList<>();
+        for(String raw:rawList){
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.add(convValue);
+                continue;
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
         }
-        return new LinkedList(rawList);
+        return result;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
index b350944..fef25fe 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
@@ -21,12 +21,17 @@ package org.apache.tamaya.collections.internal;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
+import java.util.List;
 import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating HashMap representation of a values.
  */
 public class TreeMapConverter implements PropertyConverter<TreeMap> {
+    /** Logger used. */
+    private static final Logger LOG = Logger.getLogger(HashMapConverter.class.getName());
 
     /** The shared instance, used by other collection converters in this package.*/
     private static TreeMapConverter INSTANCE = new TreeMapConverter();
@@ -41,6 +46,17 @@ public class TreeMapConverter implements PropertyConverter<TreeMap> {
 
     @Override
     public TreeMap convert(String value, ConversionContext context) {
-        return new TreeMap<>(HashMapConverter.getInstance().convert(value, context));
+        List<String> rawList = ItemTokenizer.split(value, context);
+        TreeMap result = new TreeMap();
+        for(String raw:rawList){
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.put(items[0], convValue);
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
+            }
+        }
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index f9cba02..9206f07 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -48,27 +48,17 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> {
     @Override
     public TreeSet convert(String value, ConversionContext context) {
         List<String> rawList = ItemTokenizer.split(value, context);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                TreeSet<Object> mlist = new TreeSet<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                        context.getConfigurationContext(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    Object convValue = valueConverter.convert(raw, ctx);
-                    if(convValue!=null){
-                        mlist.add(convValue);
-                        continue;
-                    }
-                }
-                return mlist;
-
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+        TreeSet<Object> result = new TreeSet<>();
+        for(String raw:rawList){
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
+            Object convValue = ItemTokenizer.convertValue(items[1], context);
+            if(convValue!=null){
+                result.add(convValue);
+                continue;
+            }else{
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
         }
-        return new TreeSet<>(rawList);
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
index 435ed5d..ddabb23 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
@@ -7,6 +7,7 @@ import org.junit.Test;
 
 import java.util.Currency;
 import java.util.List;
+import java.util.Map;
 
 import static junit.framework.TestCase.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -75,4 +76,24 @@ public class CollectionAdvancedTests {
         assertEquals("(B)", items.get(1));
         assertEquals("(C)", items.get(2));
     }
+
+    /**
+     * Redefined map format parsing, Config is as follows:
+     * <pre>
+     *  redefined-map=0==none | 1==single | 2==any
+     *  _redefined-map.map-entry-separator===
+     *  _redefined-map.item-separator=|
+     * </pre>
+     */
+    @Test
+    public void testCustomMapParser(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("redefined-map", Map.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(3, items.size());
+        assertEquals("none", items.get("0"));
+        assertEquals("single", items.get("1"));
+        assertEquals("any", items.get("2"));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/715293d4/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 2bb8414..e9a234c 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -59,7 +59,7 @@ _typed.treemap.collection-type=TreeMap
 # Config for advanced tests
 sep-list=a,b,c|d,e,f|g,h,i
 _sep-list.collection-type=List
-_sep-list.collection-separator=|
+_sep-list.item-separator=|
 currency-list=CHF,USD,USS
 _currency-list.collection-type=List
 
@@ -67,3 +67,7 @@ parser-list=a,b,c
 _parser-list.collection-type=List
 _parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
 
+redefined-map=0==none | 1==single | 2==any
+_redefined-map.map-entry-separator===
+_redefined-map.item-separator=|
+


[50/50] [abbrv] incubator-tamaya-sandbox git commit: - Moved UI module into sandbox, including UI parts. - Decoupled accordingly existing modules from UI. - Fixed a few quality issues.

Posted by pl...@apache.org.
- Moved UI module into sandbox, including UI parts.
- Decoupled accordingly existing modules from UI.
- Fixed a few quality issues.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/e4b68dfb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/e4b68dfb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/e4b68dfb

Branch: refs/heads/master
Commit: e4b68dfb9e48a5f477e726f09698e2770303f5de
Parents: 97b5f43
Author: anatole <an...@apache.org>
Authored: Tue Aug 16 15:50:17 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Aug 16 15:51:30 2016 +0200

----------------------------------------------------------------------
 .../staged/src/test/resources/tamaya-TEST.yaml  |  27 +++
 .../src/test/resources/tamaya-config.yaml       |  91 ++------
 pom.xml                                         |   1 +
 ui/base/pom.xml                                 | 156 +++++++++++++
 .../org/apache/tamaya/ui/ApplicationLayout.java |  72 ++++++
 .../java/org/apache/tamaya/ui/CurrentUser.java  |  58 +++++
 .../main/java/org/apache/tamaya/ui/NavBar.java  | 127 ++++++++++
 .../java/org/apache/tamaya/ui/TamayaUI.java     |  77 +++++++
 .../java/org/apache/tamaya/ui/UIConstants.java  |  36 +++
 .../main/java/org/apache/tamaya/ui/User.java    | 154 +++++++++++++
 .../java/org/apache/tamaya/ui/VadiinApp.java    |  97 ++++++++
 .../java/org/apache/tamaya/ui/ViewProvider.java |  73 ++++++
 .../tamaya/ui/components/LazyProvider.java      |  81 +++++++
 .../tamaya/ui/components/PageTitleUpdater.java  |  47 ++++
 .../ui/components/VerticalSpacedLayout.java     |  32 +++
 .../org/apache/tamaya/ui/event/EventBus.java    |  52 +++++
 .../org/apache/tamaya/ui/event/LogoutEvent.java |  48 ++++
 .../apache/tamaya/ui/event/NavigationEvent.java |  53 +++++
 .../org/apache/tamaya/ui/events/EventView.java  | 181 +++++++++++++++
 .../ConfigurationBasedMessageProvider.java      | 176 ++++++++++++++
 .../ui/internal/ConfiguredMessageProvider.java  |  61 +++++
 .../ui/internal/ConfiguredUserService.java      |  76 ++++++
 .../internal/ResourceBundleMessageProvider.java |  91 ++++++++
 .../tamaya/ui/internal/URLPropertySource.java   |  78 +++++++
 .../tamaya/ui/services/MessageProvider.java     |  43 ++++
 .../apache/tamaya/ui/services/UserService.java  |  30 +++
 .../org/apache/tamaya/ui/views/ConfigView.java  | 229 +++++++++++++++++++
 .../org/apache/tamaya/ui/views/ErrorView.java   |  43 ++++
 .../org/apache/tamaya/ui/views/HomeView.java    |  94 ++++++++
 .../org/apache/tamaya/ui/views/SystemView.java  | 117 ++++++++++
 .../views/TamayaGeneralSystemInfoProvider.java  |  56 +++++
 .../apache/tamaya/ui/views/login/LoginBox.java  | 112 +++++++++
 .../tamaya/ui/views/login/LoginEvent.java       |  55 +++++
 .../apache/tamaya/ui/views/login/LoginView.java |  37 +++
 .../META-INF/javaconfiguration.properties       |  21 ++
 .../services/org.apache.tamaya.ui.ViewProvider  |  24 ++
 ...rg.apache.tamaya.ui.services.MessageProvider |  19 ++
 .../org.apache.tamaya.ui.services.UserService   |  19 ++
 .../src/main/resources/config/application.yml   |  28 +++
 .../main/resources/ui/lang/tamaya.properties    |  28 +++
 .../src/test/resources/config/application.yml   |  36 +++
 .../org/apache/tamaya/ui/events/EventView.java  | 181 +++++++++++++++
 .../services/org.apache.tamaya.ui.ViewProvider  |  19 ++
 ui/mutableconfig/pom.xml                        |  36 +++
 .../ui/mutableconfig/ConfigEditorWidget.java    | 132 +++++++++++
 .../ui/mutableconfig/ConfigUpdaterView.java     | 121 ++++++++++
 .../tamaya/ui/mutableconfig/ProtocolWidget.java |  90 ++++++++
 .../mutableconfig/TransactionControlWidget.java | 229 +++++++++++++++++++
 .../services/org.apache.tamaya.ui.ViewProvider  |  19 ++
 49 files changed, 3691 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/metamodels/staged/src/test/resources/tamaya-TEST.yaml
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/tamaya-TEST.yaml b/metamodels/staged/src/test/resources/tamaya-TEST.yaml
new file mode 100644
index 0000000..3e56656
--- /dev/null
+++ b/metamodels/staged/src/test/resources/tamaya-TEST.yaml
@@ -0,0 +1,27 @@
+#
+# 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.
+#
+tamaya-configuration:
+  includes:
+    tamaya-DEFAULT.yaml
+
+  property-sources:
+    - class: org.apache.tamaya.resources.ResourceProvider
+        resource: classpath:META-INF/config/test/**/*.*"
+    - class: org.apache.tamaya.resources.ResourceProvider
+        resource: classpath://META-INF/config/test/**/*.*"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/metamodels/staged/src/test/resources/tamaya-config.yaml
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/tamaya-config.yaml b/metamodels/staged/src/test/resources/tamaya-config.yaml
index c9de1c8..a2980f6 100644
--- a/metamodels/staged/src/test/resources/tamaya-config.yaml
+++ b/metamodels/staged/src/test/resources/tamaya-config.yaml
@@ -16,75 +16,22 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-TAMAYA:
-  PROFILES-DEF:
-   - selectable:          DEFAULT,DEV,TEST,PTA,PROD
-   - supports-multi:      false
-   - defaults:            DEFAULT
-   - default-active:      DEV
-   - defined-by:          sys-property:ENV, env-property:ENV
-
-  FORMATS:
-    - formats:  yaml, properties, xml-properties
-    - suffixes:   yaml, yml, properties, xml
-
-  PROFILES:
-    <COMMON>:
-      - sources:
-        - "named:env-properties"   # provider name, or class name
-        - "named:main-args"
-        - "named:sys-properties"
-        - "resource:classpath:META-INF/config/**/*.SUFFIX"
-    DEFAULT:
-      - prio:       0   # optional
-      - sources:
-        - "resource:classpath:META-INF/defaults/**/*.SUFFIX"
-        - "resource:file:${config.dir}/defaults/**/*.SUFFIX"
-      - filters:
-        - "section:DEFAULTS\\.*"
-        - "section:defaults\\.*"
-        - "exclude:_\\.*"   # removes all meta-entries
-    TEST:
-      - prio:        100   # optional
-      - filters:
-        - "section:TEST\\.*"
-        - "section:test\\.*"
-    PROD:
-      - prio:        1000   # optional
-      - filters:
-        - "section:PROD\\.*"
-        - "section:prod\\.*"
-
-  MODEL:
-    - a.b.c:
-      - type:       "Section"
-      - owner:      "Test Model"
-      - children:   false
-      - required:   true
-      - validation: "my.abc.ValidatorClass"
-
-    - java.version:
-      - type:       "Parameter"
-      - owner:      "Expression Test"
-      - expression: ".*v1.7.*"
-      - required:   true
-
-    - ch.trivadis:
-      - type:       "Section"       # Declaration only
-
-  USAGE:
-    track:        true
-
-#  FORMAT-DEF:
-#   - formats: yaml, properties, xml-properties
-#   - mappings:
-#      yaml            -> CustomMapping1Classname,
-#      xml-properties  -> Mapping2Classname
-#   - suffixes:
-#      yml, yaml, xml, properties
-
-#  FUNCTIONS:
-#    - default-map:  map(DEFAULTS,.)
-#    - env-map:      map(${ENV},.)
-#    - omit:         omit(!DEFAULTS,!${ENV})
-#    - config-map:   omit,default-map,env-map
\ No newline at end of file
+tamaya-config:
+  source-selectors:
+   - DEFAULT:
+       source: tamaya-DEFAULT.yml
+       labels: env=TEST env=PTA env=PROD
+   - TEST:
+       source: tamaya-TEST.yml
+       labels: env=TEST
+   - PTA:
+       source: tamaya-PTA.yml
+       labels: env=PTA
+   - PROD:
+       source: tamaya-PROD.yml
+       labels: env=PROD
+
+  default-labels:  env=DEV
+
+  expressions:
+   - env:    ${sys-property:ENV}, ${env-property:ENV}, "DEV"

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a5831c7..2f01840 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@ under the License.
         <module>jodatime</module>
         <module>sysprops</module>
         <module>remote</module>
+        <module>ui</module>
     </modules>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/pom.xml
----------------------------------------------------------------------
diff --git a/ui/base/pom.xml b/ui/base/pom.xml
new file mode 100644
index 0000000..588e8b9
--- /dev/null
+++ b/ui/base/pom.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-ui</artifactId>
+        <version>0.3-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <packaging>jar</packaging>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>tamaya-ui-base</artifactId>
+    <name>Apache Tamaya Modules - UI (Base)</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>src/main/webapp/VAADIN/themes/mytheme/addons.scss</exclude>
+                        <exclude>src/main/webapp/VAADIN/themes/mytheme/styles.css</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <!-- Exclude some unnecessary files generated by the GWT compiler. -->
+                    <packagingExcludes>WEB-INF/classes/VAADIN/gwt-unitCache/**,
+                        WEB-INF/classes/VAADIN/widgetsets/WEB-INF/**</packagingExcludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.vaadin</groupId>
+                <artifactId>vaadin-maven-plugin</artifactId>
+                <version>${vaadin.plugin.version}</version>
+                <configuration>
+                    <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
+                    <webappDirectory>${basedir}/target/classes/VAADIN/widgetsets</webappDirectory>
+                    <draftCompile>false</draftCompile>
+                    <compileReport>false</compileReport>
+                    <style>OBF</style>
+                    <strict>true</strict>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>update-theme</goal>
+                            <goal>update-widgetset</goal>
+                            <goal>compile</goal>
+                            <!-- Comment out compile-theme goal to use on-the-fly theme compilation -->
+                            <goal>compile-theme</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <!--<version>2.6.1</version>-->
+                <!-- Clean up also any pre-compiled themes -->
+                <configuration>
+                    <filesets>
+                        <fileset>
+                            <directory>src/main/webapp/VAADIN/themes</directory>
+                            <includes>
+                                <include>**/styles.css</include>
+                                <include>**/styles.scss.cache</include>
+                            </includes>
+                        </fileset>
+                    </filesets>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>2.4.1</version>
+                <configuration>
+                    <createDependencyReducedPom>true</createDependencyReducedPom>
+                    <filters>
+                        <filter>
+                            <artifact>*:*</artifact>
+                            <excludes>
+                                <exclude>META-INF/*.SF</exclude>
+                                <exclude>META-INF/*.DSA</exclude>
+                                <exclude>META-INF/*.RSA</exclude>
+                            </excludes>
+                        </filter>
+                    </filters>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>${mainClass}</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+    <repositories>
+        <repository>
+            <id>vaadin-addons</id>
+            <url>http://maven.vaadin.com/vaadin-addons</url>
+        </repository>
+        <repository>
+            <id>vaadin-snapshots</id>
+            <url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/base/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
new file mode 100644
index 0000000..20190be
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
@@ -0,0 +1,72 @@
+/*
+ * 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.ui;
+
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.UI;
+import org.apache.tamaya.ui.components.PageTitleUpdater;
+import org.apache.tamaya.ui.views.ErrorView;
+
+
+/**
+ * UI main layout.
+ */
+public class ApplicationLayout extends HorizontalLayout {
+
+    private NavBar navBar;
+    private Panel content;
+    private NavigationBar navigator;
+
+    public ApplicationLayout(UI ui) {
+        addStyleName(UIConstants.MAIN_LAYOUT);
+        setSizeFull();
+        initLayouts();
+        setupNavigator(ui);
+    }
+
+    public NavigationBar getNavigationBar(){
+        return navigator;
+    }
+
+    private void initLayouts() {
+        navBar = new NavBar(this);
+        // Use panel as main content container to allow it's content to scroll
+        content = new Panel();
+        content.setSizeFull();
+        content.addStyleName(UIConstants.PANEL_BORDERLESS);
+
+        addComponents(navBar, content);
+        setExpandRatio(content, 1);
+    }
+
+
+    private void setupNavigator(UI ui) {
+        navigator = new NavigationBar(ui, content, navBar);
+
+        // Add view change listeners so we can do things like select the correct menu item and update the page title
+        navigator.addViewChangeListener(navBar);
+        navigator.addViewChangeListener(new PageTitleUpdater());
+
+        navigator.navigateTo("/home");
+        navigator.setErrorView(ErrorView.class);
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/CurrentUser.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/CurrentUser.java b/ui/base/src/main/java/org/apache/tamaya/ui/CurrentUser.java
new file mode 100644
index 0000000..09fcf57
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/CurrentUser.java
@@ -0,0 +1,58 @@
+/*
+ * 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.ui;
+
+import com.vaadin.server.VaadinSession;
+
+/**
+ * Convenience wrapper for storing and retrieving a user from the VaadinSession
+ */
+public final class CurrentUser {
+    /** The key used. */
+    private static final String KEY = "currentUser";
+
+    /**
+     * Singleton constructor.
+     */
+    private CurrentUser(){}
+
+    /**
+     * Set the current users.
+     * @param user the current user, not null.
+     */
+    public static void set(User user) {
+        VaadinSession.getCurrent().setAttribute(KEY, user);
+    }
+
+    /**
+     * Get the current user.
+     * @return the current user, or null.
+     */
+    public static User get() {
+        return (User) VaadinSession.getCurrent().getAttribute(KEY);
+    }
+
+    /**
+     * Checks if the current user is present and logged in.
+     * @return {@code true} if user is present and logged in.
+     */
+    public static boolean isLoggedIn() {
+        return get() != null && get().isLoggedin();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/NavBar.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/NavBar.java b/ui/base/src/main/java/org/apache/tamaya/ui/NavBar.java
new file mode 100644
index 0000000..9020cd8
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/NavBar.java
@@ -0,0 +1,127 @@
+/*
+ * 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.ui;
+
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.server.FontAwesome;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.event.EventBus;
+import org.apache.tamaya.ui.event.LogoutEvent;
+import org.apache.tamaya.ui.event.NavigationEvent;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Left side navigation bar.
+ */
+public class NavBar extends VerticalLayout implements ViewChangeListener {
+
+    private Map<String, Button> buttonMap = new HashMap<>();
+
+    public NavBar(ApplicationLayout appLayout) {
+        // setHeight("100%");
+        setWidth(200, Unit.PIXELS);
+        addStyleName(UIConstants.MENU_ROOT);
+        addStyleName(UIConstants.NAVBAR);
+        setDefaultComponentAlignment(Alignment.TOP_LEFT);
+        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        Label logo = new Label("<strong>"+ messages.getMessage("project.name")+"</strong>", ContentMode.HTML);
+        logo.addStyleName(UIConstants.MENU_TITLE);
+        addComponent(logo);
+        addLogoutAndSettingsButton(appLayout);
+    }
+
+
+    private void addLogoutAndSettingsButton(final ApplicationLayout appLayout) {
+        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        Button logout = new Button(messages.getMessage("default.label.logout"), new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                User user = CurrentUser.get();
+                if(user!=null){
+                    user.logout();
+                    EventBus.post(new LogoutEvent(user));
+                }
+                CurrentUser.set(null);
+            }
+        });
+        logout.addStyleName(UIConstants.BUTTON_LOGOUT);
+        logout.addStyleName(UIConstants.BUTTON_BORDERLESS);
+        logout.setIcon(FontAwesome.SIGN_OUT);
+        Button settings = new Button("...", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                UISettingsDialog dlog = new UISettingsDialog(appLayout.getNavigationBar());
+                dlog.show();
+            }
+        });
+        settings.addStyleName(UIConstants.BUTTON_SETTINGS);
+        settings.addStyleName(UIConstants.BUTTON_BORDERLESS);
+        VerticalLayout buttons = new VerticalLayout(logout, settings);
+        addComponent(buttons);
+    }
+
+    public void addViewButton(final String uri, String displayName) {
+        Button viewButton = new Button(displayName, new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                EventBus.post(new NavigationEvent(uri));
+            }
+        });
+        viewButton.addStyleName(UIConstants.BUTTON_LOGOUT);
+        // viewButton.addStyleName(UIConstants.MENU_ITEM);
+        viewButton.addStyleName(UIConstants.BUTTON_BORDERLESS);
+        addComponent(viewButton, components.size() - 1);
+        viewButton.setHeight(20, Unit.PIXELS);
+
+        buttonMap.put(uri, viewButton);
+    }
+
+    public void removeViewButton(String uri) {
+        Button button = buttonMap.remove(uri);
+        if(button!=null) {
+            removeComponent(button);
+        }
+    }
+
+    @Override
+    public boolean beforeViewChange(ViewChangeEvent event) {
+        return true; // false blocks navigation, always return true here
+    }
+
+    @Override
+    public void afterViewChange(ViewChangeEvent event) {
+        for(Button button: buttonMap.values()){
+            button.removeStyleName(UIConstants.SELECTED);
+        }
+        Button button = buttonMap.get(event.getViewName());
+        if (button != null) {
+            button.addStyleName(UIConstants.SELECTED);
+        }
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/TamayaUI.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/TamayaUI.java b/ui/base/src/main/java/org/apache/tamaya/ui/TamayaUI.java
new file mode 100644
index 0000000..f446d6f
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/TamayaUI.java
@@ -0,0 +1,77 @@
+/*
+ * 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.ui;
+
+import com.vaadin.server.VaadinServlet;
+import org.apache.catalina.Context;
+import org.apache.catalina.Wrapper;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+/**
+ * Tamaya UI Main class.
+ */
+public class TamayaUI {
+
+    private static final Logger LOG = Logger.getLogger(TamayaUI.class.getName());
+
+    /**
+     * Not an instantiable class.
+     */
+    private TamayaUI(){}
+
+    /**
+     * The main entry point, use configuration as follows:
+     * <pre>
+     *     tamaya.server.contextPath: the context path, default=/tamaya
+     *     tamaya.server.port: the port, default=8090
+     *     tamaya.server.productionMode: vadiin production mode setting, default=false.
+     * </pre>
+     * @param args the args
+     * @throws Exception if startup fails.
+     */
+    public static void main(String[] args) throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        String contextPath = config.getOrDefault("tamaya.server.contextPath", "/tamaya");
+        String appBase = ".";
+        Tomcat tomcat = new Tomcat();
+        tomcat.setPort(Integer.valueOf(config.getOrDefault("tamaya.server.port", Integer.class, 8090) ));
+
+        // Define a web application context.
+        Context context = tomcat.addWebapp(contextPath, new File(
+                appBase).getAbsolutePath());
+        // Add Vadiin servlet
+        Wrapper wrapper = tomcat.addServlet(context, "vadiin-servlet",
+                VaadinServlet.class.getName());
+        wrapper.addInitParameter("ui",
+                VadiinApp.class.getName());
+        wrapper.addInitParameter("productionMode",config.getOrDefault("tamaya.server.productionMode", String.class,
+                "false"));
+        wrapper.addInitParameter("asyncSupported", "true");
+        context.addServletMapping("/*", "vadiin-servlet");
+        // bootstrap.addBundle(new AssetsBundle("/VAADIN", "/VAADIN", null, "vaadin"));
+        tomcat.start();
+        tomcat.getServer().await();
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/UIConstants.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/UIConstants.java b/ui/base/src/main/java/org/apache/tamaya/ui/UIConstants.java
new file mode 100644
index 0000000..ecf90ff
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/UIConstants.java
@@ -0,0 +1,36 @@
+/*
+ * 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.ui;
+
+import com.vaadin.ui.themes.ValoTheme;
+
+/**
+ * Helper for theme. Less typos in CSS style names and easier to find usages in project.
+ */
+public class UIConstants extends ValoTheme {
+
+    public static final String MAIN_LAYOUT = "main-layout";
+    public static final String NAVBAR = "navbar";
+    public static final String SELECTED = "selected";
+    public static final String LOGIN_BOX = "login-box";
+
+
+    public static final String BUTTON_LOGOUT = "logout";
+    public static final String BUTTON_SETTINGS = BUTTON_TINY;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/User.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/User.java b/ui/base/src/main/java/org/apache/tamaya/ui/User.java
new file mode 100644
index 0000000..ae5b34a
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/User.java
@@ -0,0 +1,154 @@
+/*
+ * 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.ui;
+
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * A simple User object.
+ */
+public class User {
+    /** The user ID. */
+    private final String userID;
+    /** The full name. */
+    private String fulLName;
+    /** The credentials. */
+    private String credentials;
+    /** The user's roles. */
+    private Set<String> roles = new HashSet<>();
+    /** The user's last login date. */
+    private Date loginDate = new Date();
+    /** The user's last logout date. */
+    private Date logoutDate = new Date();
+
+    /**
+     * Constructor.
+     * @param uid the user ID, not null.
+     * @param fullName the full name.
+     * @param credentials the credentials.
+     * @param roles its roles.
+     */
+    public User(String uid, String fullName, String credentials, String... roles){
+        this.userID = Objects.requireNonNull(uid);
+        this.fulLName = fullName!=null?fullName:userID;
+        if(fullName==null){
+            this.fulLName = userID;
+        }
+        this.roles.addAll(Arrays.asList(roles));
+        this.credentials = credentials;
+    }
+
+    /**
+     * �Performs a login, checking the credentials.
+     * @param credentials the credentials.
+     * @return true, if the user could be logged in.
+     */
+    public boolean login(String credentials){
+        if(this.credentials!=null){
+            this.loginDate = new Date();
+            return this.credentials.equals(credentials);
+        }
+        return credentials==null || credentials.isEmpty();
+    }
+
+    /**
+     * Checks if the user is currently logged in.
+     * @return true, if the user is currently logged in.
+     */
+    public boolean isLoggedin(){
+        long now = System.currentTimeMillis();
+        if(this.logoutDate!=null && this.logoutDate.getTime() < now){
+            return false;
+        }
+        return this.loginDate!=null && this.loginDate.getTime() < now;
+    }
+
+    /**
+     * Logs the user out.
+     */
+    public void logout(){
+        this.logoutDate = new Date();
+    }
+
+    /**
+     * Get the user ID.
+     * @return the user ID, never null.
+     */
+    public String getUserID() {
+        return userID;
+    }
+
+    /**
+     * Get the full name.
+     * @return the full name, never null.
+     */
+    public String getFullName() {
+        return fulLName;
+    }
+
+    /**
+     * Checks if the user has the given role.
+     * @param role the role to be checked, not null.
+     * @return true, if the user has the required role.
+     */
+    public boolean hasRole(String role){
+        return this.roles.contains(role);
+    }
+
+    /**
+     * Get the user's roles.
+     * @return the roles, never null.
+     */
+    public Set<String> getRoles(){
+        return Collections.unmodifiableSet(roles);
+    }
+
+    /**
+     * Get the last login timestamp.
+     * @return the last login date, or null.
+     */
+    public Date getLoginDate(){
+        return loginDate;
+    }
+
+    /**
+     * Get the last login timestamp.
+     * @return the last login date, or null.
+     */
+    public Date getLogoutDate(){
+        return logoutDate;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "fulLName='" + fulLName + '\'' +
+                ", userID='" + userID + '\'' +
+                ", roles=" + roles +
+                ", loginDate=" + loginDate +
+                ", logoutDate=" + logoutDate +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/VadiinApp.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/VadiinApp.java b/ui/base/src/main/java/org/apache/tamaya/ui/VadiinApp.java
new file mode 100644
index 0000000..9e2510d
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/VadiinApp.java
@@ -0,0 +1,97 @@
+/*
+ * 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.ui;
+
+import com.google.common.eventbus.Subscribe;
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.Title;
+import com.vaadin.server.Page;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.UI;
+import org.apache.tamaya.ui.event.LogoutEvent;
+import org.apache.tamaya.ui.event.NavigationEvent;
+import org.apache.tamaya.ui.views.login.LoginEvent;
+import org.apache.tamaya.ui.views.login.LoginView;
+
+/**
+ * This UI is the application entry point. A UI may either represent a browser window 
+ * (or tab) or some part of a html page where a Vaadin application is embedded.
+ * <p>
+ * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
+ * overridden to add component to the user interface and initialize non-component functionality.
+ */
+@Theme("valo")
+@Title("Tamaya")
+public class VadiinApp extends UI {
+
+    public VadiinApp(){
+        super(new Panel());
+        super.setPollInterval(2000);
+    }
+
+    @Override
+    protected void init(VaadinRequest vaadinRequest) {
+        setupEventBus();
+        if (CurrentUser.isLoggedIn()) {
+            setContent(new ApplicationLayout(this));
+        } else {
+            setContent(new LoginView());
+        }
+    }
+
+    @Subscribe
+    public void userLoggedIn(
+            LoginEvent event) {
+        CurrentUser.set(event.getUser());
+        setContent(new ApplicationLayout(this));
+    }
+
+    @Subscribe
+    public void navigateTo(NavigationEvent evt) {
+        if(getNavigator()==null){
+            return;
+        }
+        if(evt.getViewName().isEmpty()){
+            getNavigator().navigateTo("/home");
+
+        }else {
+            getNavigator().navigateTo(evt.getViewName());
+        }
+    }
+
+    public static VadiinApp getCurrent() {
+        return (VadiinApp) UI.getCurrent();
+    }
+
+    @Subscribe
+    public void logout(LogoutEvent logoutEvent) {
+        // Don't invalidate the underlying HTTP session if you are using it for something else
+        VaadinSession.getCurrent().getSession().invalidate();
+        VaadinSession.getCurrent().close();
+        Page.getCurrent().reload();
+
+    }
+
+    private void setupEventBus() {
+        org.apache.tamaya.ui.event.EventBus.register(this);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/ViewProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/ViewProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/ViewProvider.java
new file mode 100644
index 0000000..578689f
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/ViewProvider.java
@@ -0,0 +1,73 @@
+/*
+ * 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.ui;
+
+import com.vaadin.navigator.View;
+
+/**
+ * Interface to register Tamaya UI parts. For priorization also use the @Priority annotations.
+ */
+public interface ViewProvider {
+
+    /**
+     * View lifecycle options that determine when a view is created and how long an instance is used.
+     */
+    enum ViewLifecycle {
+        /** Creates a new view instance whenever the view is showed. */
+        CREATE,
+        /** Loads the view on first access. */
+        LAZY,
+        /** Eagerly preloads the view. */
+        EAGER
+    }
+
+    /**
+     * Get the view lifecycle model.
+     * @return the lifecycle model, not null.
+     */
+    ViewLifecycle getLifecycle();
+
+    /**
+     * Get the view's name, used for resolving the view display name.
+     * @return the view's name.
+     */
+    String getName();
+
+    /**
+     * Get the url pattern where this view should be accessible.
+     * @return the url pattern, not null.
+     */
+    String getUrlPattern();
+
+    /**
+     * Get the name to be displayed for this view. This value will also be used to lookup a name from the {@code /ui/lang/tamaya}
+     *                                   bundle. If not found the value returned will be used for display.
+     *
+     * @return the name to be displayed, or its resource bundle key, not null.
+     */
+    String getDisplayName();
+
+    /**
+     * Method that is called to create a new view instance.
+     * @see #getLifecycle()
+     * @param params any parameters that may be needed to create the view.
+     * @return a new view instance, not null.
+     */
+    View createView(Object... params);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
new file mode 100644
index 0000000..2d1547f
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
@@ -0,0 +1,81 @@
+/*
+ * 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.ui.components;
+
+import com.vaadin.navigator.View;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.util.Objects;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Lazily initializes a view when it's first accessed, then always returns the
+ * same instance on subsequent calls.
+ */
+public class LazyProvider implements ViewProvider {
+    private static final Logger LOG = Logger.getLogger(
+            LazyProvider.class.getName());
+    private Class<? extends View> viewClass;
+    private View view;
+    private String urlPattern;
+    private String name;
+
+    public LazyProvider(String name, String urlPattern, Class<? extends View> viewClass) {
+        this.viewClass = Objects.requireNonNull(viewClass);
+        this.urlPattern = Objects.requireNonNull(urlPattern);
+        this.name = Objects.requireNonNull(name);
+    }
+
+    @Override
+    public String getUrlPattern() {
+        return urlPattern;
+    }
+
+
+    @Override
+    public ViewLifecycle getLifecycle() {
+        return ViewLifecycle.LAZY;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                .getMessage(name);
+    }
+
+    @Override
+    public View createView(Object... params) {
+        if(view==null){
+            try {
+                view = viewClass.newInstance();
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Failed to create view: "+urlPattern, e);
+            }
+        }
+        return view;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java b/ui/base/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
new file mode 100644
index 0000000..83a0105
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
@@ -0,0 +1,47 @@
+/*
+ * 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.ui.components;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.server.Page;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+/**
+ * Listener that updates the page title when a new view is shown.
+ */
+public class PageTitleUpdater implements ViewChangeListener {
+
+    @Override
+    public boolean beforeViewChange(ViewChangeEvent event) {
+        return true;
+    }
+
+    @Override
+    public void afterViewChange(ViewChangeEvent event) {
+        View view = event.getNewView();
+        String displayName = ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                .getMessage("view."+view.getClass().getSimpleName()+".name");
+        if (displayName != null) {
+            Page.getCurrent().setTitle(displayName);
+        }
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java b/ui/base/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
new file mode 100644
index 0000000..94fc980
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
@@ -0,0 +1,32 @@
+/*
+ * 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.ui.components;
+
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * Vertical layout with spacing and margin on by default
+ */
+public class VerticalSpacedLayout extends VerticalLayout {
+
+    public VerticalSpacedLayout() {
+        setMargin(true);
+        setSpacing(true);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/event/EventBus.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/event/EventBus.java b/ui/base/src/main/java/org/apache/tamaya/ui/event/EventBus.java
new file mode 100644
index 0000000..ffa9ba4
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/event/EventBus.java
@@ -0,0 +1,52 @@
+/*
+ * 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.ui.event;
+
+
+import com.google.common.eventbus.SubscriberExceptionContext;
+import com.google.common.eventbus.SubscriberExceptionHandler;
+
+/**
+ * Convenience class for accessing the _UI Scoped_ EventBus. If you are using something like the CDI event
+ * bus, you don't need a class like this.
+ */
+public final class EventBus {
+
+    private static final com.google.common.eventbus.EventBus EVENT_BUS =
+            new com.google.common.eventbus.EventBus(new SubscriberExceptionHandler(){
+                @Override
+                public void handleException(Throwable throwable, SubscriberExceptionContext subscriberExceptionContext) {
+                    throwable.printStackTrace();
+                }
+            });
+
+    private EventBus(){}
+
+    public static void register(final Object listener) {
+        EVENT_BUS.register(listener);
+    }
+
+    public static void unregister(final Object listener) {
+        EVENT_BUS.unregister(listener);
+    }
+
+    public static void post(final Object event) {
+        EVENT_BUS.post(event);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java b/ui/base/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
new file mode 100644
index 0000000..680acc3
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
@@ -0,0 +1,48 @@
+/*
+ * 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.ui.event;
+
+import org.apache.tamaya.ui.User;
+
+import java.util.Objects;
+
+/**
+ * Event sent when the user has been logged out.
+ */
+public class LogoutEvent {
+
+    /** The user logged out. */
+    private User user;
+
+    /**
+     * Creates a new event.
+     * @param user the user logged out, not null.
+     */
+    public LogoutEvent(User user) {
+        this.user = Objects.requireNonNull(user);
+    }
+
+    /**
+     * Get the user logged out.
+     * @return the user logged out, not null.
+     */
+    public User getUser(){
+        return user;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java b/ui/base/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
new file mode 100644
index 0000000..bb863be
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
@@ -0,0 +1,53 @@
+/*
+ * 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.ui.event;
+
+
+import java.util.Objects;
+
+/**
+ * Event sent when the user wants to navigate.
+ */
+public class NavigationEvent {
+    /** The target view. */
+    private String viewName;
+
+    /**
+     * Constructor.
+     * @param viewName the target view, not null.
+     */
+    public NavigationEvent(String viewName) {
+        this.viewName = Objects.requireNonNull(viewName);
+    }
+
+    /**
+     * Access the target view name.
+     * @return the target view name, never null.
+     */
+    public String getViewName() {
+        return viewName;
+    }
+
+    @Override
+    public String toString() {
+        return "NavigationEvent{" +
+                "viewName='" + viewName + '\'' +
+                '}';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/events/EventView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/events/EventView.java b/ui/base/src/main/java/org/apache/tamaya/ui/events/EventView.java
new file mode 100644
index 0000000..ffb59cf
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/events/EventView.java
@@ -0,0 +1,181 @@
+/*
+ * 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.ui.events;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import org.apache.tamaya.events.ConfigEvent;
+import org.apache.tamaya.events.ConfigEventListener;
+import org.apache.tamaya.events.ConfigEventManager;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+import java.util.Date;
+
+/**
+ * Tamaya View for observing the current event stream.
+ */
+public class EventView extends VerticalSpacedLayout implements View {
+
+    /**
+     * Provider used to register the view.
+     */
+    @Priority(20)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.EAGER;
+        }
+
+        @Override
+        public String getName() {
+            return "view.events.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/events";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return getName();
+        }
+
+        @Override
+        public View createView(Object... params){
+            return new EventView();
+        }
+    }
+
+    private CheckBox changeMonitorEnabled = new CheckBox(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.button.enableMonitoring"));
+    private Button clearViewButton = new Button(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.button.clearView"));
+    private TextField pollingInterval = new TextField(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.field.pollingInterval"));
+    private Table eventsTable = new Table(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.table.name"));
+
+
+    public EventView() {
+        Label caption = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.events.name"));
+        Label description = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.events.description"),
+                ContentMode.HTML);
+
+        ConfigEventManager.addListener(new ConfigEventListener() {
+            @Override
+            public void onConfigEvent(ConfigEvent<?> event) {
+                addEvent(event);
+            }
+        });
+        changeMonitorEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                ConfigEventManager.enableChangeMonitoring(changeMonitorEnabled.getValue());
+                if(changeMonitorEnabled.getValue()) {
+                    Notification.show("Event Monitoring (Polling) active.");
+                }else{
+                    Notification.show("Event Monitoring (Polling) inactive.");
+                }
+            }
+        });
+        clearViewButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                eventsTable.removeAllItems();
+                Notification.show("Events cleared.");
+            }
+        });
+
+        HorizontalLayout eventSettings = new HorizontalLayout();
+        eventSettings.addComponents(changeMonitorEnabled, new Label(" Polling Interval"), pollingInterval, clearViewButton);
+        changeMonitorEnabled.setValue(ConfigEventManager.isChangeMonitoring());
+        pollingInterval.setValue(String.valueOf(ConfigEventManager.getChangeMonitoringPeriod()));
+        pollingInterval.setRequired(true);
+        pollingInterval.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                try{
+                    long millis = Long.parseLong((String)valueChangeEvent.getProperty().getValue());
+                    ConfigEventManager.setChangeMonitoringPeriod(millis);
+                    Notification.show("Updated Event Monitoring Poll Interval to " + millis + " milliseconds.");
+                }catch(Exception e){
+                    Notification.show("Cannot update Event Monitoring Poll Interval to "
+                            + valueChangeEvent.getProperty().getValue(), Notification.Type.ERROR_MESSAGE);
+                }
+            }
+        });
+        eventsTable.addContainerProperty("Timestamp", Date.class, null);
+        eventsTable.addContainerProperty("Type", String.class, "?");
+        eventsTable.addContainerProperty("Payload", String.class, "<empty>");
+        eventsTable.addContainerProperty("Version",  String.class, "?");
+        eventsTable.setPageLength(20);
+        eventsTable.setWidth("100%");
+        eventsTable.setResponsive(true);
+
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+        addComponents(caption, description, eventSettings, eventsTable);
+    }
+
+    private void addEvent(ConfigEvent<?> evt){
+        Object newItemId = eventsTable.addItem();
+        Item row = eventsTable.getItem(newItemId);
+        row.getItemProperty("Timestamp").setValue(new Date(evt.getTimestamp()));
+        row.getItemProperty("Type").setValue(evt.getResourceType().getSimpleName());
+        String value = String.valueOf(evt.getResource());
+        String valueShort = value.length()<150?value:value.substring(0,147)+"...";
+        row.getItemProperty("Payload").setValue(valueShort);
+        row.getItemProperty("Version").setValue(evt.getVersion());
+    }
+
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
new file mode 100644
index 0000000..e242418
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
@@ -0,0 +1,176 @@
+/*
+ * 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.ui.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+ * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
+ * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
+ * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
+ */
+public final class ConfigurationBasedMessageProvider implements MessageProvider{
+
+    /**
+     * The property name for configuring the resource bundle's base name either as
+     * system property, environment property or configuration entry.
+     */
+    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
+
+    private final String baseName = evaluateBaseName();
+
+    private Map<String, Map<String,String>> propertiesCache = new ConcurrentHashMap<>();
+
+
+    /**
+     * Private singleton constructor.
+     */
+    public ConfigurationBasedMessageProvider(){
+
+    }
+
+    /**
+     * Get a message using the defaul locale.
+     * @param key the message key, not null.
+     * @return the resolved message, or the bundle ID, never null.
+     */
+    public String getMessage(String key){
+        return getMessage(key, Locale.getDefault());
+    }
+
+    /**
+     * Get a message.
+     * @param key the message key, not null.
+     * @param locale the target locale, or null, for the default locale.
+     * @return the resolved message, or the key, never null.
+     */
+    public String getMessage(String key, Locale locale){
+        List<String> bundleIds = evaluateBundleIds(locale);
+        for(String bundleID:bundleIds){
+            Map<String,String> entries = this.propertiesCache.get(bundleID);
+            if(entries==null){
+                entries = loadEntries(bundleID);
+            }
+            String value = entries.get(key);
+            if(value!=null){
+                return value;
+            }
+        }
+        return key;
+    }
+
+    private Map<String, String> loadEntries(String bundleID) {
+        ConfigurationContextBuilder ctxBuilder = ConfigurationProvider.getConfigurationContextBuilder();
+        for(String format:new String[]{"xml", "properties"}) {
+            try {
+                Enumeration<URL> urls = getClass().getClassLoader().getResources(bundleID+"."+format);
+                while(urls.hasMoreElements()){
+                    URL url = urls.nextElement();
+                    ctxBuilder.addPropertySources(new URLPropertySource(url));
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        Map<String, String>  entries = new DefaultConfiguration(ctxBuilder.build()).getProperties();
+        this.propertiesCache.put(bundleID, entries);
+        return entries;
+    }
+
+    private List<String> evaluateBundleIds(Locale locale) {
+        List<String> bundleIds = new ArrayList<>();
+        String country = locale.getCountry();
+        if(country==null){
+            country="";
+        }
+        String lang = locale.getLanguage();
+        if(lang==null){
+            lang="";
+        }
+        String variant = locale.getVariant();
+        if(variant==null){
+            variant="";
+        }
+        String key = baseName + "_"+country+"_"+lang+"_"+variant;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName + "_"+country+"_"+lang;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName + "_"+country;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName;
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        return bundleIds;
+    }
+
+    /**
+     * Remove all doubled '_' hereby normalizing the bundle key.
+     * @param key the key, not null.
+     * @return the normaliuzed key, not null.
+     */
+    private String reduceKey(String key) {
+        String reduced = key.replace("___","_").replace("__","_");
+        if(reduced.endsWith("_")){
+            reduced = reduced.substring(0,reduced.length()-1);
+        }
+        return reduced;
+    }
+
+    /**
+     * Evaluates the base name to be used for creating the resource bundle used.
+     * @return base name
+     */
+    private String evaluateBaseName() {
+        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
+        if(baseName==null || baseName.isEmpty()){
+            baseName = System.getenv("tamaya.ui.baseName");
+        }
+        if(baseName==null || baseName.isEmpty()){
+            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
+        }
+        if(baseName==null || baseName.isEmpty()){
+            baseName = "ui/lang/tamaya";
+        }
+        return baseName.replace('.', '/');
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
new file mode 100644
index 0000000..00c0ec7
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
@@ -0,0 +1,61 @@
+///*
+// * 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.ui.internal;
+//
+//import org.apache.tamaya.ui.services.MessageProvider;
+//
+//import java.util.Locale;
+//import java.util.ResourceBundle;
+//
+///**
+// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+// */
+//public class ConfiguredMessageProvider implements MessageProvider{
+//
+//    /**
+//     * Private singleton constructor.
+//     */
+//    public ConfiguredMessageProvider(){}
+//
+//    /**
+//     * Get a message using the defaul locale.
+//     * @param bundleID the message bundle key, not null.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID){
+//        return getMessage(bundleID, Locale.getDefault());
+//    }
+//
+//    /**
+//     * Get a message.
+//     * @param bundleID the message bundle key, not null.
+//     * @param locale the target locale, or null, for the default locale.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID, Locale locale){
+//        try{
+//            ResourceBundle bundle = ResourceBundle.getBundle("ui/ui.lang/tamaya", locale);
+//            return bundle.getString(bundleID);
+//        }
+//        catch(Exception e){
+//            return bundleID;
+//        }
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredUserService.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredUserService.java b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredUserService.java
new file mode 100644
index 0000000..14af644
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ConfiguredUserService.java
@@ -0,0 +1,76 @@
+/*
+ * 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.ui.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+import org.apache.tamaya.ui.User;
+import org.apache.tamaya.ui.services.UserService;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * User service reading users and credentials from the configuration. Users are configured as follows (e.g. using
+ * properties format):
+ * <pre>
+ * tamaya.users.admin.pwd=admin
+ * tamaya.users.admin.fullName=Administrator
+ * tamaya.users.admin.roles=admin
+ * tamaya.users.john.pwd=meymey
+ * tamaya.users.john.fullName=John Doe
+ * tamaya.users.john.roles=admin,user
+ * </pre>
+ */
+public class ConfiguredUserService implements UserService{
+
+    private Map<String, User> users = new ConcurrentHashMap<>();
+
+    /**
+     * Constructor reading the configuration and initializing the users table.
+     */
+    public ConfiguredUserService(){
+        // read from config
+        Map<String,String> config = ConfigurationProvider.getConfiguration().with(
+                ConfigurationFunctions.section("tamaya.users.", true)).getProperties();
+        for(Map.Entry<String,String> en:config.entrySet()){
+            if(en.getKey().endsWith(".pwd")){
+                String uid = en.getKey().substring(0,en.getKey().length()-4);
+                String pwd = en.getValue();
+                String fullName = config.get(uid+".fullName");
+                String roles = config.get(uid+".roles");
+                if(roles==null){
+                    roles="";
+                }
+                users.put(uid.toLowerCase(), new User(uid, fullName, pwd, roles.split(",")));
+            }
+        }
+
+    }
+
+    @Override
+    public User login(String userId, String credentials) {
+        User user = this.users.get(userId.toLowerCase());
+        if(user!=null && user.login(credentials)){
+            return user;
+        }
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
new file mode 100644
index 0000000..193144e
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
@@ -0,0 +1,91 @@
+///*
+// * 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.ui.internal;
+//
+//import org.apache.tamaya.ConfigurationProvider;
+//import org.apache.tamaya.ui.services.MessageProvider;
+//
+//import java.util.Locale;
+//import java.util.ResourceBundle;
+//
+///**
+// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+// * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
+// * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
+// * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
+// */
+//public class ResourceBundleMessageProvider implements MessageProvider{
+//
+//    private static final String BASENAME = evaluateBaseName();
+//
+//    /**
+//     * The property name for configuring the resource bundle's base name either as
+//     * system property, environment property or configuration entry.
+//     */
+//    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
+//
+//    /**
+//     * Evaluates the base name to be used for creating the resource bundle used.
+//     * @return
+//     */
+//    private static String evaluateBaseName() {
+//        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = System.getenv("tamaya.ui.baseName");
+//        }
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
+//        }
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = "ui/ui.lang/tamaya";
+//        }
+//        return baseName;
+//    }
+//
+//    /**
+//     * Private singleton constructor.
+//     */
+//    public ResourceBundleMessageProvider(){}
+//
+//    /**
+//     * Get a message using the defaul locale.
+//     * @param bundleID the message bundle key, not null.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID){
+//        return getMessage(bundleID, Locale.getDefault());
+//    }
+//
+//    /**
+//     * Get a message.
+//     * @param bundleID the message bundle key, not null.
+//     * @param locale the target locale, or null, for the default locale.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID, Locale locale){
+//        try{
+//            ResourceBundle bundle = ResourceBundle.getBundle(BASENAME, locale);
+//            return bundle.getString(bundleID);
+//        }
+//        catch(Exception e){
+//            return bundleID;
+//        }
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java b/ui/base/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
new file mode 100644
index 0000000..83b4af4
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
@@ -0,0 +1,78 @@
+/*
+ * 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.ui.internal;
+
+import org.apache.tamaya.spisupport.BasePropertySource;
+import org.apache.tamaya.spisupport.MapPropertySource;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Simple property source, used for internationalization.
+ */
+final class URLPropertySource extends BasePropertySource{
+
+    private static final Logger LOG = Logger.getLogger(URLPropertySource.class.getName());
+    private URL url;
+    private Map<String, String> properties;
+
+    public URLPropertySource(URL url){
+        this.url = Objects.requireNonNull(url);
+        load();
+    }
+
+    /**
+     * Loads/reloads the properties from the URL. If loading of the properties failed the previus state is preserved,
+     * unless there is no such state. In this case an empty map is assigned.
+     */
+    public void load(){
+        try(InputStream is = url.openStream()) {
+            Properties props = new Properties();
+            if (url.getFile().endsWith(".xml")) {
+                props.loadFromXML(is);
+            } else {
+                props.load(is);
+            }
+            properties = Collections.unmodifiableMap(MapPropertySource.getMap(props));
+        }
+        catch(Exception e){
+            LOG.log(Level.WARNING, "Failed to read config from "+url,e);
+            if(properties==null) {
+                properties = Collections.emptyMap();
+            }
+        }
+    }
+
+    @Override
+    public String getName() {
+        return url.toString();
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
new file mode 100644
index 0000000..a15ae46
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
@@ -0,0 +1,43 @@
+/*
+ * 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.ui.services;
+
+import java.util.Locale;
+
+/**
+ * Component resolving messages for being shown in the UI.
+ */
+public interface MessageProvider {
+
+    /**
+     * Get a message using the default locale.
+     * @param key the message key, not null.
+     * @return the resolved message, or the key, never null.
+     */
+    String getMessage(String key);
+
+    /**
+     * Get a message.
+     * @param key the message key, not null.
+     * @param locale the target locale, or null, for the default locale.
+     * @return the resolved message, or the key, never null.
+     */
+    String getMessage(String key, Locale locale);
+
+}



[28/50] [abbrv] incubator-tamaya-sandbox git commit: Moved collections module into active modules folder.

Posted by pl...@apache.org.
Moved collections module into active modules folder.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/c9e965a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/c9e965a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/c9e965a2

Branch: refs/heads/master
Commit: c9e965a2ba8f7306cc1f1ebffb00d78f8d44c89d
Parents: 715293d
Author: anatole <an...@apache.org>
Authored: Sat Feb 27 22:12:31 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sat Feb 27 22:12:31 2016 +0100

----------------------------------------------------------------------
 collections/pom.xml                             |  75 ------
 .../internal/AdaptiveCombinationPolicy.java     | 126 ----------
 .../internal/ArrayListConverter.java            |  64 ------
 .../internal/CollectionConverter.java           |  63 -----
 .../internal/ConcurrentHashMapConverter.java    |  65 ------
 .../collections/internal/HashMapConverter.java  |  64 ------
 .../collections/internal/HashSetConverter.java  |  65 ------
 .../collections/internal/ItemTokenizer.java     | 171 --------------
 .../internal/LinkedListConverter.java           |  64 ------
 .../collections/internal/ListConverter.java     |  55 -----
 .../collections/internal/MapConverter.java      |  59 -----
 .../collections/internal/SetConverter.java      |  55 -----
 .../internal/SortedMapConverter.java            |  37 ---
 .../internal/SortedSetConverter.java            |  36 ---
 .../collections/internal/TreeMapConverter.java  |  62 -----
 .../collections/internal/TreeSetConverter.java  |  64 ------
 .../org.apache.tamaya.spi.PropertyConverter     |  31 ---
 ...he.tamaya.spi.PropertyValueCombinationPolicy |  19 --
 .../collections/CollectionAdvancedTests.java    |  99 --------
 .../collections/CollectionsBaseTests.java       | 227 -------------------
 .../CollectionsTypedReadOnlyTests.java          | 173 --------------
 .../collections/CollectionsTypedTests.java      | 208 -----------------
 .../collections/MyUpperCaseConverter.java       |  33 ---
 .../META-INF/javaconfiguration.properties       |  73 ------
 24 files changed, 1988 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/pom.xml
----------------------------------------------------------------------
diff --git a/collections/pom.xml b/collections/pom.xml
deleted file mode 100644
index d5ed30b..0000000
--- a/collections/pom.xml
+++ /dev/null
@@ -1,75 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>tamaya-collections</artifactId>
-    <name>Apache Tamaya Modules - Collections Support</name>
-    <packaging>bundle</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.tamaya,
-                            org.apache.tamaya.spi,
-                            javax.annotation,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.tamaya.collections.internal
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
deleted file mode 100644
index 3234e37..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ /dev/null
@@ -1,126 +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.collections.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
-import javax.annotation.Priority;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * PropertyValueCombinationPolicy that allows to configure a PropertyValueCombinationPolicy for each key
- * individually, by adding a configured entry of the form
- * {@code _key.combination-policy=collect|override|fqPolicyClassName}.
- */
-@Priority(100)
-public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy {
-    /** Logger. */
-    private static final Logger LOG = Logger.getLogger(AdaptiveCombinationPolicy.class.getName());
-
-    /**
-     * Collecting combination policy using (optional) {@code item-separator} parameter for determining the sparator
-     * to combine multiple config entries found.
-     */
-    private static final PropertyValueCombinationPolicy COLLECTING_POLICY = new PropertyValueCombinationPolicy(){
-        @Override
-        public Map<String, String> collect(Map<String, String> currentValue, String key, PropertySource propertySource) {
-            // check for default collection combination policies for lists, sets, maps etc.
-            final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".item-separator", ",");
-            PropertyValue newValue = propertySource.get(key);
-            if(newValue!=null){
-                Map<String,String> newMapValue = new HashMap<>();
-                if(currentValue!=null){
-                    newMapValue.putAll(currentValue);
-                }
-                String oldVal = newMapValue.get(key);
-                newMapValue.putAll(newValue.getConfigEntries());
-                if(oldVal!=null){
-                    newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
-                }
-                return newMapValue;
-            }else{
-                if(currentValue!=null){
-                    return currentValue;
-                }
-                return Collections.emptyMap();
-            }
-        }
-    };
-
-    /** Cache for loaded custom combination policies. */
-    private Map<Class, PropertyValueCombinationPolicy> configuredPolicies = new ConcurrentHashMap<>();
-
-    @Override
-    public Map<String,String> collect(Map<String,String> currentValue, String key, PropertySource propertySource){
-        if(key.startsWith("_")){
-            PropertyValue newValue = propertySource.get(key);
-            if(newValue!=null){
-                return newValue.getConfigEntries();
-            }
-            return currentValue;
-        }
-        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + key+".combination-policy", "override");
-        PropertyValueCombinationPolicy combinationPolicy = null;
-        switch(adaptiveCombinationPolicyClass){
-            case "collect":
-            case "COLLECT":
-                if(LOG.isLoggable(Level.FINEST)){
-                    LOG.finest("Using collecting combination policy for key: " + key + ".");
-                }
-                combinationPolicy = COLLECTING_POLICY;
-                break;
-            case "override":
-            case "OVERRIDE":
-                if(LOG.isLoggable(Level.FINEST)){
-                    LOG.finest("Using default (overriding) combination policy for key: " + key + ".");
-                }
-                combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
-                break;
-            default:
-                try{
-                    Class<PropertyValueCombinationPolicy> clazz = (Class<PropertyValueCombinationPolicy>)
-                            Class.forName(adaptiveCombinationPolicyClass);
-                    combinationPolicy = configuredPolicies.get(clazz);
-                    if(combinationPolicy==null){
-                        combinationPolicy = clazz.newInstance();
-                        configuredPolicies.put(clazz, combinationPolicy);
-                    }
-                    if(LOG.isLoggable(Level.FINEST)){
-                        LOG.finest("Using custom combination policy "+adaptiveCombinationPolicyClass+" for " +
-                                "key: " + key + ".");
-                    }
-                }
-                catch(Exception e){
-                    LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for " +
-                            "key: " + key + ", using default (overriding) policy.", e);
-                    combinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
-                }
-        }
-        return combinationPolicy.collect(currentValue, key, propertySource);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
deleted file mode 100644
index 8281395..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ /dev/null
@@ -1,64 +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.collections.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating ArrayList representation of a values.
- */
-public class ArrayListConverter implements PropertyConverter<ArrayList> {
-
-    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static ArrayListConverter INSTANCE = new ArrayListConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static ArrayListConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public ArrayList convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        ArrayList<Object> mlist = new ArrayList<>();
-        for(String raw:rawList){
-            Object convValue = ItemTokenizer.convertValue(raw, context);
-            if (convValue != null) {
-                mlist.add(convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return mlist;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
deleted file mode 100644
index 0d9a799..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
+++ /dev/null
@@ -1,63 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collection;
-import java.util.Collections;
-
-/**
- *  PropertyConverter for gnerating a LIST representation of values.
- */
-public class CollectionConverter implements PropertyConverter<Collection> {
-
-    @Override
-    public Collection convert(String value, ConversionContext context) {
-        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "List");
-        if(collectionType.startsWith("java.util.")){
-            collectionType = collectionType.substring("java.util.".length());
-        }
-        Collection result = null;
-        switch(collectionType){
-            case "List":
-            case "ArrayList":
-            default:
-                result = ArrayListConverter.getInstance().convert(value, context);
-                break;
-            case "LinkedList":
-                result = LinkedListConverter.getInstance().convert(value, context);
-                break;
-            case "Set":
-            case "HashSet":
-                result = HashSetConverter.getInstance().convert(value, context);
-                break;
-            case "SortedSet":
-            case "TreeSet":
-                result = TreeSetConverter.getInstance().convert(value, context);
-                break;
-        }
-        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
-                Boolean.class, Boolean.TRUE)){
-            return Collections.unmodifiableCollection(result);
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
deleted file mode 100644
index 131b41c..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
+++ /dev/null
@@ -1,65 +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.collections.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating ConcurrentHashMap representation of a values.
- */
-public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentHashMap> {
-    private static final Logger LOG = Logger.getLogger(ConcurrentHashMapConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static ConcurrentHashMapConverter INSTANCE = new ConcurrentHashMapConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static ConcurrentHashMapConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public ConcurrentHashMap convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        ConcurrentHashMap result = new ConcurrentHashMap(rawList.size());
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
deleted file mode 100644
index 6a3ac97..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ /dev/null
@@ -1,64 +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.collections.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating HashMap representation of a values.
- */
-public class HashMapConverter implements PropertyConverter<HashMap> {
-    private static final Logger LOG = Logger.getLogger(HashMapConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static HashMapConverter INSTANCE = new HashMapConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static HashMapConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public HashMap convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        HashMap result = new HashMap(rawList.size());
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
deleted file mode 100644
index 40b204f..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ /dev/null
@@ -1,65 +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.collections.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating HashSet representation of a values.
- */
-public class HashSetConverter implements PropertyConverter<HashSet> {
-
-    private static final Logger LOG = Logger.getLogger(HashSetConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static HashSetConverter INSTANCE = new HashSetConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static HashSetConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public HashSet convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        HashSet<Object> result = new HashSet<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.add(convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
deleted file mode 100644
index 98831e1..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
+++ /dev/null
@@ -1,171 +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.collections.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Helper class that implements the tokenizing of the entries of a configuration value.
- */
-final class ItemTokenizer {
-
-    private static final Logger LOG = Logger.getLogger(ItemTokenizer.class.getName());
-
-    /**
-     * Private singleton.
-     */
-    private ItemTokenizer(){}
-
-    /**
-     * Splits the given value using the given separator. Matcjhing is done by traversing the String value using
-     * {@code indexOf} calls, one by one. The last unresolvable item (without any next separator token)
-     * is added at the end of the list.
-     * @param value the value, not null.
-     * @param context the conversion context.
-     * @return the tokenized value as list, in order of occurrence.
-     */
-    public static List<String> split(String value, ConversionContext context){
-        return split(value, ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + context.getKey()+"." +
-                        "item-separator", ","));
-    }
-
-    /**
-     * Splits the given value using the given separator. Matcjhing is done by traversing the String value using
-     * {@code indexOf} calls, one by one. The last unresolvable item (without any next separator token)
-     * is added at the end of the list.
-     * @param value the value, not null.
-     * @param separator the separator to be used.
-     * @return the tokenized value as list, in order of occurrence.
-     */
-    public static List<String> split(String value, final String separator) {
-        ArrayList<String> result = new ArrayList<>();
-        int start = 0;
-        int end = value.indexOf(separator,start);
-        while(end>0) {
-            if (end>0 && (value.charAt(end - 1) != '\\')) {
-                result.add(value.substring(start, end));
-                start = end + separator.length();
-                end = value.indexOf(separator,start);
-            }else{
-                end = value.indexOf(separator,end + separator.length());
-            }
-            end = value.indexOf(separator,start);
-        }
-        if(start < value.length()){
-            result.add(value.substring(start));
-        }
-        return result;
-    }
-
-    /**
-     * plits the given String value as a map entry, splitting it into key and value part with the given separator.
-     * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
-     * parts are normally trimmed, unless they are enmcosed with brackets {@code []}.
-     * @param mapEntry the entry, not null.
-     * @param context the conversion context.
-     * @return an array of length 2, with the trimmed and parsed key/value pair.
-     */
-    public static String[] splitMapEntry(String mapEntry, ConversionContext context){
-        return splitMapEntry(mapEntry, ConfigurationProvider.getConfiguration().getOrDefault(
-                '_' + context.getKey()+".map-entry-separator", "::"));
-    }
-
-    /**
-     * Splits the given String value as a map entry, splitting it into key and value part with the given separator.
-     * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
-     * parts are normally trimmed, unless they are enmcosed with brackets {@code []}.
-     * @param mapEntry the entry, not null.
-     * @param separator the separator, not null.
-     * @return an array of length 2, with the trimmed and parsed key/value pair.
-     */
-    public static String[] splitMapEntry(final String mapEntry, final String separator) {
-        int index = mapEntry.indexOf(separator);
-        String[] items;
-        if(index<0) {
-            items = new String[]{mapEntry, mapEntry};
-        }else {
-            items = new String[]{mapEntry.substring(0,index),
-                                 mapEntry.substring(index+separator.length())};
-        }
-        if(items[0].trim().startsWith("[")){
-            items[0]= items[0].trim();
-            items[0] = items[0].substring(1);
-        }else{
-            items[0]= items[0].trim();
-        }
-        if(items[1].trim().endsWith("]")){
-            items[1] = items[1].substring(0,items[1].length()-1);
-        }else{
-            items[1]= items[1].trim();
-        }
-        return items;
-    }
-
-    /**
-     * Parses the given value into the required collection target type, defined by the context.
-     * @param value the raw String value.
-     * @param context the context
-     * @return the parsed value, or null.
-     */
-    public static Object convertValue(String value, ConversionContext context) {
-        String converterClass = context.getConfiguration().get('_' + context.getKey() + ".item-converter");
-        List<PropertyConverter<Object>> valueConverters = new ArrayList<>(1);
-        if (converterClass != null) {
-            try {
-                valueConverters.add((PropertyConverter<Object>) Class.forName(converterClass).newInstance());
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
-            }
-        }
-        if (TypeLiteral.getTypeParameters(context.getTargetType().getType()).length>0) {
-            valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(
-                    TypeLiteral.of(TypeLiteral.getTypeParameters(context.getTargetType().getType())[0])));
-        }
-        ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
-                context.getConfigurationContext(), context.getKey(),
-                TypeLiteral.of(context.getTargetType().getType())).build();
-        Object result = null;
-        if (valueConverters.isEmpty()) {
-            return value;
-        } else {
-            for (PropertyConverter<Object> conv : valueConverters) {
-                try {
-                    result = conv.convert(value, ctx);
-                    if (result != null) {
-                        return result;
-                    }
-                } catch (Exception e) {
-                    LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
-                }
-            }
-        }
-        LOG.log(Level.SEVERE, "Failed to convert collection value type for '" + value + "'.");
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
deleted file mode 100644
index 4389a54..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ /dev/null
@@ -1,64 +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.collections.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating LinkedList representation of a values.
- */
-public class LinkedListConverter implements PropertyConverter<LinkedList> {
-    private static final Logger LOG = Logger.getLogger(LinkedListConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static LinkedListConverter INSTANCE = new LinkedListConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static LinkedListConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public LinkedList convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        LinkedList<Object> result = new LinkedList<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.add(convValue);
-                continue;
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
deleted file mode 100644
index 65fc54e..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
+++ /dev/null
@@ -1,55 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- *  PropertyConverter for gnerating a LIST representation of values.
- */
-public class ListConverter implements PropertyConverter<List> {
-
-    @Override
-    public List convert(String value, ConversionContext context) {
-        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "List");
-        if(collectionType.startsWith("java.util.")){
-            collectionType = collectionType.substring("java.util.".length());
-        }
-        List result = null;
-        switch(collectionType){
-            case "List":
-            case "ArrayList":
-            default:
-                result = ArrayListConverter.getInstance().convert(value, context);
-                break;
-            case "LinkedList":
-                result = LinkedListConverter.getInstance().convert(value, context);
-                break;
-        }
-        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
-                Boolean.class, Boolean.TRUE)){
-            return Collections.unmodifiableList(result);
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
deleted file mode 100644
index 606e14f..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
+++ /dev/null
@@ -1,59 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-/**
- *  PropertyConverter for gnerating HashMap representation of a values.
- */
-public class MapConverter implements PropertyConverter<Map> {
-
-    @Override
-    public Map convert(String value, ConversionContext context) {
-        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "Map");
-        if(collectionType.startsWith("java.util.")){
-            collectionType = collectionType.substring("java.util.".length());
-        }
-        Map result = null;
-        switch(collectionType){
-            case "Map":
-            case "HashMap":
-            default:
-                result = HashMapConverter.getInstance().convert(value, context);
-                break;
-            case "TreeMap":
-                result = TreeMapConverter.getInstance().convert(value, context);
-                break;
-            case "ConcurrentHashMap":
-                result = ConcurrentHashMapConverter.getInstance().convert(value, context);
-                break;
-        }
-        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
-                Boolean.class, Boolean.TRUE)){
-            return Collections.unmodifiableMap(result);
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
deleted file mode 100644
index 75301bc..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
+++ /dev/null
@@ -1,55 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- *  PropertyConverter for gnerating a LIST representation of values.
- */
-public class SetConverter implements PropertyConverter<Set> {
-
-    @Override
-    public Set convert(String value, ConversionContext context) {
-        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "Set");
-        if(collectionType.startsWith("java.util.")){
-            collectionType = collectionType.substring("java.util.".length());
-        }
-        Set result = null;
-        switch(collectionType){
-            case "Set":
-            case "HashSet":
-            default:
-                result = HashSetConverter.getInstance().convert(value, context);
-                break;
-            case "TreeSet":
-                result = TreeSetConverter.getInstance().convert(value, context);
-                break;
-        }
-        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
-                Boolean.class, Boolean.TRUE)){
-            return Collections.unmodifiableSet(result);
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
deleted file mode 100644
index 1015751..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
+++ /dev/null
@@ -1,37 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collections;
-import java.util.SortedMap;
-import java.util.SortedSet;
-
-/**
- *  PropertyConverter for gnerating a LIST representation of values.
- */
-public class SortedMapConverter implements PropertyConverter<SortedMap> {
-
-    @Override
-    public SortedMap convert(String value, ConversionContext context) {
-        return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value, context));
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
deleted file mode 100644
index c0b8065..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
+++ /dev/null
@@ -1,36 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.Collections;
-import java.util.SortedSet;
-
-/**
- *  PropertyConverter for gnerating a LIST representation of values.
- */
-public class SortedSetConverter implements PropertyConverter<SortedSet> {
-
-    @Override
-    public SortedSet convert(String value, ConversionContext context) {
-        return Collections.unmodifiableSortedSet(TreeSetConverter.getInstance().convert(value, context));
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
deleted file mode 100644
index fef25fe..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
+++ /dev/null
@@ -1,62 +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.collections.internal;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.List;
-import java.util.TreeMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating HashMap representation of a values.
- */
-public class TreeMapConverter implements PropertyConverter<TreeMap> {
-    /** Logger used. */
-    private static final Logger LOG = Logger.getLogger(HashMapConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static TreeMapConverter INSTANCE = new TreeMapConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static TreeMapConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public TreeMap convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        TreeMap result = new TreeMap();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.put(items[0], convValue);
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
deleted file mode 100644
index 9206f07..0000000
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ /dev/null
@@ -1,64 +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.collections.internal;
-
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.util.List;
-import java.util.TreeSet;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- *  PropertyConverter for gnerating HashSet representation of a values.
- */
-public class TreeSetConverter implements PropertyConverter<TreeSet> {
-
-    private static final Logger LOG = Logger.getLogger(TreeSetConverter.class.getName());
-
-    /** The shared instance, used by other collection converters in this package.*/
-    private static TreeSetConverter INSTANCE = new TreeSetConverter();
-
-    /**
-     * Provide a shared instance, used by other collection converters in this package.
-     * @return the shared instance, never null.
-     */
-    static TreeSetConverter getInstance(){
-        return INSTANCE;
-    }
-
-    @Override
-    public TreeSet convert(String value, ConversionContext context) {
-        List<String> rawList = ItemTokenizer.split(value, context);
-        TreeSet<Object> result = new TreeSet<>();
-        for(String raw:rawList){
-            String[] items = ItemTokenizer.splitMapEntry(raw, context);
-            Object convValue = ItemTokenizer.convertValue(items[1], context);
-            if(convValue!=null){
-                result.add(convValue);
-                continue;
-            }else{
-                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
-            }
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
----------------------------------------------------------------------
diff --git a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
deleted file mode 100644
index 9a93a69..0000000
--- a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ /dev/null
@@ -1,31 +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.collections.internal.ArrayListConverter
-org.apache.tamaya.collections.internal.CollectionConverter
-org.apache.tamaya.collections.internal.HashMapConverter
-org.apache.tamaya.collections.internal.ConcurrentHashMapConverter
-org.apache.tamaya.collections.internal.HashSetConverter
-org.apache.tamaya.collections.internal.LinkedListConverter
-org.apache.tamaya.collections.internal.ListConverter
-org.apache.tamaya.collections.internal.MapConverter
-org.apache.tamaya.collections.internal.SetConverter
-org.apache.tamaya.collections.internal.SortedSetConverter
-org.apache.tamaya.collections.internal.SortedMapConverter
-org.apache.tamaya.collections.internal.TreeMapConverter
-org.apache.tamaya.collections.internal.TreeSetConverter

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
----------------------------------------------------------------------
diff --git a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
deleted file mode 100644
index 6b7a67b..0000000
--- a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
+++ /dev/null
@@ -1,19 +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.collections.internal.AdaptiveCombinationPolicy
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
deleted file mode 100644
index ddabb23..0000000
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.tamaya.collections;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.junit.Test;
-
-import java.util.Currency;
-import java.util.List;
-import java.util.Map;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * Created by atsticks on 16.02.16.
- */
-public class CollectionAdvancedTests {
-
-    /**
-     * Tests if a custom separator works, Config is
-     * <pre>
-     *  sep-list=a,b,c|d,e,f|g,h,i
-     *  _sep-list.collection-type=List
-     *  _sep-list.collection-separator=|
-     * </pre>
-     */
-    @Test
-    public void testCustomSeparator(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("sep-list", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(3, items.size());
-        assertEquals("a,b,c", items.get(0));
-        assertEquals("d,e,f", items.get(1));
-        assertEquals("g,h,i", items.get(2));
-    }
-
-    /**
-     * Test typed content.
-     * <pre>
-     *  currency-list=CHF,USD,YEN
-     *  _currency-list.collection-type=List
-     * </pre>
-     */
-    @Test
-    public void testTypedContent(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<Currency> items = config.get("currency-list", new TypeLiteral<List<Currency>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(3, items.size());
-        assertEquals("CHF", items.get(0).getCurrencyCode());
-        assertEquals("USD", items.get(1).getCurrencyCode());
-        assertEquals("USS", items.get(2).getCurrencyCode());
-    }
-
-    /**
-     * Tests if a custom parser works, Config is
-     * <pre>
-     *  parser-list=a,b,c
-     *  _parser-list.collection-type=List
-     *  _parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
-     * </pre>
-     */
-    @Test
-    public void testCustomParser(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("parser-list", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(3, items.size());
-        assertEquals("(A)", items.get(0));
-        assertEquals("(B)", items.get(1));
-        assertEquals("(C)", items.get(2));
-    }
-
-    /**
-     * Redefined map format parsing, Config is as follows:
-     * <pre>
-     *  redefined-map=0==none | 1==single | 2==any
-     *  _redefined-map.map-entry-separator===
-     *  _redefined-map.item-separator=|
-     * </pre>
-     */
-    @Test
-    public void testCustomMapParser(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("redefined-map", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(3, items.size());
-        assertEquals("none", items.get("0"));
-        assertEquals("single", items.get("1"));
-        assertEquals("any", items.get("2"));
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
deleted file mode 100644
index 34c82cb..0000000
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
+++ /dev/null
@@ -1,227 +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.collections;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.junit.Test;
-
-import java.util.*;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * Basic tests for Tamaya collection support. Relevant configs for this tests:
- * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1::a, 2::b, 3::c, [4:: ]
- * </pre>
- */
-public class CollectionsBaseTests {
-
-    @Test
-    public void testList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("base.items", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (List<String>) config.get("base.items", List.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testArrayList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        ArrayList<String> items = config.get("base.items", new TypeLiteral<ArrayList<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (ArrayList<String>) config.get("base.items", ArrayList.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testLinkedList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        LinkedList<String> items = config.get("base.items", new TypeLiteral<LinkedList<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (LinkedList<String>) config.get("base.items", LinkedList.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (Set<String>) config.get("base.items", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testSortedSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<SortedSet<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (SortedSet<String>) config.get("base.items", SortedSet.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testHashSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<HashSet<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (HashSet<String>) config.get("base.items", HashSet.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testTreeSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        TreeSet<String> items = config.get("base.items", new TypeLiteral<TreeSet<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (TreeSet<String>) config.get("base.items", TreeSet.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<Map<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items = (Map<String,String>) config.get("base.map", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-    }
-
-    @Test
-    public void testHashMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<HashMap<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items = (HashMap<String,String>) config.get("base.map", HashMap.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-    }
-
-    @Test
-    public void testSortedMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<SortedMap<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items = (Map<String,String>) config.get("base.map", SortedMap.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-    }
-
-    @Test
-    public void testTreeMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        TreeMap<String,String> items = config.get("base.map", new TypeLiteral<TreeMap<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items =  config.get("base.map", TreeMap.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-    }
-
-    @Test
-    public void testCollection_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("base.items", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (Collection<String>) config.get("base.items", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
deleted file mode 100644
index 7882512..0000000
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
+++ /dev/null
@@ -1,173 +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.collections;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.junit.Test;
-
-import java.util.*;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.*;
-
-/**
- * Basic tests for Tamaya collection support. Relevant configs for this tests:
- * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1::a, 2::b, 3::c, [4:: ]
- * </pre>
- */
-public class CollectionsTypedReadOnlyTests {
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testArrayListList_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("typed.arraylist", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testArrayListList_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = (List<String>) config.get("typed.arraylist", List.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testLinkedListList_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("typed.linkedlist", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testLinkedListList_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = (List<String>) config.get("typed.linkedlist", List.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testHashSet_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("typed.hashset", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-    @Test(expected=UnsupportedOperationException.class)
-    public void testHashSet_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = (Set<String>) config.get("typed.hashset", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testTreeSet_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("typed.treeset", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-    @Test(expected=UnsupportedOperationException.class)
-    public void testTreeSet_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = items = (Set<String>) config.get("typed.treeset", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items.add("test");
-    }
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testHashMap_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("typed.hashmap", new TypeLiteral<Map<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items.put("g","hjhhj");
-    }
-    @Test(expected=UnsupportedOperationException.class)
-    public void testHashMap_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = (Map<String,String>) config.get("typed.hashmap", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items.put("g","hjhhj");
-    }
-
-
-    @Test(expected=UnsupportedOperationException.class)
-    public void testTreeMap_1(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("typed.treemap", new TypeLiteral<Map<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items.put("g","hjhhj");
-    }
-    @Test(expected=UnsupportedOperationException.class)
-    public void testTreeMap_2(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = (Map<String,String>) config.get("typed.treemap", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items.put("g","hjhhj");
-    }
-
-}


[30/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-72 Adapted the API of the Joda Time module to the current API of Tamaya. Tests must be adapted.

Posted by pl...@apache.org.
TAMAYA-72 Adapted the API of the Joda Time module to the current API of Tamaya. Tests must be adapted.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/7fbc3f0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/7fbc3f0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/7fbc3f0f

Branch: refs/heads/master
Commit: 7fbc3f0fb3e6c917891c8713864972b3fe5d11bd
Parents: 43328ec
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sun Mar 6 12:56:05 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sun Mar 6 12:56:05 2016 +0100

----------------------------------------------------------------------
 jodatime/pom.xml                                  |  6 ++++++
 .../apache/tamaya/jodatime/DateTimeConverter.java |  5 ++++-
 .../tamaya/jodatime/DateTimeZoneConverter.java    |  5 ++++-
 .../apache/tamaya/jodatime/PeriodConverter.java   |  8 +++++---
 .../tamaya/jodatime/DateTimeConverterIT.java      | 17 ++++++++++++-----
 .../tamaya/jodatime/DateTimeConverterTest.java    | 16 ++++++++++++++--
 .../tamaya/jodatime/DateTimeZoneConverterIT.java  | 16 +++++++++++-----
 .../jodatime/DateTimeZoneConverterTest.java       | 18 ++++++++++++++++--
 .../tamaya/jodatime/PeriodConverterTest.java      | 13 ++++++++++++-
 9 files changed, 84 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 13d7c29..71ffc7a 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -65,6 +65,12 @@ under the License.
         </dependency>
 
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>java-hamcrest</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
index 2de2e5b..f584f76 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
@@ -73,7 +74,9 @@ public class DateTimeConverter implements PropertyConverter<DateTime> {
     }
 
     @Override
-    public DateTime convert(String value) {
+    public DateTime convert(String value, ConversionContext context) {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+
         String trimmed = Objects.requireNonNull(value).trim();
         DateTime result = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
index 72b523b..bf18393 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeZoneConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 import org.joda.time.DateTimeZone;
 
@@ -29,7 +30,9 @@ public class DateTimeZoneConverter implements PropertyConverter<DateTimeZone> {
     private static final Pattern IS_INTEGER_VALUE = Pattern.compile("(\\+|-)?\\d+");
 
     @Override
-    public DateTimeZone convert(String value) {
+    public DateTimeZone convert(String value, ConversionContext context) {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+
         String trimmed = requireNonNull(value).trim();
 
         DateTimeZone result = null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
index f6ad67b..6aca863 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 import org.joda.time.MutablePeriod;
 import org.joda.time.Period;
@@ -33,13 +34,12 @@ import java.util.regex.Pattern;
  * given period into a {@link org.joda.time.Period} instance.</p>
  *
  * <p>This converter supports the following string representations of a
- * period:
+ * period:</p>
  *
  *   <ol>
  *     <li>Alternatice format ({@code Pyyyy-mm-ddThh:mm:ss})</li>
  *     <li>ISO format ({@code PyYmMwWdDThHmMsS})</li>
  *   </ol>
- * </p>
  *
  *
  */
@@ -59,7 +59,9 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period>
     private final static Pattern ALTERNATIVE_PATTERN = Pattern.compile(ALTERNATIVE_REGEX);
 
     @Override
-    public Period convert(String value) {
+    public Period convert(String value, ConversionContext context) {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+
         String trimmed = Objects.requireNonNull(value).trim();
         MutablePeriod result = null;
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
index 2c4130e..85e7b6f 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
@@ -21,6 +21,7 @@ package org.apache.tamaya.jodatime;
 
 import org.apache.tamaya.spi.PropertyConverter;
 import org.apache.tamaya.spi.ServiceContext;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -32,12 +33,18 @@ import static org.hamcrest.Matchers.notNullValue;
 public class DateTimeConverterIT {
     @Test
     public void dateTimeConverterCanBeFoundAsServiceProvider() {
-        List<PropertyConverter> formats = ServiceContext.getInstance()
-                                                        .getServices(PropertyConverter.class);
+        List<PropertyConverter> formats = ServiceContextManager.getServiceContext()
+                                                               .getServices(PropertyConverter.class);
 
-        PropertyConverter<?> converter = formats.stream()
-                                             .filter(s -> s instanceof DateTimeConverter)
-                                             .findFirst().get();
+
+        PropertyConverter<?> converter = null;
+
+        for (PropertyConverter format : formats) {
+            if (format instanceof DateTimeConverter) {
+                converter = format;
+                break;
+            }
+        }
 
         assertThat("Converter not found via service context.", converter, notNullValue());
         assertThat(converter, instanceOf(DateTimeConverter.class));

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
index 6a1803a..57ddd40 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
@@ -18,10 +18,13 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
@@ -62,8 +65,10 @@ public class DateTimeConverterTest {
              {"2007-08-31T16:47:01+00:00 ", FORMATTER.parseDateTime("2007-08-31T16:47:01.0+00:00")},
         };
 
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
         for (Object[] pair : inputResultPairs) {
-            DateTime date = converter.convert((String)pair[0]);
+            DateTime date = converter.convert((String)pair[0], context);
 
             assertThat("Converter failed to convert input value " + pair[0], date, notNullValue());
             assertThat(date.isEqual((DateTime)pair[1]), is(true));
@@ -76,11 +81,18 @@ public class DateTimeConverterTest {
              "00:00", "a", "-", "+ :00", "+00:"
         };
 
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
         for (String input : inputValues) {
-            DateTime date = converter.convert(input);
+            DateTime date = converter.convert(input, context);
 
             assertThat(date, nullValue());
         }
     }
 
+    @Ignore
+    @Test
+    public void allSupportedFormatsAreAddedToTheConversionContext() {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
index a72d84e..0963408 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
@@ -21,6 +21,7 @@ package org.apache.tamaya.jodatime;
 
 import org.apache.tamaya.spi.PropertyConverter;
 import org.apache.tamaya.spi.ServiceContext;
+import org.apache.tamaya.spi.ServiceContextManager;
 import org.junit.Test;
 
 import java.util.List;
@@ -32,12 +33,17 @@ import static org.hamcrest.Matchers.notNullValue;
 public class DateTimeZoneConverterIT {
     @Test
     public void dateTimeZoneConverterCanBeFoundAsServiceProvider() {
-        List<PropertyConverter> formats = ServiceContext.getInstance()
-                                                        .getServices(PropertyConverter.class);
+        List<PropertyConverter> formats = ServiceContextManager.getServiceContext()
+                                                               .getServices(PropertyConverter.class);
 
-        PropertyConverter<?> converter = formats.stream()
-                                             .filter(s -> s instanceof DateTimeZoneConverter)
-                                             .findFirst().get();
+        PropertyConverter<?> converter = null;
+
+        for (PropertyConverter format : formats) {
+            if (format instanceof DateTimeZoneConverter) {
+                converter = format;
+                break;
+            }
+        }
 
         assertThat("Converter not found via service context.", converter, notNullValue());
         assertThat(converter, instanceOf(DateTimeZoneConverter.class));

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
index eba23ca..31180fd 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -18,8 +18,11 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.joda.time.DateTimeZone;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
@@ -49,8 +52,10 @@ public class DateTimeZoneConverterTest {
              {"+04:00", DateTimeZone.forID("+04:00")},
         };
 
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
         for (Object[] pair : inputResultPairs) {
-            DateTimeZone zone = converter.convert((String) pair[0]);
+            DateTimeZone zone = converter.convert((String) pair[0], context);
 
             assertThat("Converter failed to convert input value " + pair[0], zone, notNullValue());
             assertThat(zone, equalTo((DateTimeZone)pair[1]));
@@ -67,10 +72,19 @@ public class DateTimeZoneConverterTest {
              "2007-08-01+00:00"
         };
 
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
         for (String input : inputValues) {
-            DateTimeZone date = converter.convert(input);
+            DateTimeZone date = converter.convert(input, context);
 
             assertThat(date, nullValue());
         }
     }
+
+    @Ignore
+    @Test
+    public void allSupportedFormatsAreAddedToTheConversionContext() {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7fbc3f0f/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
index 291959d..7341af4 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -18,10 +18,13 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.joda.time.Period;
 import org.joda.time.format.ISOPeriodFormat;
 import org.joda.time.format.PeriodFormatter;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
@@ -60,11 +63,19 @@ public class PeriodConverterTest {
 
         };
 
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
         for (Object[] pair : inputResultPairs) {
-            Period period = converter.convert((String) pair[0]);
+            Period period = converter.convert((String) pair[0], context);
 
             assertThat("Converter failed to convert input value " + pair[0], period, notNullValue());
             assertThat(period, equalTo((Period)pair[1]));
         }
     }
+
+    @Ignore
+    @Test
+    public void allSupportedFormatsAreAddedToTheConversionContext() {
+        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+    }
 }


[18/50] [abbrv] incubator-tamaya-sandbox git commit: Fixed further issues from quality gates.

Posted by pl...@apache.org.
Fixed further issues from quality gates.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/56f3d99f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/56f3d99f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/56f3d99f

Branch: refs/heads/master
Commit: 56f3d99f496588c4c1886002d30eeaedc802b674
Parents: 33dc999
Author: anatole <an...@apache.org>
Authored: Sun Jan 10 02:14:41 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sun Jan 10 02:14:41 2016 +0100

----------------------------------------------------------------------
 .../META-INF/javaconfiguration.properties       | 27 ++++---
 .../internal/FileProprtyStoreProviderSpi.java   | 85 ++++++++++++++++++++
 2 files changed, 99 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56f3d99f/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 5cae030..9848617 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -16,35 +16,36 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+# Similar to etcd all keys starting with a _ are hidden by default (only directly accessible).
 
 # Examples for collection syntax
 
 list=a,b,c
-list.{collection-type}=List
+_list.collection-type=List
 #list.{collection-combinationPolicy}=MyLeftAppendingCombinationPolicy
 
 arrayList=d;e;f
-arrayList.{collection-type}=java.util.ArrayList
-arrayList.{collection-separator}=;
-#arrayList.{collection-valueParser}=myParserClass
+_arrayList.collection-type=java.util.ArrayList
+_arrayList.collection-separator=;
+#_arrayList.collection-valueParser=myParserClass
 
 linkedList=g,h,i
-linkedList.{collection-type}=java.util.LinkedList
+_linkedList.collection-type=java.util.LinkedList
 
 set=a,b,b
-set.{collection-type}=java.util.Set
-set.{eval-combinationPolicy}=WarnOnDuplicates
+_set.collection-type=java.util.Set
+_set.eval-combinationPolicy=WarnOnDuplicates
 
 sortedSet=a,c,b
-sortedSet.{collection-type}=java.util.TreeSet
+_sortedSet.collection-type=java.util.TreeSet
 
 map=1:a,2:b,3:c
-map.{collection-type}=Map
-#map.{collection-keyParser}=myParserClass
-#map.{collection-valueParser}=myParserClass
+_map.collection-type=Map
+#_map.collection-keyParser=myParserClass
+#_map.collection-valueParser=myParserClass
 
 sortedMap=|3:c||1:a||2:b|
-sortedMap.{collection-type}=java.util.TreeMap
+_sortedMap.collection-type=java.util.TreeMap
 
 concurrentMap=|3:c||1:a||2:b|
-concurrentMap.{collection-type}=java.util.ConcurrentHashMap
\ No newline at end of file
+_concurrentMap.collection-type=java.util.ConcurrentHashMap
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/56f3d99f/integration/store-file/src/main/java/org/apache/tamaya/store/internal/FileProprtyStoreProviderSpi.java
----------------------------------------------------------------------
diff --git a/integration/store-file/src/main/java/org/apache/tamaya/store/internal/FileProprtyStoreProviderSpi.java b/integration/store-file/src/main/java/org/apache/tamaya/store/internal/FileProprtyStoreProviderSpi.java
new file mode 100644
index 0000000..3ea768a
--- /dev/null
+++ b/integration/store-file/src/main/java/org/apache/tamaya/store/internal/FileProprtyStoreProviderSpi.java
@@ -0,0 +1,85 @@
+/*
+ * 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.store.internal;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.config.GroupConfig;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.store.PropertyStore;
+import org.apache.tamaya.store.spi.PropertyStoreProviderSpi;
+
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * SPI implmentation for a providing Hazelcast based PropertyStores.
+ */
+public class FileProprtyStoreProviderSpi implements PropertyStoreProviderSpi {
+    private static final String CONFIG_CLASS_SYS_PROP = "tamaya.store.file.configClass";
+    private static final String CONFIG_GROUP_SYS_PROP = "tamaya.store.file.groupName";
+
+    private static final Logger LOG = Logger.getLogger(HazelcastProprtyStoreProviderSpi.class.getName());
+
+    private File file;
+    private Map<String,HazelcastProprtyStore> stores = new ConcurrentHashMap<>();
+
+    public HazelcastProprtyStoreProviderSpi() {
+        String customConfig = System.getProperty(CONFIG_CLASS_SYS_PROP);
+        Config config = null;
+        if(customConfig!=null){
+            try {
+                config = (Config)Class.forName(customConfig).newInstance();
+                LOG.info("Successfully created custom store config for HazelCast store: " + customConfig);
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Failed to instantiate custom store config for HazelCast store: " + customConfig, e);
+            }
+        }
+        if(config==null){
+            config = ServiceContextManager.getServiceContext().getService(Config.class);
+        }
+        if(config==null) {
+            config = new Config();
+            GroupConfig gc = new GroupConfig();
+            String groupName = System.getProperty(CONFIG_GROUP_SYS_PROP, "Tamaya");
+            gc.setName(groupName);
+            config.setGroupConfig(gc);
+        }
+        LOG.info("Starting HazelCast storage with config: " + config);
+        store = Hazelcast.getOrCreateHazelcastInstance(config);
+    }
+
+    @Override
+    public PropertyStore getPropertyStore(String storeId) {
+        HazelcastProprtyStore propertyStore = stores.get(storeId);
+        if(propertyStore==null){
+            LOG.info("Creating new distributed configuration map in HazelCast store for " + storeId + "...");
+            propertyStore = new HazelcastProprtyStore(store, storeId);
+            this.stores.put(storeId, propertyStore);
+        }
+        return propertyStore;
+    }
+
+
+
+}


[03/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-112: Add Module Support for Collections - adding configuration data, adaptive combination policy and PropertyConverter skeletons,

Posted by pl...@apache.org.
TAMAYA-112: Add Module Support for Collections - adding configuration data, adaptive combination policy and PropertyConverter skeletons,


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/9a34a72a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/9a34a72a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/9a34a72a

Branch: refs/heads/master
Commit: 9a34a72ac30b94c0c9fdc4a5830ab5f28088dfb3
Parents: e901866
Author: anatole <an...@apache.org>
Authored: Sat Sep 26 01:56:09 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Sat Sep 26 01:56:09 2015 +0200

----------------------------------------------------------------------
 collections/pom.xml                             | 52 +++++++++++++++
 .../internal/AdaptiveCombinationPolicy.java     | 66 ++++++++++++++++++++
 .../internal/ArrayListConverter.java            | 34 ++++++++++
 .../collections/internal/HashMapConverter.java  | 34 ++++++++++
 .../collections/internal/HashSetConverter.java  | 33 ++++++++++
 .../internal/LinkedListConverter.java           | 33 ++++++++++
 .../collections/internal/TreeMapConverter.java  | 34 ++++++++++
 .../collections/internal/TreeSetConverter.java  | 34 ++++++++++
 .../META-INF/javaconfiguration.properties       | 50 +++++++++++++++
 ...he.tamaya.spi.PropertyValueCombinationPolicy | 19 ++++++
 10 files changed, 389 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/pom.xml
----------------------------------------------------------------------
diff --git a/collections/pom.xml b/collections/pom.xml
new file mode 100644
index 0000000..7726888
--- /dev/null
+++ b/collections/pom.xml
@@ -0,0 +1,52 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-sandbox</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-collections</artifactId>
+    <name>Apache Tamaya Modules - Collections Support</name>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-java7-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-java7-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
new file mode 100644
index 0000000..113d817
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -0,0 +1,66 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
+
+import javax.annotation.Priority;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * PropertyValueCombinationPolicy that allows to configure a PropertyValueCombinationPolicy for each key
+ * individually, by adding a configured entry of the form {@code key{combinationPolicy}=fqPolicyClassName}.
+ */
+@Priority(100)
+public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy {
+
+    private static final Logger LOG = Logger.getLogger(AdaptiveCombinationPolicy.class.getName());
+
+    private Map<Class, PropertyValueCombinationPolicy> configuredPolicies = new ConcurrentHashMap<>();
+
+    @Override
+    public String collect(String currentValue, String key, PropertySource propertySource) {
+        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().get(key+"{combinationPolicy}");
+        if(adaptiveCombinationPolicyClass!=null){
+            PropertyValueCombinationPolicy delegatePolicy = null;
+            try{
+                Class clazz = Class.forName(adaptiveCombinationPolicyClass);
+                delegatePolicy = configuredPolicies.get(clazz);
+                if(delegatePolicy==null){
+                    delegatePolicy = PropertyValueCombinationPolicy.class.cast(clazz.newInstance());
+                    configuredPolicies.put(clazz, delegatePolicy);
+                }
+                return delegatePolicy.collect(currentValue, key, propertySource);
+            }
+            catch(Exception e){
+                LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for key: " + key, e);
+            }
+        }
+        String newValue = propertySource.get(key);
+        if(newValue!=null){
+            return newValue;
+        }
+        return currentValue;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
new file mode 100644
index 0000000..0d7e6f3
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+/**
+ *  PropertyConverter for gnerating ArrayList representation of a values.
+ */
+public class ArrayListConverter implements PropertyConverter<ArrayList<?>> {
+    @Override
+    public ArrayList<?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
new file mode 100644
index 0000000..917c31e
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.HashMap;
+import java.util.TreeSet;
+
+/**
+ *  PropertyConverter for gnerating HashMap representation of a values.
+ */
+public class HashMapConverter implements PropertyConverter<HashMap<?,?>> {
+    @Override
+    public HashMap<?,?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
new file mode 100644
index 0000000..d41b6a2
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -0,0 +1,33 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.HashSet;
+
+/**
+ *  PropertyConverter for gnerating HashSet representation of a values.
+ */
+public class HashSetConverter implements PropertyConverter<HashSet<?>> {
+    @Override
+    public HashSet<?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
new file mode 100644
index 0000000..aaca08d
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -0,0 +1,33 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.LinkedList;
+
+/**
+ *  PropertyConverter for gnerating LinkedList representation of a values.
+ */
+public class LinkedListConverter implements PropertyConverter<LinkedList<?>> {
+    @Override
+    public LinkedList<?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
new file mode 100644
index 0000000..6e74d5c
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.HashMap;
+import java.util.TreeMap;
+
+/**
+ *  PropertyConverter for gnerating HashMap representation of a values.
+ */
+public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> {
+    @Override
+    public TreeMap<?,?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
new file mode 100644
index 0000000..2797c91
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -0,0 +1,34 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.HashSet;
+import java.util.TreeSet;
+
+/**
+ *  PropertyConverter for gnerating HashSet representation of a values.
+ */
+public class TreeSetConverter implements PropertyConverter<TreeSet<?>> {
+    @Override
+    public TreeSet<?> convert(String value) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
new file mode 100644
index 0000000..7d8031e
--- /dev/null
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -0,0 +1,50 @@
+#
+# 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.
+#
+
+# Examples for collection syntax
+
+list=a,b,c
+list{collection-type}=List
+#list{collection-combinationPolicy}=MyLeftAppendingCombinationPolicy
+
+arrayList=d;e;f
+arrayList{collection-type}=java.util.ArrayList
+arrayList{collection-separator}=;
+#arrayList{collection-valueParser}=myParserClass
+
+linkedList=g,h,i
+linkedList{collection-type}=java.util.LinkedList
+
+set=a,b,b
+set{collection-type}=java.util.Set
+set{combinationPolicy}=WarnOnDuplicates
+
+sortedSet=a,c,b
+sortedSet{collection:type}=java.util.TreeSet
+
+map=1:a,2:b,3:c
+map{collection-type}=Map
+#map{collection-keyParser}=myParserClass
+#map{collection-valueParser}=myParserClass
+
+sortedMap=|3:c||1:a||2:b|
+sortedMap{collection-type}=java.util.TreeMap
+
+concurrentMap=|3:c||1:a||2:b|
+concurrentMap{collection-type}=java.util.ConcurrentHashMap
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9a34a72a/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy b/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
new file mode 100644
index 0000000..6b7a67b
--- /dev/null
+++ b/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
@@ -0,0 +1,19 @@
+#
+# 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.collections.internal.AdaptiveCombinationPolicy
\ No newline at end of file


[36/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-91 Added integration test

Posted by pl...@apache.org.
TAMAYA-91 Added integration test


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/80df0bee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/80df0bee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/80df0bee

Branch: refs/heads/master
Commit: 80df0beef64d32441a0481aedb4b8fbff3841c7b
Parents: 3f4c1e4
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Thu Mar 10 23:22:38 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Thu Mar 10 23:22:38 2016 +0100

----------------------------------------------------------------------
 .../org/apache/tamaya/jodatime/FullStackIT.java | 22 ++++++++++++++++++++
 .../META-INF/javaconfiguration.properties       |  1 +
 2 files changed, 23 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80df0bee/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
index d046a71..60d8cbc 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
@@ -20,11 +20,17 @@ package org.apache.tamaya.jodatime;
 
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.joda.time.MutablePeriod;
+import org.joda.time.Period;
+import org.joda.time.format.ISOPeriodFormat;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import java.util.Locale;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -62,4 +68,20 @@ public class FullStackIT {
         assertThat(zoneBAsString, equalTo("+01:00"));
         assertThat(zoneB, equalTo(DateTimeZone.forOffsetHours(1)));
     }
+
+    @Test
+    public void retrievePeriodValueFromConfiguration() {
+        Configuration configuration = ConfigurationProvider.getConfiguration();
+
+        MutablePeriod referenceValue = new MutablePeriod();
+
+        ISOPeriodFormat.standard().getParser().parseInto(referenceValue, "P1Y1M1W1DT1H1M1S", 0,
+                                                         Locale.ENGLISH);
+
+        String periodAsString = configuration.get("periodValueA");
+        Period period = configuration.get("periodValueA", Period.class);
+
+        assertThat(periodAsString, equalTo("P1Y1M1W1DT1H1M1S"));
+        assertThat(period, equalTo(referenceValue.toPeriod()));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/80df0bee/jodatime/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/jodatime/src/test/resources/META-INF/javaconfiguration.properties b/jodatime/src/test/resources/META-INF/javaconfiguration.properties
index daf763a..e66e448 100644
--- a/jodatime/src/test/resources/META-INF/javaconfiguration.properties
+++ b/jodatime/src/test/resources/META-INF/javaconfiguration.properties
@@ -19,3 +19,4 @@
 dateTimeValue= 2010-08-08T14:00:15.5+10:00
 dateTimeZoneValueA=UTC
 dateTimeZoneValueB=+01:00
+periodValueA=P1Y1M1W1DT1H1M1S


[46/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-145: Implemented big parts of the new meta-configuration DSL mechanism.

Posted by pl...@apache.org.
TAMAYA-145: Implemented big parts of the new meta-configuration DSL mechanism.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/877d10e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/877d10e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/877d10e8

Branch: refs/heads/master
Commit: 877d10e8dc434b10d7733258a0a1f563435f6f13
Parents: 4397008
Author: anatole <an...@apache.org>
Authored: Thu May 5 18:44:48 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Thu May 5 18:44:48 2016 +0200

----------------------------------------------------------------------
 metamodels/staged/pom.xml                       |  20 +++
 .../tamaya/dsl/ConfigurationContextManager.java | 163 +++++++++++++++++
 .../java/org/apache/tamaya/dsl/EnvConfig.java   | 102 +++++++++++
 .../org/apache/tamaya/dsl/FormatManager.java    | 168 +++++++++++++++++
 .../org/apache/tamaya/dsl/ProfileManager.java   | 179 +++++++++++++++++++
 .../org/apache/tamaya/dsl/package-info.java     |  23 +++
 .../tamaya/staged/spi/DSLSourceResolver.java    |  54 ++++++
 .../apache/tamaya/dsl/ProfileManagerTest.java   |  78 ++++++++
 .../src/test/resources/tamaya-config.yaml       |  85 +++++++++
 9 files changed, 872 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/staged/pom.xml b/metamodels/staged/pom.xml
index 52a1e73..b5c96a2 100644
--- a/metamodels/staged/pom.xml
+++ b/metamodels/staged/pom.xml
@@ -51,6 +51,11 @@ under the License.
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-resolver</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
             <artifactId>tamaya-spisupport</artifactId>
             <version>${project.version}</version>
         </dependency>
@@ -60,9 +65,24 @@ under the License.
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-formats</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-yaml</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>java-hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
new file mode 100644
index 0000000..67a79a6
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
@@ -0,0 +1,163 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+import org.apache.tamaya.spi.*;
+import org.apache.tamaya.staged.spi.DSLSourceResolver;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * Created by atsticks on 05.05.16.
+ */
+public class ConfigurationContextManager {
+
+    private static final Logger LOGGER = Logger.getLogger(EnvConfig.class.getName());
+
+    private ConfigurationContext configurationContext;
+    private Set<String> formats = new HashSet<>();
+    private Set<String> suffixes = new HashSet<>();
+    private Map<String,DSLSourceResolver> dslResolvers = new HashMap<>();
+
+
+    public ConfigurationContextManager(){
+        loadDSLSourceResolvers();
+        Configuration metaConfig = EnvConfig.getMetaConfiguration();
+        Configuration profilesConfig = metaConfig.with(
+                ConfigurationFunctions.section("TAMAYA.PROFILES", true));
+        Configuration metaProfile = profilesConfig.with(
+                ConfigurationFunctions.section("<COMMON>", true));
+        String[] values = metaProfile.getOrDefault("formats","yaml, properties, xml-properties").split(",");
+        for(String fmt:values){
+            fmt = fmt.trim();
+            if(fmt.isEmpty()){
+                continue;
+            }
+            this.formats.add(fmt);
+        }
+        values = metaProfile.getOrDefault("suffixes", "yml, yaml, properties, xml").split(",");
+        for(String sfx:values){
+            sfx = sfx.trim();
+            if(sfx.isEmpty()){
+                continue;
+            }
+            this.suffixes.add(sfx);
+        }
+        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+        Map<String, PropertySource> loadedPropertySources = loadDefaultPropertySources();
+        int defaultOrdinal = loadSources(builder, "<COMMON>", metaProfile, loadedPropertySources, 0) + 20;
+        // Load current profiles
+        for(String profile:ProfileManager.getInstance().getActiveProfiles()){
+            metaProfile = profilesConfig.with(
+                    ConfigurationFunctions.section(profile, true));
+            defaultOrdinal = loadSources(builder, profile, metaProfile, loadedPropertySources, defaultOrdinal) + 20;
+        }
+//         formats:  yaml, properties, xml-properties
+//    - SUFFIX:   yaml, yml, properties, xml
+//    - sources:
+//      - "named:env-properties"   # provider name, or class name
+//      - "named:main-args"
+//      - "named:sys-properties"
+//      - "resource:classpath:META-INF/config/**/*.SUFFIX"
+
+}
+
+    /**
+     * Loads all default registered property sources and providers.
+     * @return the default property sources available on the system.
+     */
+    private Map<String, PropertySource> loadDefaultPropertySources() {
+        Map<String, PropertySource> loadedPropertySources = new HashMap<>();
+        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)){
+            loadedPropertySources.put(ps.getName(), ps);
+        }
+        for(PropertySourceProvider prov: ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
+            for(PropertySource ps: prov.getPropertySources()){
+                loadedPropertySources.put(ps.getName(), ps);
+            }
+        }
+        return loadedPropertySources;
+    }
+
+    private int loadSources(ConfigurationContextBuilder builder, String profileId, Configuration metaProfile, Map<String,
+            PropertySource> defaultPropertySources, int defaultOrdinal) {
+        String[] values;
+        values = metaProfile.getOrDefault("sources","<default>").split(",");
+        if(values.length==1 && "<default>".equals(values[0])){
+            // load default property sources and providers from config as default.
+            // additional providers may be added depending on the active profile...
+            LOGGER.info("Using default configuration setup for "+profileId);
+            builder.addPropertySources(defaultPropertySources.values());
+        }else {
+            int newMaxOrdinal = defaultOrdinal;
+            LOGGER.info("Loading DSL based "+profileId+" configuration context...");
+            int count = 0;
+            for (String source : values) {
+                source = source.trim();
+                if (source.isEmpty()) {
+                    continue;
+                }
+                String sourceKey = getSourceKey(source);
+                LOGGER.info("Loading "+profileId+" configuration source: " + source);
+                // evaluate DSLSourceResolver and resolve PropertySources, register thm into context
+                // apply newMaxOrdinal...
+                DSLSourceResolver resolver = dslResolvers.get(sourceKey);
+                if(resolver==null){
+                    LOGGER.warning("DSL error: unresolvable source expression: "+ source);
+                    continue;
+                }
+                List<PropertySource> sources = resolver.resolve(source.substring(sourceKey.length()), defaultPropertySources, defaultOrdinal);
+                count += sources.size();
+                for(PropertySource ps:sources){
+                    if(ps.getOrdinal()>newMaxOrdinal){
+                        newMaxOrdinal = ps.getOrdinal();
+                    }
+                }
+                builder.addPropertySources(sources);
+            }
+            LOGGER.info("Loaded "+count+" DSL based "+profileId+" configuration contexts.");
+            return newMaxOrdinal;
+        }
+        return defaultOrdinal;
+    }
+
+    private String getSourceKey(String source) {
+        int index = source.indexOf(':');
+        if(index>0){
+            return source.substring(0,index);
+        }
+        return source;
+    }
+
+    private void loadDSLSourceResolvers() {
+        // Load the ConfigurationDSLSourceResolvers on the system
+        for(DSLSourceResolver res:ServiceContextManager.getServiceContext().getServices(DSLSourceResolver.class)){
+            this.dslResolvers.put(res.getKey(), res);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
new file mode 100644
index 0000000..aa5aa62
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
@@ -0,0 +1,102 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.json.YAMLFormat;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.spisupport.MapPropertySource;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Meta environment configuration builder and accessor. Normally this class shoulds never be accessed
+ * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+ * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+ * setup whatever features they implement.
+ */
+public final class EnvConfig {
+
+    private static final Logger LOGGER = Logger.getLogger(EnvConfig.class.getName());
+    private static EnvConfig INSTANCE = new EnvConfig();
+
+    private Configuration config;
+
+    private EnvConfig(){
+        ConfigurationFormat[] formats = loadFormats();
+        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+        for(URL url:ConfigResources.getResourceResolver().getResources("tamaya-config.*")) {
+            for(ConfigurationFormat format:formats) {
+                if(format.accepts(url)){
+                    try(InputStream is = url.openStream()){
+                        ConfigurationData data = format.readConfiguration(url.toString(), is);
+                        builder.addPropertySources(new MapPropertySource(
+                                url.toString(), data.getCombinedProperties()));
+                    }catch(Exception e){
+                        LOGGER.log(Level.INFO, "Failed to read " + url + " with format " + format, e);
+                    }
+                }
+            }
+        }
+        this.config = new DefaultConfiguration(builder.build());
+        LOGGER.info("Meta-Configuration read: " + this.config.getProperties().size() + " entries.");
+    }
+
+    private ConfigurationFormat[] loadFormats() {
+        List<ConfigurationFormat> formats = new ArrayList<>();
+        String metaFormats = System.getProperty("tamaya.meta-formats");
+        if(metaFormats!=null){
+            String[] formatNames = metaFormats.split(",");
+            for(String formatName:formatNames){
+                formats.addAll(ConfigurationFormats.getFormats(formatName));
+            }
+        }
+        if(formats.isEmpty()){
+            formats.addAll(ConfigurationFormats.getFormats("yaml"));
+        }
+        if(formats.isEmpty()){
+            formats.add(new YAMLFormat());
+        }
+        return formats.toArray(new ConfigurationFormat[formats.size()]);
+    }
+
+    /**
+     * Access the system's meta-configuration. Normally this class shoulds never be accessed
+     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+     * setup whatever features they implement.
+     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
+     * model.
+     */
+    public static Configuration getMetaConfiguration(){
+        return INSTANCE.config;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
new file mode 100644
index 0000000..52c4c48
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
@@ -0,0 +1,168 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+import org.apache.tamaya.resolver.Resolver;
+
+import java.util.*;
+
+/**
+ * Component that manages the current supported formats:
+ * <pre>
+ * TAMAYA:
+ *   FORMAT-DEF:
+ *     - formats: yaml, properties, xml-properties
+ * </pre>
+ * Hereby:
+ * <ul>
+ *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
+ * </ul>
+ */
+public class FormatManager {
+
+    private static final FormatManager INSTANCE = new FormatManager();
+
+    /** The currently active profiles, in order of precedence, the most significant are the last ones. */
+    private List<String> activeProfiles = new ArrayList<>();
+    /** A set of all defined profiles. */
+    private Set<String> profiles = new HashSet<>();
+    /** The current used default profiles, loaded initially, before all other profiles are loaded. */
+    private List<String> defaultProfiles = new ArrayList<>();
+
+    /**
+     * Get the current instance.
+     * @return the current profile manager, never null.
+     */
+    public static FormatManager getInstance(){
+        return INSTANCE;
+    }
+
+    private FormatManager(){
+        Configuration metaConfig = EnvConfig.getMetaConfiguration();
+        Configuration profileConfig = metaConfig.with(
+                ConfigurationFunctions.section("TAMAYA.ENV-DEF"));
+        String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
+        for(String sel:selectables){
+            sel = sel.trim();
+            if(sel.isEmpty()){
+                continue;
+            }
+            this.profiles.add(sel);
+        }
+        String[] defaults = profileConfig.getOrDefault("defaults","DEFAULT").split(",");
+        for(String def:defaults){
+            def = def.trim();
+            if(def.isEmpty()){
+                continue;
+            }
+            if(!isProfileDefined(def)){
+                throw new ConfigException("Invalid profile encountered: " +def + ", valid are: " + profiles);
+            }
+            this.defaultProfiles.add(def);
+        }
+        String[] expressions = profileConfig.getOrDefault("evaluation","${sys:ENV}, ${env:ENV}").split(",");
+        String currentEnvironment = null;
+        for(String exp:expressions){
+            exp = exp.trim();
+            if(exp.isEmpty()){
+                continue;
+            }
+            currentEnvironment = Resolver.evaluateExpression(exp, false);
+            if(currentEnvironment!=null){
+                currentEnvironment = currentEnvironment.trim();
+                if(!currentEnvironment.isEmpty()){
+                    break;
+                }
+            }
+        }
+        if(currentEnvironment==null|| currentEnvironment.isEmpty()){
+            currentEnvironment = profileConfig.getOrDefault("default-active", "DEV");
+        }
+        this.activeProfiles.addAll(defaultProfiles);
+        String[] profilesActive = currentEnvironment.split(",");
+        for(String prof:profilesActive){
+            prof = prof.trim();
+            if(prof.isEmpty()){
+                continue;
+            }
+            if(!isProfileDefined(prof)){
+                throw new ConfigException("Invalid profile encountered: " +prof + ", valid are: " + profiles);
+            }
+            this.activeProfiles.add(prof);
+        }
+    }
+
+    /**
+     * Allows to check if a profile is currently active.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is active.
+     */
+    public boolean isProfileActive(String profileName){
+        return this.activeProfiles.contains(profileName);
+    }
+
+    /**
+     * Allows to check if a profile is currently defined.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is defined.
+     */
+    public boolean isProfileDefined(String profileName){
+        return this.profiles.contains(profileName);
+    }
+
+    /**
+     * Allows to check if a profile is a default profile.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is a default profile.
+     */
+    public boolean isProfileDefault(String profileName){
+        return this.defaultProfiles.contains(profileName);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public List<String> getActiveProfiles(){
+        return Collections.unmodifiableList(activeProfiles);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public List<String> getDefaultProfiles(){
+        return Collections.unmodifiableList(defaultProfiles);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public Set<String> getAllProfiles(){
+        return Collections.unmodifiableSet(profiles);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
new file mode 100644
index 0000000..6dba2f2
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
@@ -0,0 +1,179 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+import org.apache.tamaya.resolver.Resolver;
+
+import java.util.*;
+
+/**
+ * Component that manages the current setup profiles for this environment/runtime. The profile manager
+ * reads the profile meta configuration that looks as follows:
+ * <pre>
+ * TAMAYA:
+ *   PROFILES-DEF:
+ *     - profiles:          DEFAULTS,DEV,TEST,PTA,PROD
+ *     - defaults:          DEFAULTS
+ *     - default-active:    DEV
+ *     - evaluation:        ${sys:ENV}, ${env:ENV}
+ * </pre>
+ * Hereby:
+ * <ul>
+ *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
+ *     <li><b>defaults</b> defines the profiles that are loaded implicitly first as defaults.</li>
+ *     <li><b>default-active</b> defines the profile(s) activated by default, when no profile setting could be evaluated.
+ *     <li><b>evaluation</b> defines the resolution expressions to be used to evaluate the current profiles active.
+ *       By default {@code ${sys:ENV}, ${env:ENV}} is used, which tries to evaluate {@code ENV} using system and
+ *       environment properties. Refere to the {@code tamaya-resolver} module for further details on resolvers and
+ *       expressions and see {@link Resolver#evaluateExpression(String, boolean)}.
+ * </ul>
+ */
+public final class ProfileManager {
+
+    private static final ProfileManager INSTANCE = new ProfileManager();
+
+    /** The currently active profiles, in order of precedence, the most significant are the last ones. */
+    private List<String> activeProfiles = new ArrayList<>();
+    /** A set of all defined profiles. */
+    private Set<String> profiles = new HashSet<>();
+    /** The current used default profiles, loaded initially, before all other profiles are loaded. */
+    private List<String> defaultProfiles = new ArrayList<>();
+
+
+    /**
+     * Get the current instance.
+     * @return the current profile manager, never null.
+     */
+    public static ProfileManager getInstance(){
+        return INSTANCE;
+    }
+
+    private ProfileManager(){
+        Configuration metaConfig = EnvConfig.getMetaConfiguration();
+        Configuration profileConfig = metaConfig.with(
+                ConfigurationFunctions.section("TAMAYA.PROFILES-DEF"));
+        String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
+        for(String sel:selectables){
+            sel = sel.trim();
+            if(sel.isEmpty()){
+                continue;
+            }
+            this.profiles.add(sel);
+        }
+        String[] defaults = profileConfig.getOrDefault("defaults","DEFAULT").split(",");
+        for(String def:defaults){
+            def = def.trim();
+            if(def.isEmpty()){
+                continue;
+            }
+            if(!isProfileDefined(def)){
+                throw new ConfigException("Invalid profile encountered: " +def + ", valid are: " + profiles);
+            }
+            this.defaultProfiles.add(def);
+        }
+        String[] expressions = profileConfig.getOrDefault("evaluation","${sys:ENV}, ${env:ENV}").split(",");
+        String currentEnvironment = null;
+        for(String exp:expressions){
+            exp = exp.trim();
+            if(exp.isEmpty()){
+                continue;
+            }
+            currentEnvironment = Resolver.evaluateExpression(exp, false);
+            if(currentEnvironment!=null){
+                currentEnvironment = currentEnvironment.trim();
+                if(!currentEnvironment.isEmpty()){
+                    break;
+                }
+            }
+        }
+        if(currentEnvironment==null|| currentEnvironment.isEmpty()){
+            currentEnvironment = profileConfig.getOrDefault("default-active", "DEV");
+        }
+        this.activeProfiles.addAll(defaultProfiles);
+        String[] profilesActive = currentEnvironment.split(",");
+        for(String prof:profilesActive){
+            prof = prof.trim();
+            if(prof.isEmpty()){
+                continue;
+            }
+            if(!isProfileDefined(prof)){
+                throw new ConfigException("Invalid profile encountered: " +prof + ", valid are: " + profiles);
+            }
+            this.activeProfiles.add(prof);
+        }
+    }
+
+    /**
+     * Allows to check if a profile is currently active.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is active.
+     */
+    public boolean isProfileActive(String profileName){
+        return this.activeProfiles.contains(profileName);
+    }
+
+    /**
+     * Allows to check if a profile is currently defined.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is defined.
+     */
+    public boolean isProfileDefined(String profileName){
+        return this.profiles.contains(profileName);
+    }
+
+    /**
+     * Allows to check if a profile is a default profile.
+     * @param profileName the profile name, not null.
+     * @return true, if the profile is a default profile.
+     */
+    public boolean isProfileDefault(String profileName){
+        return this.defaultProfiles.contains(profileName);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public List<String> getActiveProfiles(){
+        return Collections.unmodifiableList(activeProfiles);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public List<String> getDefaultProfiles(){
+        return Collections.unmodifiableList(defaultProfiles);
+    }
+
+    /**
+     * Get the list of currently active profiles.
+     * @return the list of currently active profiles, in order of precedence, the most significant
+     * are the last ones, never null.
+     */
+    public Set<String> getAllProfiles(){
+        return Collections.unmodifiableSet(profiles);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/dsl/package-info.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/package-info.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/package-info.java
new file mode 100644
index 0000000..0b89d0d
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+/**
+ * Main package of the DSL module. Normally client code does not need access this package.
+ * But extensions also relying on the meta-data configuration mechanism may use it.
+ */
+package org.apache.tamaya.dsl;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
new file mode 100644
index 0000000..e7e0168
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
@@ -0,0 +1,54 @@
+/*
+ * 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.staged.spi;
+
+import org.apache.tamaya.spi.PropertySource;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Resolver to resolve/map DSL related source expressions into PropertySources
+ * loadable by a ConfigurationContext. Hereby the ordering of loaded property sources must be
+ * honored if possible by implicitly adapting/Overriding the default ordinal for the sources
+ * added.
+ */
+public interface DSLSourceResolver {
+
+    /**
+     * Resolve the given expression (without the key part).
+     * @param sourceExpression the source expression, not null.
+     * @param defaultPropertySources the default property sources that can be used as defined by the functionality by
+     *                               a resolver.
+     * @param latestMaxOrdinal the latest ordinal. Newly added property sources should have incresed ordinal values
+     *                         so the overall ordering is preserved as defined by the DSL user.
+     * @return the list of loaded Property sources, never null.
+     */
+    List<PropertySource> resolve(String sourceExpression,
+                                 Map<String, PropertySource> defaultPropertySources,
+                                 int latestMaxOrdinal);
+
+    /**
+     * Get the resolver key, which identifiesan expression to be resolved by a resolver instance.
+     * As an example {@code "named:"} is the key for an expression {@code "named:sys-properties"}.
+     * The method {@link #resolve(String, Map, int)} will onyl receive the secoind part of the expression.
+     * @return identifying key.
+     */
+    String getKey();
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java b/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
new file mode 100644
index 0000000..73a9a59
--- /dev/null
+++ b/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.dsl;
+
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by atsticks on 05.05.16.
+ */
+public class ProfileManagerTest {
+
+    private ProfileManager profileManager = new ProfileManager();
+
+    @org.junit.Test
+    public void isProfileActive() throws Exception {
+        assertTrue(profileManager.isProfileActive("DEV"));
+        assertTrue(profileManager.isProfileActive("DEFAULT"));
+        assertFalse(profileManager.isProfileActive("PROD"));
+    }
+
+    @org.junit.Test
+    public void isProfileDefined() throws Exception {
+        assertTrue(profileManager.isProfileDefined("DEV"));
+        assertTrue(profileManager.isProfileDefined("DEFAULT"));
+        assertFalse(profileManager.isProfileDefined("foo"));
+    }
+
+    @org.junit.Test
+    public void isProfileDefault() throws Exception {
+        assertFalse(profileManager.isProfileDefault("DEV"));
+        assertTrue(profileManager.isProfileDefault("DEFAULT"));
+    }
+
+    @org.junit.Test
+    public void getActiveProfiles() throws Exception {
+        List<String> profiles = profileManager.getActiveProfiles();
+        assertTrue(profiles.contains("DEV"));
+        assertTrue(profiles.contains("DEFAULT"));
+        assertFalse(profiles.contains("TEST"));
+        assertFalse(profiles.contains("PROD"));
+    }
+
+    @org.junit.Test
+    public void getDefaultProfiles() throws Exception {
+        List<String> profiles = profileManager.getDefaultProfiles();
+        assertTrue(profiles.contains("DEFAULT"));
+        assertFalse(profiles.contains("TEST"));
+    }
+
+    @org.junit.Test
+    public void getAllProfiles() throws Exception {
+        Set<String> profiles = profileManager.getAllProfiles();
+        assertTrue(profiles.contains("DEFAULT"));
+        assertTrue(profiles.contains("DEV"));
+        assertTrue(profiles.contains("TEST"));
+        assertTrue(profiles.contains("PROD"));
+        assertFalse(profiles.contains("foo"));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/877d10e8/metamodels/staged/src/test/resources/tamaya-config.yaml
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/tamaya-config.yaml b/metamodels/staged/src/test/resources/tamaya-config.yaml
new file mode 100644
index 0000000..a99eda9
--- /dev/null
+++ b/metamodels/staged/src/test/resources/tamaya-config.yaml
@@ -0,0 +1,85 @@
+#
+# 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.
+#
+TAMAYA:
+  PROFILES-DEF:
+   - selectable:          DEFAULT,DEV,TEST,PTA,PROD
+   - supports-multi:      false
+   - defaults:            DEFAULT
+   - default-active:      DEV
+   - defined-by:          sys-property:ENV, env-property:ENV
+
+  PROFILES:
+    <COMMON>:
+    - formats:  yaml, properties, xml-properties
+    - suffixes:   yaml, yml, properties, xml
+    - sources:
+      - "named:env-properties"   # provider name, or class name
+      - "named:main-args"
+      - "named:sys-properties"
+      - "resource:classpath:META-INF/config/**/*.SUFFIX"
+    DEFAULT:
+      - prio:       0   # optional
+      - sources:
+        - "resource:classpath:META-INF/defaults/**/*.SUFFIX"
+        - "resource:file:${config.dir}/defaults/**/*.SUFFIX"
+      - filters:
+        - "section:DEFAULTS\.*"
+        - "section:defaults\.*"
+        - "exclude:_\.*"   # removes all meta-entries
+    TEST:
+      - prio:        100   # optional
+      - filters:
+        - "section:TEST\.*"
+        - "section:test\.*"
+    PROD:
+      - prio:        1000   # optional
+      - filters:
+        - "section:PROD\.*"
+        - "section:prod\.*"
+
+  MODEL:
+      a.b.c:        "Section"
+      - owner:      "Test Model"
+      - children:   false
+      - required:   true
+      - validation: "my.abc.ValidatorClass"
+
+      java.version: "Parameter"
+      - owner:      "Expression Test"
+      - expression: ".*v1.7.*"
+      - required:   true
+
+      ch.trivadis:  "Section"       # Declaration only
+
+  USAGE:
+      track:        true
+
+#  FORMAT-DEF:
+#   - formats: yaml, properties, xml-properties
+#   - mappings:
+#      yaml            -> CustomMapping1Classname,
+#      xml-properties  -> Mapping2Classname
+#   - suffixes:
+#      yml, yaml, xml, properties
+
+#  FUNCTIONS:
+#    - default-map:  map(DEFAULTS,.)
+#    - env-map:      map(${ENV},.)
+#    - omit:         omit(!DEFAULTS,!${ENV})
+#    - config-map:   omit,default-map,env-map
\ No newline at end of file



[10/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-116: Moved Sabot CDI module to extension section. Added docs.

Posted by pl...@apache.org.
TAMAYA-116: Moved Sabot CDI module to extension section. Added docs.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/5105df0e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/5105df0e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/5105df0e

Branch: refs/heads/master
Commit: 5105df0ef5ff12450fb687f7036cba2daa8469af
Parents: 7b9d4e6
Author: anatole <an...@apache.org>
Authored: Mon Oct 12 07:14:59 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Mon Oct 12 08:02:09 2015 +0200

----------------------------------------------------------------------
 .../ClasspathPropertiesEnvironmentProvider.java | 167 ------------
 .../environment/internal/package-info.java      |  22 --
 .../tamaya/integration/cdi2/ConfigDefault.java  |  41 ---
 .../integration/cdi2/ConfigDefaultSections.java |  43 ----
 .../tamaya/integration/cdi2/ConfigProperty.java |  80 ------
 .../cdi2/ConfigurationExtension.java            | 257 -------------------
 .../integration/cdi2/ConfigurationProducer.java | 115 ---------
 .../integration/cdi2/WithConfigOperator.java    |  45 ----
 .../integration/cdi2/WithPropertyConverter.java |  45 ----
 .../cdi2/src/main/resources/META-INF/beans.xml  |   1 -
 .../javax.enterprise.inject.spi.Extension       |   1 -
 .../META-INF/javaconfiguration.properties       |  14 -
 integration/pom.xml                             |   4 +-
 ...he.tamaya.store.spi.PropertyStoreProviderSpi |  18 ++
 .../HazelcastProprtyStoreProviderSpi.java       |  87 +++++++
 integration/store/pom.xml                       |  54 ++++
 .../org/apache/tamaya/store/PropertyStore.java  |  64 +++++
 .../tamaya/store/PropertyStoreProvider.java     |  78 ++++++
 .../tamaya/store/WritablePropertySource.java    |  66 +++++
 .../store/spi/DefaultStoredPropertySource.java  | 137 ++++++++++
 .../store/spi/PropertyStoreProviderSpi.java     |  34 +++
 .../tamaya/zookeeper/EmbeddedKafkaCluster.java  | 138 ----------
 .../tamaya/zookeeper/EmbeddedZookeeper.java     |  95 -------
 metamodels/pom.xml                              |   1 +
 24 files changed, 541 insertions(+), 1066 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java b/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
deleted file mode 100644
index d9767e5..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
+++ /dev/null
@@ -1,167 +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.environment.internal;
-
-
-import org.apache.tamaya.environment.spi.BaseEnvironmentPropertySourceProvider;
-import org.apache.tamaya.spisupport.SimplePropertiesPropertySource;
-import org.apache.tamaya.resource.ConfigResources;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spisupport.BasePropertySource;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-/**
- * Configuration provider that resolves to a location in the classpath.
- * Hereby the following system properties can be set to configure the provider
- * (all entries are optional):
- * <pre>
- *     env.STAGE   :   ordered list of configs to be loaded, e.g. GLOBAL,TEST,DEV
- *     env.ROOT    :   root context of the environment, by default ENV
- * </pre>
- * Adding {@code System.getenv()} as stage maps the current environment properties using
- * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
- */
-public class ClasspathPropertiesEnvironmentProvider extends BaseEnvironmentPropertySourceProvider {
-
-    private static final String STAGE_PROP = "env.STAGE";
-
-    private static final String ROOT_PROP = "env.ROOT";
-
-    private static final Logger LOGGER = Logger.getLogger(ClasspathPropertiesEnvironmentProvider.class.getName());
-
-    private String rootLocation;
-
-    private static final String DEFAULT_ENV = "System.getenv()";
-
-
-    public ClasspathPropertiesEnvironmentProvider(){
-        super(evaluateRoot(), evaluateStages());
-    }
-
-    private static String evaluateRoot() {
-        String value = System.getProperty(ROOT_PROP);
-        if(value==null) {
-            value = System.getenv(ROOT_PROP);
-        }
-        if(value==null){
-            value = "ENV";
-        }
-        return value;
-    }
-
-    private static String[] evaluateStages() {
-        String value = System.getProperty(STAGE_PROP);
-        if(value==null) {
-            value = System.getenv(STAGE_PROP);
-        }
-        if(value==null){
-            value = "System.getenv(),GLOBAL,DEVELOPMENT";
-        }
-        return value.split(",");
-    }
-
-    @Override
-    protected Collection<PropertySource> loadEnvProperties(
-            String environmentRootContext, String contextId, int priority) {
-        List<PropertySource> result = new ArrayList<>();
-        if (DEFAULT_ENV.equals(contextId)){
-            result.add(new EnvPropertiesPropertySource(environmentRootContext, priority));
-        }
-        else{
-            loadProperties(environmentRootContext, contextId, priority, result);
-        }
-        return result;
-    }
-
-    private void loadProperties(String environmentRootContext, String contextId, int priority, List<PropertySource> result) {
-        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
-        if(cpExp.startsWith("/")){
-            cpExp = cpExp.substring(1);
-        }
-        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
-            result.add(new SimplePropertiesPropertySource(environmentRootContext, url, priority));
-        }
-    }
-
-    /**
-     * Get the basic resource path used for lookup of properties files.
-     * @return the basic resource path, never null.
-     */
-    protected String getBaseResourcePath() {
-        return "";
-    }
-
-    private static final class EnvPropertiesPropertySource extends BasePropertySource{
-
-        private final int priority;
-
-        private Map<String, String> envProps = new HashMap<>();
-
-        public EnvPropertiesPropertySource(int priority) {
-            this(null, priority);
-        }
-
-        public EnvPropertiesPropertySource(String environmentRootContext, int priority){
-            this.priority = priority;
-            if(environmentRootContext==null){
-                envProps.putAll(System.getenv());
-            }
-            else{
-                for(Map.Entry<String,String> en: System.getenv().entrySet()){
-                    String prefix = environmentRootContext;
-                    if(!prefix.endsWith(".")){
-                        prefix += ".";
-                    }
-                    envProps.put(prefix+en.getKey(), en.getValue());
-                }
-            }
-            this.envProps = Collections.unmodifiableMap(envProps);
-        }
-
-        @Override
-        public String getName() {
-            return "System.getenv()";
-       }
-
-        @Override
-        public Map<String, String> getProperties() {
-            return this.envProps;
-        }
-
-        @Override
-        public int getOrdinal(){
-            return priority;
-        }
-
-        @Override
-        public String toString() {
-            return "EnvPropertiesPropertySource{" +
-                    "priority=" + priority +
-                    '}';
-        }
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java b/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
deleted file mode 100644
index 3f5b53f..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
+++ /dev/null
@@ -1,22 +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.
- */
-/**
- * Contains the provided implementation classes for the environment module.
- */
-package org.apache.tamaya.environment.internal;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
deleted file mode 100644
index 420f1fd..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
+++ /dev/null
@@ -1,41 +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.integration.cdi2;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define a default keys to be returned, when no configured keys could be
- * determined for a property/template accessor. The keys hereby can also contain a
- * dynamic expression that is evaluated by the configuration system.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
-public @interface ConfigDefault {
-
-    /**
-     * The default keys to be injected, if no such configuration entry was found. If keys was found and no default
-     * is defined, it is handled as a deployment error.
-     */
-    String value() default "";
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
deleted file mode 100644
index e6b5ba2..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
+++ /dev/null
@@ -1,43 +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.integration.cdi2;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to control injection and resolution current a configured bean. The configuration keys
- * to be resolved are basically determined by the {@link org.apache.tamaya.inject.ConfigProperty}
- * annotation(s). Nevertheless these annotations can also have relative key names. This annotation allows
- * to define a configuration area that is prefixed to all relative configuration keys within the
- * corresponding class/template interface.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = { ElementType.TYPE })
-public @interface ConfigDefaultSections {
-
-    /**
-     * Allows to declare an section names that are prepended to resolve relative configuration keys.
-     * @return the section names to used for key resolution.
-     */
-    String[] value() default {};
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
deleted file mode 100644
index 4077fce..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
+++ /dev/null
@@ -1,80 +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.integration.cdi2;
-
-
-import javax.enterprise.util.Nonbinding;
-import javax.inject.Qualifier;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to enable injection current a configured property or define the returned data for
- * a configuration template method. Hereby this annotation can be used in multiple ways and combined
- * with other annotations such as {@link ConfigDefault}, {@link WithConfigOperator}, {@link WithPropertyConverter}.
- *
- * Below the most simple variant current a configured class is given:
- * {@code
- * pubic class ConfiguredItem{
- *
- *   @ConfiguredProperty
- *   private String aValue;
- * }
- * When this class is configured, e.g. by passing it to {@link org.apache.tamaya.Configuration#configure(Object)},
- * the following is happening:
- * <ul>
- *     <li>The current valid Configuration is evaluated by calling {@code Configuration cfg = ConfigurationProvider.getConfiguration();}</li>
- *     <li>The current possible property keys are evaluated by calling {@code cfg.get("aValue");}</li>
- *     <li>if not successful, and a @ConfigDefault annotation is present, the default value is used.
- *     <li>If no value could be evaluated a ({@link org.apache.tamaya.ConfigException} is thrown.</li>
- *     <li>On success, since no type conversion is involved, the value is injected.</li>
- * </ul>
- *
- * In the next example we explicitly define the property keys:
- * {@code
- * @ConfigDefaultSections("section1")
- * pubic class ConfiguredItem{
- *
- *   @ConfiguredProperty({"b", "[a.b.deprecated.keys]", "a"})
- *   @ConfigDefault("myDefaultValue")
- *   private String aValue;
- * }
- *
- * Within this example we evaluate multiple possible keys (section1.b, a.b.deprecated.keys, section1.a). Evaluation is
- * aborted if a key could be successfully resolved. Hereby the ordering current the annotations define the ordering
- * current resolution, so in the example above
- * resolution equals to {@code "section1.b", "a.b.deprecated.keys", "section1.a"}. If no value has bee found,
- * the configured default {@code myDefaultValue} is returned.
- */
-@Qualifier
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
-public @interface ConfigProperty {
-
-    /**
-     * Get the property names to be used. Hereby the first non null keys evaluated is injected as property keys.
-     *
-     * @return the property names, not null. If missing the field or method name being injected is used by default.
-     */
-    @Nonbinding
-    String[] value() default {};
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
deleted file mode 100644
index ffec5d1..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
+++ /dev/null
@@ -1,257 +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.integration.cdi2;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.ProcessBean;
-import javax.enterprise.inject.spi.ProcessProducerMethod;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * CDI Extension module that adds injection mechanism for configuration.
- *
- * @see ConfigProperty
- * @see ConfigDefault
- * @see org.apache.tamaya.integration.cdi2.ConfigDefaultSections
- * @see ConfigException
- */
-public class ConfigurationExtension implements Extension {
-
-    static final Map<Class, ConfigOperator> CUSTOM_OPERATORS = new ConcurrentHashMap<>();
-    static final Map<Class, PropertyConverter> CUSTOM_CONVERTERS = new ConcurrentHashMap<>();
-
-    private static class ConverterBean implements Bean<Object> {
-
-        private final Bean<Object> delegate;
-        private final Set<Type> types;
-
-        public ConverterBean(final Bean convBean, final Set<Type> types) {
-            this.types = types;
-            this.delegate = convBean;
-        }
-
-        @Override
-        public Set<Type> getTypes() {
-            return types;
-        }
-
-        @Override
-        public Class<?> getBeanClass() {
-            return delegate.getBeanClass();
-        }
-
-        @Override
-        public Set<InjectionPoint> getInjectionPoints() {
-            return delegate.getInjectionPoints();
-        }
-
-        @Override
-        public String getName() {
-            return delegate.getName();
-        }
-
-        @Override
-        public Set<Annotation> getQualifiers() {
-            return delegate.getQualifiers();
-        }
-
-        @Override
-        public Class<? extends Annotation> getScope() {
-            return delegate.getScope();
-        }
-
-        @Override
-        public Set<Class<? extends Annotation>> getStereotypes() {
-            return delegate.getStereotypes();
-        }
-
-        @Override
-        public boolean isAlternative() {
-            return delegate.isAlternative();
-        }
-
-        @Override
-        public boolean isNullable() {
-            return delegate.isNullable();
-        }
-
-        @Override
-        public Object create(CreationalContext<Object> creationalContext) {
-            return delegate.create(creationalContext);
-        }
-
-        @Override
-        public void destroy(Object instance, CreationalContext<Object> creationalContext) {
-            delegate.destroy(instance, creationalContext);
-        }
-    }
-
-    private Set<Type> types = new HashSet<>();
-    private Bean<?> convBean;
-
-    /**
-     * Method that checks the configuration injection points during deployment for available configuration.
-     * @param pb the bean to process.
-     */
-    public void retrieveTypes(@Observes final ProcessBean<?> pb) {
-
-        final Set<InjectionPoint> ips = pb.getBean().getInjectionPoints();
-
-        for (InjectionPoint injectionPoint : ips) {
-            if (injectionPoint.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
-                final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
-                final ConfigDefault defaultAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefault.class);
-                final ConfigDefaultSections typeAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefaultSections.class);
-                final List<String> keys = evaluateKeys(injectionPoint.getMember().getName(), annotation.value(), typeAnnot.value());
-
-                final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
-                if(withOperatorAnnot!=null){
-                    tryLoadOpererator(withOperatorAnnot.value());
-                }
-                final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
-                if(withConverterAnnot!=null){
-                    tryLoadConverter(withConverterAnnot.value());
-                }
-
-                // We don't want to wait until the injection really fails at runtime.
-                // If there is a non resolvable configuration, we want to know at startup.
-                Configuration config = ConfigurationProvider.getConfiguration();
-                String keyFound = null;
-                String value = null;
-                for(String key:keys) {
-                    value = config.get(key);
-                    if(value!=null){
-                        keyFound = key;
-                        break;
-                    }
-                }
-                if(value==null && defaultAnnot!=null){
-                    value = defaultAnnot.value();
-                }
-                if(value==null){
-                    throw new ConfigException(String.format(
-                            "Can't resolve any of the possible config keys: %s. Please provide one of the given keys" +
-                                    "with a value in your configuration sources.",
-                            keys.toString()));
-                }
-                types.add(injectionPoint.getType());
-            }
-        }
-    }
-
-    private void tryLoadOpererator(Class<? extends ConfigOperator> operatorClass) {
-        Objects.requireNonNull(operatorClass);
-        if(ConfigOperator.class == operatorClass){
-            return;
-        }
-        try{
-            if(!CUSTOM_OPERATORS.containsKey(operatorClass)) {
-                CUSTOM_OPERATORS.put(operatorClass, operatorClass.newInstance());
-            }
-        }
-        catch(Exception e){
-            throw new ConfigException("Custom ConfigOperator could not be loaded: " + operatorClass.getName(), e);
-        }
-    }
-
-    private void tryLoadConverter(Class<? extends PropertyConverter> converterClass) {
-        Objects.requireNonNull(converterClass);
-        if(PropertyConverter.class == converterClass){
-            return;
-        }
-        try{
-            if(!CUSTOM_CONVERTERS.containsKey(converterClass)) {
-                CUSTOM_CONVERTERS.put(converterClass, converterClass.newInstance());
-            }
-        }
-        catch(Exception e){
-            throw new ConfigException("Custom PropertyConverter could not be loaded: " + converterClass.getName(), e);
-        }
-    }
-
-    /**
-     * Evaluates the effective keys to be used. if no {@code keys} are defined, {@code memberName} is used.
-     * The effective keys are then combined with the sections given (if any) and only, if the given keys are not
-     * absolute keys (surrounded by brackets).
-     * @param memberName the default member name, not null.
-     * @param keys the keys, may be empty, but not null.
-     * @param sections the default sections, may be empty. May also be null.
-     * @return the list of keys to be finally used for configuration resolution in order of
-     * precedence. The first keys in the list that could be successfully resolved define the final
-     * configuration value.
-     */
-    public static List<String> evaluateKeys(String memberName, String[] keys, String[] sections) {
-        List<String> effKeys = new ArrayList<>(Arrays.asList(keys));
-        if (effKeys.isEmpty()) {
-            effKeys.add(memberName);
-        }
-        ListIterator<String> iterator = effKeys.listIterator();
-        while (iterator.hasNext()) {
-            String next = iterator.next();
-            if (next.startsWith("[") && next.endsWith("]")) {
-                // absolute key, strip away brackets, take key as is
-                iterator.set(next.substring(1, next.length() - 1));
-            } else {
-                if (sections != null && sections.length>0) {
-                    // Remove original entry, since it will be replaced with prefixed entries
-                    iterator.remove();
-                    // Add prefixed entries, including absolute (root) entry for "" area keys.
-                    for (String area : sections) {
-                        iterator.add(area.isEmpty() ? next : area + '.' + next);
-                    }
-                }
-            }
-        }
-        return effKeys;
-    }
-
-
-    public void captureConvertBean(@Observes final ProcessProducerMethod<?, ?> ppm) {
-        if (ppm.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
-            convBean = ppm.getBean();
-        }
-
-    }
-
-    public void addConverter(@Observes final AfterBeanDiscovery abd, final BeanManager bm) {
-        abd.addBean(new ConverterBean(convBean, types));
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
deleted file mode 100644
index 8b4ae9f..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
+++ /dev/null
@@ -1,115 +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.integration.cdi2;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.InjectionPoint;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-@ApplicationScoped
-public class ConfigurationProducer {
-
-    private static final Logger LOGGER = Logger.getLogger(ConfigurationProducer.class.getName());
-
-    @Produces
-    @ConfigProperty
-    public Object resolveAndConvert(final InjectionPoint injectionPoint) {
-
-        final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
-        final ConfigDefault defaultAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefault.class);
-        final ConfigDefaultSections typeAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefaultSections.class);
-        final List<String> keys = ConfigurationExtension.evaluateKeys(injectionPoint.getMember().getName(), annotation.value(), typeAnnot.value());
-
-        final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
-        ConfigOperator operator = null;
-        if(withOperatorAnnot!=null){
-            operator = ConfigurationExtension.CUSTOM_OPERATORS.get(withOperatorAnnot.value());
-        }
-        PropertyConverter customCnverter = null;
-        final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
-        if(withConverterAnnot!=null){
-            customCnverter = ConfigurationExtension.CUSTOM_CONVERTERS.get(withConverterAnnot.value());
-        }
-
-        // unless the extension is not installed, this should never happen because the extension
-        // enforces the resolvability of the config
-        Configuration config = ConfigurationProvider.getConfiguration();
-        if(operator!=null){
-            config = operator.operate(config);
-        }
-        final Class<?> toType = (Class<?>) injectionPoint.getAnnotated().getBaseType();
-        String textValue = null;
-        String defaultTextValue = defaultAnnot!=null?defaultAnnot.value():null;
-        String keyFound = null;
-        for(String key:keys) {
-            textValue = config.get(key);
-            if(textValue!=null){
-                keyFound = key;
-                break;
-            }
-        }
-        Object value = null;
-        if(keyFound!=null){
-            if(customCnverter!=null) {
-                value = customCnverter.convert(textValue);
-            }
-            if(value==null){
-                value = config.get(keyFound, toType);
-            }
-        }
-        else if(defaultTextValue!=null){
-            if(customCnverter!=null) {
-                value = customCnverter.convert(defaultTextValue);
-            }
-            if(value==null) {
-                List<PropertyConverter<Object>> converters = ConfigurationProvider.getConfigurationContext()
-                        .getPropertyConverters(TypeLiteral.of(toType));
-                for (PropertyConverter<Object> converter : converters) {
-                    try {
-                        value = converter.convert(defaultTextValue);
-                        if (value != null) {
-                            LOGGER.log(Level.FINEST, "Parsed default value from '" + defaultTextValue + "' into " +
-                                    injectionPoint);
-                            break;
-                        }
-                    } catch (Exception e) {
-                        LOGGER.log(Level.FINEST, "Failed to convert default value '" + defaultTextValue + "' for " +
-                                injectionPoint, e);
-                    }
-                }
-            }
-        }
-        if(value==null){
-            throw new ConfigException(String.format(
-                    "Can't resolve any of the possible config keys: %s to the required target type: %s",
-                    keys.toString(), toType.getName()));
-        }
-        LOGGER.finest(String.format("Injecting %s for key %s in class %s", keyFound, value.toString(), injectionPoint.toString()));
-        return value;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
deleted file mode 100644
index 7d6ac66..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
+++ /dev/null
@@ -1,45 +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.integration.cdi2;
-
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.Configuration;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define an configuration operator to be used before accessing a configured keys.
- * This allows filtering current configuration, e.g. for realizing views or ensuring security
- * constraints.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
-public @interface WithConfigOperator {
-
-    /**
-     * Define a custom adapter that should be used to adapt the configuration entry injected. This overrides any
-     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
-     * registered, it is handled as a deployment error.
-     */
-    Class<? extends ConfigOperator> value();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
deleted file mode 100644
index f50edcb..0000000
--- a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
+++ /dev/null
@@ -1,45 +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.integration.cdi2;
-
-
-import org.apache.tamaya.spi.PropertyConverter;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation to define a type adapter to be used before injecting a configured keys, or for applying changes.
- * This will override any other adapter for performing the type conversion before
- * injecting the field keys.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = {ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
-public @interface WithPropertyConverter {
-
-    /**
-     * Define a custom adapter or codec that should be used to adapt the configuration entry injected. This overrides any
-     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
-     * registered, it is handled as a deployment error.
-     */
-    Class<? extends PropertyConverter<?>> value();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/resources/META-INF/beans.xml b/integration/cdi2/src/main/resources/META-INF/beans.xml
deleted file mode 100644
index e71e480..0000000
--- a/integration/cdi2/src/main/resources/META-INF/beans.xml
+++ /dev/null
@@ -1 +0,0 @@
-<beans></beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
deleted file mode 100644
index 78139d5..0000000
--- a/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.tomitribe.sabot.ConfigurationExtension
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties b/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
deleted file mode 100644
index 6c8b06c..0000000
--- a/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-remote.wsdl.location = classpath:/service-wsdl.xml
-remote.port=1443
-remote.address=${remote.host}:${remote.port}
-remote.target.url = https://${remote.address}/remote/service/url
-remote.username = joecool
-# ciphered using built in StaticDESPasswordCipher
-remote.password = NjAq6q2agYVnvSMz+eYUZg==
-cipher=org.apache.openejb.cipher.StaticDESPasswordCipher
-
-string.value = hello
-file.value = ./conf
-duration.value = 10 minutes and 57 seconds
-boolean.value = true
-integer.value = 123

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/pom.xml
----------------------------------------------------------------------
diff --git a/integration/pom.xml b/integration/pom.xml
index dd3dfaa..efecb5e 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -23,7 +23,7 @@ under the License.
 
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-sandbox</artifactId>
+        <artifactId>tamaya-extensions</artifactId>
         <version>0.2-incubating-SNAPSHOT</version>
     </parent>
 
@@ -32,7 +32,7 @@ under the License.
     <artifactId>tamaya-integration-sandbox</artifactId>
 
     <modules>
-        <module>cdi2</module>
+        <module>store</module>
         <module>commons</module>
     </modules>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store-file/src/main/resources/META-INF/services/org.apache.tamaya.store.spi.PropertyStoreProviderSpi
----------------------------------------------------------------------
diff --git a/integration/store-file/src/main/resources/META-INF/services/org.apache.tamaya.store.spi.PropertyStoreProviderSpi b/integration/store-file/src/main/resources/META-INF/services/org.apache.tamaya.store.spi.PropertyStoreProviderSpi
new file mode 100644
index 0000000..f3199f2
--- /dev/null
+++ b/integration/store-file/src/main/resources/META-INF/services/org.apache.tamaya.store.spi.PropertyStoreProviderSpi
@@ -0,0 +1,18 @@
+#
+# 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.
+#

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store-hazelcast/src/main/java/org/apache/tamaya/store/internal/HazelcastProprtyStoreProviderSpi.java
----------------------------------------------------------------------
diff --git a/integration/store-hazelcast/src/main/java/org/apache/tamaya/store/internal/HazelcastProprtyStoreProviderSpi.java b/integration/store-hazelcast/src/main/java/org/apache/tamaya/store/internal/HazelcastProprtyStoreProviderSpi.java
new file mode 100644
index 0000000..db567ac
--- /dev/null
+++ b/integration/store-hazelcast/src/main/java/org/apache/tamaya/store/internal/HazelcastProprtyStoreProviderSpi.java
@@ -0,0 +1,87 @@
+/*
+ * 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.store.internal;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.config.GroupConfig;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.store.PropertyStore;
+import org.apache.tamaya.store.spi.PropertyStoreProviderSpi;
+
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * SPI implmentation for a providing Hazelcast based PropertyStores.
+ */
+public class HazelcastProprtyStoreProviderSpi implements PropertyStoreProviderSpi {
+    private static final String CONFIG_CLASS_SYS_PROP = "tamaya.store.hazelcast.configClass";
+    private static final String CONFIG_GROUP_SYS_PROP = "tamaya.store.hazelcast.groupName";
+
+
+
+    private static final Logger LOG = Logger.getLogger(HazelcastProprtyStoreProviderSpi.class.getName());
+
+    private HazelcastInstance store;
+    private Map<String,HazelcastProprtyStore> stores = new ConcurrentHashMap<>();
+
+    public HazelcastProprtyStoreProviderSpi() {
+        String customConfig = System.getProperty(CONFIG_CLASS_SYS_PROP);
+        Config config = null;
+        if(customConfig!=null){
+            try {
+                config = (Config)Class.forName(customConfig).newInstance();
+                LOG.info("Successfully created custom store config for HazelCast store: " + customConfig);
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Failed to instantiate custom store config for HazelCast store: " + customConfig, e);
+            }
+        }
+        if(config==null){
+            config = ServiceContextManager.getServiceContext().getService(Config.class);
+        }
+        if(config==null) {
+            config = new Config();
+            GroupConfig gc = new GroupConfig();
+            String groupName = System.getProperty(CONFIG_GROUP_SYS_PROP, "Tamaya");
+            gc.setName(groupName);
+            config.setGroupConfig(gc);
+        }
+        LOG.info("Starting HazelCast storage with config: " + config);
+        store = Hazelcast.getOrCreateHazelcastInstance(config);
+    }
+
+    @Override
+    public PropertyStore getPropertyStore(String storeId) {
+        HazelcastProprtyStore propertyStore = stores.get(storeId);
+        if(propertyStore==null){
+            LOG.info("Creating new distributed configuration map in HazelCast store for " + storeId + "...");
+            propertyStore = new HazelcastProprtyStore(store, storeId);
+            this.stores.put(storeId, propertyStore);
+        }
+        return propertyStore;
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/pom.xml
----------------------------------------------------------------------
diff --git a/integration/store/pom.xml b/integration/store/pom.xml
new file mode 100644
index 0000000..d755551
--- /dev/null
+++ b/integration/store/pom.xml
@@ -0,0 +1,54 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-integration-sandbox</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>tamaya-store</artifactId>
+    <name>Apache Tamaya Storage/Cache/Datagrid Integration</name>
+    <description>Integration with a Datagrid backend for distributed configuration.</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-events</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
new file mode 100644
index 0000000..d1d6adf
--- /dev/null
+++ b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
@@ -0,0 +1,64 @@
+/*
+ * 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.store;
+
+import org.apache.tamaya.spi.PropertySource;
+
+import java.util.Map;
+
+/**
+ * Simple abstraction of a property synchronization backend. Most methods are similar
+ * to a {@link org.apache.tamaya.spi.PropertySource}, enhanced with methods for
+ * updating the property storage.
+ */
+public interface PropertyStore {
+
+    /**
+     * Get the store's name.
+     * @return the name, never null.
+     */
+    String getName();
+
+    /**
+     * Stores the given PropertySource into the store.
+     * @param propertySource
+     */
+    void store(PropertySource propertySource);
+
+    /**
+     * Read all properties.
+     * @return the properties from the remote store, never null.
+     */
+    Map<String,String> read();
+
+    /**
+     * Reads a single key fromt hthe store.
+     * @param key the key, not null.
+     * @return the value, or null.
+     */
+    String read(String key);
+
+    /**
+     * Determines if {@link #read()} returns all contained properties, or optionally only
+     * a subset of the accessible and defined properties are returned.
+     * @return true, if this store is scannable.
+     */
+    boolean isScannable();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
new file mode 100644
index 0000000..dceb29a
--- /dev/null
+++ b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
@@ -0,0 +1,78 @@
+/*
+ * 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.store;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.store.spi.PropertyStoreProviderSpi;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Simple provider accessor singleton for accessing {@link PropertyStore}
+ * instances.
+ */
+public final class PropertyStoreProvider {
+    /**
+     * The logger used.
+     */
+    private static final Logger LOG = Logger.getLogger(PropertyStoreProvider.class.getName());
+
+
+    /**
+     * Singleton constructor.
+     */
+    private PropertyStoreProvider() {
+    }
+
+
+    /**
+     * Access a {@link PropertyStore} using it's id.
+     *
+     * @param storeId the unique id of the store to use.
+     * @return
+     */
+    public static PropertyStore getPropertyStore(String storeId) {
+        for (PropertyStoreProviderSpi propertyStoreProviderSpi : ServiceContextManager.getServiceContext()
+                .getServices(PropertyStoreProviderSpi.class)) {
+            PropertyStore store = propertyStoreProviderSpi.getPropertyStore(storeId);
+            if (store != null) {
+                LOG.finest("DataGrid '" + storeId + "' used: " + store);
+                return store;
+            }
+        }
+        throw new ConfigException("No such Store: " + storeId);
+    }
+
+    /**
+     * Access a {@link PropertyStore} using it's id, hereby returning the most significant of the configured
+     * {@link PropertyStore} instances.
+     *
+     * @return the default PropertyStore instance.
+     */
+    public static PropertyStore getDefaultPropertyStore() {
+        return getPropertyStore("default");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java b/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
new file mode 100644
index 0000000..c19fa45
--- /dev/null
+++ b/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
@@ -0,0 +1,66 @@
+/*
+ * 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.store;
+
+import org.apache.tamaya.spi.PropertySource;
+
+import java.util.Map;
+
+/**
+ * Simple abstraction of a property synchronization backend. Most methods are similar
+ * to a {@link org.apache.tamaya.spi.PropertySource}, enhanced with methods for
+ * updating the property storage.
+ */
+public interface WritablePropertySource extends PropertySource{
+
+    /**
+     * Loads the property source from its store..
+     */
+    void load();
+
+    /**
+     * Sets the store to the given properties, replacing all previous state.
+     * @param props the new properties.
+     */
+    void setAll(Map<String, String> props);
+
+    /**
+     * Updates/adds all the given entries.
+     * @param props the entries to be added/updated.
+     */
+    void putAll(Map<String, String> props);
+
+    /**
+     * Writes a single entry.
+     * @param key the key, not null.
+     * @param value the new value, not null.
+     */
+    void put(String key, String value);
+
+    /**
+     * Removes all entries.
+     */
+    void clear();
+
+    /**
+     * Synchronize the current state with the remote version.
+     */
+    void synch();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java b/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
new file mode 100644
index 0000000..b3fe1ee
--- /dev/null
+++ b/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
@@ -0,0 +1,137 @@
+/*
+ * 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.store.spi;
+
+import org.apache.tamaya.events.ConfigEventManager;
+import org.apache.tamaya.events.FrozenPropertySource;
+import org.apache.tamaya.events.delta.ChangeType;
+import org.apache.tamaya.events.delta.PropertySourceChange;
+import org.apache.tamaya.events.delta.PropertySourceChangeBuilder;
+import org.apache.tamaya.spisupport.BasePropertySource;
+import org.apache.tamaya.store.PropertyStore;
+import org.apache.tamaya.store.WritablePropertySource;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * PropertySource that is connected to a {@link PropertyStore}.
+ */
+public class DefaultStoredPropertySource extends BasePropertySource
+        implements WritablePropertySource {
+
+    /**
+     * The store to be used, not null.
+     */
+    private PropertyStore propertyStore;
+
+    /**
+     * The last version of stoarge data accessed.
+     */
+    private String lastVersion;
+
+    private Map<String, String> properties = new HashMap<>();
+
+
+    private FrozenPropertySource currentConfig;
+
+    /**
+     * Creates a new property source.
+     *
+     * @param propertyStore  the backend store.
+     * @param defaultOrdinal the default ordinal to be used.
+     */
+    public DefaultStoredPropertySource(PropertyStore propertyStore, int defaultOrdinal) {
+        super(defaultOrdinal);
+        this.propertyStore = Objects.requireNonNull(propertyStore);
+        this.properties.putAll(this.propertyStore.read());
+    }
+
+    @Override
+    public void load() {
+        this.properties.clear();
+        this.properties.putAll(this.propertyStore.read());
+        synch();
+    }
+
+    @Override
+    public String getName() {
+        return this.propertyStore.getName();
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    @Override
+    public String get(String key) {
+        if (!propertyStore.isScannable()) {
+            return propertyStore.read(key);
+        }
+        return properties.get(key);
+    }
+
+    @Override
+    public boolean isScannable() {
+        return propertyStore.isScannable();
+    }
+
+    @Override
+    public String toString() {
+        return "StoredPropertySource{" +
+                "propertyStore=" + propertyStore.getName() +
+                '}';
+    }
+
+    @Override
+    public void setAll(Map<String, String> props) {
+        this.properties.clear();
+        this.properties.putAll(props);
+        synch();
+    }
+
+    @Override
+    public void putAll(Map<String, String> props) {
+        this.properties.putAll(props);
+        synch();
+    }
+
+    @Override
+    public void put(String key, String value) {
+        this.properties.put(key, value);
+        synch();
+    }
+
+    @Override
+    public void clear() {
+        this.properties.clear();
+        synch();
+    }
+
+    @Override
+    public void synch() {
+        FrozenPropertySource newConfig = FrozenPropertySource.of(this);
+        PropertySourceChange change = PropertySourceChangeBuilder.of(currentConfig, ChangeType.UPDATED)
+                .addChanges(newConfig).build();
+        currentConfig = newConfig;
+        ConfigEventManager.fireEvent(change);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java b/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
new file mode 100644
index 0000000..1b20fc1
--- /dev/null
+++ b/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
@@ -0,0 +1,34 @@
+/*
+ * 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.store.spi;
+
+import org.apache.tamaya.store.PropertyStore;
+
+/**
+ * Class, that provides access to PropertyStores to be used.
+ */
+public interface PropertyStoreProviderSpi {
+
+    /**
+     * Access a {@link PropertyStore} using it's id.
+     * @param storeId the unique id of the store to use.
+     * @return
+     */
+    PropertyStore getPropertyStore(String storeId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
----------------------------------------------------------------------
diff --git a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
deleted file mode 100644
index e260732..0000000
--- a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
+++ /dev/null
@@ -1,138 +0,0 @@
-import kafka.server.KafkaConfig;
-import kafka.server.KafkaServer;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-public class EmbeddedKafkaCluster {
-    private final List<Integer> ports;
-    private final String zkConnection;
-    private final Properties baseProperties;
-
-    private final String brokerList;
-
-    private final List<KafkaServer> brokers;
-    private final List<File> logDirs;
-
-    public EmbeddedKafkaCluster(String zkConnection) {
-        this(zkConnection, new Properties());
-    }
-
-    public EmbeddedKafkaCluster(String zkConnection, Properties baseProperties) {
-        this(zkConnection, baseProperties, Collections.singletonList(-1));
-    }
-
-    public EmbeddedKafkaCluster(String zkConnection, Properties baseProperties, List<Integer> ports) {
-        this.zkConnection = zkConnection;
-        this.ports = resolvePorts(ports);
-        this.baseProperties = baseProperties;
-
-        this.brokers = new ArrayList<KafkaServer>();
-        this.logDirs = new ArrayList<File>();
-
-        this.brokerList = constructBrokerList(this.ports);
-    }
-
-    private List<Integer> resolvePorts(List<Integer> ports) {
-        List<Integer> resolvedPorts = new ArrayList<Integer>();
-        for (Integer port : ports) {
-            resolvedPorts.add(resolvePort(port));
-        }
-        return resolvedPorts;
-    }
-
-    private int resolvePort(int port) {
-        if (port == -1) {
-            return TestUtils.getAvailablePort();
-        }
-        return port;
-    }
-
-    private String constructBrokerList(List<Integer> ports) {
-        StringBuilder sb = new StringBuilder();
-        for (Integer port : ports) {
-            if (sb.length() > 0) {
-                sb.append(",");
-            }
-            sb.append("localhost:").append(port);
-        }
-        return sb.toString();
-    }
-
-    public void startup() {
-        for (int i = 0; i < ports.size(); i++) {
-            Integer port = ports.get(i);
-            File logDir = TestUtils.constructTempDir("kafka-local");
-
-            Properties properties = new Properties();
-            properties.putAll(baseProperties);
-            properties.setProperty("zookeeper.connect", zkConnection);
-            properties.setProperty("broker.id", String.valueOf(i + 1));
-            properties.setProperty("host.name", "localhost");
-            properties.setProperty("port", Integer.toString(port));
-            properties.setProperty("log.dir", logDir.getAbsolutePath());
-            properties.setProperty("log.flush.interval.messages", String.valueOf(1));
-
-            KafkaServer broker = startBroker(properties);
-
-            brokers.add(broker);
-            logDirs.add(logDir);
-        }
-    }
-
-
-    private KafkaServer startBroker(Properties props) {
-        KafkaServer server = new KafkaServer(new KafkaConfig(props), new SystemTime());
-        server.startup();
-        return server;
-    }
-
-    public Properties getProps() {
-        Properties props = new Properties();
-        props.putAll(baseProperties);
-        props.put("metadata.broker.list", brokerList);
-        props.put("zookeeper.connect", zkConnection);
-        return props;
-    }
-
-    public String getBrokerList() {
-        return brokerList;
-    }
-
-    public List<Integer> getPorts() {
-        return ports;
-    }
-
-    public String getZkConnection() {
-        return zkConnection;
-    }
-
-    public void shutdown() {
-        for (KafkaServer broker : brokers) {
-            try {
-                broker.shutdown();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        for (File logDir : logDirs) {
-            try {
-                TestUtils.deleteFile(logDir);
-            } catch (FileNotFoundException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("EmbeddedKafkaCluster{");
-        sb.append("brokerList='").append(brokerList).append('\'');
-        sb.append('}');
-        return sb.toString();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
----------------------------------------------------------------------
diff --git a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
deleted file mode 100644
index 54068fc..0000000
--- a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
+++ /dev/null
@@ -1,95 +0,0 @@
-import org.apache.zookeeper.server.NIOServerCnxnFactory;
-import org.apache.zookeeper.server.ServerCnxnFactory;
-import org.apache.zookeeper.server.ZooKeeperServer;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-
-public class EmbeddedZookeeper {
-    private int port = -1;
-    private int tickTime = 500;
-
-    private ServerCnxnFactory factory;
-    private File snapshotDir;
-    private File logDir;
-
-    public EmbeddedZookeeper() {
-        this(-1);
-    }
-
-    public EmbeddedZookeeper(int port) {
-        this(port, 500);
-    }
-
-    public EmbeddedZookeeper(int port, int tickTime) {
-        this.port = resolvePort(port);
-        this.tickTime = tickTime;
-    }
-
-    private int resolvePort(int port) {
-        if (port == -1) {
-            return TestUtils.getAvailablePort();
-        }
-        return port;
-    }
-
-    public void startup() throws IOException{
-        if (this.port == -1) {
-            this.port = TestUtils.getAvailablePort();
-        }
-        this.factory = NIOServerCnxnFactory.createFactory(new InetSocketAddress("localhost", port), 1024);
-        this.snapshotDir = TestUtils.constructTempDir("embeeded-zk/snapshot");
-        this.logDir = TestUtils.constructTempDir("embeeded-zk/log");
-
-        try {
-            factory.startup(new ZooKeeperServer(snapshotDir, logDir, tickTime));
-        } catch (InterruptedException e) {
-            throw new IOException(e);
-        }
-    }
-
-
-    public void shutdown() {
-        factory.shutdown();
-        try {
-            TestUtils.deleteFile(snapshotDir);
-        } catch (FileNotFoundException e) {
-            // ignore
-        }
-        try {
-            TestUtils.deleteFile(logDir);
-        } catch (FileNotFoundException e) {
-            // ignore
-        }
-    }
-
-    public String getConnection() {
-        return "localhost:" + port;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public void setTickTime(int tickTime) {
-        this.tickTime = tickTime;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public int getTickTime() {
-        return tickTime;
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("EmbeddedZookeeper{");
-        sb.append("connection=").append(getConnection());
-        sb.append('}');
-        return sb.toString();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5105df0e/metamodels/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/pom.xml b/metamodels/pom.xml
index fcc37ae..4a05846 100644
--- a/metamodels/pom.xml
+++ b/metamodels/pom.xml
@@ -34,6 +34,7 @@ under the License.
 
     <modules>
         <module>simple</module>
+        <module>staged</module>
     </modules>
 
 </project>


[11/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-116: CHeckstyle fixes for cdi module (new).

Posted by pl...@apache.org.
TAMAYA-116: CHeckstyle fixes for cdi module (new).


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/9f37cc14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/9f37cc14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/9f37cc14

Branch: refs/heads/master
Commit: 9f37cc14c039e92526f975d6c5829e0c9f7a92df
Parents: 5105df0
Author: anatole <an...@apache.org>
Authored: Mon Oct 12 08:01:23 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Mon Oct 12 08:02:10 2015 +0200

----------------------------------------------------------------------
 .../org.apache.tamaya.store.PropertyStore        | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/9f37cc14/integration/store-ignite/src/main/resources/META-INF/services/org.apache.tamaya.store.PropertyStore
----------------------------------------------------------------------
diff --git a/integration/store-ignite/src/main/resources/META-INF/services/org.apache.tamaya.store.PropertyStore b/integration/store-ignite/src/main/resources/META-INF/services/org.apache.tamaya.store.PropertyStore
new file mode 100644
index 0000000..0833eac
--- /dev/null
+++ b/integration/store-ignite/src/main/resources/META-INF/services/org.apache.tamaya.store.PropertyStore
@@ -0,0 +1,19 @@
+#
+# 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.store.internal.IgniteProprtyStore
\ No newline at end of file


[05/50] [abbrv] incubator-tamaya-sandbox git commit: Implemented multi classpath environment PropertySourceProvider, with relocation capability.

Posted by pl...@apache.org.
Implemented multi classpath environment PropertySourceProvider, with relocation capability.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/4f0ff1ec
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/4f0ff1ec
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/4f0ff1ec

Branch: refs/heads/master
Commit: 4f0ff1eca3fd008e9c3ecf1bd3961401bd392162
Parents: 8f70518
Author: anatole <an...@apache.org>
Authored: Tue Oct 6 09:46:43 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Oct 6 09:55:39 2015 +0200

----------------------------------------------------------------------
 environment/src/test/resources/TEST.properties | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/4f0ff1ec/environment/src/test/resources/TEST.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/TEST.properties b/environment/src/test/resources/TEST.properties
new file mode 100644
index 0000000..2b31cb3
--- /dev/null
+++ b/environment/src/test/resources/TEST.properties
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+aKey=aValue.TEST


[17/50] [abbrv] incubator-tamaya-sandbox git commit: Cleanup of version informations in the POMs.

Posted by pl...@apache.org.
Cleanup of version informations in the POMs.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/33dc9997
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/33dc9997
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/33dc9997

Branch: refs/heads/master
Commit: 33dc9997427f161a847728c13685819f9a0c13ef
Parents: 749afaa
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sat Jan 2 15:40:37 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sat Jan 2 15:40:37 2016 +0100

----------------------------------------------------------------------
 ui/jsf/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/33dc9997/ui/jsf/pom.xml
----------------------------------------------------------------------
diff --git a/ui/jsf/pom.xml b/ui/jsf/pom.xml
index 1d36834..abba160 100644
--- a/ui/jsf/pom.xml
+++ b/ui/jsf/pom.xml
@@ -100,7 +100,7 @@ under the License.
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
             <artifactId>tamaya-injection</artifactId>
-            <version>0.2-incubating-SNAPSHOT</version>
+            <version>${project.version}</version>
             <optional>true</optional>
         </dependency>
         <dependency>


[20/50] [abbrv] incubator-tamaya-sandbox git commit: Update Hamcrest (1.3 -> 2.0.0.0)

Posted by pl...@apache.org.
Update Hamcrest (1.3 -> 2.0.0.0)


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/4607b3da
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/4607b3da
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/4607b3da

Branch: refs/heads/master
Commit: 4607b3dac8e7a58382340c900624e991e04a35cd
Parents: 570ef04
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sun Feb 14 21:12:56 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sun Feb 14 21:12:56 2016 +0100

----------------------------------------------------------------------
 jodatime/pom.xml | 4 ++--
 ui/jsf/pom.xml   | 7 +------
 2 files changed, 3 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/4607b3da/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 98f48cf..13d7c29 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -66,7 +66,7 @@ under the License.
 
         <dependency>
             <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-library</artifactId>
+            <artifactId>java-hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
 
@@ -104,4 +104,4 @@ under the License.
 
 
     
-</project>
\ No newline at end of file
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/4607b3da/ui/jsf/pom.xml
----------------------------------------------------------------------
diff --git a/ui/jsf/pom.xml b/ui/jsf/pom.xml
index abba160..aab6a64 100644
--- a/ui/jsf/pom.xml
+++ b/ui/jsf/pom.xml
@@ -76,12 +76,7 @@ under the License.
         </dependency>
         <dependency>
             <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-library</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-core</artifactId>
+            <artifactId>java-hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
 


[02/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-110: Add Support for integrating with Spring Environment and Configuration. Feature added. TAMAYA-111: Add Classloader aware ServiceContext.

Posted by pl...@apache.org.
TAMAYA-110: Add Support for integrating with Spring Environment and Configuration. Feature added.
TAMAYA-111: Add Classloader aware ServiceContext.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/e9018666
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/e9018666
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/e9018666

Branch: refs/heads/master
Commit: e90186661baeede89c8deb3a18cda8b01c964c13
Parents: 531e3cf
Author: anatole <an...@apache.org>
Authored: Fri Sep 25 20:30:49 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Fri Sep 25 20:30:49 2015 +0200

----------------------------------------------------------------------
 integration/cdi/pom.xml                         | 195 ---------
 .../cdi/config/ConfiguredVetoExtension.java     |  42 --
 .../cdi/internal/CDIAwareServiceContext.java    | 173 --------
 .../cdi/internal/DefaultConfiguration.java      | 268 ------------
 .../internal/DefaultConfigurationContext.java   | 279 -------------
 .../DefaultConfigurationContextBuilder.java     | 152 -------
 .../integration/cdi/internal/EnumConverter.java |  68 ---
 .../cdi/internal/PropertyConverterManager.java  | 409 -------------------
 .../cdi/internal/SEInjectorCDIExtension.java    |  86 ----
 .../cdi/internal/TamayaCDIIntegration.java      |  57 ---
 .../cdi/internal/TamayaConfigProvider.java      |  53 ---
 .../cdi/src/main/resources/META-INF/beans.xml   |  24 --
 .../javax.enterprise.inject.spi.Extension       |  20 -
 .../org.apache.tamaya.spi.ServiceContext        |  19 -
 .../tamaya/integration/cdi/ConfiguredClass.java | 124 ------
 .../tamaya/integration/cdi/ConfiguredTest.java  |  85 ----
 .../tamaya/integration/cdi/InjectedClass.java   |  62 ---
 .../cdi/cfg/ProvidedPropertySource.java         |  66 ---
 .../integration/cdi/cfg/TestConfigProvider.java |  45 --
 .../integration/cdi/cfg/TestPropertySource.java |  78 ----
 .../cdi/src/test/resources/META-INF/beans.xml   |  24 --
 21 files changed, 2329 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/pom.xml
----------------------------------------------------------------------
diff --git a/integration/cdi/pom.xml b/integration/cdi/pom.xml
deleted file mode 100644
index 5bbdb6e..0000000
--- a/integration/cdi/pom.xml
+++ /dev/null
@@ -1,195 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-integrations</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>tamaya-cdi</artifactId>
-    <name>Apache Tamaya Modules Integration - CDI</name>
-
-    <properties>
-        <owb.version>1.6.2</owb.version>
-        <weld.version>2.2.7.Final</weld.version>
-        <geronimo-jcdi-1.1-spec.version>1.0</geronimo-jcdi-1.1-spec.version>
-        <geronimo-interceptor-1.2-spec.version>1.0</geronimo-interceptor-1.2-spec.version>
-        <geronimo-atinject-1.0-spec.version>1.0</geronimo-atinject-1.0-spec.version>
-        <bval.version>0.5</bval.version>
-        <ds.version>1.1.0</ds.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.jacoco</groupId>
-                <artifactId>jacoco-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>prepare-agent</id>
-                        <goals>
-                            <goal>prepare-agent</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-library</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-classloader-support</artifactId>
-            <version>0.2-incubating-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-java7-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-java7-api</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-injection</artifactId>
-            <version>0.2-incubating-SNAPSHOT</version>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jcdi_1.1_spec</artifactId>
-            <version>${geronimo-jcdi-1.1-spec.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.deltaspike.modules</groupId>
-            <artifactId>deltaspike-test-control-module-api</artifactId>
-            <version>${ds.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.deltaspike.modules</groupId>
-            <artifactId>deltaspike-test-control-module-impl</artifactId>
-            <version>${ds.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    <profiles>
-        <profile>
-            <id>OWB</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-            <dependencies>
-                <!-- OWB specific dependencies-->
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-atinject_1.0_spec</artifactId>
-                    <version>${geronimo-atinject-1.0-spec.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-interceptor_1.2_spec</artifactId>
-                    <version>${geronimo-interceptor-1.2-spec.version}</version>
-                    <scope>provided</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-annotation_1.2_spec</artifactId>
-                    <version>1.0.MR2-SNAPSHOT</version>
-                    <scope>provided</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-el_2.2_spec</artifactId>
-                    <version>1.0.2</version>
-                </dependency>
-
-                <dependency>
-                    <groupId>org.apache.openwebbeans</groupId>
-                    <artifactId>openwebbeans-impl</artifactId>
-                    <version>${owb.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.openwebbeans</groupId>
-                    <artifactId>openwebbeans-spi</artifactId>
-                    <version>${owb.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.openwebbeans</groupId>
-                    <artifactId>openwebbeans-resource</artifactId>
-                    <version>${owb.version}</version>
-                </dependency>
-
-                <dependency>
-                    <groupId>org.apache.bval</groupId>
-                    <artifactId>bval-jsr303</artifactId>
-                    <version>${bval.version}</version>
-                    <scope>test</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.deltaspike.cdictrl</groupId>
-                    <artifactId>deltaspike-cdictrl-owb</artifactId>
-                    <version>${ds.version}</version>
-                    <scope>test</scope>
-                </dependency>
-            </dependencies>
-        </profile>
-        <profile>
-            <id>Weld</id>
-            <dependencies>
-                <dependency>
-                    <groupId>org.jboss.weld.se</groupId>
-                    <artifactId>weld-se</artifactId>
-                    <version>${weld.version}</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.deltaspike.cdictrl</groupId>
-                    <artifactId>deltaspike-cdictrl-weld</artifactId>
-                    <version>${ds.version}</version>
-                    <scope>test</scope>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/config/ConfiguredVetoExtension.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/config/ConfiguredVetoExtension.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/config/ConfiguredVetoExtension.java
deleted file mode 100644
index f90998d..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/config/ConfiguredVetoExtension.java
+++ /dev/null
@@ -1,42 +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.integration.cdi.config;
-
-import org.apache.tamaya.ConfigurationProvider;
-
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
-
-/**
- * CDI Extension that can be used to veto on beans by configuring the fully qualified class names (as regex expression)
- * under {@code javax.enterprise.inject.vetoed}. Multiple expression can be added as comma separated values.
- */
-public class ConfiguredVetoExtension {
-
-    public void observesBean(@Observes ProcessAnnotatedType<?> type){
-        String vetoedTypesVal = ConfigurationProvider.getConfiguration().get("javax.enterprise.inject.vetoed");
-        String[] vetoedTypes = vetoedTypesVal.split(",");
-        for(String typeExpr:vetoedTypes){
-            if(type.getAnnotatedType().getJavaClass().getName().matches(typeExpr)){
-                type.veto();
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/CDIAwareServiceContext.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/CDIAwareServiceContext.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/CDIAwareServiceContext.java
deleted file mode 100644
index 04d92c7..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/CDIAwareServiceContext.java
+++ /dev/null
@@ -1,173 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.clsupport.internal.CLAwareServiceContext;
-import org.apache.tamaya.spi.ServiceContext;
-
-import javax.annotation.Priority;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-/**
- * This class implements a {@link ServiceContext}, which basically provides a similar loading mechanism as used
- * by the {@link java.util.ServiceLoader}. Whereas the {@link java.util.ServiceLoader} only loads configurations
- * and instances from one classloader, this loader manages configs found and the related instances for each
- * classloader along the classloader hierarchies individually. It ensures instances are loaded on the classloader
- * level, where they first are visible. Additionally it ensures the same configuration resource (and its
- * declared services) are loaded multiple times, when going up the classloader hierarchy.<p/>
- * Finally classloaders are not stored by reference by this class, to ensure they still can be garbage collected.
- * Refer also the inherited parent class for further details.<p/>
- * This class uses an ordinal of {@code 10}, so it overrides any default {@link ServiceContext} implementations
- * provided with the Tamaya core modules.
- */
-public class CDIAwareServiceContext implements ServiceContext {
-    /**
-     * List current services loaded, per classloader.
-     */
-    private final CLAwareServiceContext clAwareServiceContext = new CLAwareServiceContext();
-
-    /**
-     * Singletons.
-     */
-    private final Map<Class<?>, Object> singletons = new ConcurrentHashMap<>();
-
-
-    @Override
-    public <T> T getService(Class<T> serviceType) {
-        Object cached = singletons.get(serviceType);
-        if (cached == null) {
-            Collection<T> services = getServices(serviceType);
-            if (services.isEmpty()) {
-                cached = null;
-            } else {
-                cached = getServiceWithHighestPriority(services, serviceType);
-            }
-            if(cached!=null) {
-                singletons.put(serviceType, cached);
-            }
-        }
-        return serviceType.cast(cached);
-    }
-
-    /**
-     * Loads and registers services.
-     *
-     * @param <T>         the concrete type.
-     * @param serviceType The service type.
-     * @return the items found, never {@code null}.
-     */
-    @Override
-    public <T> List<T> getServices(final Class<T> serviceType) {
-        List<T> found = (List<T>) clAwareServiceContext.getServices(serviceType);
-        BeanManager beanManager = TamayaCDIIntegration.getBeanManager();
-        Instance<T> cdiInstances = null;
-        if(beanManager!=null){
-            Set<Bean<?>> instanceBeans = beanManager.getBeans(Instance.class);
-            cdiInstances = (Instance<T>)beanManager.getReference(instanceBeans.iterator().next(), Instance.class, null);
-        }
-        if(cdiInstances!=null){
-            for(T t:cdiInstances.select(serviceType)){
-                found.add(t);
-            }
-        }
-        return found;
-    }
-
-    /**
-     * Checks the given instance for a @Priority annotation. If present the annotation's value s evaluated. If no such
-     * annotation is present, a default priority is returned (1);
-     * @param o the instance, not null.
-     * @return a priority, by default 1.
-     */
-    public static int getPriority(Object o){
-        int prio = 1; //X TODO discuss default priority
-        Priority priority = o.getClass().getAnnotation(Priority.class);
-        if (priority != null) {
-            prio = priority.value();
-        }
-        return prio;
-    }
-
-    /**
-     * @param services to scan
-     * @param <T>      type of the service
-     *
-     * @return the service with the highest {@link javax.annotation.Priority#value()}
-     *
-     * @throws ConfigException if there are multiple service implementations with the maximum priority
-     */
-    private <T> T getServiceWithHighestPriority(Collection<T> services, Class<T> serviceType) {
-
-        // we do not need the priority stuff if the list contains only one element
-        if (services.size() == 1) {
-            return services.iterator().next();
-        }
-
-        Integer highestPriority = null;
-        int highestPriorityServiceCount = 0;
-        T highestService = null;
-
-        for (T service : services) {
-            int prio = getPriority(service);
-            if (highestPriority == null || highestPriority < prio) {
-                highestService = service;
-                highestPriorityServiceCount = 1;
-                highestPriority = prio;
-            } else if (highestPriority == prio) {
-                highestPriorityServiceCount++;
-            }
-        }
-
-        if (highestPriorityServiceCount > 1) {
-            throw new ConfigException(MessageFormat.format("Found {0} implementations for Service {1} with Priority {2}: {3}",
-                    highestPriorityServiceCount,
-                    serviceType.getName(),
-                    highestPriority,
-                    services));
-        }
-
-        return highestService;
-    }
-
-    /**
-     * Returns ordinal of 20, overriding defaults as well as the inherited (internally used) CLAwareServiceContext
-     * instance.
-     * @return ordinal of 20.
-     */
-    @Override
-    public int ordinal() {
-        return 20;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfiguration.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfiguration.java
deleted file mode 100644
index 630ba62..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfiguration.java
+++ /dev/null
@@ -1,268 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
-import javax.enterprise.inject.Vetoed;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of the Configuration API. This class uses the current {@link ConfigurationContext} to evaluate the
- * chain of {@link PropertySource} and {@link PropertyFilter}
- * instance to evaluate the current Configuration.
- */
-@Vetoed
-public class DefaultConfiguration implements Configuration {
-    /**
-     * The logger.
-     */
-    private static final Logger LOG = Logger.getLogger(DefaultConfiguration.class.getName());
-    /**
-     * The maximal number of filter cycles performed before aborting.
-     */
-    private static final int MAX_FILTER_LOOPS = 10;
-
-    /**
-     * The current {@link ConfigurationContext} of the current instance.
-     */
-    private final ConfigurationContext configurationContext;
-
-    /**
-     * Constructor.
-     * @param configurationContext The configuration Context to be used.
-     */
-    public DefaultConfiguration(ConfigurationContext configurationContext){
-        this.configurationContext = Objects.requireNonNull(configurationContext);
-    }
-
-    /**
-     * This method evaluates the given configuration key. Hereby if goes down the chain or PropertySource instances
-     * provided by the current {@link ConfigurationContext}. The first non-null-value returned
-     * is taken as an intermediate value. Finally the value is filtered through the
-     * {@link PropertyFilter} instances installed, before it is returned as the final result of
-     * this method.
-     *
-     * @param key the property's key, not null.
-     * @return the optional configuration value, never null.
-     */
-    @Override
-    public String get(String key) {
-        List<PropertySource> propertySources = configurationContext.getPropertySources();
-        String unfilteredValue = null;
-        PropertyValueCombinationPolicy combinationPolicy = this.configurationContext
-                .getPropertyValueCombinationPolicy();
-        for (PropertySource propertySource : propertySources) {
-                unfilteredValue = combinationPolicy.collect(unfilteredValue, key, propertySource);
-        }
-        return applyFilter(key, unfilteredValue);
-    }
-
-    /**
-     * Apply filters to a single property value.
-     *
-     * @param key             the key, used for logging, not null.
-     * @param unfilteredValue the unfiltered property value.
-     * @return the filtered value, or null.
-     */
-    private String applyFilter(String key, String unfilteredValue) {
-        // Apply filters to values, prevent values filtered to null!
-        for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
-            boolean changed = false;
-            // Apply filters to values, prevent values filtered to null!
-            for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
-                String newValue = filter.filterProperty(key, unfilteredValue);
-                if (newValue != null && !newValue.equals(unfilteredValue)) {
-                    changed = true;
-                    if (LOG.isLoggable(Level.FINEST)) {
-                        LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
-                    }
-                } else if (unfilteredValue != null && !unfilteredValue.equals(newValue)) {
-                    changed = true;
-                    if (LOG.isLoggable(Level.FINEST)) {
-                        LOG.finest("Filter - " + key + ": " + unfilteredValue + " -> " + newValue + " by " + filter);
-                    }
-                }
-                unfilteredValue = newValue;
-            }
-            if (!changed) {
-                LOG.finest("Finishing filter loop, no changes detected.");
-                break;
-            } else {
-                if (i == (MAX_FILTER_LOOPS - 1)) {
-                    if (LOG.isLoggable(Level.WARNING)) {
-                        LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
-                    }
-                } else {
-                    LOG.finest("Repeating filter loop, changes detected.");
-                }
-            }
-        }
-        return unfilteredValue;
-    }
-
-    /**
-     * Get the current properties, composed by the loaded {@link PropertySource} and filtered
-     * by registered {@link PropertyFilter}.
-     *
-     * @return the final properties.
-     */
-    @Override
-    public Map<String, String> getProperties() {
-        List<PropertySource> propertySources = new ArrayList<>(configurationContext.getPropertySources());
-        Collections.reverse(propertySources);
-        Map<String, String> result = new HashMap<>();
-        for (PropertySource propertySource : propertySources) {
-            try {
-                int origSize = result.size();
-                Map<String, String> otherMap = propertySource.getProperties();
-                LOG.log(Level.FINEST, null, "Overriding with properties from " + propertySource.getName());
-                result.putAll(otherMap);
-                LOG.log(Level.FINEST, null, "Handled properties from " + propertySource.getName() + "(new: " +
-                        (result.size() - origSize) + ", overrides: " + origSize + ", total: " + result.size());
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error adding properties from PropertySource: " + propertySource + ", ignoring PropertySource.", e);
-            }
-        }
-        return applyFilters(result);
-    }
-
-    /**
-     * Filter a full configuration property map.
-     *
-     * @param inputMap the unfiltered map
-     * @return the filtered map.
-     */
-    private Map<String, String> applyFilters(Map<String, String> inputMap) {
-        Map<String, String> resultMap = new HashMap<>(inputMap);
-        // Apply filters to values, prevent values filtered to null!
-        for (int i = 0; i < MAX_FILTER_LOOPS; i++) {
-            AtomicInteger changes = new AtomicInteger();
-            for (PropertyFilter filter : configurationContext.getPropertyFilters()) {
-                for (Map.Entry<String, String> entry : inputMap.entrySet()) {
-                    final String k = entry.getKey();
-                    final String v = entry.getValue();
-
-                    String newValue = filter.filterProperty(k, v);
-                    if (newValue != null && !newValue.equals(v)) {
-                        changes.incrementAndGet();
-                        LOG.finest("Filter - " + k + ": " + v + " -> " + newValue + " by " + filter);
-                    } else if (v != null && !v.equals(newValue)) {
-                        changes.incrementAndGet();
-                        LOG.finest("Filter - " + k + ": " + v + " -> " + newValue + " by " + filter);
-                    }
-                    // Remove null values
-                    if (null != newValue) {
-                        resultMap.put(k, newValue);
-                    }
-                    else{
-                        resultMap.remove(k);
-                    }
-                }
-            }
-            if (changes.get() == 0) {
-                LOG.finest("Finishing filter loop, no changes detected.");
-                break;
-            } else {
-                if (i == (MAX_FILTER_LOOPS - 1)) {
-                    if (LOG.isLoggable(Level.WARNING)) {
-                        LOG.warning("Maximal filter loop count reached, aborting filter evaluation after cycles: " + i);
-                    }
-                } else {
-                    LOG.finest("Repeating filter loop, changes detected: " + changes.get());
-                }
-                changes.set(0);
-            }
-        }
-        return resultMap;
-    }
-
-    /**
-     * Accesses the current String value for the given key and tries to convert it
-     * using the {@link PropertyConverter} instances provided by the current
-     * {@link ConfigurationContext}.
-     *
-     * @param key  the property's absolute, or relative path, e.g. @code
-     *             a/b/c/d.myProperty}.
-     * @param type The target type required, not null.
-     * @param <T>  the value type
-     * @return the converted value, never null.
-     */
-    @Override
-    public <T> T get(String key, Class<T> type) {
-        return get(key, (TypeLiteral<T>)TypeLiteral.of(type));
-    }
-
-    /**
-     * Accesses the current String value for the given key and tries to convert it
-     * using the {@link PropertyConverter} instances provided by the current
-     * {@link ConfigurationContext}.
-     *
-     * @param key  the property's absolute, or relative path, e.g. @code
-     *             a/b/c/d.myProperty}.
-     * @param type The target type required, not null.
-     * @param <T>  the value type
-     * @return the converted value, never null.
-     */
-    @Override
-    public <T> T get(String key, TypeLiteral<T> type) {
-        String value = get(key);
-        if (value != null) {
-            List<PropertyConverter<T>> converters = configurationContext.getPropertyConverters(type);
-            for (PropertyConverter<T> converter : converters) {
-                try {
-                    T t = converter.convert(value);
-                    if (t != null) {
-                        return t;
-                    }
-                } catch (Exception e) {
-                    LOG.log(Level.FINEST, "PropertyConverter: " + converter + " failed to convert value: " + value, e);
-                }
-            }
-            throw new ConfigException("Unparseable config value for type: " + type.getRawType().getName() + ": " + key);
-        }
-
-        return null;
-    }
-
-    public Configuration with(ConfigOperator operator) {
-        return operator.operate(this);
-    }
-
-    public <T> T query(ConfigQuery<T> query) {
-        return query.query(this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContext.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContext.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContext.java
deleted file mode 100644
index 1f39c8d..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContext.java
+++ /dev/null
@@ -1,279 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import javax.annotation.Priority;
-import javax.enterprise.inject.Vetoed;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Logger;
-
-/**
- * Default Implementation of a simple ConfigurationContext.
- */
-@Vetoed
-public class DefaultConfigurationContext implements ConfigurationContext {
-    /** The logger used. */
-    private final static Logger LOG = Logger.getLogger(DefaultConfigurationContext.class.getName());
-    /**
-     * Cubcomponent handling {@link PropertyConverter} instances.
-     */
-    private PropertyConverterManager propertyConverterManager = new PropertyConverterManager();
-
-    /**
-     * The current unmodifiable list of loaded {@link PropertySource} instances.
-     */
-    private List<PropertySource> immutablePropertySources;
-
-    /**
-     * The current unmodifiable list of loaded {@link PropertyFilter} instances.
-     */
-    private List<PropertyFilter> immutablePropertyFilters;
-
-    /**
-     * The overriding policy used when combining PropertySources registered to evalute the final configuration
-     * values.
-     */
-    private PropertyValueCombinationPolicy propertyValueCombinationPolicy;
-
-    /**
-     * Lock for internal synchronization.
-     */
-    private final ReentrantReadWriteLock propertySourceLock = new ReentrantReadWriteLock();
-
-    /** Comparator used for ordering property sources. */
-    private final PropertySourceComparator propertySourceComparator = new PropertySourceComparator();
-
-    /** Comparator used for ordering property filters. */
-    private final PropertyFilterComparator propertyFilterComparator = new PropertyFilterComparator();
-
-
-    /**
-     * The first time the Configuration system gets invoked we do initialize
-     * all our {@link PropertySource}s and
-     * {@link PropertyFilter}s which are known at startup.
-     */
-    public DefaultConfigurationContext() {
-        List<PropertySource> propertySources = new ArrayList<>();
-
-        // first we load all PropertySources which got registered via java.util.ServiceLoader
-        propertySources.addAll(ServiceContextManager.getServiceContext().getServices(PropertySource.class));
-
-        // after that we add all PropertySources which get dynamically registered via their PropertySourceProviders
-        propertySources.addAll(evaluatePropertySourcesFromProviders());
-
-        // now sort them according to their ordinal values
-        Collections.sort(propertySources, new PropertySourceComparator());
-
-        immutablePropertySources = Collections.unmodifiableList(propertySources);
-        LOG.info("Registered " + immutablePropertySources.size() + " property sources: " +
-                immutablePropertySources);
-
-        // as next step we pick up the PropertyFilters pretty much the same way
-        List<PropertyFilter> propertyFilters = new ArrayList<>();
-        propertyFilters.addAll(ServiceContextManager.getServiceContext().getServices(PropertyFilter.class));
-        Collections.sort(propertyFilters, new PropertyFilterComparator());
-        immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
-        LOG.info("Registered " + immutablePropertyFilters.size() + " property filters: " +
-                immutablePropertyFilters);
-
-        immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
-        LOG.info("Registered " + immutablePropertyFilters.size() + " property filters: " +
-                immutablePropertyFilters);
-        propertyValueCombinationPolicy = ServiceContextManager.getServiceContext().getService(PropertyValueCombinationPolicy.class);
-        if(propertyValueCombinationPolicy==null) {
-            propertyValueCombinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
-        }
-        LOG.info("Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
-    }
-
-    DefaultConfigurationContext(DefaultConfigurationContextBuilder builder) {
-        List<PropertySource> propertySources = new ArrayList<>();
-        // first we load all PropertySources which got registered via java.util.ServiceLoader
-        propertySources.addAll(builder.propertySources.values());
-        // now sort them according to their ordinal values
-        Collections.sort(propertySources, propertySourceComparator);
-        immutablePropertySources = Collections.unmodifiableList(propertySources);
-        LOG.info("Registered " + immutablePropertySources.size() + " property sources: " +
-                immutablePropertySources);
-
-        // as next step we pick up the PropertyFilters pretty much the same way
-        List<PropertyFilter> propertyFilters = new ArrayList<>();
-        propertyFilters.addAll(ServiceContextManager.getServiceContext().getServices(PropertyFilter.class));
-        Collections.sort(propertyFilters, propertyFilterComparator);
-        immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
-        LOG.info("Registered " + immutablePropertyFilters.size() + " property filters: " +
-                immutablePropertyFilters);
-
-        propertyValueCombinationPolicy = ServiceContextManager.getServiceContext().getService(PropertyValueCombinationPolicy.class);
-        if(propertyValueCombinationPolicy==null){
-            propertyValueCombinationPolicy = PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
-        }
-        LOG.info("Using PropertyValueCombinationPolicy: " + propertyValueCombinationPolicy);
-    }
-
-
-
-    /**
-     * Pick up all {@link PropertySourceProvider}s and return all the
-     * {@link PropertySource}s they like to register.
-     */
-    private Collection<? extends PropertySource> evaluatePropertySourcesFromProviders() {
-        List<PropertySource> propertySources = new ArrayList<>();
-        Collection<PropertySourceProvider> propertySourceProviders = ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class);
-        for (PropertySourceProvider propertySourceProvider : propertySourceProviders) {
-            Collection<PropertySource> sources = propertySourceProvider.getPropertySources();
-            LOG.finer("PropertySourceProvider " + propertySourceProvider.getClass().getName() +
-                    " provided the following property sources: " + sources);
-                propertySources.addAll(sources);
-        }
-
-        return propertySources;
-    }
-
-    @Override
-    public void addPropertySources(PropertySource... propertySourcesToAdd) {
-        Lock writeLock = propertySourceLock.writeLock();
-        try {
-            writeLock.lock();
-            List<PropertySource> newPropertySources = new ArrayList<>(this.immutablePropertySources);
-            newPropertySources.addAll(Arrays.asList(propertySourcesToAdd));
-            Collections.sort(newPropertySources, new PropertySourceComparator());
-
-            this.immutablePropertySources = Collections.unmodifiableList(newPropertySources);
-        } finally {
-            writeLock.unlock();
-        }
-    }
-
-    private static class PropertySourceComparator implements Comparator<PropertySource>, Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * Order property source reversely, the most important come first.
-         *
-         * @param source1 the first PropertySource
-         * @param source2 the second PropertySource
-         * @return the comparison result.
-         */
-        private int comparePropertySources(PropertySource source1, PropertySource source2) {
-            if (source1.getOrdinal() < source2.getOrdinal()) {
-                return -1;
-            } else if (source1.getOrdinal() > source2.getOrdinal()) {
-                return 1;
-            } else {
-                return source1.getClass().getName().compareTo(source2.getClass().getName());
-            }
-        }
-
-        @Override
-        public int compare(PropertySource source1, PropertySource source2) {
-            return comparePropertySources(source1, source2);
-        }
-    }
-
-    private static class PropertyFilterComparator implements Comparator<PropertyFilter>, Serializable{
-
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * Compare 2 filters for ordering the filter chain.
-         *
-         * @param filter1 the first filter
-         * @param filter2 the second filter
-         * @return the comparison result
-         */
-        private int comparePropertyFilters(PropertyFilter filter1, PropertyFilter filter2) {
-            Priority prio1 = filter1.getClass().getAnnotation(Priority.class);
-            Priority prio2 = filter2.getClass().getAnnotation(Priority.class);
-            int ord1 = prio1 != null ? prio1.value() : 0;
-            int ord2 = prio2 != null ? prio2.value() : 0;
-
-            if (ord1 < ord2) {
-                return -1;
-            } else if (ord1 > ord2) {
-                return 1;
-            } else {
-                return filter1.getClass().getName().compareTo(filter2.getClass().getName());
-            }
-        }
-
-        @Override
-        public int compare(PropertyFilter filter1, PropertyFilter filter2) {
-            return comparePropertyFilters(filter1, filter2);
-        }
-    }
-
-    @Override
-    public List<PropertySource> getPropertySources() {
-        return immutablePropertySources;
-    }
-
-    @Override
-    public <T> void addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
-        propertyConverterManager.register(typeToConvert, propertyConverter);
-        LOG.info("Added PropertyConverter: " + propertyConverter.getClass().getName());
-    }
-
-    @Override
-    public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
-        return propertyConverterManager.getPropertyConverters();
-    }
-
-    @Override
-    public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
-        return propertyConverterManager.getPropertyConverters(targetType);
-    }
-
-    @Override
-    public List<PropertyFilter> getPropertyFilters() {
-        return immutablePropertyFilters;
-    }
-
-    @Override
-    public PropertyValueCombinationPolicy getPropertyValueCombinationPolicy(){
-        return propertyValueCombinationPolicy;
-    }
-
-    @Override
-    public ConfigurationContextBuilder toBuilder() {
-        return ConfigurationProvider.getConfigurationContextBuilder().setContext(this);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContextBuilder.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContextBuilder.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContextBuilder.java
deleted file mode 100644
index 407c881..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/DefaultConfigurationContextBuilder.java
+++ /dev/null
@@ -1,152 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
-import javax.enterprise.inject.Vetoed;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * Default implementation of {@link ConfigurationContextBuilder}.
- */
-@Vetoed
-public class DefaultConfigurationContextBuilder implements ConfigurationContextBuilder {
-
-    Map<String, PropertySource> propertySources = new HashMap<>();
-    List<PropertyFilter> propertyFilters = new ArrayList<>();
-    Map<TypeLiteral<?>, List<PropertyConverter<?>>> propertyConverters = new HashMap<>();
-    PropertyValueCombinationPolicy combinationPolicy;
-
-    @Override
-    public ConfigurationContextBuilder setContext(ConfigurationContext context) {
-        this.propertySources.clear();
-        for(PropertySource ps:context.getPropertySources()) {
-            this.propertySources.put(ps.getName(), ps);
-        }
-        this.propertyFilters.clear();
-        this.propertyFilters.addAll(context.getPropertyFilters());
-        this.propertyConverters.clear();
-        this.propertyConverters.putAll(context.getPropertyConverters());
-        this.combinationPolicy = context.getPropertyValueCombinationPolicy();
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder addPropertySources(Collection<PropertySource> propertySourcesToAdd) {
-        for(PropertySource ps:propertySourcesToAdd){
-            if(this.propertySources.containsKey(ps.getName())){
-                throw new ConfigException("Duplicate PropertySource: " + ps.getName());
-            }
-        }
-        for(PropertySource ps:propertySourcesToAdd) {
-            this.propertySources.put(ps.getName(), ps);
-        }
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder addPropertySources(PropertySource... propertySourcesToAdd) {
-        return addPropertySources(Arrays.asList(propertySourcesToAdd));
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertySources(Collection<String> propertySourcesToRemove) {
-        for(String key: propertySourcesToRemove){
-            this.propertySources.remove(key);
-        }
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertySources(String... propertySourcesToRemove) {
-        return removePropertySources(Arrays.asList(propertySourcesToRemove));
-    }
-
-    @Override
-    public ConfigurationContextBuilder addPropertyFilters(Collection<PropertyFilter> filters) {
-        this.propertyFilters.addAll(filters);
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder addPropertyFilters(PropertyFilter... filters) {
-        return addPropertyFilters(Arrays.asList(filters));
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertyFilters(Collection<PropertyFilter> filters) {
-        this.propertyFilters.removeAll(filters);
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertyFilters(PropertyFilter... filters) {
-        return removePropertyFilters(Arrays.asList(filters));
-    }
-
-    @Override
-    public <T> ConfigurationContextBuilder addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
-        List<PropertyConverter<?>> converters = this.propertyConverters.get(typeToConvert);
-        if(converters==null){
-            converters =  new ArrayList<>();
-            this.propertyConverters.put(typeToConvert, converters);
-        }
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertyConverters(TypeLiteral<?> typeToConvert, PropertyConverter<?>... converters) {
-        return removePropertyConverters(typeToConvert, Arrays.asList(converters));
-    }
-
-    @Override
-    public ConfigurationContextBuilder removePropertyConverters(TypeLiteral<?> typeToConvert, Collection<PropertyConverter<?>> converters) {
-        List<PropertyConverter<?>> existing = this.propertyConverters.get(typeToConvert);
-        if(existing!=null) {
-            existing.removeAll(converters);
-        }
-        return this;
-    }
-
-    @Override
-    public ConfigurationContextBuilder setPropertyValueCombinationPolicy(PropertyValueCombinationPolicy policy) {
-        this.combinationPolicy = Objects.requireNonNull(policy);
-        return this;
-    }
-
-    @Override
-    public ConfigurationContext build() {
-        return new DefaultConfigurationContext(this);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/EnumConverter.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/EnumConverter.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/EnumConverter.java
deleted file mode 100644
index 4587b18..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/EnumConverter.java
+++ /dev/null
@@ -1,68 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.spi.PropertyConverter;
-
-import javax.enterprise.inject.Vetoed;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Locale;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Converter, converting from String to tge given enum type.
- */
-@Vetoed
-public class EnumConverter<T> implements PropertyConverter<T> {
-    private Logger LOG = Logger.getLogger(EnumConverter.class.getName());
-    private Class<T> enumType;
-    private Method factory;
-
-    public EnumConverter(Class<T> enumType) {
-        if (!Enum.class.isAssignableFrom(enumType)) {
-            throw new IllegalArgumentException("Not an Enum: " + enumType.getName());
-        }
-        this.enumType = Objects.requireNonNull(enumType);
-        try {
-            this.factory = enumType.getMethod("valueOf", String.class);
-        } catch (NoSuchMethodException e) {
-            throw new ConfigException("Uncovertible enum type without valueOf method found, please provide a custom " +
-                    "PropertyConverter for: " + enumType.getName());
-        }
-    }
-
-    @Override
-    public T convert(String value) {
-        try {
-            return (T) factory.invoke(null, value);
-        } catch (InvocationTargetException | IllegalAccessException e) {
-            LOG.log(Level.FINEST, "Invalid enum value '" + value + "' for " + enumType.getName(), e);
-        }
-        try {
-            return (T) factory.invoke(null, value.toUpperCase(Locale.ENGLISH));
-        } catch (InvocationTargetException | IllegalAccessException e) {
-            LOG.log(Level.FINEST, "Invalid enum value '" + value + "' for " + enumType.getName(), e);
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/PropertyConverterManager.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/PropertyConverterManager.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/PropertyConverterManager.java
deleted file mode 100644
index b845683..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/PropertyConverterManager.java
+++ /dev/null
@@ -1,409 +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.integration.cdi.internal;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-import javax.enterprise.inject.Vetoed;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Logger;
-
-/**
- * Manager that deals with {@link PropertyConverter} instances.
- * This class is thread-safe.
- */
-@Vetoed
-public class PropertyConverterManager {
-    /**
-     * The logger used.
-     */
-    private static final Logger LOG = Logger.getLogger(PropertyConverterManager.class.getName());
-    /**
-     * The registered converters.
-     */
-    private Map<TypeLiteral<?>, List<PropertyConverter<?>>> converters = new ConcurrentHashMap<>();
-    /**
-     * The transitive converters.
-     */
-    private Map<TypeLiteral<?>, List<PropertyConverter<?>>> transitiveConverters = new ConcurrentHashMap<>();
-    /**
-     * The lock used.
-     */
-    private ReadWriteLock lock = new ReentrantReadWriteLock();
-
-    private static final Comparator<Object> PRIORITY_COMPARATOR = new Comparator<Object>() {
-
-        @Override
-        public int compare(Object o1, Object o2) {
-            int prio = CDIAwareServiceContext.getPriority(o1) - CDIAwareServiceContext.getPriority(o2);
-            if (prio < 0) {
-                return 1;
-            } else if (prio > 0) {
-                return -1;
-            } else {
-                return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName());
-            }
-        }
-    };
-
-    /**
-     * Constructor.
-     */
-    public PropertyConverterManager() {
-        initConverters();;
-    }
-
-    /**
-     * Registers the default converters provided out of the box.
-     */
-    protected void initConverters() {
-        for (PropertyConverter conv : ServiceContextManager.getServiceContext().getServices(PropertyConverter.class)) {
-            Type type = TypeLiteral.getGenericInterfaceTypeParameters(conv.getClass(), PropertyConverter.class)[0];
-            register(TypeLiteral.of(type), conv);
-        }
-    }
-
-    /**
-     * Registers a ew converter instance.
-     *
-     * @param targetType the target type, not null.
-     * @param converter  the converter, not null.
-     * @param <T>        the type.
-     */
-    public <T> void register(TypeLiteral<T> targetType, PropertyConverter<T> converter) {
-        Objects.requireNonNull(converter);
-        Lock writeLock = lock.writeLock();
-        try {
-            writeLock.lock();
-            List converters = List.class.cast(this.converters.get(targetType));
-            List<PropertyConverter<?>> newConverters = new ArrayList<>();
-            if (converters != null) {
-                newConverters.addAll(converters);
-            }
-            newConverters.add(converter);
-            Collections.sort(newConverters, PRIORITY_COMPARATOR);
-            this.converters.put(targetType, Collections.unmodifiableList(newConverters));
-            // evaluate transitive closure for all inherited supertypes and implemented interfaces
-            // direct implemented interfaces
-            for (Class<?> ifaceType : targetType.getRawType().getInterfaces()) {
-                converters = List.class.cast(this.transitiveConverters.get(ifaceType));
-                newConverters = new ArrayList<>();
-                if (converters != null) {
-                    newConverters.addAll(converters);
-                }
-                newConverters.add(converter);
-                Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                this.transitiveConverters.put(TypeLiteral.of(ifaceType), Collections.unmodifiableList(newConverters));
-            }
-            Class<?> superClass = targetType.getRawType().getSuperclass();
-            while (superClass != null && !superClass.equals(Object.class)) {
-                converters = List.class.cast(this.transitiveConverters.get(superClass));
-                newConverters = new ArrayList<>();
-                if (converters != null) {
-                    newConverters.addAll(converters);
-                }
-                newConverters.add(converter);
-                Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                this.transitiveConverters.put(TypeLiteral.of(superClass), Collections.unmodifiableList(newConverters));
-                for (Class<?> ifaceType : superClass.getInterfaces()) {
-                    converters = List.class.cast(this.transitiveConverters.get(ifaceType));
-                    newConverters = new ArrayList<>();
-                    if (converters != null) {
-                        newConverters.addAll(converters);
-                    }
-                    newConverters.add(converter);
-                    Collections.sort(newConverters, PRIORITY_COMPARATOR);
-                    this.transitiveConverters.put(TypeLiteral.of(ifaceType), Collections.unmodifiableList(newConverters));
-                }
-                superClass = superClass.getSuperclass();
-            }
-        } finally {
-            writeLock.unlock();
-        }
-    }
-
-    /**
-     * Allows to evaluate if a given target type is supported.
-     *
-     * @param targetType the target type, not null.
-     * @return true, if a converter for the given type is registered, or a default one can be created.
-     */
-    public boolean isTargetTypeSupported(TypeLiteral<?> targetType) {
-        if (converters.containsKey(targetType) || transitiveConverters.containsKey(targetType)) {
-            return true;
-        }
-        return createDefaultPropertyConverter(targetType) != null;
-    }
-
-    /**
-     * Get a map of all property converters currently registered. This will not contain the converters that
-     * may be created, when an instance is adapted, which provides a String constructor or compatible
-     * factory methods taking a single String instance.
-     *
-     * @return the current map of instantiated and registered converters.
-     * @see #createDefaultPropertyConverter(TypeLiteral)
-     */
-    public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
-        Lock readLock = lock.readLock();
-        try {
-            readLock.lock();
-            return new HashMap<>(this.converters);
-        } finally {
-            readLock.unlock();
-        }
-    }
-
-    /**
-     * Get the list of all current registered converters for the given target type.
-     * If not converters are registered, they component tries to create and register a dynamic
-     * converter based on String costructor or static factory methods available.<br/>
-     * The converters provided are of the following type and returned in the following order:
-     * <ul>
-     *     <li>Converters mapped explicitly to the required target type are returned first, ordered
-     *     by decreasing priority. This means, if explicit converters are registered these are used
-     *     primarly for converting a value.</li>
-     *     <li>The target type of each explicitly registered converter also can be transitively mapped to
-     *     1) all directly implemented interfaces, 2) all its superclasses (except Object), 3) all the interfaces
-     *     implemented by its superclasses. These groups of transitive converters is returned similarly in the
-     *     order as mentioned, whereas also here a priority based decreasing ordering is applied.</li>
-     *     <li>java.lang wrapper classes and native types are automatically mapped.</li>
-     *     <li>If no explicit converters are registered, for Enum types a default implementation is provided that
-     *     compares the configuration values with the different enum members defined (cases sensitive mapping).</li>
-     * </ul>
-     *
-     * So given that list above directly registered mappings always are tried first, before any transitive mapping
-     * should be used. Also in all cases @Priority annotations are honored for ordering of the converters in place.
-     * Transitive conversion is supported for all directly implemented interfaces (including inherited ones) and
-     * the inheritance hierarchy (exception Object). Superinterfaces of implemented interfaces are ignored.
-     *
-     *
-     * @param targetType the target type, not null.
-     * @param <T>        the type class
-     * @return the ordered list of converters (may be empty for not convertible types).
-     * @see #createDefaultPropertyConverter(TypeLiteral)
-     */
-    public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> targetType) {
-        Lock readLock = lock.readLock();
-        List<PropertyConverter<T>> converterList = new ArrayList<>();
-        List<PropertyConverter<T>> converters;
-        // direct mapped converters
-        try {
-            readLock.lock();
-            converters = List.class.cast(this.converters.get(targetType));
-        } finally {
-            readLock.unlock();
-        }
-        if (converters != null) {
-            converterList.addAll(converters);
-        }
-        // transitive converter
-        try {
-            readLock.lock();
-            converters = List.class.cast(this.transitiveConverters.get(targetType));
-        } finally {
-            readLock.unlock();
-        }
-        if (converters != null) {
-            converterList.addAll(converters);
-        }
-        // handling of java.lang wrapper classes
-        TypeLiteral<T> boxedType = mapBoxedType(targetType);
-        if (boxedType != null) {
-            try {
-                readLock.lock();
-                converters = List.class.cast(this.converters.get(boxedType));
-            } finally {
-                readLock.unlock();
-            }
-            if (converters != null) {
-                converterList.addAll(converters);
-            }
-        }
-        if (converterList.isEmpty()) {
-            // adding any converters created on the fly, e.g. for enum types.
-            PropertyConverter<T> defaultConverter = createDefaultPropertyConverter(targetType);
-            if (defaultConverter != null) {
-                register(targetType, defaultConverter);
-                try {
-                    readLock.lock();
-                    converters = List.class.cast(this.converters.get(targetType));
-                } finally {
-                    readLock.unlock();
-                }
-            }
-            if (converters != null) {
-                converterList.addAll(converters);
-            }
-        }
-        return converterList;
-    }
-
-    /**
-     * Maps native types to the corresponding boxed types.
-     *
-     * @param targetType the native type.
-     * @param <T>        the type
-     * @return the boxed type, or null.
-     */
-    private <T> TypeLiteral<T> mapBoxedType(TypeLiteral<T> targetType) {
-        Type parameterType = targetType.getType();
-        if (parameterType == int.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Integer.class));
-        }
-        if (parameterType == short.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Short.class));
-        }
-        if (parameterType == byte.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Byte.class));
-        }
-        if (parameterType == long.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Long.class));
-        }
-        if (parameterType == boolean.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Boolean.class));
-        }
-        if (parameterType == char.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Character.class));
-        }
-        if (parameterType == float.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Float.class));
-        }
-        if (parameterType == double.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Double.class));
-        }
-        if (parameterType == int[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Integer[].class));
-        }
-        if (parameterType == short[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Short[].class));
-        }
-        if (parameterType == byte[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Byte[].class));
-        }
-        if (parameterType == long[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Long[].class));
-        }
-        if (parameterType == boolean.class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Boolean.class));
-        }
-        if (parameterType == char[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Character[].class));
-        }
-        if (parameterType == float[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Float[].class));
-        }
-        if (parameterType == double[].class) {
-            return TypeLiteral.class.cast(TypeLiteral.of(Double[].class));
-        }
-        return null;
-    }
-
-    /**
-     * Creates a dynamic PropertyConverter for the given target type.
-     *
-     * @param targetType the target type
-     * @param <T>        the type class
-     * @return a new converter, or null.
-     */
-    protected <T> PropertyConverter<T> createDefaultPropertyConverter(final TypeLiteral<T> targetType) {
-        if (Enum.class.isAssignableFrom(targetType.getRawType())) {
-            return new EnumConverter<T>(targetType.getRawType());
-        }
-        PropertyConverter<T> converter = null;
-        final Method factoryMethod = getFactoryMethod(targetType.getRawType(), "of", "valueOf", "instanceOf", "getInstance", "from", "fromString", "parse");
-        if (factoryMethod != null) {
-            converter = new PropertyConverter<T>() {
-                @Override
-                public T convert(String value) {
-                    try {
-                        if (!Modifier.isStatic(factoryMethod.getModifiers())) {
-                            throw new ConfigException(factoryMethod.toGenericString() +
-                                    " is not a static method. Only static " +
-                                    "methods can be used as factory methods.");
-                        }
-
-                        factoryMethod.setAccessible(true);
-
-                        Object invoke = factoryMethod.invoke(null, value);
-                        return targetType.getRawType().cast(invoke);
-                    } catch (Exception e) {
-                        throw new ConfigException("Failed to decode '" + value + "'", e);
-                    }
-                }
-            };
-        }
-        if (converter == null) {
-            try {
-                final Constructor<T> constr = targetType.getRawType().getDeclaredConstructor(String.class);
-                converter = new PropertyConverter<T>() {
-                    @Override
-                    public T convert(String value) {
-                        try {
-                            constr.setAccessible(true);
-                            return constr.newInstance(value);
-                        } catch (Exception e) {
-                            throw new ConfigException("Failed to decode '" + value + "'", e);
-                        }
-                    }
-                };
-            } catch (Exception e) {
-                LOG.finest("Failed to construct instance of type: " + targetType.getRawType().getName() + ": " + e);
-            }
-        }
-        return converter;
-    }
-
-    /**
-     * Tries to evaluate a factory method that can be used to create an instance based on a String.
-     *
-     * @param type        the target type
-     * @param methodNames the possible static method names
-     * @return the first method found, or null.
-     */
-    private Method getFactoryMethod(Class<?> type, String... methodNames) {
-        Method m;
-        for (String name : methodNames) {
-            try {
-                m = type.getDeclaredMethod(name, String.class);
-                return m;
-            } catch (NoSuchMethodException | RuntimeException e) {
-                LOG.finest("No such factory method found on type: " + type.getName() + ", methodName: " + name);
-            }
-        }
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/SEInjectorCDIExtension.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/SEInjectorCDIExtension.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/SEInjectorCDIExtension.java
deleted file mode 100644
index e7bf49e..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/SEInjectorCDIExtension.java
+++ /dev/null
@@ -1,86 +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.integration.cdi.internal;
-
-
-import org.apache.tamaya.inject.ConfigurationInjection;
-import org.apache.tamaya.inject.internal.ConfiguredType;
-
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Vetoed;
-import javax.enterprise.inject.spi.*;
-import java.util.*;
-
-/**
- * CDI portable extension that integrates {@link org.apache.tamaya.inject.ConfigurationInjector}
- * with CDI by adding configuration features to CDI (config enable CDI beans).
- */
-@Vetoed
-public final class SEInjectorCDIExtension implements Extension {
-
-    /**
-     * Method that injects the values into any configured fields, by wrapping the given
-     * InjectionTarget.
-     * @param pit the injection target
-     * @param <T> the target type
-     */
-    public <T> void initializeConfiguredFields(final @Observes ProcessInjectionTarget<T> pit) {
-        final AnnotatedType<T> at = pit.getAnnotatedType();
-        if (!ConfiguredType.isConfigured(at.getJavaClass())) {
-            return;
-        }
-        final InjectionTarget<T> it = pit.getInjectionTarget();
-        InjectionTarget<T> wrapped = new InjectionTarget<T>() {
-            @Override
-            public void inject(T instance, CreationalContext<T> ctx) {
-                it.inject(instance, ctx);
-                ConfigurationInjection.getConfigurationInjector().configure(instance);
-            }
-
-            @Override
-            public void postConstruct(T instance) {
-                it.postConstruct(instance);
-            }
-
-            @Override
-            public void preDestroy(T instance) {
-                it.dispose(instance);
-            }
-
-            @Override
-            public void dispose(T instance) {
-                it.dispose(instance);
-            }
-
-            @Override
-            public Set<InjectionPoint> getInjectionPoints() {
-                return it.getInjectionPoints();
-            }
-
-            @Override
-            public T produce(CreationalContext<T> ctx) {
-                return it.produce(ctx);
-            }
-        };
-        pit.setInjectionTarget(wrapped);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaCDIIntegration.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaCDIIntegration.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaCDIIntegration.java
deleted file mode 100644
index 7dfa834..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaCDIIntegration.java
+++ /dev/null
@@ -1,57 +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.integration.cdi.internal;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.Extension;
-
-/**
- * Tamaya main integreation with CDI, storing the BeanManager reference for implementation, where no
- * JNDI is available or {@code java:comp/env/BeanManager} is not set correctly.
- */
-public class TamayaCDIIntegration implements Extension{
-    /** The BeanManager references stored. */
-    private static BeanManager beanManager;
-
-    /**
-     * Initializes the current BeanMaanager with the instance passed.
-     * @param validation the event
-     * @param beanManager the BeanManager instance
-     */
-    public void initBeanManager(@Observes AfterDeploymentValidation validation, BeanManager beanManager){
-        TamayaCDIIntegration.beanManager = beanManager;
-    }
-
-    /**
-     * Get the current {@link  BeanManager} instance.
-     * @return
-     */
-    public static BeanManager getBeanManager(){
-        return beanManager;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaConfigProvider.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaConfigProvider.java b/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaConfigProvider.java
deleted file mode 100644
index a383a88..0000000
--- a/integration/cdi/src/main/java/org/apache/tamaya/integration/cdi/internal/TamayaConfigProvider.java
+++ /dev/null
@@ -1,53 +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.integration.cdi.internal;
-
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Singleton;
-
-/**
- * Tamaya main integreation with CDI (singleton) serving producers for Configuration, ConfigurationContext and
- * ConfigurationContextBuilder.
- */
-@Singleton
-public class TamayaConfigProvider{
-
-    @Produces
-    @ApplicationScoped
-    public Configuration getConfiguration(ConfigurationContext context){
-        return new DefaultConfiguration(context);
-    }
-
-    @Produces @ApplicationScoped
-    public ConfigurationContext getConfigurationContext(){
-        return new DefaultConfigurationContext();
-    }
-
-    @Produces
-    public ConfigurationContextBuilder getConfigurationContextBuilder(){
-        return new DefaultConfigurationContextBuilder();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/resources/META-INF/beans.xml b/integration/cdi/src/main/resources/META-INF/beans.xml
deleted file mode 100644
index adee378..0000000
--- a/integration/cdi/src/main/resources/META-INF/beans.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">
-
-</beans>
-

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/integration/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
deleted file mode 100644
index db6641d..0000000
--- a/integration/cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
+++ /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.integration.cdi.internal.TamayaCDIIntegration
-org.apache.tamaya.integration.cdi.internal.SEInjectorCDIExtension

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e9018666/integration/cdi/src/main/resources/META-INF/services/org.apache.tamaya.spi.ServiceContext
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/resources/META-INF/services/org.apache.tamaya.spi.ServiceContext b/integration/cdi/src/main/resources/META-INF/services/org.apache.tamaya.spi.ServiceContext
deleted file mode 100644
index 5c501ee..0000000
--- a/integration/cdi/src/main/resources/META-INF/services/org.apache.tamaya.spi.ServiceContext
+++ /dev/null
@@ -1,19 +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.integration.cdi.internal.CDIAwareServiceContext
\ No newline at end of file


[29/50] [abbrv] incubator-tamaya-sandbox git commit: Moved collections module from sandbox to modules.

Posted by pl...@apache.org.
Moved collections module from sandbox to modules.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/43328ecb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/43328ecb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/43328ecb

Branch: refs/heads/master
Commit: 43328ecb75fc185e8a7f52c7360c0ab313349dc5
Parents: c9e965a
Author: anatole <an...@apache.org>
Authored: Sat Feb 27 22:13:36 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sat Feb 27 22:13:36 2016 +0100

----------------------------------------------------------------------
 pom.xml | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/43328ecb/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 249c18a..ba43998 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,9 +39,6 @@ under the License.
         <module>metamodels</module>
         <module>jodatime</module>
         <module>sysprops</module>
-        <module>environment</module>
-        <module>collections</module>
-        <module>mutable-config</module>
         <module>ui</module>
     </modules>
 


[19/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-135: Added mutability for configuration sources or mechanisms.

Posted by pl...@apache.org.
TAMAYA-135: Added mutability for configuration sources or mechanisms.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/570ef041
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/570ef041
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/570ef041

Branch: refs/heads/master
Commit: 570ef0416349ea9377cba0242efa0055834fd48b
Parents: 56f3d99
Author: anatole <an...@apache.org>
Authored: Sat Jan 16 07:39:34 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sat Jan 16 07:39:34 2016 +0100

----------------------------------------------------------------------
 integration/commons/pom.xml                     |   2 +-
 integration/store/pom.xml                       |  80 -----------
 .../org/apache/tamaya/store/PropertyStore.java  |  64 ---------
 .../tamaya/store/PropertyStoreProvider.java     |  78 -----------
 .../tamaya/store/WritablePropertySource.java    |  66 ---------
 .../store/spi/DefaultStoredPropertySource.java  | 137 -------------------
 .../store/spi/PropertyStoreProviderSpi.java     |  34 -----
 jodatime/pom.xml                                |   2 +-
 metamodels/pom.xml                              |   2 +-
 mutable-config/pom.xml                          |  81 -----------
 .../tamaya/mutableconfig/ChangeSummary.java     | 105 --------------
 .../mutableconfig/ConfigChangeProvider.java     |  50 -------
 .../mutableconfig/ConfigChangeRequest.java      | 136 ------------------
 .../spi/ConfigurationChangeProviderSpi.java     |  37 -----
 pom.xml                                         |   2 +-
 sysprops/pom.xml                                |   2 +-
 ui/pom.xml                                      |   1 +
 17 files changed, 6 insertions(+), 873 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/commons/pom.xml
----------------------------------------------------------------------
diff --git a/integration/commons/pom.xml b/integration/commons/pom.xml
index 65d3203..2b5eda0 100644
--- a/integration/commons/pom.xml
+++ b/integration/commons/pom.xml
@@ -27,7 +27,7 @@ under the License.
         <relativePath>..</relativePath>
     </parent>
     <artifactId>tamaya-commons-config</artifactId>
-    <name>Apache Tamaya Commons Configuration Integration</name>
+    <name>Apache Tamaya Commons Integration - Apache Commons</name>
     <packaging>bundle</packaging>
 
     <dependencies>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/pom.xml
----------------------------------------------------------------------
diff --git a/integration/store/pom.xml b/integration/store/pom.xml
deleted file mode 100644
index 0e8a546..0000000
--- a/integration/store/pom.xml
+++ /dev/null
@@ -1,80 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-integration-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-    </parent>
-    <artifactId>tamaya-store</artifactId>
-    <name>Apache Tamaya Storage/Cache/Datagrid Integration</name>
-    <description>Integration with a Datagrid backend for distributed configuration.</description>
-    <packaging>bundle</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-spisupport</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-events</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.tamaya,
-                            org.apache.tamaya.spi,
-                            org.apache.tamaya.events,
-                            org.apache.tamaya.spisupport
-                            javax.annotation,
-                            *
-                        </Import-Package>
-                        <Export-Package>
-                            org.apache.tamaya.integration.store,
-                            org.apache.tamaya.integration.store.spi,
-                        </Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
deleted file mode 100644
index d1d6adf..0000000
--- a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStore.java
+++ /dev/null
@@ -1,64 +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.store;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.Map;
-
-/**
- * Simple abstraction of a property synchronization backend. Most methods are similar
- * to a {@link org.apache.tamaya.spi.PropertySource}, enhanced with methods for
- * updating the property storage.
- */
-public interface PropertyStore {
-
-    /**
-     * Get the store's name.
-     * @return the name, never null.
-     */
-    String getName();
-
-    /**
-     * Stores the given PropertySource into the store.
-     * @param propertySource
-     */
-    void store(PropertySource propertySource);
-
-    /**
-     * Read all properties.
-     * @return the properties from the remote store, never null.
-     */
-    Map<String,String> read();
-
-    /**
-     * Reads a single key fromt hthe store.
-     * @param key the key, not null.
-     * @return the value, or null.
-     */
-    String read(String key);
-
-    /**
-     * Determines if {@link #read()} returns all contained properties, or optionally only
-     * a subset of the accessible and defined properties are returned.
-     * @return true, if this store is scannable.
-     */
-    boolean isScannable();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java b/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
deleted file mode 100644
index dceb29a..0000000
--- a/integration/store/src/main/java/org/apache/tamaya/store/PropertyStoreProvider.java
+++ /dev/null
@@ -1,78 +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.store;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.store.spi.PropertyStoreProviderSpi;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Simple provider accessor singleton for accessing {@link PropertyStore}
- * instances.
- */
-public final class PropertyStoreProvider {
-    /**
-     * The logger used.
-     */
-    private static final Logger LOG = Logger.getLogger(PropertyStoreProvider.class.getName());
-
-
-    /**
-     * Singleton constructor.
-     */
-    private PropertyStoreProvider() {
-    }
-
-
-    /**
-     * Access a {@link PropertyStore} using it's id.
-     *
-     * @param storeId the unique id of the store to use.
-     * @return
-     */
-    public static PropertyStore getPropertyStore(String storeId) {
-        for (PropertyStoreProviderSpi propertyStoreProviderSpi : ServiceContextManager.getServiceContext()
-                .getServices(PropertyStoreProviderSpi.class)) {
-            PropertyStore store = propertyStoreProviderSpi.getPropertyStore(storeId);
-            if (store != null) {
-                LOG.finest("DataGrid '" + storeId + "' used: " + store);
-                return store;
-            }
-        }
-        throw new ConfigException("No such Store: " + storeId);
-    }
-
-    /**
-     * Access a {@link PropertyStore} using it's id, hereby returning the most significant of the configured
-     * {@link PropertyStore} instances.
-     *
-     * @return the default PropertyStore instance.
-     */
-    public static PropertyStore getDefaultPropertyStore() {
-        return getPropertyStore("default");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java b/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
deleted file mode 100644
index c19fa45..0000000
--- a/integration/store/src/main/java/org/apache/tamaya/store/WritablePropertySource.java
+++ /dev/null
@@ -1,66 +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.store;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.Map;
-
-/**
- * Simple abstraction of a property synchronization backend. Most methods are similar
- * to a {@link org.apache.tamaya.spi.PropertySource}, enhanced with methods for
- * updating the property storage.
- */
-public interface WritablePropertySource extends PropertySource{
-
-    /**
-     * Loads the property source from its store..
-     */
-    void load();
-
-    /**
-     * Sets the store to the given properties, replacing all previous state.
-     * @param props the new properties.
-     */
-    void setAll(Map<String, String> props);
-
-    /**
-     * Updates/adds all the given entries.
-     * @param props the entries to be added/updated.
-     */
-    void putAll(Map<String, String> props);
-
-    /**
-     * Writes a single entry.
-     * @param key the key, not null.
-     * @param value the new value, not null.
-     */
-    void put(String key, String value);
-
-    /**
-     * Removes all entries.
-     */
-    void clear();
-
-    /**
-     * Synchronize the current state with the remote version.
-     */
-    void synch();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java b/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
deleted file mode 100644
index b3fe1ee..0000000
--- a/integration/store/src/main/java/org/apache/tamaya/store/spi/DefaultStoredPropertySource.java
+++ /dev/null
@@ -1,137 +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.store.spi;
-
-import org.apache.tamaya.events.ConfigEventManager;
-import org.apache.tamaya.events.FrozenPropertySource;
-import org.apache.tamaya.events.delta.ChangeType;
-import org.apache.tamaya.events.delta.PropertySourceChange;
-import org.apache.tamaya.events.delta.PropertySourceChangeBuilder;
-import org.apache.tamaya.spisupport.BasePropertySource;
-import org.apache.tamaya.store.PropertyStore;
-import org.apache.tamaya.store.WritablePropertySource;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * PropertySource that is connected to a {@link PropertyStore}.
- */
-public class DefaultStoredPropertySource extends BasePropertySource
-        implements WritablePropertySource {
-
-    /**
-     * The store to be used, not null.
-     */
-    private PropertyStore propertyStore;
-
-    /**
-     * The last version of stoarge data accessed.
-     */
-    private String lastVersion;
-
-    private Map<String, String> properties = new HashMap<>();
-
-
-    private FrozenPropertySource currentConfig;
-
-    /**
-     * Creates a new property source.
-     *
-     * @param propertyStore  the backend store.
-     * @param defaultOrdinal the default ordinal to be used.
-     */
-    public DefaultStoredPropertySource(PropertyStore propertyStore, int defaultOrdinal) {
-        super(defaultOrdinal);
-        this.propertyStore = Objects.requireNonNull(propertyStore);
-        this.properties.putAll(this.propertyStore.read());
-    }
-
-    @Override
-    public void load() {
-        this.properties.clear();
-        this.properties.putAll(this.propertyStore.read());
-        synch();
-    }
-
-    @Override
-    public String getName() {
-        return this.propertyStore.getName();
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return properties;
-    }
-
-    @Override
-    public String get(String key) {
-        if (!propertyStore.isScannable()) {
-            return propertyStore.read(key);
-        }
-        return properties.get(key);
-    }
-
-    @Override
-    public boolean isScannable() {
-        return propertyStore.isScannable();
-    }
-
-    @Override
-    public String toString() {
-        return "StoredPropertySource{" +
-                "propertyStore=" + propertyStore.getName() +
-                '}';
-    }
-
-    @Override
-    public void setAll(Map<String, String> props) {
-        this.properties.clear();
-        this.properties.putAll(props);
-        synch();
-    }
-
-    @Override
-    public void putAll(Map<String, String> props) {
-        this.properties.putAll(props);
-        synch();
-    }
-
-    @Override
-    public void put(String key, String value) {
-        this.properties.put(key, value);
-        synch();
-    }
-
-    @Override
-    public void clear() {
-        this.properties.clear();
-        synch();
-    }
-
-    @Override
-    public void synch() {
-        FrozenPropertySource newConfig = FrozenPropertySource.of(this);
-        PropertySourceChange change = PropertySourceChangeBuilder.of(currentConfig, ChangeType.UPDATED)
-                .addChanges(newConfig).build();
-        currentConfig = newConfig;
-        ConfigEventManager.fireEvent(change);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
----------------------------------------------------------------------
diff --git a/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java b/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
deleted file mode 100644
index 1b20fc1..0000000
--- a/integration/store/src/main/java/org/apache/tamaya/store/spi/PropertyStoreProviderSpi.java
+++ /dev/null
@@ -1,34 +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.store.spi;
-
-import org.apache.tamaya.store.PropertyStore;
-
-/**
- * Class, that provides access to PropertyStores to be used.
- */
-public interface PropertyStoreProviderSpi {
-
-    /**
-     * Access a {@link PropertyStore} using it's id.
-     * @param storeId the unique id of the store to use.
-     * @return
-     */
-    PropertyStore getPropertyStore(String storeId);
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 98b13a6..98f48cf 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -30,7 +30,7 @@ under the License.
     </parent>
 
     <artifactId>tamaya-jodatime</artifactId>
-    <name>Apache Tamaya Joda-Time Support</name>
+    <name>Apache Tamaya Modules - Joda-Time Support</name>
     <packaging>bundle</packaging>
 
     <inceptionYear>2015</inceptionYear>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/metamodels/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/pom.xml b/metamodels/pom.xml
index 4a05846..79513d2 100644
--- a/metamodels/pom.xml
+++ b/metamodels/pom.xml
@@ -29,7 +29,7 @@ under the License.
 
     <groupId>org.apache.tamaya.ext.metamodels</groupId>
     <artifactId>tamaya-metamodels</artifactId>
-    <name>Apache Tamaya Extension Modules: Metamodels</name>
+    <name>Apache Tamaya Modules - Metamodels</name>
     <packaging>pom</packaging>
 
     <modules>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/mutable-config/pom.xml
----------------------------------------------------------------------
diff --git a/mutable-config/pom.xml b/mutable-config/pom.xml
deleted file mode 100644
index c20a60a..0000000
--- a/mutable-config/pom.xml
+++ /dev/null
@@ -1,81 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-extensions</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>tamaya-mutable-config</artifactId>
-    <name>Apache Tamaya Mutable Configuration Support</name>
-    <description>This module provides abstraction, if your scenario needs to actively change configuration entries
-        and write changes back to some property sources, files etc.</description>
-    <packaging>bundle</packaging>
-
-    <properties>
-        <jdkVersion>1.7</jdkVersion>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-events</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.tamaya.mutableconfig
-                        </Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
deleted file mode 100644
index 63d084c..0000000
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ChangeSummary.java
+++ /dev/null
@@ -1,105 +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.mutableconfig;
-
-import org.apache.tamaya.events.delta.ConfigurationChange;
-import org.apache.tamaya.events.delta.PropertySourceChange;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * Summaray class of a configuration change operation.
- * This class is immutable, read-only and thread-safe.
- */
-public final class ChangeSummary implements Serializable{
-
-    private static final long serialVersionUID = 1L;
-
-    private String changeId;
-    private ConfigurationChange configChange;
-    private List<PropertySourceChange> sourceChanges = new ArrayList<>();
-    private long commitTS;
-
-    private ChangeSummary(Builder builder){
-        this.changeId = builder.changeId;
-        this.commitTS = builder.commitTS;
-        this.configChange = Objects.requireNonNull(builder.configChange);
-        this.sourceChanges.addAll(builder.sourceChanges);
-    }
-
-    public String getChangeId(){
-        return changeId;
-    }
-
-    public long getTimestampMillis(){
-        return commitTS;
-    }
-
-    public ConfigurationChange getConfigurationChange(){
-        return configChange;
-    }
-
-    public Collection<PropertySourceChange> getPropertySourceChanges(){
-        return Collections.unmodifiableList(this.sourceChanges);
-    }
-
-
-
-
-
-    public static final class Builder {
-
-        private String changeId;
-        private ConfigurationChange configChange;
-        private List<PropertySourceChange> sourceChanges = new ArrayList<>();
-        private long commitTS = System.currentTimeMillis();
-
-        public Builder(){
-            this(UUID.randomUUID().toString());
-        }
-
-        public Builder(String changeId){
-            this.changeId = Objects.requireNonNull(changeId);
-        }
-
-        public Builder setConfigChange(ConfigurationChange configChange){
-            this.configChange = configChange;
-            return this;
-        }
-
-        public Builder addPropertySourceChange(PropertySourceChange propertyChange){
-            this.sourceChanges.add(propertyChange);
-            return this;
-        }
-
-        public Builder setTimestamp(long timestamp){
-            this.commitTS = timestamp;
-            return this;
-        }
-
-        public ChangeSummary build(){
-            return new ChangeSummary(this);
-        }
-
-
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
deleted file mode 100644
index f8842ea..0000000
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeProvider.java
+++ /dev/null
@@ -1,50 +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.mutableconfig;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.mutableconfig.spi.ConfigurationChangeProviderSpi;
-import org.apache.tamaya.spi.ServiceContextManager;
-
-/**
- * Accessor for creating {@link ConfigChangeRequest} instances to change and commite configuration.
- */
-public final class ConfigChangeProvider {
-
-    /**
-     * Creates a new change request for the given Configuration.
-     * @param config the configuration.
-     * @return a new ChangeRequest
-     * @throws UnsupportedOperationException if no change providers are registered.
-     */
-    public static ConfigChangeRequest createChangeRequest(Configuration config){
-        return ServiceContextManager.getServiceContext().getService(ConfigurationChangeProviderSpi.class)
-                .createChangeRequest(config);
-    }
-
-    /**
-     * Creates a new change request for the current Configuration.
-     * @return a new ChangeRequest
-     */
-    public static ConfigChangeRequest createChangeRequest(){
-        return createChangeRequest(ConfigurationProvider.getConfiguration());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
deleted file mode 100644
index 6d393cf..0000000
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/ConfigChangeRequest.java
+++ /dev/null
@@ -1,136 +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.mutableconfig;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-
-import java.util.Collection;
-import java.util.Map;
-
-
-/**
- * This interface extends the Configuration interface hereby adding methods to change configuration entries.
- * Hereby not all configuration entries are necessarily mutable, since some entries may be read from non
- * mutable areas of configuration. Of course, it is always possible to add a mutable shadow layer on top of all
- * configuration to enable whatever changes applied. The exact management and storage persistence algorithm should be
- * transparent.<br/>
- * As a consequence clients should first check, using the corresponding methods, if entries are to edited or removed
- * actually are eligible for change/creation or removal.
- */
-public interface ConfigChangeRequest{
-
-    /**
-     * Returns the configuration onto which the change should be applied.
-     * @return the corresponding configuration, not null.
-     */
-    Configuration getConfiguration();
-
-    /**
-     * Checks if a configuration key is writable (or it can be added).
-     *
-     * @param keyExpression the key to be cheched for write access (including creation), not null. Here this could also
-     *                      be a regulat expression, such "as a.b.c.*".
-     */
-    boolean isWritable(String keyExpression);
-
-    /**
-     * Checks if a configuration key is removable. This also implies that it is writable, but there might be writable
-     * keys that cannot be removed.
-     *
-     * @param keyExpression the keyExpression the key to be cheched for write access (including creation), not null. Here this could also
-     *                      be a regulat expression, such "as a.b.c.*".
-     */
-    boolean isRemovable(String keyExpression);
-
-    /**
-     * Sets a property.
-     *
-     * @param key the property's key, not null.
-     * @param value the property's value, not null.
-     * @return the former property value, or null.
-     * @throws ConfigException if the key/value cannot be added.
-     */
-    String put(String key, String value);
-
-    /**
-     * Puts all given configuration entries. This method should check that all given properties are
-     * basically removable, as defined by #isWritable. If any of the passed keys is not writable during this initial
-     * check, the operation should not perform any configuration changes and throw a {@link ConfigException}. If errors
-     * occur afterwards, when the properties are effectively written back to the backends, the errors should be
-     * collected and returned as part of the ConfigException payload. Nevertheless the operation should in that case
-     * remove all entries as far as possible and abort the writing operation.
-     *
-     * @param properties the properties tobe written, not null.
-     * @throws ConfigException if any of the given properties could not be written.
-     */
-    void putAll(Map<String, String> properties);
-
-    /**
-     * Removes a configuration entry.
-     *
-     * @param key the property's key, not null.
-     * @throws ConfigException if the given cannot be removed.
-     * @return the property's keys.
-     */
-    void remove(String key);
-
-    /**
-     * Removes all given configuration entries. This method should check that all given properties are
-     * basically removable, as defined by #isRemovable. If any of the passed keys is not removable during this initial
-     * check, the operation should not perform any configuration changes and throw a {@link ConfigException}. If errors
-     * occur afterwards, when the properties are effectively written back to the backends, the errors should be
-     * collected and returned as part of the ConfigException payload. Nevertheless the operation should in that case
-     * remove all entries as far as possible and abort the writing operation.
-     *
-     * @param keys the property's keys to be removed, not null.
-     * @throws ConfigException if any of the given keys could not be removed.
-     */
-    void removeAll(Collection<String> keys);
-
-    /**
-     * Resets all changes, leaving the request still open for further operations.
-     */
-    void reset();
-
-    /**
-     * Closes the request, sby default any uncommitted changes are committed.
-     */
-    void commit();
-
-    /**
-     * Closes the request,
-     * @param saveChanges flag to control if  any uncommitted changes ahould be written (default: yes).
-     */
-    void commit(boolean saveChanges);
-
-    /**
-     * Operation to check, if the current request is closed. Closed requests are read-only and can not be used
-     * for preparing/submitting any configuration changes.
-     * @return true, if this instance is closed.
-     */
-    boolean isCommitted();
-
-    /**
-     * Access the summary of the changes applied
-     * @return
-     */
-    ChangeSummary getChangeSummary();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
----------------------------------------------------------------------
diff --git a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java b/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
deleted file mode 100644
index e378c0d..0000000
--- a/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/spi/ConfigurationChangeProviderSpi.java
+++ /dev/null
@@ -1,37 +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.mutableconfig.spi;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.mutableconfig.ConfigChangeRequest;
-
-/**
- * Provider SPI for the {@link org.apache.tamaya.mutableconfig.ConfigChangeProvider}.
- */
-public interface ConfigurationChangeProviderSpi {
-
-   /**
-    * Creates a new change request for the given Configuration.
-    * @param config the configuration.
-    * @return a new ChangeRequest
-    * @throws UnsupportedOperationException if no change providers are registered.
-    */
-    ConfigChangeRequest createChangeRequest(Configuration config);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8168c47..249c18a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@ under the License.
     <artifactId>tamaya-sandbox</artifactId>
     <groupId>org.apache.tamaya.ext</groupId>
 
-    <name>Apache Tamaya Sandbox Modules</name>
+    <name>Apache Tamaya Sandbox</name>
     <description>This project contains the several extensions that can be used with Tamaya, but are not (yet) ready for
         a release.</description>
     <packaging>pom</packaging>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/sysprops/pom.xml
----------------------------------------------------------------------
diff --git a/sysprops/pom.xml b/sysprops/pom.xml
index 2fe0dd2..96f0cd9 100644
--- a/sysprops/pom.xml
+++ b/sysprops/pom.xml
@@ -27,7 +27,7 @@ under the License.
         <relativePath>..</relativePath>
     </parent>
     <artifactId>tamaya-sysprops</artifactId>
-    <name>Apache Tamaya - Configured Java SE System Properties</name>
+    <name>Apache Tamaya Modules - Configured Java SE System Properties</name>
     <packaging>bundle</packaging>
 
     <build>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/570ef041/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index bb524f4..b40563e 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -30,6 +30,7 @@ under the License.
     <packaging>pom</packaging>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>tamaya-ui</artifactId>
+    <name>Apache Tamaya Modules - UI</name>
 
     <modules>
         <module>jsf</module>



[04/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-113: Remove Java 8 related parts - basic work done.

Posted by pl...@apache.org.
TAMAYA-113: Remove Java 8 related parts - basic work done.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/8f70518a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/8f70518a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/8f70518a

Branch: refs/heads/master
Commit: 8f70518aca3b6ab72814c63e413d6a56b87e74d7
Parents: 9a34a72
Author: anatole <an...@apache.org>
Authored: Tue Sep 29 01:31:22 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Sep 29 01:31:26 2015 +0200

----------------------------------------------------------------------
 collections/pom.xml                             |   4 +-
 .../tamaya/zookeeper/EmbeddedKafkaCluster.java  | 138 +++++++++++++++++++
 .../tamaya/zookeeper/EmbeddedZookeeper.java     |  95 +++++++++++++
 metamodels/simple/pom.xml                       |   2 +-
 pom.xml                                         |   1 +
 5 files changed, 237 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8f70518a/collections/pom.xml
----------------------------------------------------------------------
diff --git a/collections/pom.xml b/collections/pom.xml
index 7726888..0ec3dda 100644
--- a/collections/pom.xml
+++ b/collections/pom.xml
@@ -34,13 +34,13 @@ under the License.
     <dependencies>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-java7-core</artifactId>
+            <artifactId>tamaya-core</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-java7-api</artifactId>
+            <artifactId>tamaya-api</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8f70518a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
----------------------------------------------------------------------
diff --git a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
new file mode 100644
index 0000000..e260732
--- /dev/null
+++ b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedKafkaCluster.java
@@ -0,0 +1,138 @@
+import kafka.server.KafkaConfig;
+import kafka.server.KafkaServer;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+public class EmbeddedKafkaCluster {
+    private final List<Integer> ports;
+    private final String zkConnection;
+    private final Properties baseProperties;
+
+    private final String brokerList;
+
+    private final List<KafkaServer> brokers;
+    private final List<File> logDirs;
+
+    public EmbeddedKafkaCluster(String zkConnection) {
+        this(zkConnection, new Properties());
+    }
+
+    public EmbeddedKafkaCluster(String zkConnection, Properties baseProperties) {
+        this(zkConnection, baseProperties, Collections.singletonList(-1));
+    }
+
+    public EmbeddedKafkaCluster(String zkConnection, Properties baseProperties, List<Integer> ports) {
+        this.zkConnection = zkConnection;
+        this.ports = resolvePorts(ports);
+        this.baseProperties = baseProperties;
+
+        this.brokers = new ArrayList<KafkaServer>();
+        this.logDirs = new ArrayList<File>();
+
+        this.brokerList = constructBrokerList(this.ports);
+    }
+
+    private List<Integer> resolvePorts(List<Integer> ports) {
+        List<Integer> resolvedPorts = new ArrayList<Integer>();
+        for (Integer port : ports) {
+            resolvedPorts.add(resolvePort(port));
+        }
+        return resolvedPorts;
+    }
+
+    private int resolvePort(int port) {
+        if (port == -1) {
+            return TestUtils.getAvailablePort();
+        }
+        return port;
+    }
+
+    private String constructBrokerList(List<Integer> ports) {
+        StringBuilder sb = new StringBuilder();
+        for (Integer port : ports) {
+            if (sb.length() > 0) {
+                sb.append(",");
+            }
+            sb.append("localhost:").append(port);
+        }
+        return sb.toString();
+    }
+
+    public void startup() {
+        for (int i = 0; i < ports.size(); i++) {
+            Integer port = ports.get(i);
+            File logDir = TestUtils.constructTempDir("kafka-local");
+
+            Properties properties = new Properties();
+            properties.putAll(baseProperties);
+            properties.setProperty("zookeeper.connect", zkConnection);
+            properties.setProperty("broker.id", String.valueOf(i + 1));
+            properties.setProperty("host.name", "localhost");
+            properties.setProperty("port", Integer.toString(port));
+            properties.setProperty("log.dir", logDir.getAbsolutePath());
+            properties.setProperty("log.flush.interval.messages", String.valueOf(1));
+
+            KafkaServer broker = startBroker(properties);
+
+            brokers.add(broker);
+            logDirs.add(logDir);
+        }
+    }
+
+
+    private KafkaServer startBroker(Properties props) {
+        KafkaServer server = new KafkaServer(new KafkaConfig(props), new SystemTime());
+        server.startup();
+        return server;
+    }
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.putAll(baseProperties);
+        props.put("metadata.broker.list", brokerList);
+        props.put("zookeeper.connect", zkConnection);
+        return props;
+    }
+
+    public String getBrokerList() {
+        return brokerList;
+    }
+
+    public List<Integer> getPorts() {
+        return ports;
+    }
+
+    public String getZkConnection() {
+        return zkConnection;
+    }
+
+    public void shutdown() {
+        for (KafkaServer broker : brokers) {
+            try {
+                broker.shutdown();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        for (File logDir : logDirs) {
+            try {
+                TestUtils.deleteFile(logDir);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("EmbeddedKafkaCluster{");
+        sb.append("brokerList='").append(brokerList).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8f70518a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
----------------------------------------------------------------------
diff --git a/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
new file mode 100644
index 0000000..54068fc
--- /dev/null
+++ b/integration/zookeeper/src/main/org/apache/tamaya/zookeeper/EmbeddedZookeeper.java
@@ -0,0 +1,95 @@
+import org.apache.zookeeper.server.NIOServerCnxnFactory;
+import org.apache.zookeeper.server.ServerCnxnFactory;
+import org.apache.zookeeper.server.ZooKeeperServer;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+public class EmbeddedZookeeper {
+    private int port = -1;
+    private int tickTime = 500;
+
+    private ServerCnxnFactory factory;
+    private File snapshotDir;
+    private File logDir;
+
+    public EmbeddedZookeeper() {
+        this(-1);
+    }
+
+    public EmbeddedZookeeper(int port) {
+        this(port, 500);
+    }
+
+    public EmbeddedZookeeper(int port, int tickTime) {
+        this.port = resolvePort(port);
+        this.tickTime = tickTime;
+    }
+
+    private int resolvePort(int port) {
+        if (port == -1) {
+            return TestUtils.getAvailablePort();
+        }
+        return port;
+    }
+
+    public void startup() throws IOException{
+        if (this.port == -1) {
+            this.port = TestUtils.getAvailablePort();
+        }
+        this.factory = NIOServerCnxnFactory.createFactory(new InetSocketAddress("localhost", port), 1024);
+        this.snapshotDir = TestUtils.constructTempDir("embeeded-zk/snapshot");
+        this.logDir = TestUtils.constructTempDir("embeeded-zk/log");
+
+        try {
+            factory.startup(new ZooKeeperServer(snapshotDir, logDir, tickTime));
+        } catch (InterruptedException e) {
+            throw new IOException(e);
+        }
+    }
+
+
+    public void shutdown() {
+        factory.shutdown();
+        try {
+            TestUtils.deleteFile(snapshotDir);
+        } catch (FileNotFoundException e) {
+            // ignore
+        }
+        try {
+            TestUtils.deleteFile(logDir);
+        } catch (FileNotFoundException e) {
+            // ignore
+        }
+    }
+
+    public String getConnection() {
+        return "localhost:" + port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public void setTickTime(int tickTime) {
+        this.tickTime = tickTime;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public int getTickTime() {
+        return tickTime;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("EmbeddedZookeeper{");
+        sb.append("connection=").append(getConnection());
+        sb.append('}');
+        return sb.toString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8f70518a/metamodels/simple/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/simple/pom.xml b/metamodels/simple/pom.xml
index 8d87a83..a806459 100644
--- a/metamodels/simple/pom.xml
+++ b/metamodels/simple/pom.xml
@@ -34,7 +34,7 @@ under the License.
     <dependencies>
         <dependency>
             <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-java7-core</artifactId>
+            <artifactId>tamaya-core</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8f70518a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2935530..93ac8e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@ under the License.
         <module>jodatime</module>
         <module>sysprops</module>
         <module>environment</module>
+        <module>collections</module>
     </modules>
 
 </project>


[23/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-114: Tested and implemented base functionality.

Posted by pl...@apache.org.
TAMAYA-114: Tested and implemented base functionality.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/e37c2e0e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/e37c2e0e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/e37c2e0e

Branch: refs/heads/master
Commit: e37c2e0e0aef490ed5c9c24909fb184cebc9131a
Parents: 0d9afc2
Author: anatole <an...@apache.org>
Authored: Mon Feb 15 17:24:19 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Feb 15 17:24:19 2016 +0100

----------------------------------------------------------------------
 .../internal/ConcurrentHashMapConverter.java    |  96 ++++++++
 .../CollectionsTypedReadOnlyTests.java          | 220 +++++++++++++++++++
 .../collections/CollectionsTypedTests.java      | 209 ++++++++++++++++++
 3 files changed, 525 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e37c2e0e/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
new file mode 100644
index 0000000..e425a27
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
@@ -0,0 +1,96 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *  PropertyConverter for gnerating HashMap representation of a values.
+ */
+public class ConcurrentHashMapConverter implements PropertyConverter<HashMap> {
+    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static ConcurrentHashMapConverter INSTANCE = new ConcurrentHashMapConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static ConcurrentHashMapConverter getInstance(){
+        return INSTANCE;
+    }
+
+    @Override
+    public HashMap convert(String value, ConversionContext context) {
+        List<String> rawList = ArrayListConverter.split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                HashMap<String,Object> mlist = new HashMap<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    String[] items = splitItems(raw);
+                    Object convValue = valueConverter.convert(items[1], ctx);
+                    if(convValue!=null){
+                        mlist.put(items[0], convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
+            }
+        }
+        HashMap<String,String> result = new HashMap<>();
+        for(String raw:rawList){
+            String[] items = splitItems(raw);
+            if(items!=null){
+                result.put(items[0], items[1]);
+            }
+        }
+        return result;
+    }
+
+    static String[] splitItems(String raw) {
+        String[] items = raw.split("::");
+        if(items[0].trim().startsWith("[")){
+            items[0]= items[0].trim();
+            items[0] = items[0].substring(1);
+        }else{
+            items[0]= items[0].trim();
+        }
+        if(items[1].trim().endsWith("]")){
+            items[1] = items[1].substring(0,items[1].length()-1);
+        }else{
+            items[1]= items[1].trim();
+        }
+        return items;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e37c2e0e/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
new file mode 100644
index 0000000..04b0564
--- /dev/null
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
@@ -0,0 +1,220 @@
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.junit.Test;
+
+import java.util.*;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Basic tests for Tamaya collection support. Relevant configs for this tests:
+ * <pre>base.items=1,2,3,4,5,6,7,8,9,0
+ * base.map=1::a, 2::b, 3::c, [4:: ]
+ * </pre>
+ */
+public class CollectionsTypedReadOnlyTests {
+
+    @Test
+    public void testArrayListList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("typed.arraylist", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
+        items = (List<String>) config.get("typed.arraylist", List.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
+    }
+
+    @Test
+    public void testLinkedListList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("typed.linkedlist", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+        items = (List<String>) config.get("typed.linkedlist", List.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+    }
+
+
+    @Test
+    public void testHashSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("typed.hashset", new TypeLiteral<Set<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
+        items = (Set<String>) config.get("typed.hashset", Set.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
+    }
+
+    @Test
+    public void testTreeSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("typed.treeset", new TypeLiteral<Set<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
+        items = (Set<String>) config.get("typed.treeset", Set.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
+    }
+
+    @Test
+    public void testHashMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("typed.hashmap", new TypeLiteral<Map<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof HashMap);
+        items = (Map<String,String>) config.get("typed.hashmap", Map.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof HashMap);
+    }
+
+    @Test
+    public void testTreeMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("typed.treemap", new TypeLiteral<Map<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof TreeMap);
+        items = (Map<String,String>) config.get("typed.treemap", Map.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof TreeMap);
+    }
+
+
+    @Test
+    public void testCollection_TreeMap(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.treemap", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeMap);
+        items = (Collection<String>) config.get("typed.treemap", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeMap);
+    }
+
+    @Test
+    public void testCollection_HashMap(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.hashmap", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashMap);
+        items = (Collection<String>) config.get("typed.hashmap", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashMap);
+    }
+
+    @Test
+    public void testCollection_HashSet(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.hashset", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
+        items = (Collection<String>) config.get("typed.hashset", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
+    }
+
+    @Test
+    public void testCollection_TreeSet(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.treeset", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
+        items = (Collection<String>) config.get("typed.treeset", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
+    }
+
+    @Test
+    public void testCollection_ArrayList(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.arraylist", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
+        items = (Collection<String>) config.get("typed.arraylist", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
+    }
+
+    @Test
+    public void testCollection_LinkedList(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed.linkedlist", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+        items = (Collection<String>) config.get("typed.linkedlist", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e37c2e0e/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
new file mode 100644
index 0000000..71a86fb
--- /dev/null
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
@@ -0,0 +1,209 @@
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.junit.Test;
+
+import java.util.*;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Basic tests for Tamaya collection support. Relevant configs for this tests:
+ * <pre>base.items=1,2,3,4,5,6,7,8,9,0
+ * base.map=1::a, 2::b, 3::c, [4:: ]
+ * </pre>
+ */
+public class CollectionsTypedTests {
+
+    @Test
+    public void testList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("base.items", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (List<String>) config.get("base.items", List.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testArrayList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ArrayList<String> items = config.get("base.items", new TypeLiteral<ArrayList<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (ArrayList<String>) config.get("base.items", ArrayList.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testLinkedList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        LinkedList<String> items = config.get("base.items", new TypeLiteral<LinkedList<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (LinkedList<String>) config.get("base.items", LinkedList.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<Set<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (Set<String>) config.get("base.items", Set.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testSortedSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<SortedSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (SortedSet<String>) config.get("base.items", SortedSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testHashSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<HashSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (HashSet<String>) config.get("base.items", HashSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testTreeSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        TreeSet<String> items = config.get("base.items", new TypeLiteral<TreeSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (TreeSet<String>) config.get("base.items", TreeSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<Map<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (Map<String,String>) config.get("base.map", Map.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
+
+    @Test
+    public void testHashMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<HashMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (HashMap<String,String>) config.get("base.map", HashMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
+
+    @Test
+    public void testSortedMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<SortedMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (Map<String,String>) config.get("base.map", SortedMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
+
+    @Test
+    public void testTreeMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        TreeMap<String,String> items = config.get("base.map", new TypeLiteral<TreeMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items =  config.get("base.map", TreeMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
+
+    @Test
+    public void testCollection_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("base.items", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (Collection<String>) config.get("base.items", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+}


[16/50] [abbrv] incubator-tamaya-sandbox git commit: Fixed artifact name to include tamaya as first name part.

Posted by pl...@apache.org.
Fixed artifact name to include tamaya as first name part.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/749afaa7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/749afaa7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/749afaa7

Branch: refs/heads/master
Commit: 749afaa7336904c2c53e7851a050f4933af33b38
Parents: 854f0f8
Author: anatole <an...@apache.org>
Authored: Tue Nov 10 15:08:56 2015 +0100
Committer: anatole <an...@apache.org>
Committed: Tue Nov 10 15:08:56 2015 +0100

----------------------------------------------------------------------
 integration/commons/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/749afaa7/integration/commons/pom.xml
----------------------------------------------------------------------
diff --git a/integration/commons/pom.xml b/integration/commons/pom.xml
index 8c04a41..65d3203 100644
--- a/integration/commons/pom.xml
+++ b/integration/commons/pom.xml
@@ -26,7 +26,7 @@ under the License.
         <version>0.2-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
-    <artifactId>commons</artifactId>
+    <artifactId>tamaya-commons-config</artifactId>
     <name>Apache Tamaya Commons Configuration Integration</name>
     <packaging>bundle</packaging>
 


[49/50] [abbrv] incubator-tamaya-sandbox git commit: - Moved UI module into sandbox, including UI parts. - Decoupled accordingly existing modules from UI. - Fixed a few quality issues.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/services/UserService.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/services/UserService.java b/ui/base/src/main/java/org/apache/tamaya/ui/services/UserService.java
new file mode 100644
index 0000000..71a8a43
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/services/UserService.java
@@ -0,0 +1,30 @@
+/*
+ * 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.ui.services;
+
+import org.apache.tamaya.ui.User;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public interface UserService {
+
+    User login(String userId, String credentials);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/ConfigView.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
new file mode 100644
index 0000000..fb0d41b
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
@@ -0,0 +1,229 @@
+/*
+ * 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.ui.views;
+
+import com.vaadin.data.Property;
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Tree;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * View for evaluating the current convifugration tree.
+ */
+@Priority(10)
+public class ConfigView extends VerticalSpacedLayout implements View {
+
+    /**
+     * Provider to register this view.
+     */
+    @Priority(10)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.CREATE;
+        }
+
+        @Override
+        public String getName() {
+            return "view.config.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/config";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.config.name");
+        }
+
+        @Override
+        public View createView(Object... params){
+            return new ConfigView();
+        }
+    }
+
+    private TextField keyFilter = new TextField("Key filter");
+    private TextField valueFilter = new TextField("Value filter");
+    private CheckBox showMetaEntries = new CheckBox("Show Metadata", false);
+    private Tree tree = new Tree("Current Configuration");
+
+    public ConfigView() {
+        Label caption = new Label("Raw Configuration");
+        Label description = new Label(
+                "This view shows the overall <b>raw</b> configuration tree. Dependening on your access rights you" +
+                        "may see partial or masked data. Similarly configuration can be <i>read-only</i> or <i>mutable</i>.",
+                ContentMode.HTML);
+
+        TabSheet tabPane = new TabSheet();
+        VerticalLayout configLayout = new VerticalLayout();
+
+        HorizontalLayout filters = new HorizontalLayout();
+
+        Button filterButton = new Button("Filter", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                fillTree();
+            }
+        });
+        filters.setDefaultComponentAlignment(Alignment.BOTTOM_LEFT);
+        filters.addComponents(keyFilter, valueFilter, filterButton, showMetaEntries);
+        filters.setSpacing(true);
+
+        fillTree();
+        configLayout.addComponents(filters, tree);
+        tabPane.addTab(configLayout, "Configuration");
+        TextArea envProps = new TextArea();
+        StringBuilder b = new StringBuilder();
+        envProps.setHeight("100%");
+        envProps.setWidth("100%");
+        envProps.setSizeFull();
+        envProps.setRows(System.getenv().size());
+        for(Map.Entry<String,String> en:new TreeMap<>(System.getenv()).entrySet()){
+            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
+        }
+        envProps.setValue(b.toString());
+        envProps.setReadOnly(true);
+        tabPane.addTab(envProps, "Environment Properties");
+        TextArea sysProps = new TextArea();
+        sysProps.setSizeFull();
+        sysProps.setRows(System.getProperties().size());
+        b.setLength(0);
+        for(Map.Entry<Object,Object> en:new TreeMap<>(System.getProperties()).entrySet()){
+            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
+        }
+        sysProps.setValue(b.toString());
+        sysProps.setReadOnly(true);
+        tabPane.addTab(sysProps, "System Properties");
+        TextArea runtimeProps = new TextArea();
+        runtimeProps.setRows(5);
+        b.setLength(0);
+        b.append("Available Processors : ").append(Runtime.getRuntime().availableProcessors()).append('\n');
+        b.append("Free Memory          : ").append(Runtime.getRuntime().freeMemory()).append('\n');
+        b.append("Max Memory           : ").append(Runtime.getRuntime().maxMemory()).append('\n');
+        b.append("Total Memory         : ").append(Runtime.getRuntime().totalMemory()).append('\n');
+        b.append("Default Locale       : ").append(Locale.getDefault()).append('\n');
+        runtimeProps.setValue(b.toString());
+        runtimeProps.setReadOnly(true);
+        tabPane.addTab(runtimeProps, "Runtime Properties");
+        runtimeProps.setSizeFull();
+        addComponents(caption, description, tabPane);
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+        showMetaEntries.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                fillTree();
+            }
+        });
+    }
+
+    private void fillTree() {
+        String keyFilterExp = this.keyFilter.getValue();
+        if(keyFilterExp.isEmpty()){
+            keyFilterExp = null;
+        }
+        String valueFilterExp = this.valueFilter.getValue();
+        if(valueFilterExp.isEmpty()){
+            valueFilterExp = null;
+        }
+        tree.removeAllItems();
+        boolean showMetadata = showMetaEntries.getValue();
+        for(Map.Entry<String,String> entry: ConfigurationProvider.getConfiguration().getProperties().entrySet()){
+            String key = entry.getKey();
+            if(keyFilterExp!=null && !key.matches(keyFilterExp)){
+                continue;
+            }
+            if(valueFilterExp!=null && !entry.getValue().matches(valueFilterExp)){
+                continue;
+            }
+            if(!showMetadata && entry.getKey().startsWith("_")){
+                continue;
+            }
+            tree.addItem(key);
+            tree.setItemCaption(key, getCaption(key, entry.getValue()));
+            tree.setChildrenAllowed(key, false);
+            String parent = null;
+            int start = 0;
+            int index = key.indexOf('.', start);
+            while(index>0){
+                String subItem = key.substring(0,index);
+                String caption = key.substring(start, index);
+                tree.addItem(subItem);
+                tree.setItemCaption(subItem, caption);
+                if(parent!=null){
+                    tree.setParent(subItem, parent);
+                }
+                parent = subItem;
+                start = index+1;
+                index = key.indexOf('.', start);
+            }
+            String lastItem = key.substring(start);
+            if(!lastItem.equals(key)){
+                if(parent!=null){
+                    tree.setParent(key, parent);
+                }else{
+                    // should not happen
+                }
+            }else{ // singl root entry
+                if(parent!=null) {
+                    tree.setParent(key, parent);
+                }
+            }
+        }
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/ErrorView.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
new file mode 100644
index 0000000..eef0db8
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
@@ -0,0 +1,43 @@
+/*
+ * 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.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.ui.UIConstants;
+
+/**
+ * View used for shoiwing unexpected errors.
+ */
+public class ErrorView extends VerticalLayout implements View {
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+        setSizeFull();
+        setMargin(true);
+        Label label = new Label("Could not find a view with that name. You are most likely doing it wrong.");
+        label.addStyleName(UIConstants.LABEL_FAILURE);
+
+        addComponent(label);
+        setComponentAlignment(label, Alignment.MIDDLE_CENTER);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/HomeView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/HomeView.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/HomeView.java
new file mode 100644
index 0000000..9d371d0
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/HomeView.java
@@ -0,0 +1,94 @@
+/*
+ * 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.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Label;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.CurrentUser;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+
+/**
+ * Home view containing a title and a description, used as default entry point of the UI after login.
+ */
+public class HomeView extends VerticalSpacedLayout implements View {
+
+    /**
+     * Provider to bew registered providing this view to the UI module.
+     */
+    @Priority(0)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.LAZY;
+        }
+
+        @Override
+        public String getName() {
+            return "view.home.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/home";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage(getName());
+        }
+
+        @Override
+        public View createView(Object... params) {
+            return new HomeView();
+        }
+
+    }
+
+    /**
+     * Constructor.
+     */
+    public HomeView() {
+        Label caption = new Label("Welcome, " + CurrentUser.get().getUserID());
+        Label description = new Label(
+                "<b>Apache Tamaya</b> is an API and extendable framework for accessing and managing configuration.<br/> \n" +
+                        "Please check the project's home page <a href='http://tamaya.incubator.apache.org'>http://tamaya.incubator.apache.org</a>.",
+                ContentMode.HTML);
+
+        addComponents(caption, description);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+        // nothing to do
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/SystemView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/SystemView.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/SystemView.java
new file mode 100644
index 0000000..ea3421c
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/SystemView.java
@@ -0,0 +1,117 @@
+/*
+ * 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.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Tree;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+
+/**
+ * View showing the current loaded system components.
+ */
+@Priority(10000)
+public class SystemView extends VerticalSpacedLayout implements View {
+
+
+    /**
+     * Provider to register this view.
+     */
+    @Priority(20)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.CREATE;
+        }
+
+        @Override
+        public String getName() {
+            return "view.system.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/system";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.system.name");
+        }
+
+        @Override
+        public View createView(Object... params){
+            return new SystemView();
+        }
+    }
+
+
+    private Tree configTree = new Tree(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("default.label.system"));
+
+
+    public SystemView() {
+        Label caption = new Label("Tamaya Runtime");
+        Label description = new Label(
+                "This view shows the system components currently active. This information may be useful when checking if an" +
+                        "configuration extension is loaded and for inspection of the configuration and property sources" +
+                        "invovlved.",
+                ContentMode.HTML);
+
+        fillComponentTree();
+
+        addComponents(caption, description, configTree);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+
+    }
+
+    private void fillComponentTree() {
+        configTree.removeAllItems();
+        for(SystemInfoProvider infoProvider:ServiceContextManager.getServiceContext()
+                .getServices(SystemInfoProvider.class)){
+            infoProvider.provideSystemInfo(configTree);
+        }
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/TamayaGeneralSystemInfoProvider.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/TamayaGeneralSystemInfoProvider.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/TamayaGeneralSystemInfoProvider.java
new file mode 100644
index 0000000..fd37136
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/TamayaGeneralSystemInfoProvider.java
@@ -0,0 +1,56 @@
+/*
+ * 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.ui.views;
+
+import com.vaadin.ui.Tree;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
+
+import javax.annotation.Priority;
+
+/**
+ * Created by atsticks on 29.06.16.
+ */
+@Priority(0)
+public class TamayaGeneralSystemInfoProvider implements SystemInfoProvider{
+    @Override
+    public void provideSystemInfo(Tree tree) {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        String currentParent = "General";
+        tree.addItem(currentParent);
+        tree.addItem("Configuration.class");
+        tree.setItemCaption("Configuration.class", "Configuration class = " + config.getClass().getName());
+        tree.setParent("Configuration.class", currentParent);
+        tree.setChildrenAllowed("Configuration.class", false);
+
+        tree.addItem("ConfigurationContext.class");
+        tree.setItemCaption("ConfigurationContext.class", "ConfigurationContext class = " +
+                config.getContext().getClass().getName());
+        tree.setParent("ConfigurationContext.class", currentParent);
+        tree.setChildrenAllowed("ConfigurationContext.class", false);
+
+        tree.addItem("PropertyValueCombinationPolicy.class");
+        tree.setItemCaption("PropertyValueCombinationPolicy.class",
+                PropertyValueCombinationPolicy.class.getSimpleName() + " class = " +
+                        config.getContext().getPropertyValueCombinationPolicy().getClass().getName());
+        tree.setParent("PropertyValueCombinationPolicy.class", currentParent);
+        tree.setChildrenAllowed("PropertyValueCombinationPolicy.class", false);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
new file mode 100644
index 0000000..73cf018
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
@@ -0,0 +1,112 @@
+/*
+ * 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.ui.views.login;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.PasswordField;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.User;
+import org.apache.tamaya.ui.event.EventBus;
+import org.apache.tamaya.ui.services.MessageProvider;
+import org.apache.tamaya.ui.services.UserService;
+
+/**
+ * Login dialog centerd on the screen.
+ */
+public class LoginBox extends VerticalLayout {
+
+    private TextField username;
+    private PasswordField password;
+
+    public LoginBox() {
+        setWidth("400px");
+        addStyleName(UIConstants.LOGIN_BOX);
+        setSpacing(true);
+        setMargin(true);
+
+        addCaption();
+        addForm();
+        addButtons();
+    }
+
+    private void addCaption() {
+        Label caption = new Label("Login to system");
+        addComponent(caption);
+
+        caption.addStyleName(UIConstants.LABEL_H1);
+    }
+
+    private void addForm() {
+        FormLayout loginForm = new FormLayout();
+        MessageProvider mp = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
+        username = new TextField(mp.getMessage("default.label.username"));
+        password = new PasswordField(mp.getMessage("default.label.password"));
+        loginForm.addComponents(username, password);
+        addComponent(loginForm);
+        loginForm.setSpacing(true);
+        for(Component component:loginForm){
+            component.setWidth("100%");
+        }
+        username.focus();
+    }
+
+    private void addButtons() {
+        HorizontalLayout buttonsLayout = new HorizontalLayout();
+        Button forgotButton = new Button("Forgot", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                Notification.show("Sorry, this feature is not yet implemented.", Notification.Type.TRAY_NOTIFICATION);
+            }
+        });
+        Button loginButton = new Button("Login", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                login();
+            }
+        });
+        buttonsLayout.addComponents(forgotButton, loginButton);
+        addComponent(buttonsLayout);
+        buttonsLayout.setSpacing(true);
+        forgotButton.addStyleName(UIConstants.BUTTON_LINK);
+        loginButton.addStyleName(UIConstants.BUTTON_PRIMARY);
+        loginButton.setClickShortcut(ShortcutAction.KeyCode.ENTER);
+        setComponentAlignment(buttonsLayout, Alignment.BOTTOM_RIGHT);
+    }
+
+    private void login() {
+        User user = ServiceContextManager.getServiceContext().getService(UserService.class)
+                .login(username.getValue(), password.getValue());
+        if(user!=null){
+            EventBus.post(new LoginEvent(user));
+        }else{
+            Notification.show("Login failed.", "Sorry the system could not log you in.", Notification.Type.WARNING_MESSAGE);
+            username.focus();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
new file mode 100644
index 0000000..004c545
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
@@ -0,0 +1,55 @@
+/*
+ * 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.ui.views.login;
+
+import org.apache.tamaya.ui.User;
+
+import java.util.Objects;
+
+/**
+ * Event sent when a user has been authenticated.
+ */
+public class LoginEvent {
+    /** The user, not null. */
+    private User user;
+
+    /**
+     * Creates a new event.
+     * @param user the user logged in, not null.
+     */
+    public LoginEvent(User user) {
+        this.user = Objects.requireNonNull(user);
+    }
+
+    /**
+     * Get the user logged in.
+     * @return the user logged in, never null.
+     */
+    public User getUser() {
+        return user;
+    }
+
+    @Override
+    public String toString() {
+        return "LoginEvent{" +
+                "user=" + user +
+                '}';
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
----------------------------------------------------------------------
diff --git a/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
new file mode 100644
index 0000000..15730d3
--- /dev/null
+++ b/ui/base/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
@@ -0,0 +1,37 @@
+/*
+ * 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.ui.views.login;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * View used for login the users.
+ */
+public class LoginView extends VerticalLayout {
+
+    /**
+     * Creates a new view.
+     */
+    public LoginView() {
+        setSizeFull();
+        setDefaultComponentAlignment(Alignment.MIDDLE_CENTER);
+        addComponent(new LoginBox());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/META-INF/javaconfiguration.properties b/ui/base/src/main/resources/META-INF/javaconfiguration.properties
new file mode 100644
index 0000000..98d7155
--- /dev/null
+++ b/ui/base/src/main/resources/META-INF/javaconfiguration.properties
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy 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.
+#
+tamaya.users.admin.pwd=admin
+tamaya.users.admin.fullName=Administrator
+tamaya.users.admin.roles=admin
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
new file mode 100644
index 0000000..0ff3225
--- /dev/null
+++ b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
@@ -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.
+#
+org.apache.tamaya.ui.views.HomeView$Provider
+org.apache.tamaya.ui.views.ConfigView$Provider
+org.apache.tamaya.ui.views.SystemView$Provider
+
+# Events Module
+org.apache.tamaya.ui.events.EventView$Provider

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
new file mode 100644
index 0000000..6ce4a9f
--- /dev/null
+++ b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
@@ -0,0 +1,19 @@
+#
+# 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.ui.internal.ConfigurationBasedMessageProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.UserService
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.UserService b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.UserService
new file mode 100644
index 0000000..109865f
--- /dev/null
+++ b/ui/base/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.UserService
@@ -0,0 +1,19 @@
+#
+# 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.ui.internal.ConfiguredUserService
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/config/application.yml b/ui/base/src/main/resources/config/application.yml
new file mode 100644
index 0000000..a22ec36
--- /dev/null
+++ b/ui/base/src/main/resources/config/application.yml
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+
+server:
+  type: default
+  maxThreads: 1024
+  applicationConnectors:
+      - type: http
+        port: 8090
+  adminConnectors:
+      - type: http
+        port: 8091
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/main/resources/ui/lang/tamaya.properties
----------------------------------------------------------------------
diff --git a/ui/base/src/main/resources/ui/lang/tamaya.properties b/ui/base/src/main/resources/ui/lang/tamaya.properties
new file mode 100644
index 0000000..ba458de
--- /dev/null
+++ b/ui/base/src/main/resources/ui/lang/tamaya.properties
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+project.name=Apache Tamaya
+default.label.logout=Log out
+default.label.unknown=<unknown>
+default.label.username=Username
+default.label.password=Password
+default.label.system=Runtime
+
+view.config.name=Configuration
+view.home.name=Home
+view.system.name=System Runtime

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/base/src/test/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/base/src/test/resources/config/application.yml b/ui/base/src/test/resources/config/application.yml
new file mode 100644
index 0000000..10ef339
--- /dev/null
+++ b/ui/base/src/test/resources/config/application.yml
@@ -0,0 +1,36 @@
+#
+# 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.
+#
+
+server:
+  type: default
+  maxThreads: 1024
+  applicationConnectors:
+      - type: http
+        port: 8090
+      - type: https
+        port: 8453
+  adminConnectors:
+      - type: http
+        port: 8091
+      - type: https
+        port: 8453
+
+ui:
+  disabled-views:
+    - "view.system.name"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/events/src/main/java/org/apache/tamaya/ui/events/EventView.java
----------------------------------------------------------------------
diff --git a/ui/events/src/main/java/org/apache/tamaya/ui/events/EventView.java b/ui/events/src/main/java/org/apache/tamaya/ui/events/EventView.java
new file mode 100644
index 0000000..ffb59cf
--- /dev/null
+++ b/ui/events/src/main/java/org/apache/tamaya/ui/events/EventView.java
@@ -0,0 +1,181 @@
+/*
+ * 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.ui.events;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import org.apache.tamaya.events.ConfigEvent;
+import org.apache.tamaya.events.ConfigEventListener;
+import org.apache.tamaya.events.ConfigEventManager;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+import java.util.Date;
+
+/**
+ * Tamaya View for observing the current event stream.
+ */
+public class EventView extends VerticalSpacedLayout implements View {
+
+    /**
+     * Provider used to register the view.
+     */
+    @Priority(20)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.EAGER;
+        }
+
+        @Override
+        public String getName() {
+            return "view.events.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/events";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return getName();
+        }
+
+        @Override
+        public View createView(Object... params){
+            return new EventView();
+        }
+    }
+
+    private CheckBox changeMonitorEnabled = new CheckBox(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.button.enableMonitoring"));
+    private Button clearViewButton = new Button(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.button.clearView"));
+    private TextField pollingInterval = new TextField(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.field.pollingInterval"));
+    private Table eventsTable = new Table(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.events.table.name"));
+
+
+    public EventView() {
+        Label caption = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.events.name"));
+        Label description = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.events.description"),
+                ContentMode.HTML);
+
+        ConfigEventManager.addListener(new ConfigEventListener() {
+            @Override
+            public void onConfigEvent(ConfigEvent<?> event) {
+                addEvent(event);
+            }
+        });
+        changeMonitorEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                ConfigEventManager.enableChangeMonitoring(changeMonitorEnabled.getValue());
+                if(changeMonitorEnabled.getValue()) {
+                    Notification.show("Event Monitoring (Polling) active.");
+                }else{
+                    Notification.show("Event Monitoring (Polling) inactive.");
+                }
+            }
+        });
+        clearViewButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                eventsTable.removeAllItems();
+                Notification.show("Events cleared.");
+            }
+        });
+
+        HorizontalLayout eventSettings = new HorizontalLayout();
+        eventSettings.addComponents(changeMonitorEnabled, new Label(" Polling Interval"), pollingInterval, clearViewButton);
+        changeMonitorEnabled.setValue(ConfigEventManager.isChangeMonitoring());
+        pollingInterval.setValue(String.valueOf(ConfigEventManager.getChangeMonitoringPeriod()));
+        pollingInterval.setRequired(true);
+        pollingInterval.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                try{
+                    long millis = Long.parseLong((String)valueChangeEvent.getProperty().getValue());
+                    ConfigEventManager.setChangeMonitoringPeriod(millis);
+                    Notification.show("Updated Event Monitoring Poll Interval to " + millis + " milliseconds.");
+                }catch(Exception e){
+                    Notification.show("Cannot update Event Monitoring Poll Interval to "
+                            + valueChangeEvent.getProperty().getValue(), Notification.Type.ERROR_MESSAGE);
+                }
+            }
+        });
+        eventsTable.addContainerProperty("Timestamp", Date.class, null);
+        eventsTable.addContainerProperty("Type", String.class, "?");
+        eventsTable.addContainerProperty("Payload", String.class, "<empty>");
+        eventsTable.addContainerProperty("Version",  String.class, "?");
+        eventsTable.setPageLength(20);
+        eventsTable.setWidth("100%");
+        eventsTable.setResponsive(true);
+
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+        addComponents(caption, description, eventSettings, eventsTable);
+    }
+
+    private void addEvent(ConfigEvent<?> evt){
+        Object newItemId = eventsTable.addItem();
+        Item row = eventsTable.getItem(newItemId);
+        row.getItemProperty("Timestamp").setValue(new Date(evt.getTimestamp()));
+        row.getItemProperty("Type").setValue(evt.getResourceType().getSimpleName());
+        String value = String.valueOf(evt.getResource());
+        String valueShort = value.length()<150?value:value.substring(0,147)+"...";
+        row.getItemProperty("Payload").setValue(valueShort);
+        row.getItemProperty("Version").setValue(evt.getVersion());
+    }
+
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/events/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
----------------------------------------------------------------------
diff --git a/ui/events/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/ui/events/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
new file mode 100644
index 0000000..d30ddaa
--- /dev/null
+++ b/ui/events/src/test/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+events.EventView$Provider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/pom.xml
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/pom.xml b/ui/mutableconfig/pom.xml
new file mode 100644
index 0000000..8a94150
--- /dev/null
+++ b/ui/mutableconfig/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.apache.tamaya.ext</groupId>
+        <artifactId>tamaya-ui</artifactId>
+        <version>0.3-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <packaging>jar</packaging>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>tamaya-ui-mutableconfig</artifactId>
+    <name>Apache Tamaya Modules - UI (Mutable Config)</name>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigEditorWidget.java
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigEditorWidget.java b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigEditorWidget.java
new file mode 100644
index 0000000..09b23a1
--- /dev/null
+++ b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigEditorWidget.java
@@ -0,0 +1,132 @@
+/*
+ * 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.ui.mutableconfig;
+
+import com.vaadin.ui.*;
+import org.apache.tamaya.mutableconfig.MutableConfiguration;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.util.Objects;
+
+/**
+ * Tamaya UI view to change configuration.
+ */
+public class ConfigEditorWidget extends FormLayout {
+
+    private MutableConfiguration mutableConfig;
+
+    private ProtocolWidget logWriter;
+    private TransactionControlWidget taWidget;
+
+    private TextField configKey = new TextField(
+            ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.edit.text.configKey"));
+    private TextField configValue = new TextField(
+            ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.edit.text.configValue"));
+    private Button updateButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.updateKey"));
+    private Button removeButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.removeKey"));
+    private Button readButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.readKey"));
+
+    public ConfigEditorWidget(MutableConfiguration mutableConfig, ProtocolWidget logWriter, TransactionControlWidget taWidget) {
+        this.mutableConfig = Objects.requireNonNull(mutableConfig);
+        this.logWriter = Objects.requireNonNull(logWriter);
+        this.taWidget = Objects.requireNonNull(taWidget);
+        configKey.setWidth(50, Unit.PERCENTAGE);
+        configValue.setWidth(50, Unit.PERCENTAGE);
+        addComponents(configKey, configValue);
+        HorizontalLayout buttonLayout = new HorizontalLayout();
+        buttonLayout.addComponents(readButton, new Label("   "), updateButton, removeButton);
+        buttonLayout.setSpacing(true);
+        addComponents(buttonLayout);
+        initActions();
+    }
+
+    private void initActions() {
+        updateButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                if(mutableConfig.isWritable(configKey.getValue())){
+                    mutableConfig.put(configKey.getValue(), configValue.getValue());
+                    Notification.show("Added " + configKey.getValue() + " = " + configValue.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
+                    logWriter.println(" - PUT " + configKey.getValue() + " = " + configValue.getValue());
+                    configKey.setValue("");
+                    configValue.setValue("");
+                }else{
+                    Notification.show("Could not add " + configKey.getValue() + " = " + configValue.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
+                    logWriter.println(" - PUT " + configKey.getValue() + " rejected - not writable.");
+                }
+                taWidget.update();
+            }
+        });
+        removeButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                if(mutableConfig.isRemovable(configKey.getValue())){
+                    mutableConfig.remove(configKey.getValue());
+                    logWriter.println(" - DEL " + configKey.getValue());
+                    Notification.show("Removed " + configKey.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
+                    configKey.setValue("");
+                    configValue.setValue("");
+                }else{
+                    Notification.show("Could not remove " + configKey.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
+                    logWriter.println(" - DEL " + configKey.getValue() + " rejected - not removable.");
+                }
+                taWidget.update();
+            }
+        });
+        readButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                if(mutableConfig.isExisting(configKey.getValue())){
+                    String key = configKey.getValue();
+                    configValue.setValue(mutableConfig.get(key));
+                    Notification.show("Successfully read " + configKey.getValue(),
+                            Notification.Type.TRAY_NOTIFICATION);
+                    logWriter.println(" - GET " + key + " = " + configValue.getValue());
+                    logWriter.println("   - removable: " + mutableConfig.isRemovable(key));
+                    logWriter.println("   - writable : " + mutableConfig.isWritable(key));
+                }else{
+                    Notification.show("Could not read " + configKey.getValue(),
+                            Notification.Type.ERROR_MESSAGE);
+                    logWriter.println(" - GET " + configKey.getValue() + " rejected - not existing.");
+                }
+                taWidget.update();
+            }
+        });
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigUpdaterView.java
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigUpdaterView.java b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigUpdaterView.java
new file mode 100644
index 0000000..7facaeb
--- /dev/null
+++ b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ConfigUpdaterView.java
@@ -0,0 +1,121 @@
+/*
+ * 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.ui.mutableconfig;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupView;
+import org.apache.tamaya.mutableconfig.MutableConfiguration;
+import org.apache.tamaya.mutableconfig.MutableConfigurationProvider;
+import org.apache.tamaya.mutableconfig.spi.MutablePropertySource;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewProvider;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import javax.annotation.Priority;
+
+/**
+ * Tamaya UI view to change configuration.
+ */
+public class ConfigUpdaterView extends VerticalSpacedLayout implements View {
+
+    /**
+     * Provider to register the view.
+     */
+    @Priority(50)
+    public static final class Provider implements ViewProvider{
+
+        @Override
+        public ViewLifecycle getLifecycle() {
+            return ViewLifecycle.LAZY;
+        }
+
+        @Override
+        public String getName() {
+            return "view.edit.name";
+        }
+
+        @Override
+        public String getUrlPattern() {
+            return "/edit";
+        }
+
+        @Override
+        public String getDisplayName() {
+            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.edit.name");
+        }
+
+        @Override
+        public View createView(Object... params){
+            return new ConfigUpdaterView();
+        }
+    }
+
+    private ProtocolWidget logWidget = new ProtocolWidget();
+    private PopupView logPopup = new PopupView("Show log", logWidget);
+
+    private MutableConfiguration mutableConfig = MutableConfigurationProvider.getMutableConfiguration();
+
+    private TransactionControlWidget taControl = new TransactionControlWidget(mutableConfig,
+            logWidget);
+    private PopupView taDetails = new PopupView("Transaction Details", taControl);
+
+    private ConfigEditorWidget editorWidget = new ConfigEditorWidget(mutableConfig, logWidget, taControl);
+
+
+    public ConfigUpdaterView() {
+        Label caption = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.edit.name"));
+        Label description = new Label(ServiceContextManager.getServiceContext()
+                .getService(MessageProvider.class).getMessage("view.edit.description"),
+                ContentMode.HTML);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+        logWidget.print("INFO: Writable Property Sources: ");
+        for(MutablePropertySource ps:mutableConfig.getMutablePropertySources()){
+            logWidget.print(ps.getName(), ", ");
+        }
+        logWidget.println();
+        logWidget.setHeight(100, Unit.PERCENTAGE);
+        HorizontalLayout hl = new HorizontalLayout(taDetails, logPopup);
+        hl.setSpacing(true);
+        addComponents(caption, description, editorWidget, hl);
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ProtocolWidget.java
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ProtocolWidget.java b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ProtocolWidget.java
new file mode 100644
index 0000000..2d78aee
--- /dev/null
+++ b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/ProtocolWidget.java
@@ -0,0 +1,90 @@
+/*
+ * 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.ui.mutableconfig;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * Widget showing a text protocol wioth a clear button to clear the widget space.
+ */
+public class ProtocolWidget extends VerticalLayout{
+
+    private TextArea textArea = new TextArea(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.edit.textArea.protocol"));
+    private Button clearButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.clearProtocol"));
+
+    private StringWriter protocol = new StringWriter();
+    private PrintWriter writer = new PrintWriter(protocol);
+
+    public ProtocolWidget(){
+        textArea.setWidth(600, Unit.PIXELS);
+        textArea.setHeight(400, Unit.PERCENTAGE);
+        textArea.setReadOnly(true);
+        clearButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                protocol.getBuffer().setLength(0);
+                flush();
+            }
+        });
+        textArea.setSizeFull();
+        addComponents(textArea, clearButton);
+        setWidth(700, Unit.PIXELS);
+        setHeight(500, Unit.PERCENTAGE);
+    }
+
+    public PrintWriter getWriter(){
+        return writer;
+    }
+
+    public void println(){
+        writer.println();
+    }
+
+    public void println(Object... items){
+        for(int i=0;i<items.length;i++){
+            writer.print(items[i]);
+        }
+        writer.println();
+        flush();
+    }
+
+    public void print(Object... items){
+        for(int i=0;i<items.length;i++){
+            writer.print(items[i]);
+        }
+        flush();
+    }
+
+    private void flush(){
+        writer.flush();
+        textArea.setReadOnly(false);
+        textArea.setValue(protocol.toString());
+        textArea.setReadOnly(true);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/TransactionControlWidget.java
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/TransactionControlWidget.java b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/TransactionControlWidget.java
new file mode 100644
index 0000000..d22328a
--- /dev/null
+++ b/ui/mutableconfig/src/main/java/org/apache/tamaya/ui/mutableconfig/TransactionControlWidget.java
@@ -0,0 +1,229 @@
+/*
+ * 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.ui.mutableconfig;
+
+import com.vaadin.data.Property;
+import com.vaadin.ui.*;
+import org.apache.tamaya.mutableconfig.ChangePropagationPolicy;
+import org.apache.tamaya.mutableconfig.MutableConfiguration;
+import org.apache.tamaya.mutableconfig.MutableConfigurationProvider;
+import org.apache.tamaya.mutableconfig.propertysources.ConfigChangeContext;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Tamaya UI view to change configuration.
+ */
+public class TransactionControlWidget extends TabSheet {
+
+    private Field taID = new TextField("Transaction ID");
+    private Field taContent = new TextArea("Transaction Context");
+    private VerticalLayout taLayout = new VerticalLayout(taID, taContent);
+
+    private CheckBox autoCommit = new CheckBox(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.edit.box.autoCommit"));
+
+    private ComboBox changePropagationPolicy = new ComboBox(ServiceContextManager.getServiceContext()
+            .getService(MessageProvider.class).getMessage("view.edit.select.propagationPolicy"),
+            Arrays.asList(new String[]{"ALL", "MOST_SIGNIFICANT_ONLY", "NONE", "CUSTOM"}));
+
+    private TextField changePropagationPolicyOther = new TextField(
+            ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+                    .getMessage("view.edit.text.propagationPolicyOther"),
+            MutableConfigurationProvider.getApplyAllChangePolicy().getClass().getName());
+
+    private MutableConfiguration mutableConfig;
+    private Button startTAButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.startTransaction"));
+    private Button rollbackTAButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.rollbackTransaction"));
+    private Button commitTAButton = new Button(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
+            .getMessage("view.edit.button.commitTransaction"));
+    private ProtocolWidget logWriter;
+    private VerticalSpacedLayout leftLayout = new VerticalSpacedLayout();
+
+    public TransactionControlWidget(MutableConfiguration mutableConfig, ProtocolWidget logWriter) {
+        taContent.setReadOnly(true);
+        taContent.setWidth(600, Unit.PIXELS);
+        taContent.setHeight(250, Unit.PIXELS);
+        taLayout.setWidth(600, Unit.PIXELS);
+        taID.setReadOnly(true);
+        this.mutableConfig = Objects.requireNonNull(mutableConfig);
+        this.logWriter = Objects.requireNonNull(logWriter);
+        changePropagationPolicy.setWidth(500, Unit.PIXELS);
+        changePropagationPolicyOther.setWidth(500, Unit.PIXELS);
+        HorizontalLayout buttonLayout = new HorizontalLayout();
+        buttonLayout.addComponents(startTAButton, commitTAButton, rollbackTAButton);
+        leftLayout.addComponents(changePropagationPolicy, changePropagationPolicyOther, buttonLayout);
+        addTab(leftLayout, "Transaction Control");
+        addTab(taLayout, "Transaction Details");
+        setWidth(600, Unit.PIXELS);
+        initActions();
+        update();
+    }
+
+    private void initActions() {
+        autoCommit.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                mutableConfig.setAutoCommit(autoCommit.getValue());
+                if(mutableConfig.getAutoCommit()) {
+                    Notification.show("Autocommit is now ON.",
+                            Notification.Type.TRAY_NOTIFICATION);
+                }else{
+                    Notification.show("Autocommit is now OFF.",
+                            Notification.Type.TRAY_NOTIFICATION);
+                }
+                logWriter.println(" - Set Auto-Commit to " + autoCommit.getValue());
+            }
+        });
+        changePropagationPolicy.addValueChangeListener(new Property.ValueChangeListener() {
+            @Override
+            public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                changePropagationPolicyOther.setEnabled(false);
+                changePropagationPolicyOther.addValueChangeListener(new Property.ValueChangeListener() {
+                    @Override
+                    public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
+                        String className = changePropagationPolicyOther.getValue();
+                        try {
+                            mutableConfig.setChangePropagationPolicy(
+                                    (ChangePropagationPolicy) Class.forName(className).newInstance());
+                            logWriter.println(" - Set ChangePropagationPolicy " + className);
+                            Notification.show("ChangePropagationPolicy is now CUSTOM: " + className);
+                        } catch (Exception e) {
+                            Notification.show("Failed to apply change policy: " + className + ": " + e,
+                                    Notification.Type.ERROR_MESSAGE);
+                        }
+                    }
+                });
+                switch ((String) changePropagationPolicy.getValue()) {
+                    case "MOST_SIGNIFICANT_ONLY":
+                        mutableConfig.setChangePropagationPolicy(
+                                MutableConfigurationProvider.getApplyMostSignificantOnlyChangePolicy());
+                        Notification.show("ChangePropagationPolicy is now MOST_SIGNIFICANT_ONLY.",
+                                Notification.Type.TRAY_NOTIFICATION);
+                        logWriter.println(" - Set ChangePropagationPolicy to MOST_SIGNIFICANT_ONLY.");
+                        break;
+                    case "NONE":
+                        Notification.show("Applying none equals being your config READ-ONLY.",
+                                Notification.Type.ASSISTIVE_NOTIFICATION);
+                        mutableConfig.setChangePropagationPolicy(
+                                MutableConfigurationProvider.getApplyNonePolicy());
+                        Notification.show("ChangePropagationPolicy is now NONE.", Notification.Type.TRAY_NOTIFICATION);
+                        logWriter.println(" - Set ChangePropagationPolicy to NONE.");
+                        break;
+                    case "CUSTOM":
+                        changePropagationPolicyOther.setEnabled(true);
+                        break;
+                    case "ALL":
+                    default:
+                        mutableConfig.setChangePropagationPolicy(
+                                MutableConfigurationProvider.getApplyAllChangePolicy());
+                        Notification.show("ChangePropagationPolicy is now ALL.", Notification.Type.TRAY_NOTIFICATION);
+                        logWriter.println(" - Set ChangePropagationPolicy to ALL.");
+                }
+            }
+        });
+        startTAButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                String taId = mutableConfig.startTransaction();
+                update();
+                Notification.show("Transaction started: " + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Started Transaction: " + taId);
+            }
+        });
+        rollbackTAButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                String taId = mutableConfig.getTransactionId();
+                mutableConfig.rollbackTransaction();
+                update();
+                Notification.show("Transaction rolled back: " + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Rolled back Transaction: " + taId);
+            }
+        });
+        commitTAButton.addClickListener(new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                String taId = mutableConfig.getTransactionId();
+                mutableConfig.commitTransaction();
+                update();
+                Notification.show("Transaction comitted: "  + taId, Notification.Type.TRAY_NOTIFICATION);
+                logWriter.println("Committed Transaction: " + taId);
+            }
+        });
+    }
+
+    public void update(){
+        taID.setReadOnly(false);
+        taContent.setReadOnly(false);
+        if(mutableConfig.getTransactionId()==null){
+            taID.setValue("N/A");
+        }else {
+            taID.setValue(mutableConfig.getTransactionId());
+        }
+        StringBuilder b = new StringBuilder();
+        ConfigChangeContext changes = mutableConfig.getConfigChangeContext();
+        if(mutableConfig.getTransactionId()==null){
+            startTAButton.setEnabled(true);
+            rollbackTAButton.setEnabled(false);
+            commitTAButton.setEnabled(false);
+            changePropagationPolicy.setEnabled(true);
+            changePropagationPolicyOther.setEnabled(true);
+            b.append("No Transaction Context available.");
+        }else{
+            b.append("TA ID      : ").append(changes.getTransactionID()).append('\n');
+            b.append("Started at : ").append(changes.getStartedAt()).append("\n\n");
+            b.append("PUT:\n");
+            b.append("====\n");
+            for(Map.Entry<String,String> en:changes.getAddedProperties().entrySet()){
+                b.append(en.getKey()).append(" = ").append(en.getValue()).append("\n\n");
+            }
+            b.append("DEL:\n");
+            b.append("====\n");
+            for(String key:changes.getRemovedProperties()){
+                b.append(key).append("\n\n");
+            }
+            startTAButton.setEnabled(false);
+            rollbackTAButton.setEnabled(true);
+            commitTAButton.setEnabled(true);
+            changePropagationPolicy.setEnabled(false);
+            changePropagationPolicyOther.setEnabled(false);
+        }
+        taContent.setValue(b.toString());
+        taID.setReadOnly(true);
+        taContent.setReadOnly(true);
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if (index < 0) {
+            return key + " = " + value;
+        } else {
+            return key.substring(index + 1) + " = " + value;
+        }
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e4b68dfb/ui/mutableconfig/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
----------------------------------------------------------------------
diff --git a/ui/mutableconfig/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/ui/mutableconfig/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
new file mode 100644
index 0000000..6d2b914
--- /dev/null
+++ b/ui/mutableconfig/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+mutableconfig.ConfigUpdaterView$Provider
\ No newline at end of file


[12/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-123: Adding OSGI Support.

Posted by pl...@apache.org.
TAMAYA-123: Adding OSGI Support.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/390c22ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/390c22ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/390c22ab

Branch: refs/heads/master
Commit: 390c22ab7d31799e9c9f83731a5314a838238a5e
Parents: 9f37cc1
Author: anatole <an...@apache.org>
Authored: Fri Oct 16 19:15:21 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Fri Oct 16 19:15:21 2015 +0200

----------------------------------------------------------------------
 collections/pom.xml         | 25 ++++++++++++++++++++++++-
 integration/commons/pom.xml | 27 ++++++++++++++++++++++++++-
 integration/store/pom.xml   | 28 +++++++++++++++++++++++++++-
 jodatime/pom.xml            | 25 +++++++++++++++++++++++++
 metamodels/simple/pom.xml   | 28 ++++++++++++++++++++++++++--
 metamodels/staged/pom.xml   | 28 +++++++++++++++++++++++++++-
 sysprops/pom.xml            | 23 ++++++++++++++++++++++-
 7 files changed, 177 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/collections/pom.xml
----------------------------------------------------------------------
diff --git a/collections/pom.xml b/collections/pom.xml
index 0ec3dda..d5ed30b 100644
--- a/collections/pom.xml
+++ b/collections/pom.xml
@@ -29,7 +29,7 @@ under the License.
 
     <artifactId>tamaya-collections</artifactId>
     <name>Apache Tamaya Modules - Collections Support</name>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
@@ -49,4 +49,27 @@ under the License.
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Private-Package>
+                            org.apache.tamaya.collections.internal
+                        </Private-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/integration/commons/pom.xml
----------------------------------------------------------------------
diff --git a/integration/commons/pom.xml b/integration/commons/pom.xml
index d3d1b85..8c04a41 100644
--- a/integration/commons/pom.xml
+++ b/integration/commons/pom.xml
@@ -28,7 +28,7 @@ under the License.
     </parent>
     <artifactId>commons</artifactId>
     <name>Apache Tamaya Commons Configuration Integration</name>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
@@ -47,4 +47,29 @@ under the License.
             <version>1.10</version>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.apache.tamaya.format,
+                            org.apache.commons,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.integration.commons
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/integration/store/pom.xml
----------------------------------------------------------------------
diff --git a/integration/store/pom.xml b/integration/store/pom.xml
index d755551..0e8a546 100644
--- a/integration/store/pom.xml
+++ b/integration/store/pom.xml
@@ -28,7 +28,7 @@ under the License.
     <artifactId>tamaya-store</artifactId>
     <name>Apache Tamaya Storage/Cache/Datagrid Integration</name>
     <description>Integration with a Datagrid backend for distributed configuration.</description>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
@@ -51,4 +51,30 @@ under the License.
             <artifactId>junit</artifactId>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.apache.tamaya.events,
+                            org.apache.tamaya.spisupport
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.integration.store,
+                            org.apache.tamaya.integration.store.spi,
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 268939f..98b13a6 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -31,6 +31,7 @@ under the License.
 
     <artifactId>tamaya-jodatime</artifactId>
     <name>Apache Tamaya Joda-Time Support</name>
+    <packaging>bundle</packaging>
 
     <inceptionYear>2015</inceptionYear>
 
@@ -77,6 +78,30 @@ under the License.
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.jodatime,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.jodatime
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 
     
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/metamodels/simple/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/simple/pom.xml b/metamodels/simple/pom.xml
index a806459..1d1b26b 100644
--- a/metamodels/simple/pom.xml
+++ b/metamodels/simple/pom.xml
@@ -29,7 +29,7 @@ under the License.
     <artifactId>tamaya-metamodels-simple</artifactId>
     <name>Apache Tamaya Modules Metamodels - Simple</name>
     <description>Simple Tamaya Metamodel, e.g. feasible for SE commandline tools and simple use cases.</description>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
@@ -49,7 +49,7 @@ under the License.
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-items</artifactId>
+            <artifactId>tamaya-resources</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -59,4 +59,28 @@ under the License.
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.apache.tamaya.format,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.metamodel.simple
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/metamodels/staged/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/staged/pom.xml b/metamodels/staged/pom.xml
index 325e4ec..324ea5e 100644
--- a/metamodels/staged/pom.xml
+++ b/metamodels/staged/pom.xml
@@ -29,7 +29,7 @@ under the License.
 
     <artifactId>tamaya-metamodel-staged</artifactId>
     <name>Apache Tamaya Modules - Staged Configuration</name>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <dependencies>
         <dependency>
@@ -65,4 +65,30 @@ under the License.
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.apache.tamaya.resources,
+                            org.apache.tamaya.spisupport,
+                            org.apache.tamaya.functions,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.metamodel.simple
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/390c22ab/sysprops/pom.xml
----------------------------------------------------------------------
diff --git a/sysprops/pom.xml b/sysprops/pom.xml
index fba1d69..2fe0dd2 100644
--- a/sysprops/pom.xml
+++ b/sysprops/pom.xml
@@ -28,7 +28,7 @@ under the License.
     </parent>
     <artifactId>tamaya-sysprops</artifactId>
     <name>Apache Tamaya - Configured Java SE System Properties</name>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <build>
         <plugins>
@@ -44,6 +44,27 @@ under the License.
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Import-Package>
+                            org.apache.tamaya,
+                            org.apache.tamaya.spi,
+                            org.apache.tamaya.resources,
+                            org.apache.tamaya.spisupport,
+                            org.apache.tamaya.functions,
+                            javax.annotation,
+                            *
+                        </Import-Package>
+                        <Export-Package>
+                            org.apache.tamaya.integration.se
+                        </Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 


[45/50] [abbrv] incubator-tamaya-sandbox git commit: Modulularized UI module, added multi file based i18n, using config mechanisms.

Posted by pl...@apache.org.
Modulularized UI module, added multi file based i18n, using config mechanisms.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/a83105bc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/a83105bc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/a83105bc

Branch: refs/heads/master
Commit: a83105bc151ba836c7b43fb6d1073ad1ab3a3224
Parents: 043a255
Author: anatole <an...@apache.org>
Authored: Sat Apr 16 08:25:46 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:44 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/tamaya/ui/ViewProvider.java |  66 +++++++
 .../ConfigurationBasedMessageProvider.java      | 174 +++++++++++++++++++
 .../ui/internal/ConfiguredMessageProvider.java  |  61 +++++++
 .../internal/ResourceBundleMessageProvider.java |  91 ++++++++++
 .../tamaya/ui/internal/URLPropertySource.java   |  60 +++++++
 .../tamaya/ui/services/MessageProvider.java     |  43 +++++
 .../apache/tamaya/ui/services/UserService.java  |  30 ++++
 .../services/org.apache.tamaya.ui.ViewProvider  |  21 +++
 ...rg.apache.tamaya.ui.services.MessageProvider |  19 ++
 ui/src/main/resources/ui/lang/tamaya.properties |  28 +++
 10 files changed, 593 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java b/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
new file mode 100644
index 0000000..35990ab
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
@@ -0,0 +1,66 @@
+/*
+ * 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.ui;
+
+import com.vaadin.navigator.View;
+
+/**
+ * Interface to register Tamaya UI parts. For priorization also use the @Priority annotations.
+ */
+public interface ViewProvider {
+
+    /**
+     * View lifecycle options that determine when a view is created and how long an instance is used.
+     */
+    enum ViewLifecycle {
+        /** Creates a new view instance whenever the view is showed. */
+        CREATE,
+        /** Loads the view on first access. */
+        LAZY,
+        /** Eagerly preloads the view. */
+        EAGER
+    }
+
+    /**
+     * Get the view lifecycle model.
+     * @return the lifecycle model, not null.
+     */
+    ViewLifecycle getLifecycle();
+
+    /**
+     * Get the url pattern where this view should be accessible.
+     * @return the url pattern, not null.
+     */
+    String getUrlPattern();
+
+    /**
+     * Get the name to be displayed for this view. This value will also be used to lookup a name from the {@code /ui/lang/tamaya}
+     *                                   bundle. If not found the value returned will be used for display.
+     *
+     * @return the name to be displayed, or its resource bundle key, not null.
+     */
+    String getDisplayName();
+
+    /**
+     * Method that is called to create a new view instance.
+     * @see #getLifecycle()
+     * @return a new view instance, not null.
+     */
+    View createView();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
new file mode 100644
index 0000000..99521c4
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
@@ -0,0 +1,174 @@
+/*
+ * 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.ui.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spisupport.BasePropertySource;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.ui.services.MessageProvider;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+ * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
+ * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
+ * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
+ */
+public final class ConfigurationBasedMessageProvider implements MessageProvider{
+
+    /**
+     * The property name for configuring the resource bundle's base name either as
+     * system property, environment property or configuration entry.
+     */
+    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
+
+    private final String baseName = evaluateBaseName();
+
+    private Map<String, Map<String,String>> propertiesCache = new ConcurrentHashMap<>();
+
+
+    /**
+     * Private singleton constructor.
+     */
+    public ConfigurationBasedMessageProvider(){
+
+    }
+
+    /**
+     * Get a message using the defaul locale.
+     * @param key the message key, not null.
+     * @return the resolved message, or the bundle ID, never null.
+     */
+    public String getMessage(String key){
+        return getMessage(key, Locale.getDefault());
+    }
+
+    /**
+     * Get a message.
+     * @param key the message key, not null.
+     * @param locale the target locale, or null, for the default locale.
+     * @return the resolved message, or the key, never null.
+     */
+    public String getMessage(String key, Locale locale){
+        List<String> bundleIds = evaluateBundleIds(locale);
+        for(String bundleID:bundleIds){
+            Map<String,String> entries = this.propertiesCache.get(bundleID);
+            if(entries==null){
+                entries = loadEntries(bundleID);
+            }
+            String value = entries.get(key);
+            if(value!=null){
+                return value;
+            }
+        }
+        return null;
+    }
+
+    private Map<String, String> loadEntries(String bundleID) {
+        ConfigurationContextBuilder ctxBuilder = ConfigurationProvider.getConfigurationContextBuilder();
+        for(String format:new String[]{"xml", "properties"}) {
+            try {
+                Enumeration<URL> urls = getClass().getClassLoader().getResources(bundleID+"."+format);
+                while(urls.hasMoreElements()){
+                    URL url = urls.nextElement();
+                    ctxBuilder.addPropertySources(new URLPropertySource(url));
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        Map<String, String>  entries = new DefaultConfiguration(ctxBuilder.build()).getProperties();
+        this.propertiesCache.put(bundleID, entries);
+        return entries;
+    }
+
+    private List<String> evaluateBundleIds(Locale locale) {
+        List<String> bundleIds = new ArrayList<>();
+        String country = locale.getCountry();
+        if(country==null){
+            country="";
+        }
+        String lang = locale.getLanguage();
+        if(lang==null){
+            lang="";
+        }
+        String variant = locale.getVariant();
+        if(variant==null){
+            variant="";
+        }
+        String key = baseName + "_"+country+"_"+lang+"_"+variant;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName + "_"+country+"_"+lang;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName + "_"+country;
+        key = reduceKey(key);
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        key = baseName;
+        if(!bundleIds.contains(key)){
+            bundleIds.add(key);
+        }
+        return bundleIds;
+    }
+
+    /**
+     * Remove all doubled '_' hereby normalizing the bundle key.
+     * @param key the key, not null.
+     * @return the normaliuzed key, not null.
+     */
+    private String reduceKey(String key) {
+        String reduced = key.replace("___","_").replace("__","_");
+        if(reduced.endsWith("_")){
+            reduced = reduced.substring(0,reduced.length()-1);
+        }
+        return reduced;
+    }
+
+    /**
+     * Evaluates the base name to be used for creating the resource bundle used.
+     * @return
+     */
+    private String evaluateBaseName() {
+        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
+        if(baseName==null || baseName.isEmpty()){
+            baseName = System.getenv("tamaya.ui.baseName");
+        }
+        if(baseName==null || baseName.isEmpty()){
+            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
+        }
+        if(baseName==null || baseName.isEmpty()){
+            baseName = "ui/lang/tamaya";
+        }
+        return baseName.replace('.', '/');
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
new file mode 100644
index 0000000..e2a761c
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
@@ -0,0 +1,61 @@
+///*
+// * 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.ui.internal;
+//
+//import org.apache.tamaya.ui.services.MessageProvider;
+//
+//import java.util.Locale;
+//import java.util.ResourceBundle;
+//
+///**
+// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+// */
+//public class ConfiguredMessageProvider implements MessageProvider{
+//
+//    /**
+//     * Private singleton constructor.
+//     */
+//    public ConfiguredMessageProvider(){}
+//
+//    /**
+//     * Get a message using the defaul locale.
+//     * @param bundleID the message bundle key, not null.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID){
+//        return getMessage(bundleID, Locale.getDefault());
+//    }
+//
+//    /**
+//     * Get a message.
+//     * @param bundleID the message bundle key, not null.
+//     * @param locale the target locale, or null, for the default locale.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID, Locale locale){
+//        try{
+//            ResourceBundle bundle = ResourceBundle.getBundle("ui/lang/tamaya", locale);
+//            return bundle.getString(bundleID);
+//        }
+//        catch(Exception e){
+//            return bundleID;
+//        }
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
new file mode 100644
index 0000000..c0aa092
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
@@ -0,0 +1,91 @@
+///*
+// * 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.ui.internal;
+//
+//import org.apache.tamaya.ConfigurationProvider;
+//import org.apache.tamaya.ui.services.MessageProvider;
+//
+//import java.util.Locale;
+//import java.util.ResourceBundle;
+//
+///**
+// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
+// * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
+// * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
+// * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
+// */
+//public class ResourceBundleMessageProvider implements MessageProvider{
+//
+//    private static final String BASENAME = evaluateBaseName();
+//
+//    /**
+//     * The property name for configuring the resource bundle's base name either as
+//     * system property, environment property or configuration entry.
+//     */
+//    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
+//
+//    /**
+//     * Evaluates the base name to be used for creating the resource bundle used.
+//     * @return
+//     */
+//    private static String evaluateBaseName() {
+//        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = System.getenv("tamaya.ui.baseName");
+//        }
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
+//        }
+//        if(baseName==null || baseName.isEmpty()){
+//            baseName = "ui/lang/tamaya";
+//        }
+//        return baseName;
+//    }
+//
+//    /**
+//     * Private singleton constructor.
+//     */
+//    public ResourceBundleMessageProvider(){}
+//
+//    /**
+//     * Get a message using the defaul locale.
+//     * @param bundleID the message bundle key, not null.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID){
+//        return getMessage(bundleID, Locale.getDefault());
+//    }
+//
+//    /**
+//     * Get a message.
+//     * @param bundleID the message bundle key, not null.
+//     * @param locale the target locale, or null, for the default locale.
+//     * @return the resolved message, or the bundle ID, never null.
+//     */
+//    public String getMessage(String bundleID, Locale locale){
+//        try{
+//            ResourceBundle bundle = ResourceBundle.getBundle(BASENAME, locale);
+//            return bundle.getString(bundleID);
+//        }
+//        catch(Exception e){
+//            return bundleID;
+//        }
+//    }
+//
+//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java b/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
new file mode 100644
index 0000000..0727515
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
@@ -0,0 +1,60 @@
+package org.apache.tamaya.ui.internal;
+
+import org.apache.tamaya.spisupport.BasePropertySource;
+import org.apache.tamaya.spisupport.MapPropertySource;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Simple property source, used for internationalization.
+ */
+final class URLPropertySource extends BasePropertySource{
+
+    private static final Logger LOG = Logger.getLogger(URLPropertySource.class.getName());
+    private URL url;
+    private Map<String, String> properties;
+
+    public URLPropertySource(URL url){
+        this.url = Objects.requireNonNull(url);
+        load();
+    }
+
+    /**
+     * Loads/reloads the properties from the URL. If loading of the properties failed the previus state is preserved,
+     * unless there is no such state. In this case an empty map is assigned.
+     */
+    public void load(){
+        try(InputStream is = url.openStream()) {
+            Properties props = new Properties();
+            if (url.getFile().endsWith(".xml")) {
+                props.loadFromXML(is);
+            } else {
+                props.load(is);
+            }
+            properties = Collections.unmodifiableMap(MapPropertySource.getMap(props));
+        }
+        catch(Exception e){
+            LOG.log(Level.WARNING, "Failed to read config from "+url,e);
+            if(properties==null) {
+                properties = Collections.emptyMap();
+            }
+        }
+    }
+
+    @Override
+    public String getName() {
+        return url.toString();
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
new file mode 100644
index 0000000..a15ae46
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
@@ -0,0 +1,43 @@
+/*
+ * 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.ui.services;
+
+import java.util.Locale;
+
+/**
+ * Component resolving messages for being shown in the UI.
+ */
+public interface MessageProvider {
+
+    /**
+     * Get a message using the default locale.
+     * @param key the message key, not null.
+     * @return the resolved message, or the key, never null.
+     */
+    String getMessage(String key);
+
+    /**
+     * Get a message.
+     * @param key the message key, not null.
+     * @param locale the target locale, or null, for the default locale.
+     * @return the resolved message, or the key, never null.
+     */
+    String getMessage(String key, Locale locale);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java b/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
new file mode 100644
index 0000000..71a8a43
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
@@ -0,0 +1,30 @@
+/*
+ * 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.ui.services;
+
+import org.apache.tamaya.ui.User;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public interface UserService {
+
+    User login(String userId, String credentials);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
new file mode 100644
index 0000000..eeb467b
--- /dev/null
+++ b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.ViewProvider
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy 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.ui.views.HomeView$Provider
+org.apache.tamaya.ui.views.ConfigView$Provider
+org.apache.tamaya.ui.views.ComponentView$Provider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
new file mode 100644
index 0000000..6ce4a9f
--- /dev/null
+++ b/ui/src/main/resources/META-INF/services/org.apache.tamaya.ui.services.MessageProvider
@@ -0,0 +1,19 @@
+#
+# 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.ui.internal.ConfigurationBasedMessageProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/a83105bc/ui/src/main/resources/ui/lang/tamaya.properties
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/ui/lang/tamaya.properties b/ui/src/main/resources/ui/lang/tamaya.properties
new file mode 100644
index 0000000..16880d4
--- /dev/null
+++ b/ui/src/main/resources/ui/lang/tamaya.properties
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+project.name=Apache Tamaya
+default.label.logout=Log out
+default.label.unknown=<unknown>
+default.label.username=Username
+default.label.password=Password
+default.label.components=Components
+
+view.config.name=Configuration
+view.home.name=Home
+view.components.name=Components


[37/50] [abbrv] incubator-tamaya-sandbox git commit: Added Vaadin based UI module.

Posted by pl...@apache.org.
Added Vaadin based UI module.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/c4c3d9b2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/c4c3d9b2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/c4c3d9b2

Branch: refs/heads/master
Commit: c4c3d9b215f0afdb9987010e3a06443b56c8eb72
Parents: 80df0be
Author: anatole <an...@apache.org>
Authored: Wed Mar 30 22:48:25 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Wed Mar 30 22:48:25 2016 +0200

----------------------------------------------------------------------
 ui/jsf/pom.xml                                  | 152 ------------
 ui/jsf/src/main/webapp/index.jsf                |  15 --
 ui/pom.xml                                      | 230 ++++++++++++++++++-
 .../org/apache/tamaya/ui/ApplicationLayout.java |  81 +++++++
 .../main/java/org/apache/tamaya/ui/Content.java |  34 +++
 .../java/org/apache/tamaya/ui/CurrentUser.java  |  23 ++
 .../main/java/org/apache/tamaya/ui/Header.java  |  44 ++++
 ui/src/main/java/org/apache/tamaya/ui/MyUI.java | 102 ++++++++
 .../main/java/org/apache/tamaya/ui/NavBar.java  |  73 ++++++
 .../java/org/apache/tamaya/ui/UIConstants.java  |  22 ++
 ui/src/main/java/org/apache/tamaya/ui/User.java |  34 +++
 .../org/apache/tamaya/ui/VaadinApplication.java |  93 ++++++++
 .../java/org/apache/tamaya/ui/VaadinBundle.java |  55 +++++
 .../java/org/apache/tamaya/ui/ViewConfig.java   |  20 ++
 .../tamaya/ui/components/LazyProvider.java      |  24 ++
 .../tamaya/ui/components/PageTitleUpdater.java  |  25 ++
 .../ui/components/VerticalSpacedLayout.java     |  14 ++
 .../org/apache/tamaya/ui/event/EventBus.java    |  34 +++
 .../org/apache/tamaya/ui/event/LogoutEvent.java |   4 +
 .../apache/tamaya/ui/event/NavigationEvent.java |  14 ++
 .../apache/tamaya/ui/services/LoginService.java |  12 +
 .../apache/tamaya/ui/views/ComponentView.java   | 128 +++++++++++
 .../org/apache/tamaya/ui/views/ConfigView.java  | 113 +++++++++
 .../org/apache/tamaya/ui/views/ErrorView.java   |  21 ++
 .../org/apache/tamaya/ui/views/HomeView.java    |  34 +++
 .../apache/tamaya/ui/views/login/LoginBox.java  |  88 +++++++
 .../tamaya/ui/views/login/LoginEvent.java       |  15 ++
 .../apache/tamaya/ui/views/login/LoginView.java |  13 ++
 ui/src/main/resources/config/application.yml    |   9 +
 ui/src/test/resources/config/application.yml    |  13 ++
 30 files changed, 1367 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/jsf/pom.xml
----------------------------------------------------------------------
diff --git a/ui/jsf/pom.xml b/ui/jsf/pom.xml
deleted file mode 100644
index aab6a64..0000000
--- a/ui/jsf/pom.xml
+++ /dev/null
@@ -1,152 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-ui</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>tamaya-ui-jsf</artifactId>
-    <name>Apache Tamaya Modules UI - JSF</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <jsf.version>4.2.1.RELEASE</jsf.version>
-        <primefaces.version>1.2.6.RELEASE</primefaces.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.jacoco</groupId>
-                <artifactId>jacoco-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>prepare-agent</id>
-                        <goals>
-                            <goal>prepare-agent</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.tamaya.ui.jsf
-                        </Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-    <dependencies>
-        <dependency>
-            <groupId>org.primefaces</groupId>
-            <artifactId>primefaces</artifactId>
-            <version>5.2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>java-hamcrest</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-injection</artifactId>
-            <version>${project.version}</version>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet.jsp</groupId>
-            <artifactId>jsp-api</artifactId>
-            <version>2.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>5.0.1.Final</version>
-        </dependency>
-
-        <!-- File Upload -->
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.2</version>
-        </dependency>
-
-        <!-- Themes -->
-        <dependency>
-            <groupId>org.primefaces.themes</groupId>
-            <artifactId>all-themes</artifactId>
-            <version>1.0.10</version>
-        </dependency>
-
-        <!-- GraphicImage -->
-        <dependency>
-            <groupId>net.sourceforge.barbecue</groupId>
-            <artifactId>barbecue</artifactId>
-            <version>1.5-beta1</version>
-        </dependency>
-        <dependency>
-            <groupId>jfree</groupId>
-            <artifactId>jfreechart</artifactId>
-            <version>1.0.0</version>
-        </dependency>
-
-    </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/jsf/src/main/webapp/index.jsf
----------------------------------------------------------------------
diff --git a/ui/jsf/src/main/webapp/index.jsf b/ui/jsf/src/main/webapp/index.jsf
deleted file mode 100644
index 28018ae..0000000
--- a/ui/jsf/src/main/webapp/index.jsf
+++ /dev/null
@@ -1,15 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:p="http://primefaces.org/mobile">
-
-<h:head>
-
-</h:head>
-
-<h:body>
-
-    <p:spinner />
-
-</h:body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index b40563e..b3a3b95 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -23,17 +23,237 @@ under the License.
 
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-integration-sandbox</artifactId>
+        <artifactId>tamaya-extensions</artifactId>
         <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
     </parent>
 
-    <packaging>pom</packaging>
+    <packaging>war</packaging>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>tamaya-ui</artifactId>
     <name>Apache Tamaya Modules - UI</name>
 
-    <modules>
-        <module>jsf</module>
-    </modules>
+    <properties>
+        <vaadin.version>7.6.4</vaadin.version>
+        <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
+        <dropwizard.version>0.9.2</dropwizard.version>
+        <mainClass>org.apache.tamaya.ui.VaadinApplication</mainClass>
+        <jetty.plugin.version>9.2.3.v20140905</jetty.plugin.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <servlet.api.version>3.0.1</servlet.api.version>
+    </properties>
+
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.vaadin</groupId>
+                <artifactId>vaadin-bom</artifactId>
+                <version>${vaadin.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <!--<dependency>-->
+                <!--<groupId>com.vaadin</groupId>-->
+                <!--<artifactId>vaadin-server</artifactId>-->
+                <!--<version>${vaadin.version}</version>-->
+            <!--</dependency>-->
+            <dependency>
+                <groupId>io.dropwizard</groupId>
+                <artifactId>dropwizard-core</artifactId>
+                <version>${dropwizard.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.dropwizard</groupId>
+                <artifactId>dropwizard-assets</artifactId>
+                <version>${dropwizard.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.dropwizard</groupId>
+                <artifactId>dropwizard-testing</artifactId>
+                <version>${dropwizard.version}</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>runtime</scope>
+        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>javax.servlet</groupId>-->
+            <!--<artifactId>javax.servlet-api</artifactId>-->
+            <!--<version>${servlet.api.version}</version>-->
+        <!--</dependency>-->
+        <dependency>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-push</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-client-compiled</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.dropwizard</groupId>
+            <artifactId>dropwizard-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.dropwizard</groupId>
+            <artifactId>dropwizard-assets</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.dropwizard</groupId>
+            <artifactId>dropwizard-testing</artifactId>
+        </dependency>
+        <!--
+          Needed when using the widgetset optimizer (custom ConnectorBundleLoaderFactory).
+
+          For widgetset compilation, vaadin-client-compiler is automatically added on the
+          compilation classpath by vaadin-maven-plugin so normally there is no need for an
+          explicit dependency.
+        -->
+        <!--
+        <dependency>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-client-compiler</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        -->
+        <dependency>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-themes</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>src/main/webapp/VAADIN/themes/mytheme/addons.scss</exclude>
+                        <exclude>src/main/webapp/VAADIN/themes/mytheme/styles.css</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>2.3</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <!-- Exclude some unnecessary files generated by the GWT compiler. -->
+                    <packagingExcludes>WEB-INF/classes/VAADIN/gwt-unitCache/**,
+                        WEB-INF/classes/VAADIN/widgetsets/WEB-INF/**</packagingExcludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>com.vaadin</groupId>
+                <artifactId>vaadin-maven-plugin</artifactId>
+                <version>${vaadin.plugin.version}</version>
+                <configuration>
+                    <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
+                    <webappDirectory>${basedir}/target/classes/VAADIN/widgetsets</webappDirectory>
+                    <draftCompile>false</draftCompile>
+                    <compileReport>false</compileReport>
+                    <style>OBF</style>
+                    <strict>true</strict>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>update-theme</goal>
+                            <goal>update-widgetset</goal>
+                            <goal>compile</goal>
+                            <!-- Comment out compile-theme goal to use on-the-fly theme compilation -->
+                            <goal>compile-theme</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <!--<version>2.6.1</version>-->
+                <!-- Clean up also any pre-compiled themes -->
+                <configuration>
+                    <filesets>
+                        <fileset>
+                            <directory>src/main/webapp/VAADIN/themes</directory>
+                            <includes>
+                                <include>**/styles.css</include>
+                                <include>**/styles.scss.cache</include>
+                            </includes>
+                        </fileset>
+                    </filesets>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <createDependencyReducedPom>true</createDependencyReducedPom>
+                    <filters>
+                        <filter>
+                            <artifact>*:*</artifact>
+                            <excludes>
+                                <exclude>META-INF/*.SF</exclude>
+                                <exclude>META-INF/*.DSA</exclude>
+                                <exclude>META-INF/*.RSA</exclude>
+                            </excludes>
+                        </filter>
+                    </filters>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>${mainClass}</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
+    <repositories>
+        <repository>
+            <id>vaadin-addons</id>
+            <url>http://maven.vaadin.com/vaadin-addons</url>
+        </repository>
+        <repository>
+            <id>vaadin-snapshots</id>
+            <url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
 
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
new file mode 100644
index 0000000..7d57362
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
@@ -0,0 +1,81 @@
+package org.apache.tamaya.ui;
+
+import com.vaadin.navigator.Navigator;
+import com.vaadin.navigator.View;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import org.apache.tamaya.ui.components.LazyProvider;
+import org.apache.tamaya.ui.components.PageTitleUpdater;
+import org.apache.tamaya.ui.views.ComponentView;
+import org.apache.tamaya.ui.views.ConfigView;
+import org.apache.tamaya.ui.views.ErrorView;
+import org.apache.tamaya.ui.views.HomeView;
+
+public class ApplicationLayout extends HorizontalLayout {
+
+    private NavBar navBar;
+    private Panel content;
+    private Navigator navigator;
+
+    public ApplicationLayout() {
+        addStyleName(UIConstants.MAIN_LAYOUT);
+
+        setSizeFull();
+
+        initLayouts();
+        setupNavigator();
+    }
+
+    private void initLayouts() {
+        navBar = new NavBar();
+        // Use panel as main content container to allow it's content to scroll
+        content = new Panel();
+        content.setSizeFull();
+        content.addStyleName(UIConstants.PANEL_BORDERLESS);
+
+        addComponents(navBar, content);
+        setExpandRatio(content, 1);
+    }
+
+    private void setupNavigator() {
+        navigator = new Navigator(MyUI.getCurrent(), content);
+
+        registerViews();
+
+        // Add view change listeners so we can do things like select the correct menu item and update the page title
+        navigator.addViewChangeListener(navBar);
+        navigator.addViewChangeListener(new PageTitleUpdater());
+
+        navigator.navigateTo(navigator.getState());
+    }
+
+    private void registerViews() {
+        addView(HomeView.class);
+        addView(ConfigView.class);
+        addView(ComponentView.class);
+        navigator.setErrorView(ErrorView.class);
+    }
+
+    /**
+     * Registers av given view to the navigator and adds it to the NavBar
+     */
+    private void addView(Class<? extends View> viewClass) {
+        ViewConfig viewConfig = viewClass.getAnnotation(ViewConfig.class);
+
+        switch (viewConfig.createMode()) {
+            case CREATE:
+                navigator.addView(viewConfig.uri(), viewClass);
+                break;
+            case LAZY:
+                navigator.addProvider(new LazyProvider(viewConfig.uri(), viewClass));
+                break;
+            case EAGER:
+                try {
+                    navigator.addView(viewConfig.uri(), viewClass.newInstance());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+        }
+        navBar.addView(viewConfig.uri(), viewConfig.displayName());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/Content.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/Content.java b/ui/src/main/java/org/apache/tamaya/ui/Content.java
new file mode 100644
index 0000000..c03fdf1
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/Content.java
@@ -0,0 +1,34 @@
+/*
+ * 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.ui;
+
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.Label;
+
+import java.io.Serializable;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public class Content extends HorizontalSplitPanel implements Serializable{
+
+    public Content(){
+        this.addComponents(new Label("Left"), new Label("Content"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java b/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
new file mode 100644
index 0000000..c894420
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
@@ -0,0 +1,23 @@
+package org.apache.tamaya.ui;
+
+import com.vaadin.server.VaadinSession;
+
+/**
+ * Convenience wrapper for storing and retreiving a user from the VaadinSession
+ */
+public class CurrentUser {
+
+    private static final String KEY = "currentser";
+
+    public static void set(User user) {
+        VaadinSession.getCurrent().setAttribute(KEY, user);
+    }
+
+    public static User get() {
+        return (User) VaadinSession.getCurrent().getAttribute(KEY);
+    }
+
+    public static boolean isLoggedIn() {
+        return get() != null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/Header.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/Header.java b/ui/src/main/java/org/apache/tamaya/ui/Header.java
new file mode 100644
index 0000000..3e92dac
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/Header.java
@@ -0,0 +1,44 @@
+/*
+ * 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.ui;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Link;
+import sun.awt.HorizBagLayout;
+
+import java.io.Serializable;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public class Header extends HorizontalLayout implements Serializable{
+
+    private Label titleLabel = new Label("Apache Tamaya");
+    private HorizontalLayout buttonBar = new HorizontalLayout();
+    private Label iconLabel = new Label();
+
+    public Header(){
+        buttonBar.addComponents(new Button("About"), new Button("Konfiguration"), new Button("PluginManagement"));
+        addComponents(titleLabel, buttonBar, iconLabel);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/MyUI.java b/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
new file mode 100644
index 0000000..845c400
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
@@ -0,0 +1,102 @@
+/*
+ * 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.ui;
+
+import javax.servlet.annotation.WebServlet;
+
+import com.google.common.eventbus.Subscribe;
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.Title;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.navigator.Navigator;
+import com.vaadin.navigator.View;
+import com.vaadin.server.Page;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.ui.*;
+import org.apache.tamaya.ui.components.LazyProvider;
+import org.apache.tamaya.ui.components.PageTitleUpdater;
+import org.apache.tamaya.ui.event.LogoutEvent;
+import org.apache.tamaya.ui.event.NavigationEvent;
+import org.apache.tamaya.ui.views.ErrorView;
+import org.apache.tamaya.ui.views.login.LoginEvent;
+import org.apache.tamaya.ui.views.login.LoginView;
+
+/**
+ * This UI is the application entry point. A UI may either represent a browser window 
+ * (or tab) or some part of a html page where a Vaadin application is embedded.
+ * <p>
+ * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
+ * overridden to add component to the user interface and initialize non-component functionality.
+ */
+@Theme("valo")
+@Title("Tamaya")
+public class MyUI extends UI {
+
+    private Header header = new Header();
+    private Content content = new Content();
+    private Navigator navigator;
+
+    @Override
+    protected void init(VaadinRequest vaadinRequest) {
+        setupEventBus();
+
+        if (CurrentUser.isLoggedIn()) {
+            setContent(new ApplicationLayout());
+        } else {
+            setContent(new LoginView());
+        }
+    }
+
+    @Subscribe
+    public void userLoggedIn(
+            LoginEvent event) {
+        CurrentUser.set(event.getUser());
+        setContent(new ApplicationLayout());
+    }
+
+    @Subscribe
+    public void navigateTo(NavigationEvent view) {
+        getNavigator().navigateTo(view.getViewName());
+    }
+
+    public static MyUI getCurrent() {
+        return (MyUI) UI.getCurrent();
+    }
+
+    @Subscribe
+    public void logout(LogoutEvent logoutEvent) {
+        // Don't invalidate the underlying HTTP session if you are using it for something else
+        VaadinSession.getCurrent().getSession().invalidate();
+        VaadinSession.getCurrent().close();
+        Page.getCurrent().reload();
+
+    }
+
+    private void setupEventBus() {
+        org.apache.tamaya.ui.event.EventBus.register(this);
+    }
+
+
+    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
+    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
+    public static class MyUIServlet extends VaadinServlet {
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
new file mode 100644
index 0000000..caed4cd
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
@@ -0,0 +1,73 @@
+package org.apache.tamaya.ui;
+
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.server.FontAwesome;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Label;
+import org.apache.tamaya.ui.event.EventBus;
+import org.apache.tamaya.ui.event.LogoutEvent;
+import org.apache.tamaya.ui.event.NavigationEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class NavBar extends CssLayout implements ViewChangeListener {
+
+    private Map<String, Button> buttonMap = new HashMap<>();
+
+    public NavBar() {
+        setHeight("100%");
+        addStyleName(UIConstants.MENU_ROOT);
+        addStyleName(UIConstants.NAVBAR);
+
+        Label logo = new Label("<strong>Apache Tamaya</strong>", ContentMode.HTML);
+        logo.addStyleName(UIConstants.MENU_TITLE);
+        addComponent(logo);
+
+        addLogoutButton();
+    }
+
+    private void addLogoutButton() {
+        Button logout = new Button("Log out", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                EventBus.post(new LogoutEvent());
+            }
+        });
+        addComponent(logout);
+
+        logout.addStyleName(UIConstants.BUTTON_LOGOUT);
+        logout.addStyleName(UIConstants.BUTTON_BORDERLESS);
+        logout.setIcon(FontAwesome.SIGN_OUT);
+    }
+
+    public void addView(final String uri, String displayName) {
+        Button viewButton = new Button(displayName, new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                EventBus.post(new NavigationEvent(uri));
+            }
+        });
+        viewButton.addStyleName(UIConstants.MENU_ITEM);
+        viewButton.addStyleName(UIConstants.BUTTON_BORDERLESS);
+        buttonMap.put(uri, viewButton);
+
+        addComponent(viewButton, components.size() - 1);
+    }
+
+    @Override
+    public boolean beforeViewChange(ViewChangeEvent event) {
+        return true; // false blocks navigation, always return true here
+    }
+
+    @Override
+    public void afterViewChange(ViewChangeEvent event) {
+        for(Button button: buttonMap.values()){
+            button.removeStyleName(UIConstants.SELECTED);
+        }
+        Button button = buttonMap.get(event.getViewName());
+        if (button != null) button.addStyleName(UIConstants.SELECTED);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java b/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
new file mode 100644
index 0000000..1631e0b
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
@@ -0,0 +1,22 @@
+package org.apache.tamaya.ui;
+
+import com.vaadin.ui.themes.ValoTheme;
+
+/**
+ * Helper for theme. Less typos in CSS style names and easier to find usages in project.
+ */
+public class UIConstants extends ValoTheme {
+
+    public static final String MAIN_LAYOUT = "main-layout";
+    public static final String NAVBAR = "navbar";
+    public static final String SELECTED = "selected";
+    public static final String LOGIN_BOX = "login-box";
+
+
+    public static final String BUTTON_LOGOUT = "logout";
+    public static final String ORDER_LAYOUT = "order-layout";
+    public static final String ORDER_ID = "order-id";
+    public static final String ORDER_TOTAL = "order-total";
+
+    public static final String LAYOUT_VIEW = "layout-view";
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/User.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/User.java b/ui/src/main/java/org/apache/tamaya/ui/User.java
new file mode 100644
index 0000000..bf01664
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/User.java
@@ -0,0 +1,34 @@
+package org.apache.tamaya.ui;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public class User {
+
+    private String userID = "-";
+    private String fulLName = "<unknown>";
+    private Date logInDate = new Date();
+
+    public User(String userID, String fullName){
+        this.userID = Objects.requireNonNull(userID);
+        this.fulLName = fullName;
+        if(fullName==null){
+            this.fulLName = userID;
+        }
+    }
+
+    public String getUserID() {
+        return userID;
+    }
+
+    public String getFullName() {
+        return fulLName;
+    }
+
+    public String getLoginDate(){
+        return logInDate.toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java b/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
new file mode 100644
index 0000000..7931a4b
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
@@ -0,0 +1,93 @@
+/*
+ * 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.ui;
+
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.VaadinServlet;
+import io.dropwizard.Application;
+import io.dropwizard.configuration.ConfigurationSourceProvider;
+import io.dropwizard.setup.Bootstrap;
+import io.dropwizard.setup.Environment;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.logging.Logger;
+
+public class VaadinApplication extends Application<VaadinApplication.Configuration> {
+
+    private static final Logger LOG = Logger.getLogger(VaadinApplication.class.getName());
+
+    @Override
+    public void run(Configuration configuration, Environment environment) throws Exception {
+        // empty
+    }
+
+    @Override
+    public void initialize(Bootstrap<Configuration> bootstrap) {
+        bootstrap.setConfigurationSourceProvider(new AdaptiveConfigurationsourceProvider());
+        bootstrap.addBundle(new VaadinBundle(MyUI.MyUIServlet.class, "/tamaya/*"));
+    }
+
+    /**
+     * Configuration source provider that reads from a file (similar to the default), but if not present/resovable also
+     * tries to resolve the path as URL or classpath resource.
+     */
+    private static class AdaptiveConfigurationsourceProvider implements ConfigurationSourceProvider{
+
+        @Override
+        public InputStream open(String path) throws IOException {
+            File file = new File(path);
+            if (file.exists()) {
+                LOG.info("Reading configuration from file: " + path);
+                return new FileInputStream(file);
+            }
+            try {
+                URL url = new URL(path);
+                LOG.info("Reading configuration from url: " + path);
+                return url.openStream();
+
+            } catch (Exception e) {
+                // continue
+            }
+            URL url = getClass().getClassLoader().getResource(path);
+            if (url != null) {
+                LOG.info("Reading configuration from classpath: " + path);
+                return url.openStream();
+            }
+            // try default
+            url = getClass().getClassLoader().getResource("/config/application.yml");
+            if (url != null) {
+                LOG.info("Reading configuration from classpath: /config/application.yml");
+                return url.openStream();
+            }
+            return null;
+        }
+    }
+
+    public static class Configuration extends io.dropwizard.Configuration {
+        public String name;
+    }
+
+    public static void main(String... args) throws Exception {
+        new VaadinApplication().run(args);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java b/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
new file mode 100644
index 0000000..dcdce66
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
@@ -0,0 +1,55 @@
+/*
+ * 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.ui;
+
+import com.google.common.collect.Maps;
+import io.dropwizard.Bundle;
+import io.dropwizard.assets.AssetsBundle;
+import io.dropwizard.setup.Bootstrap;
+import io.dropwizard.setup.Environment;
+import org.eclipse.jetty.server.session.SessionHandler;
+
+import javax.servlet.Servlet;
+import java.util.Map;
+
+public class VaadinBundle implements Bundle {
+
+    private final Map<String, Class<? extends Servlet>> servlets = Maps.newLinkedHashMap();
+
+    private final SessionHandler sessionHandler;
+
+
+    public VaadinBundle(Class<? extends Servlet> servlet, String pathSpec) {
+        this.sessionHandler = new SessionHandler();
+        servlets.put(pathSpec, servlet);
+    }
+
+    @Override
+    public void initialize(Bootstrap<?> bootstrap) {
+        bootstrap.addBundle(new AssetsBundle("/VAADIN", "/VAADIN", null, "vaadin"));
+    }
+
+    @Override
+    public void run(Environment environment) {
+        environment.servlets().setSessionHandler(sessionHandler);
+        for (Map.Entry<String, Class<? extends Servlet>> servlet : servlets.entrySet()) {
+            environment.getApplicationContext().addServlet(servlet.getValue(), servlet.getKey());
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java b/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
new file mode 100644
index 0000000..0ab0c66
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/ViewConfig.java
@@ -0,0 +1,20 @@
+package org.apache.tamaya.ui;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for easily collecting View meta info.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ViewConfig {
+
+    enum CreateMode {CREATE, LAZY, EAGER}
+
+    String uri();
+    String displayName();
+    CreateMode createMode() default CreateMode.CREATE;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java b/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
new file mode 100644
index 0000000..ca36a21
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
@@ -0,0 +1,24 @@
+package org.apache.tamaya.ui.components;
+
+import com.vaadin.navigator.Navigator;
+import com.vaadin.navigator.View;
+
+/**
+ * Lazily initializes a view when it's first accessed, then always returns the
+ * same instance on subsequent calls.
+ */
+public class LazyProvider extends Navigator.ClassBasedViewProvider {
+    private View view;
+
+    public LazyProvider(String viewName, Class<? extends View> viewClass) {
+        super(viewName, viewClass);
+    }
+
+    @Override
+    public View getView(String viewName) {
+        if (view == null) {
+            view = super.getView(viewName);
+        }
+        return view;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
new file mode 100644
index 0000000..37a6e8f
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
@@ -0,0 +1,25 @@
+package org.apache.tamaya.ui.components;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.server.Page;
+import org.apache.tamaya.ui.ViewConfig;
+
+public class PageTitleUpdater implements ViewChangeListener {
+    @Override
+    public boolean beforeViewChange(ViewChangeEvent event) {
+        return true;
+    }
+
+    @Override
+    public void afterViewChange(ViewChangeEvent event) {
+
+        View view = event.getNewView();
+        ViewConfig viewConfig = view.getClass().getAnnotation(ViewConfig.class);
+
+        if (viewConfig != null) {
+            Page.getCurrent().setTitle(viewConfig.displayName());
+        }
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java b/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
new file mode 100644
index 0000000..52fe525
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
@@ -0,0 +1,14 @@
+package org.apache.tamaya.ui.components;
+
+import com.vaadin.ui.VerticalLayout;
+
+/**
+ * Vertical layout with spacing and margin on by default
+ */
+public class VerticalSpacedLayout extends VerticalLayout {
+
+    public VerticalSpacedLayout() {
+        setMargin(true);
+        setSpacing(true);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java b/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
new file mode 100644
index 0000000..d269dc3
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
@@ -0,0 +1,34 @@
+package org.apache.tamaya.ui.event;
+
+
+import com.google.common.eventbus.SubscriberExceptionContext;
+import com.google.common.eventbus.SubscriberExceptionHandler;
+
+/**
+ * Convenience class for accessing the _UI Scoped_ EventBus. If you are using something like the CDI event
+ * bus, you don't need a class like this.
+ */
+public final class EventBus {
+
+    private static final com.google.common.eventbus.EventBus EVENT_BUS =
+            new com.google.common.eventbus.EventBus(new SubscriberExceptionHandler(){
+                @Override
+                public void handleException(Throwable throwable, SubscriberExceptionContext subscriberExceptionContext) {
+                    throwable.printStackTrace();
+                }
+            });
+
+    private EventBus(){}
+
+    public static void register(final Object listener) {
+        EVENT_BUS.register(listener);
+    }
+
+    public static void unregister(final Object listener) {
+        EVENT_BUS.unregister(listener);
+    }
+
+    public static void post(final Object event) {
+        EVENT_BUS.post(event);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
new file mode 100644
index 0000000..3168a76
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
@@ -0,0 +1,4 @@
+package org.apache.tamaya.ui.event;
+
+public class LogoutEvent {
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
new file mode 100644
index 0000000..0ec1ec5
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
@@ -0,0 +1,14 @@
+package org.apache.tamaya.ui.event;
+
+
+public class NavigationEvent {
+    private String viewName;
+
+    public NavigationEvent(String viewName) {
+        this.viewName = viewName;
+    }
+
+    public String getViewName() {
+        return viewName;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java b/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
new file mode 100644
index 0000000..ceb4cc0
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/services/LoginService.java
@@ -0,0 +1,12 @@
+package org.apache.tamaya.ui.services;
+
+import org.apache.tamaya.ui.User;
+
+/**
+ * Created by atsticks on 29.03.16.
+ */
+public interface LoginService {
+
+    User login(String userId, String credentials);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
new file mode 100644
index 0000000..abfdb11
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
@@ -0,0 +1,128 @@
+package org.apache.tamaya.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.*;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.*;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+
+@ViewConfig(uri = "/components", displayName = "Components")
+public class ComponentView extends VerticalSpacedLayout implements View {
+
+    private Tree configTree = new Tree("Components");
+
+
+    public ComponentView() {
+        Label caption = new Label("Components");
+        Label description = new Label(
+                "This view shows the components currently active. This information may be useful when checking if an" +
+                        "configuration extension is loaded and for inspection of the configuration and property sources" +
+                        "invovlved.",
+                ContentMode.HTML);
+
+        fillComponentTree();
+
+        addComponents(caption, description, configTree);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+
+    }
+
+    private void fillComponentTree() {
+        configTree.removeAllItems();
+        Configuration config = ConfigurationProvider.getConfiguration();
+
+        String currentParent = "General";
+        configTree.addItem(currentParent);
+        configTree.addItem("Configuration.class");
+        configTree.setItemCaption("Configuration.class", "Configuration class = " + config.getClass().getName());
+        configTree.setParent("Configuration.class", currentParent);
+        configTree.setChildrenAllowed("Configuration.class", false);
+
+        configTree.addItem("ConfigurationContext.class");
+        configTree.setItemCaption("ConfigurationContext.class", "ConfigurationContext class = " + config.getContext().getClass().getName());
+        configTree.setParent("ConfigurationContext.class", currentParent);
+        configTree.setChildrenAllowed("ConfigurationContext.class", false);
+
+        configTree.addItem("PropertyValueCombinationPolicy.class");
+        configTree.setItemCaption("PropertyValueCombinationPolicy.class", PropertyValueCombinationPolicy.class.getSimpleName() + " class = " + config.getContext().getPropertyValueCombinationPolicy().getClass().getName());
+        configTree.setParent("PropertyValueCombinationPolicy.class", currentParent);
+        configTree.setChildrenAllowed("PropertyValueCombinationPolicy.class", false);
+
+        configTree.addItem("ConfigurationContext.types");
+        configTree.setItemCaption("ConfigurationContext.types", "Configurable types");
+        configTree.setParent("ConfigurationContext.types", currentParent);
+        for(Map.Entry<TypeLiteral<?>,List<PropertyConverter<?>>> en:config.getContext().getPropertyConverters().entrySet()){
+            configTree.addItem(en.getKey());
+            configTree.setItemCaption(en.getKey(), "Type = " + en.getKey().toString());
+            configTree.setParent(en.getKey(), "ConfigurationContext.types");
+            for(PropertyConverter conv: en.getValue()){
+                configTree.addItem(conv);
+                configTree.setItemCaption(conv, conv.getClass().getName());
+                configTree.setChildrenAllowed(conv, false);
+                configTree.setParent(conv, en.getKey());
+            }
+        }
+        configTree.addItem("ConfigurationContext.filters");
+        configTree.setItemCaption("ConfigurationContext.filters", "Property Filters");
+        for(PropertyFilter filter: config.getContext().getPropertyFilters()){
+            configTree.addItem(filter);
+            configTree.setItemCaption(filter, filter.getClass().getName());
+            configTree.setChildrenAllowed(filter, false);
+            configTree.setParent(filter, "ConfigurationContext.filters");
+        }
+        configTree.addItem("ConfigurationContext.sources");
+        configTree.setItemCaption("ConfigurationContext.sources", "Property Sources");
+        for(PropertySource source: config.getContext().getPropertySources()){
+            configTree.addItem(source);
+            configTree.setItemCaption(source, "name = "+source.getName());
+            configTree.setParent(source, "ConfigurationContext.sources");
+
+            configTree.addItem(source.toString() + ".ordinal");
+            configTree.setItemCaption(source.toString() + ".ordinal", "ordinal = "+source.getOrdinal());
+            configTree.setParent(source.toString() + ".ordinal", source);
+            configTree.setChildrenAllowed(source.toString() + ".ordinal", false);
+            configTree.addItem(source.toString() + ".class");
+            configTree.setItemCaption(source.toString() + ".class", "class = "+source.getClass().getName());
+            configTree.setChildrenAllowed(source.toString() + ".class", false);
+            configTree.setParent(source.toString() + ".class", source);
+            Map<String,String> props = source.getProperties();
+            configTree.addItem(props);
+            configTree.setItemCaption(props, "properties:");
+            configTree.setParent(props, source);
+            for(Map.Entry propEn:props.entrySet()){
+                String entryKey = props.hashCode() + propEn.getKey().toString();
+                configTree.addItem(entryKey);
+                configTree.setChildrenAllowed(entryKey, false);
+                configTree.setItemCaption(entryKey, propEn.getKey() + "=" + propEn.getValue());
+                configTree.setParent(entryKey, props);
+            }
+        }
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
new file mode 100644
index 0000000..c3828f9
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
@@ -0,0 +1,113 @@
+package org.apache.tamaya.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.*;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.ui.CurrentUser;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+
+import java.util.Map;
+
+
+@ViewConfig(uri = "/config", displayName = "Configuration")
+public class ConfigView extends VerticalSpacedLayout implements View {
+
+    private TextField keyFilter = new TextField("Key filter");
+    private TextField valueFilter = new TextField("Value filter");
+    private Tree tree = new Tree("Current Configuration");
+
+    public ConfigView() {
+        Label caption = new Label("Raw Configuration");
+        Label description = new Label(
+                "This view shows the overall <b>raw</b> configuration tree. Dependening on your access rights you" +
+                        "may see partial or masked data. Similarly configuration can be <i>read-only</i> or <i>mutable</i>.",
+                ContentMode.HTML);
+        HorizontalLayout filters = new HorizontalLayout();
+
+        Button filterButton = new Button("Filter", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                fillTree();
+            }
+        });
+        filters.setDefaultComponentAlignment(Alignment.BOTTOM_LEFT);
+        filters.addComponents(keyFilter, valueFilter, filterButton);
+
+        fillTree();
+
+        addComponents(caption, description, filters, tree);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+
+    }
+
+    private void fillTree() {
+        String keyFilterExp = this.keyFilter.getValue();
+        if(keyFilterExp.isEmpty()){
+            keyFilterExp = null;
+        }
+        String valueFilterExp = this.valueFilter.getValue();
+        if(valueFilterExp.isEmpty()){
+            valueFilterExp = null;
+        }
+        tree.removeAllItems();
+        for(Map.Entry<String,String> entry: ConfigurationProvider.getConfiguration().getProperties().entrySet()){
+            String key = entry.getKey();
+            if(keyFilterExp!=null && !key.matches(keyFilterExp)){
+                continue;
+            }
+            if(valueFilterExp!=null && !entry.getValue().matches(valueFilterExp)){
+                continue;
+            }
+            tree.addItem(key);
+            tree.setItemCaption(key, getCaption(key, entry.getValue()));
+            tree.setChildrenAllowed(key, false);
+            String parent = null;
+            int start = 0;
+            int index = key.indexOf('.', start);
+            while(index>0){
+                String subItem = key.substring(0,index);
+                String caption = key.substring(start, index);
+                tree.addItem(subItem);
+                tree.setItemCaption(subItem, caption);
+                if(parent!=null){
+                    tree.setParent(subItem, parent);
+                }
+                parent = subItem;
+                start = index+1;
+                index = key.indexOf('.', start);
+            }
+            String lastItem = key.substring(start);
+            if(!lastItem.equals(key)){
+                if(parent!=null){
+                    tree.setParent(key, parent);
+                }else{
+                    // should not happen
+                }
+            }else{ // singl root entry
+                if(parent!=null) {
+                    tree.setParent(key, parent);
+                }
+            }
+        }
+    }
+
+    private String getCaption(String key, String value) {
+        int index = key.lastIndexOf('.');
+        if(index<0){
+            return key + " = " + value;
+        }else{
+            return key.substring(index+1) + " = " + value;
+        }
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
new file mode 100644
index 0000000..ba16bf2
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
@@ -0,0 +1,21 @@
+package org.apache.tamaya.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import org.apache.tamaya.ui.UIConstants;
+
+public class ErrorView extends VerticalLayout implements View {
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+        setSizeFull();
+        setMargin(true);
+        Label label = new Label("Could not find a view with that name. You are most likely doing it wrong.");
+        label.addStyleName(UIConstants.LABEL_FAILURE);
+
+        addComponent(label);
+        setComponentAlignment(label, Alignment.MIDDLE_CENTER);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java b/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
new file mode 100644
index 0000000..c656389
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/HomeView.java
@@ -0,0 +1,34 @@
+package org.apache.tamaya.ui.views;
+
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.ui.Label;
+import org.apache.tamaya.ui.CurrentUser;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.ViewConfig;
+import org.apache.tamaya.ui.components.VerticalSpacedLayout;
+
+
+@ViewConfig(uri = "", displayName = "Home")
+public class HomeView extends VerticalSpacedLayout implements View {
+
+    public HomeView() {
+        Label caption = new Label("Welcome, " + CurrentUser.get().getUserID());
+        Label description = new Label(
+                "<b>Apache Tamaya</b> is an API and extendable framework for accessing and managing configuration.<br/> \n" +
+                        "Please check the project's home page <a href='http://tamaya.incubator.apache.org'>http://tamaya.incubator.apache.org</a>.",
+                ContentMode.HTML);
+
+        addComponents(caption, description);
+
+        caption.addStyleName(UIConstants.LABEL_HUGE);
+        description.addStyleName(UIConstants.LABEL_LARGE);
+
+    }
+
+    @Override
+    public void enter(ViewChangeListener.ViewChangeEvent event) {
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
new file mode 100644
index 0000000..83d6b20
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
@@ -0,0 +1,88 @@
+package org.apache.tamaya.ui.views.login;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.ui.*;
+import org.apache.tamaya.ui.UIConstants;
+import org.apache.tamaya.ui.User;
+import org.apache.tamaya.ui.event.EventBus;
+import org.apache.tamaya.ui.services.LoginService;
+
+
+public class LoginBox extends VerticalLayout {
+
+    private LoginService loginService = new LoginService() {
+        @Override
+        public User login(String userId, String credentials) {
+            if("admin".equals(userId)){
+                return new User("admin", "Administrator");
+            }
+            return null;
+        }
+    }; // TODO Load
+    private TextField username;
+    private PasswordField password;
+
+    public LoginBox() {
+        setWidth("400px");
+        addStyleName(UIConstants.LOGIN_BOX);
+        setSpacing(true);
+        setMargin(true);
+
+        addCaption();
+        addForm();
+        addButtons();
+    }
+
+    private void addCaption() {
+        Label caption = new Label("Login to system");
+        addComponent(caption);
+
+        caption.addStyleName(UIConstants.LABEL_H1);
+    }
+
+    private void addForm() {
+        FormLayout loginForm = new FormLayout();
+        username = new TextField("Username");
+        password = new PasswordField("Password");
+        loginForm.addComponents(username, password);
+        addComponent(loginForm);
+        loginForm.setSpacing(true);
+        for(Component component:loginForm){
+            component.setWidth("100%");
+        }
+        username.focus();
+    }
+
+    private void addButtons() {
+        HorizontalLayout buttonsLayout = new HorizontalLayout();
+        Button forgotButton = new Button("Forgot", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                Notification.show("Not implemented", Notification.Type.TRAY_NOTIFICATION);
+            }
+        });
+        Button loginButton = new Button("Login", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent clickEvent) {
+                login();
+            }
+        });
+        buttonsLayout.addComponents(forgotButton, loginButton);
+        addComponent(buttonsLayout);
+        buttonsLayout.setSpacing(true);
+        forgotButton.addStyleName(UIConstants.BUTTON_LINK);
+        loginButton.addStyleName(UIConstants.BUTTON_PRIMARY);
+        loginButton.setClickShortcut(ShortcutAction.KeyCode.ENTER);
+        setComponentAlignment(buttonsLayout, Alignment.BOTTOM_RIGHT);
+    }
+
+    private void login() {
+        User user = loginService.login(username.getValue(), password.getValue());
+        if(user!=null){
+            EventBus.post(new LoginEvent(user));
+        }else{
+            Notification.show("Login failed.", "Hint: use any non-empty strings", Notification.Type.WARNING_MESSAGE);
+            username.focus();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
new file mode 100644
index 0000000..b6ba2b4
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginEvent.java
@@ -0,0 +1,15 @@
+package org.apache.tamaya.ui.views.login;
+
+import org.apache.tamaya.ui.User;
+
+public class LoginEvent {
+    private User user;
+
+    public LoginEvent(User user) {
+        this.user = user;
+    }
+
+    public User getUser() {
+        return user;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
new file mode 100644
index 0000000..e1181d1
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginView.java
@@ -0,0 +1,13 @@
+package org.apache.tamaya.ui.views.login;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.VerticalLayout;
+
+public class LoginView extends VerticalLayout {
+
+    public LoginView() {
+        setSizeFull();
+        setDefaultComponentAlignment(Alignment.MIDDLE_CENTER);
+        addComponent(new LoginBox());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/main/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/main/resources/config/application.yml b/ui/src/main/resources/config/application.yml
new file mode 100644
index 0000000..a0a6fad
--- /dev/null
+++ b/ui/src/main/resources/config/application.yml
@@ -0,0 +1,9 @@
+server:
+  type: default
+  maxThreads: 1024
+  applicationConnectors:
+      - type: http
+        port: 8090
+  adminConnectors:
+      - type: http
+        port: 8091
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c4c3d9b2/ui/src/test/resources/config/application.yml
----------------------------------------------------------------------
diff --git a/ui/src/test/resources/config/application.yml b/ui/src/test/resources/config/application.yml
new file mode 100644
index 0000000..9ec8d5b
--- /dev/null
+++ b/ui/src/test/resources/config/application.yml
@@ -0,0 +1,13 @@
+server:
+  type: default
+  maxThreads: 1024
+  applicationConnectors:
+      - type: http
+        port: 8090
+      - type: https
+        port: 8453
+  adminConnectors:
+      - type: http
+        port: 8091
+      - type: https
+        port: 8453
\ No newline at end of file


[35/50] [abbrv] incubator-tamaya-sandbox git commit: Enabled all IT in FullStackIT

Posted by pl...@apache.org.
Enabled all IT in FullStackIT


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/3f4c1e43
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/3f4c1e43
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/3f4c1e43

Branch: refs/heads/master
Commit: 3f4c1e434c276d3ff3e3ca79022f3a044c661280
Parents: ea50063
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Thu Mar 10 23:10:21 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Thu Mar 10 23:10:21 2016 +0100

----------------------------------------------------------------------
 jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/3f4c1e43/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
index 3aa1082..d046a71 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
@@ -32,7 +32,6 @@ import static org.joda.time.format.ISODateTimeFormat.dateTime;
 
 public class FullStackIT {
 
-    @Ignore
     @Test
     public void retrieveJodaTimeValuesFromConfiguration() {
 
@@ -47,7 +46,6 @@ public class FullStackIT {
         assertThat(dateTimeValue, equalTo(dateTime().parseDateTime("2010-08-08T14:00:15.5+10:00")));
     }
 
-    @Ignore
     @Test
     public void retrieveDateTimeZoneValueFromConfiguration() {
         Configuration configuration = ConfigurationProvider.getConfiguration();


[09/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.

Posted by pl...@apache.org.
TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/7b9d4e69
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/7b9d4e69
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/7b9d4e69

Branch: refs/heads/master
Commit: 7b9d4e69a6aa4c850b5d62e38c2c38a43853d9ef
Parents: cfbc38d
Author: anatole <an...@apache.org>
Authored: Wed Oct 7 23:00:18 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Mon Oct 12 08:01:47 2015 +0200

----------------------------------------------------------------------
 environment/pom.xml                             |  68 ---------
 .../BaseEnvironmentPropertySourceProvider.java  | 119 ----------------
 .../tamaya/environment/spi/package-info.java    |  23 ----
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 ---
 .../src/test/resources/GLOBAL.properties        |  19 ---
 environment/src/test/resources/TEST.properties  |  19 ---
 metamodels/staged/pom.xml                       |  68 +++++++++
 .../spi/BaseStagedPropertySourceProvider.java   | 121 ++++++++++++++++
 .../spi/StagedConfigPropertiesProvider.java     | 137 +++++++++++++++++++
 .../apache/tamaya/staged/spi/package-info.java  |  23 ++++
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 +++
 .../staged/src/test/resources/GLOBAL.properties |  19 +++
 .../staged/src/test/resources/TEST.properties   |  19 +++
 13 files changed, 406 insertions(+), 267 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/pom.xml
----------------------------------------------------------------------
diff --git a/environment/pom.xml b/environment/pom.xml
deleted file mode 100644
index c2e1745..0000000
--- a/environment/pom.xml
+++ /dev/null
@@ -1,68 +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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <artifactId>tamaya-environment</artifactId>
-    <name>Apache Tamaya Modules - Environment Manager</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-functions</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-spisupport</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-resources</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java b/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
deleted file mode 100644
index 5924640..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
+++ /dev/null
@@ -1,119 +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.environment.spi;
-
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Implements a base property source that defines a multilayered environment setup.
- */
-public abstract class BaseEnvironmentPropertySourceProvider implements PropertySourceProvider {
-
-    private static final Logger LOGGER = Logger.getLogger(BaseEnvironmentPropertySourceProvider.class.getName());
-
-    private int basePriority;
-
-    private int priorityIncrease;
-
-    private List<String> environmentIds = new ArrayList<>();
-
-    private String environmentRootContext;
-
-    private List<PropertySource> propertySources = new ArrayList<>();
-
-
-    /**
-     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
-     * @param environmentRootContext the environment target root context, e.g. ENV. or null
-     *                               for not remapping the environment properties.
-     * @param environmentIds the context ids, that build up the environment.
-     */
-    public BaseEnvironmentPropertySourceProvider(String environmentRootContext,
-                                                 String... environmentIds) {
-        this(environmentRootContext, 10,10,environmentIds);
-    }
-        /**
-         * Creates a new Environment provider.
-         * @param environmentRootContext the environment target root context, e.g. ENV. or null
-         *                               for not remapping the environment properties.
-         * @param basePriority the base priority used for the weakest environment properties set.
-         * @param priorityIncrease the value the property source's priority should be increased with each
-         *                         environment context level added.
-         * @param environmentIds the context ids, that build up the environment.
-         */
-    public BaseEnvironmentPropertySourceProvider(String environmentRootContext, int basePriority, int priorityIncrease,
-                                                 String... environmentIds) {
-        this.basePriority = basePriority;
-        this.priorityIncrease = priorityIncrease;
-        if (environmentIds.length == 0) {
-            throw new ConfigException("At least one environment context id must be defined.");
-        }
-        if (environmentRootContext == null) {
-            LOGGER.finest("No environment mapping is applied.");
-        }
-        this.environmentRootContext = environmentRootContext;
-        this.environmentIds.addAll(Arrays.asList(environmentIds));
-        int priority = basePriority;
-        for (String contextId : environmentIds) {
-            propertySources.addAll(loadEnvProperties(environmentRootContext, contextId, priority));
-            priority += priorityIncrease;
-        }
-    }
-
-    /**
-     * Method that loads the environment properties for the given contextId.
-     * @param environmentRootContext the root context, where entries should be mapped to.
-     * @param contextId the contextId.
-     * @param priority  the target priority the created PropertySource should have. This priority is important, since it reflects the
-     *                  environment context overriding rules for the environment part created.
-     * @return the corresponding PrioritySources to be added, never null.
-     */
-    protected abstract Collection<PropertySource> loadEnvProperties(
-            String environmentRootContext, String contextId, int priority);
-
-    /**
-     * Get the environment context ids that define how this environment configuration
-     * is setup, in order of priority increasing.
-     * @return the ordered list of context ids.
-     */
-    public List<String> getEnvironmentIds() {
-        return environmentIds;
-    }
-
-    @Override
-    public String toString() {
-        return "EnvironmentPropertySourceProvider{" +
-                "environmentIds=" + environmentIds +
-                ", environmentRootContext='" + environmentRootContext + '\'' +
-                '}';
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        return propertySources;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java b/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
deleted file mode 100644
index 9037c2b..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
+++ /dev/null
@@ -1,23 +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.
- */
-/**
- * Main API of the environment module, containing the base class for implementing adapted
- * environment parts in your configuration.
- */
-package org.apache.tamaya.environment.spi;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
deleted file mode 100644
index 233448a..0000000
--- a/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ /dev/null
@@ -1,19 +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.environment.internal.ClasspathPropertiesEnvironmentProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/test/resources/GLOBAL.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/GLOBAL.properties b/environment/src/test/resources/GLOBAL.properties
deleted file mode 100644
index 9f39f75..0000000
--- a/environment/src/test/resources/GLOBAL.properties
+++ /dev/null
@@ -1,19 +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.
-#
-aKey=aValue.GLOBAL

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/environment/src/test/resources/TEST.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/TEST.properties b/environment/src/test/resources/TEST.properties
deleted file mode 100644
index 2b31cb3..0000000
--- a/environment/src/test/resources/TEST.properties
+++ /dev/null
@@ -1,19 +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.
-#
-aKey=aValue.TEST

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/staged/pom.xml b/metamodels/staged/pom.xml
new file mode 100644
index 0000000..325e4ec
--- /dev/null
+++ b/metamodels/staged/pom.xml
@@ -0,0 +1,68 @@
+<!-- 
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya.ext.metamodels</groupId>
+        <artifactId>tamaya-metamodels</artifactId>
+        <version>0.2-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-metamodel-staged</artifactId>
+    <name>Apache Tamaya Modules - Staged Configuration</name>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya</groupId>
+            <artifactId>tamaya-api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-functions</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-resources</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
new file mode 100644
index 0000000..36fcd11
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
@@ -0,0 +1,121 @@
+/*
+ * 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.staged.spi;
+
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Implements a base property source provider that defines a multilayered
+ * stage setup.
+ */
+public abstract class BaseStagedPropertySourceProvider implements PropertySourceProvider {
+
+    /** The logger used. */
+    private static final Logger LOGGER = Logger.getLogger(BaseStagedPropertySourceProvider.class.getName());
+
+    /** the current environment stages in order of precedence (weakest first). */
+    private List<String> contextIds = new ArrayList<>();
+
+    /** Optional root context of the environment in the config tree. All entries loaded will be mapped into
+     * this root conztext.
+     */
+    private String rootContext;
+
+    /** List of PropertySources evaluated and returned to the current ConfigurationContext on load. */
+    private List<PropertySource> propertySources = new ArrayList<>();
+
+
+    /**
+     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
+     * @param rootContext the environment target root context, e.g. ENV. or null
+     *                               for not remapping the environment properties.
+     * @param contextIds the context ids, that build up the environment.
+     */
+    public BaseStagedPropertySourceProvider(String rootContext,
+                                            String... contextIds) {
+        this(rootContext, 10,10, contextIds);
+    }
+        /**
+         * Creates a new Environment provider.
+         * @param rootContext the environment target root context, e.g. ENV. or null
+         *                               for not remapping the environment properties.
+         * @param basePriority the base priority used for the weakest environment properties set.
+         * @param priorityIncrease the value the property source's priority should be increased with each
+         *                         environment context level added.
+         * @param contextIds the context ids, that build up the environment.
+         */
+    public BaseStagedPropertySourceProvider(String rootContext, int basePriority, int priorityIncrease,
+                                            String... contextIds) {
+        if (contextIds.length == 0) {
+            throw new ConfigException("At least one environment context id must be defined.");
+        }
+        if (rootContext == null) {
+            LOGGER.finest("No environment mapping is applied.");
+        }
+        this.rootContext = rootContext;
+        this.contextIds.addAll(Arrays.asList(contextIds));
+        int priority = basePriority;
+        for (String contextId : contextIds) {
+            propertySources.addAll(loadStageProperties(rootContext, contextId, priority));
+            priority += priorityIncrease;
+        }
+    }
+
+    /**
+     * Method that loads the environment properties for the given contextId.
+     * @param rootContext the root context, where entries read should be mapped to.
+     * @param contextId the contextId.
+     * @param priority  the target priority the created PropertySource should have. This priority is
+     *                  important, since it reflects the order as defined
+     *                  when configuring this class. Therefore it should not be overridden normally.
+     * @return the corresponding PrioritySources to be added, never null.
+     */
+    protected abstract Collection<PropertySource> loadStageProperties(
+            String rootContext, String contextId, int priority);
+
+    /**
+     * Get the environment context ids that define how this environment configuration
+     * is setup, in order of their increasing priority.
+     * @return the ordered list of context ids.
+     */
+    public List<String> getContextIds() {
+        return contextIds;
+    }
+
+    @Override
+    public String toString() {
+        return "EnvironmentPropertySourceProvider{" +
+                "contextIds=" + contextIds +
+                ", rootContext='" + rootContext + '\'' +
+                '}';
+    }
+
+    @Override
+    public Collection<PropertySource> getPropertySources() {
+        return propertySources;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
new file mode 100644
index 0000000..e224d52
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
@@ -0,0 +1,137 @@
+/*
+ * 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.staged.spi;
+
+
+import org.apache.tamaya.spisupport.MapPropertySource;
+import org.apache.tamaya.spisupport.PropertiesResourcePropertySource;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Configuration provider that resolves to a location in the classpath.
+ * Hereby the following system properties can be set to configure the provider
+ * (all entries are optional):
+ * <pre>
+ *     env.STAGE   :   ordered list of configs to be loaded, e.g. sys-env,GLOBAL,TEST,DEV
+ * </pre>
+ * Adding {@code sys-env} as stage maps the current environment properties using
+ * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
+ * Similarly the same thing can be done by passing {@code sys-props} as context id for
+ * adding the current System properties to the configuration tree.
+ *
+ * The rootContext can be used to remap the whole property space to an alternate subtree in
+ * the configuration tree overall. This is very handy, if multiple instances of this class
+ * are registered into the same configuration, but with different location setups. Remapping
+ * configuration allows to separate these entries clearly.<br/>
+ * Finally the resource location can be adapted by overriding {@link #getBaseResourcePath()}.
+ * Different formats and loading mechanisms can be implemented by overriding
+ * {@link #loadProperties(String, String, int, List)}.
+ */
+public class StagedConfigPropertiesProvider extends BaseStagedPropertySourceProvider {
+
+    /** The system property to define the stages used. */
+    private static final String STAGE_PROP = "env.STAGE";
+    /** The logger used. */
+
+    private static final Logger LOGGER = Logger.getLogger(StagedConfigPropertiesProvider.class.getName());
+
+    /** The context id for adding the system's environment properties. */
+    private static final String DEFAULT_ENV = "sys-env";
+
+    /** The context id for adding the system's properties. */
+    private static final String DEFAULT_SYSPROPS = "sys-props";
+
+    /**
+     * Creates a new instance.
+     * @param rootContext the (optional) root context, can be null.
+     * @param stages the comma separated list of stages.
+     */
+    public StagedConfigPropertiesProvider(String rootContext, String... stages){
+        super(rootContext, evaluateStages(stages));
+    }
+
+    /**
+     * Creates a default instance. the stages are read from the {@code env.STAGE} system�propertx
+     * or a default is applied.
+     */
+    public StagedConfigPropertiesProvider(){
+        super(null, evaluateStages(null));
+    }
+
+    /**
+     * Evaluates the stages or returns the default STAGE entry.
+     * @return the stages to be used, never null.
+     */
+    private static String[] evaluateStages(String[] stages) {
+        if(stages!=null && stages.length>0){
+            return stages.clone();
+        }
+        String value = System.getProperty(STAGE_PROP);
+        if(value==null) {
+            value = System.getenv(STAGE_PROP);
+        }
+        if(value==null){
+            value = "sys-env,GLOBAL,DEVELOPMENT,sys-props";
+        }
+        return value.split(",");
+    }
+
+    @Override
+    protected Collection<PropertySource> loadStageProperties(
+            String rootContext, String contextId, int priority) {
+        List<PropertySource> result = new ArrayList<>();
+        if (DEFAULT_ENV.equals(contextId)){
+            result.add(new MapPropertySource(DEFAULT_ENV, System.getenv(),
+                    rootContext, priority));
+        }else if (DEFAULT_SYSPROPS.equals(contextId)){
+            result.add(new MapPropertySource(DEFAULT_SYSPROPS, System.getProperties(),
+                    rootContext, priority));
+        }
+        else{
+            loadProperties(rootContext, contextId, priority, result);
+        }
+        return result;
+    }
+
+    private void loadProperties(String rootContext, String contextId, int priority,
+                                List<PropertySource> result) {
+        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
+        if(cpExp.startsWith("/")){
+            cpExp = cpExp.substring(1);
+        }
+        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
+            result.add(new PropertiesResourcePropertySource(rootContext, url, priority));
+        }
+    }
+
+    /**
+     * Get the basic resource path used for lookup of properties files.
+     * @return the basic resource path, never null.
+     */
+    protected String getBaseResourcePath() {
+        return "";
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
new file mode 100644
index 0000000..9037c2b
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+/**
+ * Main API of the environment module, containing the base class for implementing adapted
+ * environment parts in your configuration.
+ */
+package org.apache.tamaya.environment.spi;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
new file mode 100644
index 0000000..2bdf843
--- /dev/null
+++ b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -0,0 +1,19 @@
+#
+# 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.staged.spi.StagedConfigPropertiesProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/test/resources/GLOBAL.properties
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/GLOBAL.properties b/metamodels/staged/src/test/resources/GLOBAL.properties
new file mode 100644
index 0000000..9f39f75
--- /dev/null
+++ b/metamodels/staged/src/test/resources/GLOBAL.properties
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+aKey=aValue.GLOBAL

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/7b9d4e69/metamodels/staged/src/test/resources/TEST.properties
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/TEST.properties b/metamodels/staged/src/test/resources/TEST.properties
new file mode 100644
index 0000000..2b31cb3
--- /dev/null
+++ b/metamodels/staged/src/test/resources/TEST.properties
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+aKey=aValue.TEST



[43/50] [abbrv] incubator-tamaya-sandbox git commit: Fixed lang support for modularization.

Posted by pl...@apache.org.
Fixed lang support for modularization.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/19c422be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/19c422be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/19c422be

Branch: refs/heads/master
Commit: 19c422be5b5ba69cc4c2652d7646bc5d50492cdf
Parents: a83105b
Author: anatole <an...@apache.org>
Authored: Sun Apr 17 21:05:13 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:44 2016 +0200

----------------------------------------------------------------------
 ui/pom.xml                                      | 23 --------------------
 .../org/apache/tamaya/ui/ApplicationLayout.java |  1 -
 .../main/java/org/apache/tamaya/ui/NavBar.java  |  1 -
 ui/src/main/java/org/apache/tamaya/ui/User.java |  1 -
 .../org/apache/tamaya/ui/VaadinApplication.java |  2 --
 .../tamaya/ui/components/PageTitleUpdater.java  |  1 -
 .../apache/tamaya/ui/views/ComponentView.java   |  1 -
 .../apache/tamaya/ui/views/login/LoginBox.java  |  1 -
 8 files changed, 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index 3441951..216382f 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -36,9 +36,7 @@ under the License.
     <properties>
         <vaadin.version>7.6.4</vaadin.version>
         <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
-        <dropwizard.version>0.9.2</dropwizard.version>
         <mainClass>org.apache.tamaya.ui.VaadinApplication</mainClass>
-        <jetty.plugin.version>9.2.3.v20140905</jetty.plugin.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <servlet.api.version>3.0.1</servlet.api.version>
     </properties>
@@ -53,27 +51,6 @@ under the License.
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
-            <!--<dependency>-->
-                <!--<groupId>com.vaadin</groupId>-->
-                <!--<artifactId>vaadin-server</artifactId>-->
-                <!--<version>${vaadin.version}</version>-->
-            <!--</dependency>-->
-            <dependency>
-                <groupId>io.dropwizard</groupId>
-                <artifactId>dropwizard-core</artifactId>
-                <version>${dropwizard.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.dropwizard</groupId>
-                <artifactId>dropwizard-assets</artifactId>
-                <version>${dropwizard.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.dropwizard</groupId>
-                <artifactId>dropwizard-testing</artifactId>
-                <version>${dropwizard.version}</version>
-                <scope>test</scope>
-            </dependency>
         </dependencies>
     </dependencyManagement>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
index c3aeabb..7a303eb 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
@@ -24,7 +24,6 @@ import com.vaadin.ui.Panel;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.components.LazyProvider;
 import org.apache.tamaya.ui.components.PageTitleUpdater;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.views.ErrorView;
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
index 5b3537a..16b9860 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
@@ -28,7 +28,6 @@ import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.event.EventBus;
 import org.apache.tamaya.ui.event.LogoutEvent;
 import org.apache.tamaya.ui.event.NavigationEvent;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.services.MessageProvider;
 
 import java.util.HashMap;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/User.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/User.java b/ui/src/main/java/org/apache/tamaya/ui/User.java
index 4cb6f5a..2201bdb 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/User.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/User.java
@@ -19,7 +19,6 @@
 package org.apache.tamaya.ui;
 
 import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.services.MessageProvider;
 
 import java.util.Date;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java b/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
index 7931a4b..1bdf19e 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
@@ -18,8 +18,6 @@
  */
 package org.apache.tamaya.ui;
 
-import com.vaadin.annotations.VaadinServletConfiguration;
-import com.vaadin.server.VaadinServlet;
 import io.dropwizard.Application;
 import io.dropwizard.configuration.ConfigurationSourceProvider;
 import io.dropwizard.setup.Bootstrap;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
index 9f95ae7..a236d55 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
@@ -22,7 +22,6 @@ import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.server.Page;
 import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.services.MessageProvider;
 
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
index 19211f1..7572510 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
@@ -27,7 +27,6 @@ import org.apache.tamaya.Configuration;
 import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.*;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.UIConstants;
 import org.apache.tamaya.ui.ViewProvider;
 import org.apache.tamaya.ui.components.VerticalSpacedLayout;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/19c422be/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
index 8bdcbee..049d885 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/login/LoginBox.java
@@ -3,7 +3,6 @@ package org.apache.tamaya.ui.views.login;
 import com.vaadin.event.ShortcutAction;
 import com.vaadin.ui.*;
 import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.internal.ResourceBundleMessageProvider;
 import org.apache.tamaya.ui.UIConstants;
 import org.apache.tamaya.ui.User;
 import org.apache.tamaya.ui.event.EventBus;


[21/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-114: Added further files for collection support.

Posted by pl...@apache.org.
TAMAYA-114: Added further files for collection support.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/8e237d9f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/8e237d9f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/8e237d9f

Branch: refs/heads/master
Commit: 8e237d9f8055e976c0f20db1b62d41c1482f4a57
Parents: 4607b3d
Author: anatole <an...@apache.org>
Authored: Sun Feb 14 23:34:07 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Sun Feb 14 23:34:07 2016 +0100

----------------------------------------------------------------------
 .../internal/AdaptiveCombinationPolicy.java     | 45 ++++++++++++--
 .../internal/ArrayListConverter.java            | 65 +++++++++++++++++++-
 .../internal/CollectionConverter.java           | 36 +++++++++++
 .../collections/internal/HashMapConverter.java  | 52 +++++++++++++++-
 .../collections/internal/HashSetConverter.java  | 46 +++++++++++++-
 .../internal/LinkedListConverter.java           | 33 +++++++++-
 .../collections/internal/ListConverter.java     | 36 +++++++++++
 .../collections/internal/MapConverter.java      | 36 +++++++++++
 .../collections/internal/SetConverter.java      | 36 +++++++++++
 .../internal/SortedMapConverter.java            | 37 +++++++++++
 .../internal/SortedSetConverter.java            | 36 +++++++++++
 .../collections/internal/TreeMapConverter.java  | 16 ++++-
 .../collections/internal/TreeSetConverter.java  | 43 ++++++++++++-
 .../org.apache.tamaya.spi.PropertyConverter     | 30 +++++++++
 ...he.tamaya.spi.PropertyValueCombinationPolicy | 19 ++++++
 .../collections/CollectionsBaseTests.java       | 29 +++++++++
 .../META-INF/javaconfiguration.properties       | 30 ++++-----
 ...he.tamaya.spi.PropertyValueCombinationPolicy | 19 ------
 18 files changed, 588 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index 113d817..9170eb3 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -20,9 +20,11 @@ package org.apache.tamaya.collections.internal;
 
 import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 
 import javax.annotation.Priority;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
@@ -40,8 +42,8 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
     private Map<Class, PropertyValueCombinationPolicy> configuredPolicies = new ConcurrentHashMap<>();
 
     @Override
-    public String collect(String currentValue, String key, PropertySource propertySource) {
-        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().get(key+"{combinationPolicy}");
+    public Map<String,String> collect(Map<String,String> currentValue, String key, PropertySource propertySource){
+        String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().get('_' + key+".combinationPolicy");
         if(adaptiveCombinationPolicyClass!=null){
             PropertyValueCombinationPolicy delegatePolicy = null;
             try{
@@ -57,9 +59,44 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
                 LOG.log(Level.SEVERE, "Error loading configured PropertyValueCombinationPolicy for key: " + key, e);
             }
         }
-        String newValue = propertySource.get(key);
+        // check for default collection combination policies for lists, sets, maps etc.
+        String collectionType = ConfigurationProvider.getConfiguration().get('_' + key+".collection-type");
+        if(collectionType!=null) {
+            if (collectionType.startsWith("java.util.")) {
+                collectionType = collectionType.substring("java.util.".length());
+            }
+            switch(collectionType){
+                case "List":
+                case "ArrayList":
+                case "LinkedList":
+                case "Collection":
+                case "Set":
+                case "HashSet":
+                case "TreeSet":
+                case "SortedSet":
+                case "Map":
+                case "HashMap":
+                case "ConcurrentHashMap":
+                case "TreeMap":
+                case "SortedMap":
+                    PropertyValue newValue = propertySource.get(key);
+                    if(newValue!=null){
+                        Map<String,String> newMapValue = new HashMap<>(currentValue);
+                        String oldVal = newMapValue.get(key);
+                        if(oldVal!=null){
+                            newMapValue.put(key,oldVal + ',' + newValue.getValue());
+                        }
+                        return newMapValue;
+                    }else{
+                        return newValue.getConfigEntries();
+                    }
+                default:
+                    LOG.log(Level.SEVERE, "Unsupported collection-type for key: " + key + ": " + collectionType);
+            }
+        }
+        PropertyValue newValue = propertySource.get(key);
         if(newValue!=null){
-            return newValue;
+            return newValue.getConfigEntries();
         }
         return currentValue;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
index 0d7e6f3..4c6b06d 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -18,17 +18,76 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating ArrayList representation of a values.
  */
-public class ArrayListConverter implements PropertyConverter<ArrayList<?>> {
+public class ArrayListConverter implements PropertyConverter<ArrayList> {
+
+    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static ArrayListConverter INSTANCE = new ArrayListConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static ArrayListConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
-    public ArrayList<?> convert(String value) {
+    public ArrayList convert(String value, ConversionContext context) {
+        List<String> rawList = split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                ArrayList<Object> mlist = new ArrayList<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    Object convValue = valueConverter.convert(raw, ctx);
+                    if(convValue!=null){
+                        mlist.add(convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+            }
+        }
         return null;
     }
+
+    static List<String>  split(String value) {
+        List<String> result = new ArrayList<>();
+        int start = 0;
+        int end = value.indexOf(',',start);
+        while(end>0) {
+            if (end>0 && (value.charAt(end - 1) != '\\')) {
+                result.add(value.substring(start, end));
+                start = end + 1;
+                end = value.indexOf(',',start);
+            }else{
+                end = value.indexOf(',',end + 1);
+            }
+            end = value.indexOf(',',start);
+        }
+        if(start < value.length()){
+            result.add(value.substring(start));
+        }
+        return result;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
new file mode 100644
index 0000000..80d65cd
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ *  PropertyConverter for gnerating a LIST representation of values.
+ */
+public class CollectionConverter implements PropertyConverter<Collection> {
+
+    @Override
+    public Collection convert(String value, ConversionContext context) {
+        return Collections.unmodifiableCollection(ArrayListConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 917c31e..76ded4f 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -18,17 +18,63 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.HashMap;
-import java.util.TreeSet;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating HashMap representation of a values.
  */
-public class HashMapConverter implements PropertyConverter<HashMap<?,?>> {
+public class HashMapConverter implements PropertyConverter<HashMap> {
+    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static HashMapConverter INSTANCE = new HashMapConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static HashMapConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
-    public HashMap<?,?> convert(String value) {
+    public HashMap convert(String value, ConversionContext context) {
+        List<String> rawList = ArrayListConverter.split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                HashMap<String,Object> mlist = new HashMap<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    String[] items = splitItems(raw);
+                    Object convValue = valueConverter.convert(items[1], ctx);
+                    if(convValue!=null){
+                        mlist.put(items[0], convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
+            }
+        }
         return null;
     }
+
+    static String[] splitItems(String raw) {
+        String[] items = new String[2];
+        // check for '[]'
+        // else split with ':'
+        return raw.split("::");
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
index d41b6a2..2c402fb 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -18,16 +18,58 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating HashSet representation of a values.
  */
-public class HashSetConverter implements PropertyConverter<HashSet<?>> {
+public class HashSetConverter implements PropertyConverter<HashSet> {
+
+    private static final Logger LOG = Logger.getLogger(HashSetConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static HashSetConverter INSTANCE = new HashSetConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static HashSetConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
-    public HashSet<?> convert(String value) {
+    public HashSet convert(String value, ConversionContext context) {
+        List<String> rawList = ArrayListConverter.split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                HashSet<Object> mlist = new HashSet<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    Object convValue = valueConverter.convert(raw, ctx);
+                    if(convValue!=null){
+                        mlist.add(convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+            }
+        }
         return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index aaca08d..d41211c 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -18,16 +18,45 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating LinkedList representation of a values.
  */
-public class LinkedListConverter implements PropertyConverter<LinkedList<?>> {
+public class LinkedListConverter implements PropertyConverter<LinkedList> {
+    private static final Logger LOG = Logger.getLogger(LinkedListConverter.class.getName());
+
     @Override
-    public LinkedList<?> convert(String value) {
+    public LinkedList convert(String value, ConversionContext context) {
+        List<String> rawList = ArrayListConverter.split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                LinkedList<Object> mlist = new LinkedList<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    Object convValue = valueConverter.convert(raw, ctx);
+                    if(convValue!=null){
+                        mlist.add(convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+            }
+        }
         return null;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
new file mode 100644
index 0000000..2299bac
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *  PropertyConverter for gnerating a LIST representation of values.
+ */
+public class ListConverter implements PropertyConverter<List> {
+
+    @Override
+    public List convert(String value, ConversionContext context) {
+        return Collections.unmodifiableList(ArrayListConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
new file mode 100644
index 0000000..dcd2919
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ *  PropertyConverter for gnerating HashMap representation of a values.
+ */
+public class MapConverter implements PropertyConverter<Map> {
+
+    @Override
+    public Map convert(String value, ConversionContext context) {
+        return Collections.unmodifiableMap(HashMapConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
new file mode 100644
index 0000000..ddf19ad
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ *  PropertyConverter for gnerating a LIST representation of values.
+ */
+public class SetConverter implements PropertyConverter<Set<?>> {
+
+    @Override
+    public Set convert(String value, ConversionContext context) {
+        return Collections.unmodifiableSet(HashSetConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
new file mode 100644
index 0000000..1015751
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedMapConverter.java
@@ -0,0 +1,37 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collections;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ *  PropertyConverter for gnerating a LIST representation of values.
+ */
+public class SortedMapConverter implements PropertyConverter<SortedMap> {
+
+    @Override
+    public SortedMap convert(String value, ConversionContext context) {
+        return Collections.unmodifiableSortedMap(TreeMapConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
new file mode 100644
index 0000000..c0b8065
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/SortedSetConverter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.Collections;
+import java.util.SortedSet;
+
+/**
+ *  PropertyConverter for gnerating a LIST representation of values.
+ */
+public class SortedSetConverter implements PropertyConverter<SortedSet> {
+
+    @Override
+    public SortedSet convert(String value, ConversionContext context) {
+        return Collections.unmodifiableSortedSet(TreeSetConverter.getInstance().convert(value, context));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
index 6e74d5c..08b92fd 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
@@ -18,17 +18,29 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
-import java.util.HashMap;
 import java.util.TreeMap;
 
 /**
  *  PropertyConverter for gnerating HashMap representation of a values.
  */
 public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> {
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static TreeMapConverter INSTANCE = new TreeMapConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static TreeMapConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
-    public TreeMap<?,?> convert(String value) {
+    public TreeMap<?, ?> convert(String value, ConversionContext context) {
         return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index 2797c91..fca00de 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -18,17 +18,56 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
-import java.util.HashSet;
+import java.util.List;
 import java.util.TreeSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *  PropertyConverter for gnerating HashSet representation of a values.
  */
 public class TreeSetConverter implements PropertyConverter<TreeSet<?>> {
+
+    private static final Logger LOG = Logger.getLogger(TreeSetConverter.class.getName());
+
+    /** The shared instance, used by other collection converters in this package.*/
+    private static TreeSetConverter INSTANCE = new TreeSetConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static TreeSetConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
-    public TreeSet<?> convert(String value) {
+    public TreeSet convert(String value, ConversionContext context) {
+        List<String> rawList = ArrayListConverter.split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        if(converterClass!=null){
+            try {
+                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
+                TreeSet<Object> mlist = new TreeSet<>();
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                        TypeLiteral.of(context.getTargetType().getType())).build();
+                for(String raw:rawList){
+                    Object convValue = valueConverter.convert(raw, ctx);
+                    if(convValue!=null){
+                        mlist.add(convValue);
+                        continue;
+                    }
+                }
+                return mlist;
+
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
+            }
+        }
         return null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
----------------------------------------------------------------------
diff --git a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
new file mode 100644
index 0000000..c4cf2ae
--- /dev/null
+++ b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
@@ -0,0 +1,30 @@
+#
+# 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.collections.internal.ArrayListConverter
+org.apache.tamaya.collections.internal.CollectionConverter
+org.apache.tamaya.collections.internal.HashMapConverter
+org.apache.tamaya.collections.internal.HashSetConverter
+org.apache.tamaya.collections.internal.LinkedListConverter
+org.apache.tamaya.collections.internal.ListConverter
+org.apache.tamaya.collections.internal.MapConverter
+org.apache.tamaya.collections.internal.SetConverter
+org.apache.tamaya.collections.internal.SortedSetConverter
+org.apache.tamaya.collections.internal.SortedMapConverter
+org.apache.tamaya.collections.internal.TreeMapConverter
+org.apache.tamaya.collections.internal.TreeSetConverter

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
----------------------------------------------------------------------
diff --git a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
new file mode 100644
index 0000000..6b7a67b
--- /dev/null
+++ b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
@@ -0,0 +1,19 @@
+#
+# 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.collections.internal.AdaptiveCombinationPolicy
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
new file mode 100644
index 0000000..ca100ea
--- /dev/null
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
@@ -0,0 +1,29 @@
+package org.apache.tamaya.collections;
+
+import org.junit.Test;
+
+/**
+ * Created by atsticks on 14.02.16.
+ */
+public class CollectionsBaseTests {
+
+    @Test
+    public void testList_String(){
+
+    }
+
+    @Test
+    public void testSet_String(){
+
+    }
+
+    @Test
+    public void testMap_String(){
+
+    }
+
+    @Test
+    public void testCollection_String(){
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 9848617..ca3c66e 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -18,34 +18,26 @@
 #
 # Similar to etcd all keys starting with a _ are hidden by default (only directly accessible).
 
-# Examples for collection syntax
+# Config for base tests (no combination policy)
+base.items=1,2,3,4,5,6,7,8,9,0
+base.map=1::a, 2::b, 3::c, [4:: ]
 
+# Config for tests with combination policy
 list=a,b,c
 _list.collection-type=List
-#list.{collection-combinationPolicy}=MyLeftAppendingCombinationPolicy
-
-arrayList=d;e;f
+arrayList=d,e,f
 _arrayList.collection-type=java.util.ArrayList
-_arrayList.collection-separator=;
-#_arrayList.collection-valueParser=myParserClass
-
 linkedList=g,h,i
 _linkedList.collection-type=java.util.LinkedList
-
 set=a,b,b
 _set.collection-type=java.util.Set
-_set.eval-combinationPolicy=WarnOnDuplicates
-
 sortedSet=a,c,b
 _sortedSet.collection-type=java.util.TreeSet
-
-map=1:a,2:b,3:c
+map=1::a, 2::b, 3::c
 _map.collection-type=Map
-#_map.collection-keyParser=myParserClass
-#_map.collection-valueParser=myParserClass
-
-sortedMap=|3:c||1:a||2:b|
-_sortedMap.collection-type=java.util.TreeMap
-
-concurrentMap=|3:c||1:a||2:b|
+sortedmap=[3 :: c], 1 :: a, 2 :: b
+_sortedmap.collection-type=SorteedMap
+treemap=[3 :: c], 1 :: a, 2 :: b
+_treemap.collection-type=java.util.TreeMap
+concurrentMap=[3::c], 1::a, key::value
 _concurrentMap.collection-type=java.util.ConcurrentHashMap
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/8e237d9f/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy b/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
deleted file mode 100644
index 6b7a67b..0000000
--- a/collections/src/test/resources/META-INF/services/org.apache.tamaya.spi.PropertyValueCombinationPolicy
+++ /dev/null
@@ -1,19 +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.collections.internal.AdaptiveCombinationPolicy
\ No newline at end of file



[08/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-116: Added first integration code for Sabot CDI injection extension.

Posted by pl...@apache.org.
TAMAYA-116: Added first integration code for Sabot CDI injection extension.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/cfbc38de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/cfbc38de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/cfbc38de

Branch: refs/heads/master
Commit: cfbc38de1ff5df11d9351fcc80c6c8e4d108c7ef
Parents: 5f2b6e3
Author: anatole <an...@apache.org>
Authored: Tue Oct 6 09:54:51 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Oct 6 09:56:14 2015 +0200

----------------------------------------------------------------------
 .../tamaya/environment/spi/ContextSpi.java      |  41 ---
 .../tamaya/integration/cdi2/ConfigDefault.java  |  41 +++
 .../integration/cdi2/ConfigDefaultSections.java |  43 ++++
 .../tamaya/integration/cdi2/ConfigProperty.java |  80 ++++++
 .../cdi2/ConfigurationExtension.java            | 257 +++++++++++++++++++
 .../integration/cdi2/ConfigurationProducer.java | 115 +++++++++
 .../integration/cdi2/WithConfigOperator.java    |  45 ++++
 .../integration/cdi2/WithPropertyConverter.java |  45 ++++
 .../cdi2/src/main/resources/META-INF/beans.xml  |   1 +
 .../javax.enterprise.inject.spi.Extension       |   1 +
 .../META-INF/javaconfiguration.properties       |  14 +
 integration/pom.xml                             |   4 +-
 12 files changed, 644 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java b/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
deleted file mode 100644
index edc5c54..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/ContextSpi.java
+++ /dev/null
@@ -1,41 +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.environment.spi;
-
-
-import org.apache.tamaya.environment.RuntimeContext;
-
-/**
- * Service for accessing the current ids that identify a runtime environment. Environments are used to
- * access/determine configurations.<br/>
- * <h3>Implementation PropertyMapSpec</h3> This class is
- * <ul>
- * <li>thread safe,
- * <li>and behaves contextual.
- * </ul>
- */
-public interface ContextSpi {
-
-    /**
-     * Get the current environment id.
-     * @return the corresponding environment id, never null.
-     */
-    RuntimeContext getCurrentContext();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
new file mode 100644
index 0000000..420f1fd
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefault.java
@@ -0,0 +1,41 @@
+/*
+ * 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.integration.cdi2;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to define a default keys to be returned, when no configured keys could be
+ * determined for a property/template accessor. The keys hereby can also contain a
+ * dynamic expression that is evaluated by the configuration system.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
+public @interface ConfigDefault {
+
+    /**
+     * The default keys to be injected, if no such configuration entry was found. If keys was found and no default
+     * is defined, it is handled as a deployment error.
+     */
+    String value() default "";
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
new file mode 100644
index 0000000..e6b5ba2
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigDefaultSections.java
@@ -0,0 +1,43 @@
+/*
+ * 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.integration.cdi2;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to control injection and resolution current a configured bean. The configuration keys
+ * to be resolved are basically determined by the {@link org.apache.tamaya.inject.ConfigProperty}
+ * annotation(s). Nevertheless these annotations can also have relative key names. This annotation allows
+ * to define a configuration area that is prefixed to all relative configuration keys within the
+ * corresponding class/template interface.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.TYPE })
+public @interface ConfigDefaultSections {
+
+    /**
+     * Allows to declare an section names that are prepended to resolve relative configuration keys.
+     * @return the section names to used for key resolution.
+     */
+    String[] value() default {};
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
new file mode 100644
index 0000000..4077fce
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigProperty.java
@@ -0,0 +1,80 @@
+/*
+ * 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.integration.cdi2;
+
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to enable injection current a configured property or define the returned data for
+ * a configuration template method. Hereby this annotation can be used in multiple ways and combined
+ * with other annotations such as {@link ConfigDefault}, {@link WithConfigOperator}, {@link WithPropertyConverter}.
+ *
+ * Below the most simple variant current a configured class is given:
+ * {@code
+ * pubic class ConfiguredItem{
+ *
+ *   @ConfiguredProperty
+ *   private String aValue;
+ * }
+ * When this class is configured, e.g. by passing it to {@link org.apache.tamaya.Configuration#configure(Object)},
+ * the following is happening:
+ * <ul>
+ *     <li>The current valid Configuration is evaluated by calling {@code Configuration cfg = ConfigurationProvider.getConfiguration();}</li>
+ *     <li>The current possible property keys are evaluated by calling {@code cfg.get("aValue");}</li>
+ *     <li>if not successful, and a @ConfigDefault annotation is present, the default value is used.
+ *     <li>If no value could be evaluated a ({@link org.apache.tamaya.ConfigException} is thrown.</li>
+ *     <li>On success, since no type conversion is involved, the value is injected.</li>
+ * </ul>
+ *
+ * In the next example we explicitly define the property keys:
+ * {@code
+ * @ConfigDefaultSections("section1")
+ * pubic class ConfiguredItem{
+ *
+ *   @ConfiguredProperty({"b", "[a.b.deprecated.keys]", "a"})
+ *   @ConfigDefault("myDefaultValue")
+ *   private String aValue;
+ * }
+ *
+ * Within this example we evaluate multiple possible keys (section1.b, a.b.deprecated.keys, section1.a). Evaluation is
+ * aborted if a key could be successfully resolved. Hereby the ordering current the annotations define the ordering
+ * current resolution, so in the example above
+ * resolution equals to {@code "section1.b", "a.b.deprecated.keys", "section1.a"}. If no value has bee found,
+ * the configured default {@code myDefaultValue} is returned.
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
+public @interface ConfigProperty {
+
+    /**
+     * Get the property names to be used. Hereby the first non null keys evaluated is injected as property keys.
+     *
+     * @return the property names, not null. If missing the field or method name being injected is used by default.
+     */
+    @Nonbinding
+    String[] value() default {};
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
new file mode 100644
index 0000000..ffec5d1
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationExtension.java
@@ -0,0 +1,257 @@
+/*
+ * 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.integration.cdi2;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.ConfigOperator;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.enterprise.inject.spi.ProcessProducerMethod;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * CDI Extension module that adds injection mechanism for configuration.
+ *
+ * @see ConfigProperty
+ * @see ConfigDefault
+ * @see org.apache.tamaya.integration.cdi2.ConfigDefaultSections
+ * @see ConfigException
+ */
+public class ConfigurationExtension implements Extension {
+
+    static final Map<Class, ConfigOperator> CUSTOM_OPERATORS = new ConcurrentHashMap<>();
+    static final Map<Class, PropertyConverter> CUSTOM_CONVERTERS = new ConcurrentHashMap<>();
+
+    private static class ConverterBean implements Bean<Object> {
+
+        private final Bean<Object> delegate;
+        private final Set<Type> types;
+
+        public ConverterBean(final Bean convBean, final Set<Type> types) {
+            this.types = types;
+            this.delegate = convBean;
+        }
+
+        @Override
+        public Set<Type> getTypes() {
+            return types;
+        }
+
+        @Override
+        public Class<?> getBeanClass() {
+            return delegate.getBeanClass();
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+            return delegate.getInjectionPoints();
+        }
+
+        @Override
+        public String getName() {
+            return delegate.getName();
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            return delegate.getQualifiers();
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return delegate.getScope();
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return delegate.getStereotypes();
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return delegate.isAlternative();
+        }
+
+        @Override
+        public boolean isNullable() {
+            return delegate.isNullable();
+        }
+
+        @Override
+        public Object create(CreationalContext<Object> creationalContext) {
+            return delegate.create(creationalContext);
+        }
+
+        @Override
+        public void destroy(Object instance, CreationalContext<Object> creationalContext) {
+            delegate.destroy(instance, creationalContext);
+        }
+    }
+
+    private Set<Type> types = new HashSet<>();
+    private Bean<?> convBean;
+
+    /**
+     * Method that checks the configuration injection points during deployment for available configuration.
+     * @param pb the bean to process.
+     */
+    public void retrieveTypes(@Observes final ProcessBean<?> pb) {
+
+        final Set<InjectionPoint> ips = pb.getBean().getInjectionPoints();
+
+        for (InjectionPoint injectionPoint : ips) {
+            if (injectionPoint.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
+                final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
+                final ConfigDefault defaultAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefault.class);
+                final ConfigDefaultSections typeAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefaultSections.class);
+                final List<String> keys = evaluateKeys(injectionPoint.getMember().getName(), annotation.value(), typeAnnot.value());
+
+                final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
+                if(withOperatorAnnot!=null){
+                    tryLoadOpererator(withOperatorAnnot.value());
+                }
+                final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
+                if(withConverterAnnot!=null){
+                    tryLoadConverter(withConverterAnnot.value());
+                }
+
+                // We don't want to wait until the injection really fails at runtime.
+                // If there is a non resolvable configuration, we want to know at startup.
+                Configuration config = ConfigurationProvider.getConfiguration();
+                String keyFound = null;
+                String value = null;
+                for(String key:keys) {
+                    value = config.get(key);
+                    if(value!=null){
+                        keyFound = key;
+                        break;
+                    }
+                }
+                if(value==null && defaultAnnot!=null){
+                    value = defaultAnnot.value();
+                }
+                if(value==null){
+                    throw new ConfigException(String.format(
+                            "Can't resolve any of the possible config keys: %s. Please provide one of the given keys" +
+                                    "with a value in your configuration sources.",
+                            keys.toString()));
+                }
+                types.add(injectionPoint.getType());
+            }
+        }
+    }
+
+    private void tryLoadOpererator(Class<? extends ConfigOperator> operatorClass) {
+        Objects.requireNonNull(operatorClass);
+        if(ConfigOperator.class == operatorClass){
+            return;
+        }
+        try{
+            if(!CUSTOM_OPERATORS.containsKey(operatorClass)) {
+                CUSTOM_OPERATORS.put(operatorClass, operatorClass.newInstance());
+            }
+        }
+        catch(Exception e){
+            throw new ConfigException("Custom ConfigOperator could not be loaded: " + operatorClass.getName(), e);
+        }
+    }
+
+    private void tryLoadConverter(Class<? extends PropertyConverter> converterClass) {
+        Objects.requireNonNull(converterClass);
+        if(PropertyConverter.class == converterClass){
+            return;
+        }
+        try{
+            if(!CUSTOM_CONVERTERS.containsKey(converterClass)) {
+                CUSTOM_CONVERTERS.put(converterClass, converterClass.newInstance());
+            }
+        }
+        catch(Exception e){
+            throw new ConfigException("Custom PropertyConverter could not be loaded: " + converterClass.getName(), e);
+        }
+    }
+
+    /**
+     * Evaluates the effective keys to be used. if no {@code keys} are defined, {@code memberName} is used.
+     * The effective keys are then combined with the sections given (if any) and only, if the given keys are not
+     * absolute keys (surrounded by brackets).
+     * @param memberName the default member name, not null.
+     * @param keys the keys, may be empty, but not null.
+     * @param sections the default sections, may be empty. May also be null.
+     * @return the list of keys to be finally used for configuration resolution in order of
+     * precedence. The first keys in the list that could be successfully resolved define the final
+     * configuration value.
+     */
+    public static List<String> evaluateKeys(String memberName, String[] keys, String[] sections) {
+        List<String> effKeys = new ArrayList<>(Arrays.asList(keys));
+        if (effKeys.isEmpty()) {
+            effKeys.add(memberName);
+        }
+        ListIterator<String> iterator = effKeys.listIterator();
+        while (iterator.hasNext()) {
+            String next = iterator.next();
+            if (next.startsWith("[") && next.endsWith("]")) {
+                // absolute key, strip away brackets, take key as is
+                iterator.set(next.substring(1, next.length() - 1));
+            } else {
+                if (sections != null && sections.length>0) {
+                    // Remove original entry, since it will be replaced with prefixed entries
+                    iterator.remove();
+                    // Add prefixed entries, including absolute (root) entry for "" area keys.
+                    for (String area : sections) {
+                        iterator.add(area.isEmpty() ? next : area + '.' + next);
+                    }
+                }
+            }
+        }
+        return effKeys;
+    }
+
+
+    public void captureConvertBean(@Observes final ProcessProducerMethod<?, ?> ppm) {
+        if (ppm.getAnnotated().isAnnotationPresent(ConfigProperty.class)) {
+            convBean = ppm.getBean();
+        }
+
+    }
+
+    public void addConverter(@Observes final AfterBeanDiscovery abd, final BeanManager bm) {
+        abd.addBean(new ConverterBean(convBean, types));
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
new file mode 100644
index 0000000..8b4ae9f
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/ConfigurationProducer.java
@@ -0,0 +1,115 @@
+/*
+ * 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.integration.cdi2;
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.ConfigOperator;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@ApplicationScoped
+public class ConfigurationProducer {
+
+    private static final Logger LOGGER = Logger.getLogger(ConfigurationProducer.class.getName());
+
+    @Produces
+    @ConfigProperty
+    public Object resolveAndConvert(final InjectionPoint injectionPoint) {
+
+        final ConfigProperty annotation = injectionPoint.getAnnotated().getAnnotation(ConfigProperty.class);
+        final ConfigDefault defaultAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefault.class);
+        final ConfigDefaultSections typeAnnot = injectionPoint.getAnnotated().getAnnotation(ConfigDefaultSections.class);
+        final List<String> keys = ConfigurationExtension.evaluateKeys(injectionPoint.getMember().getName(), annotation.value(), typeAnnot.value());
+
+        final WithConfigOperator withOperatorAnnot = injectionPoint.getAnnotated().getAnnotation(WithConfigOperator.class);
+        ConfigOperator operator = null;
+        if(withOperatorAnnot!=null){
+            operator = ConfigurationExtension.CUSTOM_OPERATORS.get(withOperatorAnnot.value());
+        }
+        PropertyConverter customCnverter = null;
+        final WithPropertyConverter withConverterAnnot = injectionPoint.getAnnotated().getAnnotation(WithPropertyConverter.class);
+        if(withConverterAnnot!=null){
+            customCnverter = ConfigurationExtension.CUSTOM_CONVERTERS.get(withConverterAnnot.value());
+        }
+
+        // unless the extension is not installed, this should never happen because the extension
+        // enforces the resolvability of the config
+        Configuration config = ConfigurationProvider.getConfiguration();
+        if(operator!=null){
+            config = operator.operate(config);
+        }
+        final Class<?> toType = (Class<?>) injectionPoint.getAnnotated().getBaseType();
+        String textValue = null;
+        String defaultTextValue = defaultAnnot!=null?defaultAnnot.value():null;
+        String keyFound = null;
+        for(String key:keys) {
+            textValue = config.get(key);
+            if(textValue!=null){
+                keyFound = key;
+                break;
+            }
+        }
+        Object value = null;
+        if(keyFound!=null){
+            if(customCnverter!=null) {
+                value = customCnverter.convert(textValue);
+            }
+            if(value==null){
+                value = config.get(keyFound, toType);
+            }
+        }
+        else if(defaultTextValue!=null){
+            if(customCnverter!=null) {
+                value = customCnverter.convert(defaultTextValue);
+            }
+            if(value==null) {
+                List<PropertyConverter<Object>> converters = ConfigurationProvider.getConfigurationContext()
+                        .getPropertyConverters(TypeLiteral.of(toType));
+                for (PropertyConverter<Object> converter : converters) {
+                    try {
+                        value = converter.convert(defaultTextValue);
+                        if (value != null) {
+                            LOGGER.log(Level.FINEST, "Parsed default value from '" + defaultTextValue + "' into " +
+                                    injectionPoint);
+                            break;
+                        }
+                    } catch (Exception e) {
+                        LOGGER.log(Level.FINEST, "Failed to convert default value '" + defaultTextValue + "' for " +
+                                injectionPoint, e);
+                    }
+                }
+            }
+        }
+        if(value==null){
+            throw new ConfigException(String.format(
+                    "Can't resolve any of the possible config keys: %s to the required target type: %s",
+                    keys.toString(), toType.getName()));
+        }
+        LOGGER.finest(String.format("Injecting %s for key %s in class %s", keyFound, value.toString(), injectionPoint.toString()));
+        return value;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
new file mode 100644
index 0000000..7d6ac66
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithConfigOperator.java
@@ -0,0 +1,45 @@
+/*
+ * 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.integration.cdi2;
+
+import org.apache.tamaya.ConfigOperator;
+import org.apache.tamaya.Configuration;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to define an configuration operator to be used before accessing a configured keys.
+ * This allows filtering current configuration, e.g. for realizing views or ensuring security
+ * constraints.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
+public @interface WithConfigOperator {
+
+    /**
+     * Define a custom adapter that should be used to adapt the configuration entry injected. This overrides any
+     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
+     * registered, it is handled as a deployment error.
+     */
+    Class<? extends ConfigOperator> value();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
new file mode 100644
index 0000000..f50edcb
--- /dev/null
+++ b/integration/cdi2/src/main/java/org/apache/tamaya/integration/cdi2/WithPropertyConverter.java
@@ -0,0 +1,45 @@
+/*
+ * 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.integration.cdi2;
+
+
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to define a type adapter to be used before injecting a configured keys, or for applying changes.
+ * This will override any other adapter for performing the type conversion before
+ * injecting the field keys.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(value = {ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
+public @interface WithPropertyConverter {
+
+    /**
+     * Define a custom adapter or codec that should be used to adapt the configuration entry injected. This overrides any
+     * general org.apache.tamaya.core.internal registered. If no adapter is defined (default) and no corresponding adapter is
+     * registered, it is handled as a deployment error.
+     */
+    Class<? extends PropertyConverter<?>> value();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/resources/META-INF/beans.xml b/integration/cdi2/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..e71e480
--- /dev/null
+++ b/integration/cdi2/src/main/resources/META-INF/beans.xml
@@ -0,0 +1 @@
+<beans></beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..78139d5
--- /dev/null
+++ b/integration/cdi2/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1 @@
+org.tomitribe.sabot.ConfigurationExtension
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties b/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
new file mode 100644
index 0000000..6c8b06c
--- /dev/null
+++ b/integration/cdi2/src/test/resources/META-INF/javaconfiguration.properties
@@ -0,0 +1,14 @@
+remote.wsdl.location = classpath:/service-wsdl.xml
+remote.port=1443
+remote.address=${remote.host}:${remote.port}
+remote.target.url = https://${remote.address}/remote/service/url
+remote.username = joecool
+# ciphered using built in StaticDESPasswordCipher
+remote.password = NjAq6q2agYVnvSMz+eYUZg==
+cipher=org.apache.openejb.cipher.StaticDESPasswordCipher
+
+string.value = hello
+file.value = ./conf
+duration.value = 10 minutes and 57 seconds
+boolean.value = true
+integer.value = 123

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/cfbc38de/integration/pom.xml
----------------------------------------------------------------------
diff --git a/integration/pom.xml b/integration/pom.xml
index 3d50784..dd3dfaa 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -29,10 +29,10 @@ under the License.
 
     <packaging>pom</packaging>
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>tamaya-integrations</artifactId>
+    <artifactId>tamaya-integration-sandbox</artifactId>
 
     <modules>
-        <module>cdi</module>
+        <module>cdi2</module>
         <module>commons</module>
     </modules>
 


[44/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-150 Added UI module and related functionality.

Posted by pl...@apache.org.
TAMAYA-150 Added UI module and related functionality.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/43970087
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/43970087
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/43970087

Branch: refs/heads/master
Commit: 43970087b8c554bcbea28c44daf2420bc49861e5
Parents: 543eedb
Author: anatole <an...@apache.org>
Authored: Tue Apr 19 13:52:49 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:44 2016 +0200

----------------------------------------------------------------------
 pom.xml | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/43970087/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 12a3760..a5831c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,6 @@ under the License.
         <module>metamodels</module>
         <module>jodatime</module>
         <module>sysprops</module>
-        <module>ui</module>
         <module>remote</module>
     </modules>
 


[27/50] [abbrv] incubator-tamaya-sandbox git commit: Moved collections module into active modules folder.

Posted by pl...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
deleted file mode 100644
index b4e4d52..0000000
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
+++ /dev/null
@@ -1,208 +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.collections;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.junit.Test;
-
-import java.util.*;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Basic tests for Tamaya collection support. Relevant configs for this tests:
- * <pre>base.items=1,2,3,4,5,6,7,8,9,0
- * base.map=1::a, 2::b, 3::c, [4:: ]
- * </pre>
- */
-public class CollectionsTypedTests {
-
-    @Test
-    public void testArrayListList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("typed2.arraylist", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-        items = (List<String>) config.get("typed2.arraylist", List.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-    }
-
-    @Test
-    public void testLinkedListList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("typed2.linkedlist", new TypeLiteral<List<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-        items = (List<String>) config.get("typed2.linkedlist", List.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-    }
-
-
-    @Test
-    public void testHashSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("typed2.hashset", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-        items = (Set<String>) config.get("typed2.hashset", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-    }
-
-    @Test
-    public void testTreeSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("typed2.treeset", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-        items = (Set<String>) config.get("typed2.treeset", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-    }
-
-    @Test
-    public void testHashMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("typed2.hashmap", new TypeLiteral<Map<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof HashMap);
-        items = (Map<String,String>) config.get("typed2.hashmap", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof HashMap);
-    }
-
-    @Test
-    public void testTreeMap_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("typed2.treemap", new TypeLiteral<Map<String,String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof TreeMap);
-        items = (Map<String,String>) config.get("typed2.treemap", Map.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof TreeMap);
-    }
-
-    @Test
-    public void testCollection_HashSet(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed2.hashset", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-        items = (Collection<String>) config.get("typed2.hashset", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-    }
-
-    @Test
-    public void testCollection_TreeSet(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed2.treeset", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-        items = (Collection<String>) config.get("typed2.treeset", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-    }
-
-    @Test
-    public void testCollection_ArrayList(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed2.arraylist", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-        items = (Collection<String>) config.get("typed2.arraylist", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-    }
-
-    @Test
-    public void testCollection_LinkedList(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed2.linkedlist", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-        items = (Collection<String>) config.get("typed2.linkedlist", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
deleted file mode 100644
index 1c95261..0000000
--- a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
+++ /dev/null
@@ -1,33 +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.collections;
-
-import org.apache.tamaya.spi.ConversionContext;
-import org.apache.tamaya.spi.PropertyConverter;
-
-/**
- * Example converter that is used for testing the custom parsing functionality. It sorrounds values with () and
- * converts them to uppercase.
- */
-public class MyUpperCaseConverter implements PropertyConverter<String>{
-    @Override
-    public String convert(String value, ConversionContext context) {
-        return "("+value.toUpperCase()+")";
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/c9e965a2/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
deleted file mode 100644
index e9a234c..0000000
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ /dev/null
@@ -1,73 +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.
-#
-# Similar to etcd all keys starting with a _ are hidden by default (only directly accessible).
-
-# Config for base tests (no combination policy)
-base.items=1,2,3,4,5,6,7,8,9,0
-base.map=1::a, 2::b, 3::c, [4:: ]
-
-# Config for tests with explcit implementation types
-typed2.arraylist=1,2,3,4,5,6,7,8,9,0
-_typed2.arraylist.collection-type=ArrayList
-_typed2.arraylist.read-only=false
-typed2.linkedlist=1,2,3,4,5,6,7,8,9,0
-_typed2.linkedlist.collection-type=java.util.LinkedList
-_typed2.linkedlist.read-only=false
-typed2.hashset=1,2,3,4,5,6,7,8,9,0
-_typed2.hashset.collection-type=HashSet
-_typed2.hashset.read-only=false
-typed2.treeset=1,2,3,4,5,6,7,8,9,0
-_typed2.treeset.collection-type=TreeSet
-_typed2.treeset.read-only=false
-typed2.hashmap=1::a, 2::b, 3::c, [4:: ]
-_typed2.hashmap.collection-type=java.util.HashMap
-_typed2.hashmap.read-only=false
-typed2.treemap=1::a, 2::b, 3::c, [4:: ]
-_typed2.treemap.collection-type=TreeMap
-_typed2.treemap.read-only=false
-
-# Config for tests with combination policy, writable
-typed.arraylist=1,2,3,4,5,6,7,8,9,0
-_typed.arraylist.collection-type=ArrayList
-typed.linkedlist=1,2,3,4,5,6,7,8,9,0
-_typed.linkedlist.collection-type=java.util.LinkedList
-typed.hashset=1,2,3,4,5,6,7,8,9,0
-_typed.hashset.collection-type=HashSet
-typed.treeset=1,2,3,4,5,6,7,8,9,0
-_typed.treeset.collection-type=TreeSet
-typed.hashmap=1::a, 2::b, 3::c, [4:: ]
-_typed.hashmap.collection-type=java.util.HashMap
-typed.treemap=1::a, 2::b, 3::c, [4:: ]
-_typed.treemap.collection-type=TreeMap
-
-# Config for advanced tests
-sep-list=a,b,c|d,e,f|g,h,i
-_sep-list.collection-type=List
-_sep-list.item-separator=|
-currency-list=CHF,USD,USS
-_currency-list.collection-type=List
-
-parser-list=a,b,c
-_parser-list.collection-type=List
-_parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
-
-redefined-map=0==none | 1==single | 2==any
-_redefined-map.map-entry-separator===
-_redefined-map.item-separator=|
-


[07/50] [abbrv] incubator-tamaya-sandbox git commit: Implemented multi classpath environment PropertySourceProvider, with relocation capability.

Posted by pl...@apache.org.
Implemented multi classpath environment PropertySourceProvider, with relocation capability.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/5f2b6e3e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/5f2b6e3e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/5f2b6e3e

Branch: refs/heads/master
Commit: 5f2b6e3e065f30e1becdaedd03b9669e70ef50e1
Parents: 47eb7a5
Author: anatole <an...@apache.org>
Authored: Tue Oct 6 09:51:36 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Oct 6 09:56:11 2015 +0200

----------------------------------------------------------------------
 environment/pom.xml                             |  10 +-
 .../environment/BuildableRuntimeContext.java    | 121 --------------
 .../tamaya/environment/RuntimeContext.java      |  67 --------
 .../environment/RuntimeContextBuilder.java      |  89 ----------
 .../environment/RuntimeContextProvider.java     |  49 ------
 ...ctClassLoaderDependentRuntimeContextSpi.java | 115 -------------
 ...ssLoaderDependentAppEnvironmentProvider.java |  40 -----
 ...ssLoaderDependentEarEnvironmentProvider.java |  40 -----
 .../ClasspathPropertiesEnvironmentProvider.java | 167 +++++++++++++++++++
 .../internal/InitialEnvironmentProviderSpi.java |  74 --------
 .../internal/SingleEnvironmentManager.java      |  61 -------
 ...SystemClassLoaderEnvironmentProviderSpi.java |  88 ----------
 .../environment/internal/package-info.java      |   2 +-
 .../BaseEnvironmentPropertySourceProvider.java  | 119 +++++++++++++
 .../environment/spi/ContextProviderSpi.java     |  45 -----
 .../tamaya/environment/spi/package-info.java    |   5 +-
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 +++
 .../RuntimeContextProviderSpiTest.java          |  57 -------
 .../TestEnvironmentManagerSingleton.java        |  37 ----
 .../environment/TestEnvironmentProvider.java    |  47 ------
 .../src/test/resources/GLOBAL.properties        |  19 +++
 ...he.tamaya.environment.spi.ContextProviderSpi |  23 ---
 22 files changed, 336 insertions(+), 958 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/pom.xml
----------------------------------------------------------------------
diff --git a/environment/pom.xml b/environment/pom.xml
index bd5ab5c..c2e1745 100644
--- a/environment/pom.xml
+++ b/environment/pom.xml
@@ -42,15 +42,21 @@ under the License.
             <groupId>org.apache.tamaya</groupId>
             <artifactId>tamaya-api</artifactId>
             <version>${project.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-formats</artifactId>
+            <artifactId>tamaya-functions</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-resource</artifactId>
+            <artifactId>tamaya-spisupport</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tamaya.ext</groupId>
+            <artifactId>tamaya-resources</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java b/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
deleted file mode 100644
index f7675bb..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/BuildableRuntimeContext.java
+++ /dev/null
@@ -1,121 +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.environment;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.TreeMap;
-
-/**
- * Environment class that is used by the {@link org.apache.tamaya.environment.RuntimeContextBuilder}.
- */
-class BuildableRuntimeContext implements RuntimeContext {
-    /** The context id, never null or empty. */
-    private String contextId;
-
-    /**
-     * The environment data.
-     */
-    private Map<String, String> context = new TreeMap<>();
-
-    /**
-     * Constructor.
-     *
-     * @param builder the builder, not null.
-     */
-    BuildableRuntimeContext(RuntimeContextBuilder builder) {
-        Objects.requireNonNull(builder);
-        this.contextId = builder.contextId;
-        context.putAll(builder.contextData);
-    }
-
-    @Override
-    public Map<String, String> toMap() {
-        return context;
-    }
-
-    @Override
-    public String getContextId() {
-        return contextId;
-    }
-
-    @Override
-    public String get(String key) {
-        return context.get(key);
-    }
-
-    @Override
-    public String get(String key, String defaultValue) {
-        return context.getOrDefault(key, defaultValue);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        BuildableRuntimeContext that = (BuildableRuntimeContext) o;
-        return context.equals(that.context);
-    }
-
-    @Override
-    public int hashCode() {
-        return context.hashCode();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString() {
-        return "RuntimeContext: " + getContextId();
-    }
-
-    /**
-     * Get the delta.
-     *
-     * @return
-     */
-    private String getData() {
-        StringBuilder b = new StringBuilder();
-        for (Map.Entry<String, String> en : this.context.entrySet()) {
-            b.append("    ").append(en.getKey()).append('=').append(escape(en.getValue())).append('\n');
-        }
-        if (b.length() > 0) {
-            b.setLength(b.length() - 1);
-        }
-        return b.toString();
-    }
-
-    /**
-     * Escapes several characters.
-     *
-     * @param value
-     * @return
-     */
-    private String escape(String value) {
-        if (value == null) {
-            return null;
-        }
-        return value.replaceAll("\n", "\\\\n").replaceAll("\r", "\\\\r").replaceAll("\t", "\\\\t")
-                .replaceAll("=", "\\\\=");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java b/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
deleted file mode 100644
index ca98432..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContext.java
+++ /dev/null
@@ -1,67 +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.environment;
-
-import java.util.Map;
-
-/**
- * Models a runtime context. Instances current this class are used to
- * evaluate the correct configuration artifacts or other
- * context dependent functionality.<br/>
- * <h3>Implementation Requirements</h3>
- * <p>
- * Implementations current this interface must be
- * <ul>
- * <li>Thread safe,
- * <li>Immutable,
- * <li>Serializable.
- * </ul>
- */
-public interface RuntimeContext {
-
-    /**
-     * Returns an id that identifies the current context. Depending on the environment isolation this
-     * can be always the same key (e.g. in a SE use case) or a varying key depending on the current classloader
-     * visible (OSGI, EE environment).
-     * @return the context id, never null.
-     */
-    String getContextId();
-
-    /**
-     * Access a runtime context variable.
-     * @param key the key
-     * @return the corresponding value.
-     */
-    String get(String key);
-
-    /**
-     * Access a runtime context variable.
-     * @param key the key
-     * @param defaultValue the default value, returned if no value is present.
-     * @return the corresponding value, or the defaultValue (including null).
-     */
-    String get(String key, String defaultValue);
-
-    /**
-     * Access the context as Map.
-     * @return the Map instance containing the context properties, never null.
-     */
-    Map<String,String> toMap();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java b/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
deleted file mode 100644
index 4fb3f02..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextBuilder.java
+++ /dev/null
@@ -1,89 +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.environment;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
-* Builder to create new {@link RuntimeContext instances.}
-*/
-public final class RuntimeContextBuilder {
-
-    /** The context id, never null or empty. */
-    String contextId;
-
-    /** THe environment data. */
-    Map<String,String> contextData = new HashMap<>();
-
-    /**
-     * Constructor.
-     */
-    private RuntimeContextBuilder(String contextId) {
-        this.contextId = Objects.requireNonNull(contextId);
-    }
-
-    /**
-     * Creates a new buildr instance.
-     * @return the new builder instance.
-     */
-    public static RuntimeContextBuilder of(String contextId) {
-        return new RuntimeContextBuilder(contextId);
-    }
-
-    /**
-     * Sets the environment contextId.
-     * @param contextId the contextId, not null.
-     * @return the builder for chaining
-     */
-    public RuntimeContextBuilder setContextId(String contextId){
-        this.contextId = Objects.requireNonNull(contextId);
-        return this;
-    }
-
-    /**
-     * Sets a new environment property.
-     * @param key the key, not null.
-     * @param value the keys, not null.
-     * @return the builder for chaining
-     */
-    public RuntimeContextBuilder set(String key, String value){
-        this.contextData.put(key, value);
-        return this;
-    }
-
-    /**
-     * Sets new environment properties.
-     * @param values the key/values, not null.
-     * @return the builder for chaining
-     */
-    public RuntimeContextBuilder setAll(Map<String,String> values){
-        this.contextData.putAll(values);
-        return this;
-    }
-
-    /**
-     * Builds a new Environment.
-     * @return a new Environment, never null.
-     */
-    public RuntimeContext build() {
-        return new BuildableRuntimeContext(this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java b/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.java
deleted file mode 100644
index 565b255..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/RuntimeContextProvider.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.environment;
-
-import org.apache.tamaya.environment.spi.ContextSpi;
-import org.apache.tamaya.spi.ServiceContext;
-
-/**
- * Singleton accessor to the current {@link org.apache.tamaya.environment.RuntimeContext}.
- */
-public final class RuntimeContextProvider {
-
-    private static final ContextSpi contextSpi = loadSpi();
-
-    private static ContextSpi loadSpi(){
-        return ServiceContext.getInstance().getService(ContextSpi.class).get();
-    }
-
-    /**
-     * Singleton constructor.
-     */
-    private RuntimeContextProvider(){}
-
-    /**
-     * Get the current {@link org.apache.tamaya.environment.RuntimeContextProvider}. The environment is used to determine the current runtime state, which
-     * is important for returning the correct configuration.
-     * @return the current Environment, never null.
-     */
-    public static RuntimeContext current(){
-        return contextSpi.getCurrentContext();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java b/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
deleted file mode 100644
index de92e78..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/AbstractClassLoaderDependentRuntimeContextSpi.java
+++ /dev/null
@@ -1,115 +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.environment.internal;
-
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-import org.apache.tamaya.environment.spi.ContextProviderSpi;
-import org.apache.tamaya.format.ConfigurationFormat;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.resource.ConfigResources;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Application environment provider that is dependent on the current context classloader and tries to
- * evaluate {@code META-INF/env/application.properties, META-INF/env/application.xml and META-INF/env/application.ini}.
- * Only if a property named {@code org.apache.tamaya.env.applicationId} is found, it will
- * be used as the {@code environmentId} and a corresponding {@link org.apache.tamaya.environment.RuntimeContext} instance
- * is created and attached.
- */
-public abstract class AbstractClassLoaderDependentRuntimeContextSpi implements ContextProviderSpi {
-
-    private static final Logger LOG = Logger.getLogger(AbstractClassLoaderDependentRuntimeContextSpi.class.getName());
-
-    private String contextId;
-    private Map<ClassLoader, Map<String, String>> contexts = new ConcurrentHashMap<>();
-    private Map<ClassLoader, Boolean> contextsAvailable = new ConcurrentHashMap<>();
-
-    protected AbstractClassLoaderDependentRuntimeContextSpi(String contextId) {
-        this.contextId = Objects.requireNonNull(contextId);
-    }
-
-    private boolean isActive() {
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        if (cl == null) {
-            return false;
-        }
-        Boolean available = this.contextsAvailable.get(cl);
-        if (available != null) {
-            return available;
-        }
-        return true;
-    }
-
-    protected Collection<URL> getConfigLocations() {
-        return ConfigResources.getResourceResolver().getResources(Thread.currentThread().getContextClassLoader(),
-                "classpath:META-INF/context/" + contextId + ".properties", "classpath:META-INF/context/\"+contextId+\".xml", "classpath:META-INF/context/\"+contextId+\".ini");
-    }
-
-    protected List<ConfigurationFormat> getConfigFormats(URL url) {
-        return ConfigurationFormats.getFormats(url);
-    }
-
-    @Override
-    public void setupContext(RuntimeContextBuilder contextBuilder) {
-        if (isActive()) {
-            ClassLoader cl = Thread.currentThread().getContextClassLoader();
-            if (cl == null) {
-                return;
-            }
-            Map<String, String> data = this.contexts.get(cl);
-            if (data == null) {
-                Collection<URL> propertyUris = getConfigLocations();
-                data = new HashMap<>();
-                for (URL resource : propertyUris) {
-                    for (ConfigurationFormat format : getConfigFormats(resource)) {
-                        try (InputStream is = resource.openStream()) {
-                            data.putAll(format.readConfiguration(resource.toExternalForm(), is).getDefaultSection());
-                        } catch (Exception e) {
-                            LOG.log(Level.SEVERE, e, () -> "Error reading application context data fromMap " + resource);
-                        }
-                    }
-                }
-                data.put("classloader.type", cl.getClass().getName());
-                data.put("classloader.info", cl.toString());
-                Set<URL> uris = new HashSet<>();
-                uris.addAll(propertyUris);
-                data.put("context.sources", uris.toString());
-                data = Collections.unmodifiableMap(data);
-                contextBuilder.setContextId(contextId);
-                this.contexts.put(cl, data);
-            }
-            contextBuilder.setAll(data);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java b/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
deleted file mode 100644
index 7268f5e..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentAppEnvironmentProvider.java
+++ /dev/null
@@ -1,40 +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.environment.internal;
-
-
-import javax.annotation.Priority;
-
-/**
- * This class implements a {@link org.apache.tamaya.environment.RuntimeContextProvider} that tries
- * to read configuration for an ear deployment located under {@code META-INF/env/ear.properties,
- * META-INF/env/ear.xml or META-INF/env/ear.ini}. The environment id hereby is defined by a
- * configuration entry named {@code org.apache.tamaya.core.env.earId}.
- *
- * Only if such a configuration with such an {@code earId} is found an {@link org.apache.tamaya.environment.RuntimeContext}
- * is created and attached to the corresponding ear classloader.
- */
-@Priority(3000)
-public class ClassLoaderDependentAppEnvironmentProvider extends AbstractClassLoaderDependentRuntimeContextSpi{
-
-    public ClassLoaderDependentAppEnvironmentProvider(){
-        super("app");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java b/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
deleted file mode 100644
index 688fc8c..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/ClassLoaderDependentEarEnvironmentProvider.java
+++ /dev/null
@@ -1,40 +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.environment.internal;
-
-
-import javax.annotation.Priority;
-
-/**
- * This class implements a {@link org.apache.tamaya.environment.RuntimeContextProvider} that tries
- * to read configuration for an ear deployment located under {@code META-INF/env/ear.properties,
- * META-INF/env/ear.xml or META-INF/env/ear.ini}. The environment id hereby is defined by a
- * configuration entry named {@code org.apache.tamaya.core.env.earId}.
- *
- * Only if such a configuration with such an {@code earId} is found an {@link org.apache.tamaya.environment.RuntimeContext}
- * is created and attached to the corresponding ear classloader.
- */
-@Priority(2000)
-public class ClassLoaderDependentEarEnvironmentProvider extends AbstractClassLoaderDependentRuntimeContextSpi{
-
-    public ClassLoaderDependentEarEnvironmentProvider(){
-        super("ear");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java b/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
new file mode 100644
index 0000000..d9767e5
--- /dev/null
+++ b/environment/src/main/java/org/apache/tamaya/environment/internal/ClasspathPropertiesEnvironmentProvider.java
@@ -0,0 +1,167 @@
+/*
+ * 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.environment.internal;
+
+
+import org.apache.tamaya.environment.spi.BaseEnvironmentPropertySourceProvider;
+import org.apache.tamaya.spisupport.SimplePropertiesPropertySource;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spisupport.BasePropertySource;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+/**
+ * Configuration provider that resolves to a location in the classpath.
+ * Hereby the following system properties can be set to configure the provider
+ * (all entries are optional):
+ * <pre>
+ *     env.STAGE   :   ordered list of configs to be loaded, e.g. GLOBAL,TEST,DEV
+ *     env.ROOT    :   root context of the environment, by default ENV
+ * </pre>
+ * Adding {@code System.getenv()} as stage maps the current environment properties using
+ * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
+ */
+public class ClasspathPropertiesEnvironmentProvider extends BaseEnvironmentPropertySourceProvider {
+
+    private static final String STAGE_PROP = "env.STAGE";
+
+    private static final String ROOT_PROP = "env.ROOT";
+
+    private static final Logger LOGGER = Logger.getLogger(ClasspathPropertiesEnvironmentProvider.class.getName());
+
+    private String rootLocation;
+
+    private static final String DEFAULT_ENV = "System.getenv()";
+
+
+    public ClasspathPropertiesEnvironmentProvider(){
+        super(evaluateRoot(), evaluateStages());
+    }
+
+    private static String evaluateRoot() {
+        String value = System.getProperty(ROOT_PROP);
+        if(value==null) {
+            value = System.getenv(ROOT_PROP);
+        }
+        if(value==null){
+            value = "ENV";
+        }
+        return value;
+    }
+
+    private static String[] evaluateStages() {
+        String value = System.getProperty(STAGE_PROP);
+        if(value==null) {
+            value = System.getenv(STAGE_PROP);
+        }
+        if(value==null){
+            value = "System.getenv(),GLOBAL,DEVELOPMENT";
+        }
+        return value.split(",");
+    }
+
+    @Override
+    protected Collection<PropertySource> loadEnvProperties(
+            String environmentRootContext, String contextId, int priority) {
+        List<PropertySource> result = new ArrayList<>();
+        if (DEFAULT_ENV.equals(contextId)){
+            result.add(new EnvPropertiesPropertySource(environmentRootContext, priority));
+        }
+        else{
+            loadProperties(environmentRootContext, contextId, priority, result);
+        }
+        return result;
+    }
+
+    private void loadProperties(String environmentRootContext, String contextId, int priority, List<PropertySource> result) {
+        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
+        if(cpExp.startsWith("/")){
+            cpExp = cpExp.substring(1);
+        }
+        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
+            result.add(new SimplePropertiesPropertySource(environmentRootContext, url, priority));
+        }
+    }
+
+    /**
+     * Get the basic resource path used for lookup of properties files.
+     * @return the basic resource path, never null.
+     */
+    protected String getBaseResourcePath() {
+        return "";
+    }
+
+    private static final class EnvPropertiesPropertySource extends BasePropertySource{
+
+        private final int priority;
+
+        private Map<String, String> envProps = new HashMap<>();
+
+        public EnvPropertiesPropertySource(int priority) {
+            this(null, priority);
+        }
+
+        public EnvPropertiesPropertySource(String environmentRootContext, int priority){
+            this.priority = priority;
+            if(environmentRootContext==null){
+                envProps.putAll(System.getenv());
+            }
+            else{
+                for(Map.Entry<String,String> en: System.getenv().entrySet()){
+                    String prefix = environmentRootContext;
+                    if(!prefix.endsWith(".")){
+                        prefix += ".";
+                    }
+                    envProps.put(prefix+en.getKey(), en.getValue());
+                }
+            }
+            this.envProps = Collections.unmodifiableMap(envProps);
+        }
+
+        @Override
+        public String getName() {
+            return "System.getenv()";
+       }
+
+        @Override
+        public Map<String, String> getProperties() {
+            return this.envProps;
+        }
+
+        @Override
+        public int getOrdinal(){
+            return priority;
+        }
+
+        @Override
+        public String toString() {
+            return "EnvPropertiesPropertySource{" +
+                    "priority=" + priority +
+                    '}';
+        }
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java b/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java
deleted file mode 100644
index c1b1001..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/InitialEnvironmentProviderSpi.java
+++ /dev/null
@@ -1,74 +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.environment.internal;
-
-import java.net.InetAddress;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TimeZone;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.spi.ContextProviderSpi;
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-
-import javax.annotation.Priority;
-
-/**
- * Default {@link org.apache.tamaya.environment.RuntimeContext}.
- */
-@Priority(0)
-public final class InitialEnvironmentProviderSpi implements ContextProviderSpi {
-
-    private static final String STAGE_PROP = "env.STAGE";
-    private Map<String,String> contextData = new HashMap<>();
-
-	public InitialEnvironmentProviderSpi() {
-        try {
-            contextData.put("host", InetAddress.getLocalHost().toString());
-        } catch (Exception e) {
-            Logger.getLogger(getClass().getName()).log(Level.WARNING, e, () -> "Failed to evaluate hostname.");
-        }
-        contextData.put("timezone", TimeZone.getDefault().getID());
-        contextData.put("locale", Locale.getDefault().toString());
-        // Copy all env properties....
-        for (Entry<String, String> en : System.getenv().entrySet()) {
-            contextData.put(en.getKey(), en.getValue());
-        }
-        String value = System.getProperty(STAGE_PROP);
-        if(value==null) {
-            value = System.getenv(STAGE_PROP);
-        }
-        if(value==null){
-            value = "DEVELOPMENT";
-        }
-        contextData.put(STAGE_PROP, value);
-        contextData = Collections.unmodifiableMap(contextData);
-	}
-
-    @Override
-    public void setupContext(RuntimeContextBuilder contextBuilder) {
-        contextBuilder.setAll(contextData);
-        contextBuilder.setContextId("root");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java b/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
deleted file mode 100644
index d81b8bb..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/SingleEnvironmentManager.java
+++ /dev/null
@@ -1,61 +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.environment.internal;
-
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-import org.apache.tamaya.environment.spi.ContextProviderSpi;
-import org.apache.tamaya.spi.ServiceContext;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Service for accessing {@link org.apache.tamaya.environment.RuntimeContext}. Environments are used to
- * access/determine configurations.<br/>
- * <h3>Implementation PropertyMapSpec</h3> This class is
- * <ul>
- * <li>thread safe,
- * <li>and behaves contextual.
- * </ul>
- */
-public class SingleEnvironmentManager implements org.apache.tamaya.environment.spi.ContextSpi {
-
-    private final List<ContextProviderSpi> environmentProviders = loadEnvironmentProviders();
-
-    private List<ContextProviderSpi> loadEnvironmentProviders() {
-        List<ContextProviderSpi> providerList = new ArrayList<>();
-        for (ContextProviderSpi prov : ServiceContext.getInstance().getServices(ContextProviderSpi.class)) {
-            providerList.add(prov);
-        }
-        return providerList;
-    }
-
-    @Override
-    public RuntimeContext getCurrentContext() {
-        RuntimeContextBuilder builder = RuntimeContextBuilder.of("unknown");
-        for (ContextProviderSpi prov : environmentProviders) {
-            prov.setupContext(builder);
-        }
-        return builder.build();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java b/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java
deleted file mode 100644
index 7eb9cd1..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/SystemClassLoaderEnvironmentProviderSpi.java
+++ /dev/null
@@ -1,88 +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.environment.internal;
-
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-import org.apache.tamaya.environment.spi.ContextProviderSpi;
-import org.apache.tamaya.format.ConfigurationFormat;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.resource.ConfigResources;
-
-import javax.annotation.Priority;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * System environment provider (loaded only once using the system class loader) that loads additional environment properties fromMap the classpath evaluating
- * {@code META-INF/env/system.properties, META-INF/env/system.xml and META-INF/env/system.ini}.
- */
-@Priority(1000)
-public class SystemClassLoaderEnvironmentProviderSpi implements ContextProviderSpi {
-
-    private static final Logger LOG = Logger.getLogger(SystemClassLoaderEnvironmentProviderSpi.class.getName());
-
-
-    private Map<String,String> data = new HashMap<>();
-
-    public SystemClassLoaderEnvironmentProviderSpi(){
-        if (data == null) {
-            Collection<URL> propertyUris = getConfigLocations();
-            data = new HashMap<>();
-            for (URL resource : propertyUris) {
-                for (ConfigurationFormat format : getConfigFormats(resource)) {
-                    try (InputStream is = resource.openStream()) {
-                        data.putAll(format.readConfiguration(resource.toExternalForm(), is).getDefaultSection());
-                    } catch (Exception e) {
-                        LOG.log(Level.SEVERE, e, () -> "Error reading application context data from " + resource);
-                    }
-                }
-            }
-            data.put("classloader.type", ClassLoader.getSystemClassLoader().getClass().getName());
-            data.put("classloader.info", "System-Classloader");
-            Set<URL> uris = new HashSet<>();
-            uris.addAll(propertyUris);
-            data.put("context.sources", uris.toString());
-            data = Collections.unmodifiableMap(data);
-            this.data = Collections.unmodifiableMap(data);
-        }
-    }
-
-    protected List<ConfigurationFormat> getConfigFormats(URL url) {
-        return ConfigurationFormats.getFormats(url);
-    }
-
-    protected Collection<URL> getConfigLocations() {
-        return ConfigResources.getResourceResolver().getResources(ClassLoader.getSystemClassLoader(),
-                "classpath:META-INF/context/system.properties", "classpath:META-INF/context/system.xml",
-                "classpath:META-INF/context/system.ini");
-    }
-
-
-    @Override
-    public void setupContext(RuntimeContextBuilder contextBuilder) {
-        if (!data.isEmpty()) {
-            contextBuilder.setAll(data).build();
-            contextBuilder.setContextId("system");
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java b/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
index 3d5075e..3f5b53f 100644
--- a/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
+++ b/environment/src/main/java/org/apache/tamaya/environment/internal/package-info.java
@@ -19,4 +19,4 @@
 /**
  * Contains the provided implementation classes for the environment module.
  */
-package org.apache.tamaya.resource.internal;
\ No newline at end of file
+package org.apache.tamaya.environment.internal;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java b/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
new file mode 100644
index 0000000..5924640
--- /dev/null
+++ b/environment/src/main/java/org/apache/tamaya/environment/spi/BaseEnvironmentPropertySourceProvider.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tamaya.environment.spi;
+
+
+import org.apache.tamaya.ConfigException;
+import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * Implements a base property source that defines a multilayered environment setup.
+ */
+public abstract class BaseEnvironmentPropertySourceProvider implements PropertySourceProvider {
+
+    private static final Logger LOGGER = Logger.getLogger(BaseEnvironmentPropertySourceProvider.class.getName());
+
+    private int basePriority;
+
+    private int priorityIncrease;
+
+    private List<String> environmentIds = new ArrayList<>();
+
+    private String environmentRootContext;
+
+    private List<PropertySource> propertySources = new ArrayList<>();
+
+
+    /**
+     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
+     * @param environmentRootContext the environment target root context, e.g. ENV. or null
+     *                               for not remapping the environment properties.
+     * @param environmentIds the context ids, that build up the environment.
+     */
+    public BaseEnvironmentPropertySourceProvider(String environmentRootContext,
+                                                 String... environmentIds) {
+        this(environmentRootContext, 10,10,environmentIds);
+    }
+        /**
+         * Creates a new Environment provider.
+         * @param environmentRootContext the environment target root context, e.g. ENV. or null
+         *                               for not remapping the environment properties.
+         * @param basePriority the base priority used for the weakest environment properties set.
+         * @param priorityIncrease the value the property source's priority should be increased with each
+         *                         environment context level added.
+         * @param environmentIds the context ids, that build up the environment.
+         */
+    public BaseEnvironmentPropertySourceProvider(String environmentRootContext, int basePriority, int priorityIncrease,
+                                                 String... environmentIds) {
+        this.basePriority = basePriority;
+        this.priorityIncrease = priorityIncrease;
+        if (environmentIds.length == 0) {
+            throw new ConfigException("At least one environment context id must be defined.");
+        }
+        if (environmentRootContext == null) {
+            LOGGER.finest("No environment mapping is applied.");
+        }
+        this.environmentRootContext = environmentRootContext;
+        this.environmentIds.addAll(Arrays.asList(environmentIds));
+        int priority = basePriority;
+        for (String contextId : environmentIds) {
+            propertySources.addAll(loadEnvProperties(environmentRootContext, contextId, priority));
+            priority += priorityIncrease;
+        }
+    }
+
+    /**
+     * Method that loads the environment properties for the given contextId.
+     * @param environmentRootContext the root context, where entries should be mapped to.
+     * @param contextId the contextId.
+     * @param priority  the target priority the created PropertySource should have. This priority is important, since it reflects the
+     *                  environment context overriding rules for the environment part created.
+     * @return the corresponding PrioritySources to be added, never null.
+     */
+    protected abstract Collection<PropertySource> loadEnvProperties(
+            String environmentRootContext, String contextId, int priority);
+
+    /**
+     * Get the environment context ids that define how this environment configuration
+     * is setup, in order of priority increasing.
+     * @return the ordered list of context ids.
+     */
+    public List<String> getEnvironmentIds() {
+        return environmentIds;
+    }
+
+    @Override
+    public String toString() {
+        return "EnvironmentPropertySourceProvider{" +
+                "environmentIds=" + environmentIds +
+                ", environmentRootContext='" + environmentRootContext + '\'' +
+                '}';
+    }
+
+    @Override
+    public Collection<PropertySource> getPropertySources() {
+        return propertySources;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java b/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
deleted file mode 100644
index d0a8b3e..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/ContextProviderSpi.java
+++ /dev/null
@@ -1,45 +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.environment.spi;
-
-
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-
-
-/**
- * SPI component for evaluating the current runtime context. All registered providers hereby are
- * organized by default depending on their (optional) {@code @Priority} annotation's value. (the
- * effective ordering depends on the current {@link org.apache.tamaya.spi.ServiceContext} implementation
- * active).
- */
-public interface ContextProviderSpi {
-
-    public static final String ENVIRONMENT_TYPE = "environment-type";
-
-    /**
-     * If a data providers identifies a new runtime context level, it should build a new
-     * {@link org.apache.tamaya.environment.RuntimeContext} with all the related data to be added to this
-     * context, otherwise it should simply return null.
-     *
-     * @param contextBuilder the current context builder.
-     * @return the new current context for the current runtime state, or null.
-     */
-    void setupContext(RuntimeContextBuilder contextBuilder);
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java b/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
index 23d6b15..9037c2b 100644
--- a/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
+++ b/environment/src/main/java/org/apache/tamaya/environment/spi/package-info.java
@@ -17,6 +17,7 @@
  * under the License.
  */
 /**
- * Defines the SPI of the environment module.
+ * Main API of the environment module, containing the base class for implementing adapted
+ * environment parts in your configuration.
  */
-package org.apache.tamaya.resource.internal;
\ No newline at end of file
+package org.apache.tamaya.environment.spi;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
new file mode 100644
index 0000000..233448a
--- /dev/null
+++ b/environment/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
@@ -0,0 +1,19 @@
+#
+# 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.environment.internal.ClasspathPropertiesEnvironmentProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
----------------------------------------------------------------------
diff --git a/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java b/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
deleted file mode 100644
index 88b1692..0000000
--- a/environment/src/test/java/org/apache/tamaya/metamodel/environment/RuntimeContextProviderSpiTest.java
+++ /dev/null
@@ -1,57 +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.environment;
-
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.RuntimeContextProvider;
-import org.junit.Test;
-
-
-import static org.junit.Assert.*;
-
-/**
- * Tests for basic {@link RuntimeContextProvider} functionality.
- * Created by Anatole on 17.10.2014.
- */
-public class RuntimeContextProviderSpiTest {
-
-    @Test
-    public void testGetEnvironment(){
-        RuntimeContext env = RuntimeContextProvider.current();
-        assertNotNull(env);
-        RuntimeContext env2 = RuntimeContextProvider.current();
-        assertNotNull(env2);
-        assertFalse("Current Environments requested in same context are not the same!", env==env2);
-    }
-
-    @Test
-    public void testRootIsNotCurrentEnvironment(){
-        RuntimeContext env1 = RuntimeContextProvider.current();
-        assertNotNull(env1);
-        RuntimeContext env2 = RuntimeContextProvider.current();
-        assertNotNull(env2);
-        // within this testdata environment these are always the same
-        assertEquals(env1, env2);
-    }
-
-    @Test
-    public void testEnvironmentOverride(){
-        assertEquals(RuntimeContextProvider.current().get("env.STAGE"), "MyStage");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
----------------------------------------------------------------------
diff --git a/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java b/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
deleted file mode 100644
index 393775f..0000000
--- a/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentManagerSingleton.java
+++ /dev/null
@@ -1,37 +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.environment;
-
-import org.apache.tamaya.environment.RuntimeContext;
-import org.apache.tamaya.environment.spi.ContextSpi;
-
-/**
- * Created by Anatole on 12.09.2014.
- */
-public class TestEnvironmentManagerSingleton implements ContextSpi {
-
-    public RuntimeContext getCurrentContext(){
-        return null;
-    }
-
-    public RuntimeContext getRootContext(){
-        return null;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
----------------------------------------------------------------------
diff --git a/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java b/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
deleted file mode 100644
index 11760b9..0000000
--- a/environment/src/test/java/org/apache/tamaya/metamodel/environment/TestEnvironmentProvider.java
+++ /dev/null
@@ -1,47 +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.environment;
-
-import org.apache.tamaya.environment.RuntimeContextBuilder;
-import org.apache.tamaya.environment.spi.ContextProviderSpi;
-
-import javax.annotation.Priority;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Environment provider used by some tests.
- */
-@Priority(2000)
-public class TestEnvironmentProvider implements ContextProviderSpi {
-    private Map<String, String> data = new HashMap<>();
-
-    public TestEnvironmentProvider(){
-        data.put("env.STAGE", "MyStage");
-        data.put("java.version", System.getProperty("java.version"));
-        data = Collections.unmodifiableMap(data);
-    }
-
-
-    @Override
-    public void setupContext(RuntimeContextBuilder contextBuilder){
-        contextBuilder.setAll(data);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/test/resources/GLOBAL.properties
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/GLOBAL.properties b/environment/src/test/resources/GLOBAL.properties
new file mode 100644
index 0000000..9f39f75
--- /dev/null
+++ b/environment/src/test/resources/GLOBAL.properties
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+aKey=aValue.GLOBAL

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/5f2b6e3e/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi b/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
deleted file mode 100644
index 7f71c15..0000000
--- a/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextProviderSpi
+++ /dev/null
@@ -1,23 +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.environment.internal.ClassLoaderDependentAppEnvironmentProvider
-org.apache.tamaya.environment.internal.ClassLoaderDependentEarEnvironmentProvider
-org.apache.tamaya.environment.internal.InitialEnvironmentProviderSpi
-org.apache.tamaya.environment.internal.SystemClassLoaderEnvironmentProviderSpi
-org.apache.tamaya.metamodel.environment.TestEnvironmentProvider
\ No newline at end of file


[47/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-145: - Fixed bugs and ensured meta-configuration is loading correctly. - Renamed singleton class to TamayaConfigurator - Decoupled confiration from the singleton initailization, allowing the use

Posted by pl...@apache.org.
TAMAYA-145:
- Fixed bugs and ensured meta-configuration is loading correctly.
- Renamed singleton class to TamayaConfigurator
- Decoupled confiration from the singleton initailization, allowing the user to programmatically specifiy the meta configuration location and formats supported.
- Isolated evaluation of ExpressionResolvers to avoid errors due to circular references.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/0b33f928
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/0b33f928
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/0b33f928

Branch: refs/heads/master
Commit: 0b33f9289b92b09bc2bedebff76cc9a0dfaad25a
Parents: 877d10e
Author: anatole <an...@apache.org>
Authored: Wed May 11 03:42:34 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Wed May 11 03:42:34 2016 +0200

----------------------------------------------------------------------
 .../tamaya/dsl/ConfigurationContextManager.java | 163 -----------
 .../org/apache/tamaya/dsl/DSLFormatManager.java | 115 ++++++++
 .../java/org/apache/tamaya/dsl/EnvConfig.java   | 102 -------
 .../org/apache/tamaya/dsl/FormatManager.java    | 168 ------------
 .../apache/tamaya/dsl/MetaConfiguration.java    | 144 ++++++++++
 .../org/apache/tamaya/dsl/ProfileManager.java   |  38 ++-
 .../apache/tamaya/dsl/TamayaConfigurator.java   | 234 ++++++++++++++++
 .../spi/BaseStagedPropertySourceProvider.java   | 242 ++++++++--------
 .../staged/spi/DSLPropertySourceProvider.java   |  51 ++++
 .../tamaya/staged/spi/DSLSourceResolver.java    |  54 ----
 .../spi/StagedConfigPropertiesProvider.java     | 274 +++++++++----------
 ...org.apache.tamaya.spi.PropertySourceProvider |  19 --
 .../apache/tamaya/dsl/ProfileManagerTest.java   |   2 +-
 .../src/test/resources/tamaya-config.yaml       |  41 +--
 14 files changed, 862 insertions(+), 785 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
deleted file mode 100644
index 67a79a6..0000000
--- a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ConfigurationContextManager.java
+++ /dev/null
@@ -1,163 +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.dsl;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.functions.ConfigurationFunctions;
-import org.apache.tamaya.spi.*;
-import org.apache.tamaya.staged.spi.DSLSourceResolver;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-
-/**
- * Created by atsticks on 05.05.16.
- */
-public class ConfigurationContextManager {
-
-    private static final Logger LOGGER = Logger.getLogger(EnvConfig.class.getName());
-
-    private ConfigurationContext configurationContext;
-    private Set<String> formats = new HashSet<>();
-    private Set<String> suffixes = new HashSet<>();
-    private Map<String,DSLSourceResolver> dslResolvers = new HashMap<>();
-
-
-    public ConfigurationContextManager(){
-        loadDSLSourceResolvers();
-        Configuration metaConfig = EnvConfig.getMetaConfiguration();
-        Configuration profilesConfig = metaConfig.with(
-                ConfigurationFunctions.section("TAMAYA.PROFILES", true));
-        Configuration metaProfile = profilesConfig.with(
-                ConfigurationFunctions.section("<COMMON>", true));
-        String[] values = metaProfile.getOrDefault("formats","yaml, properties, xml-properties").split(",");
-        for(String fmt:values){
-            fmt = fmt.trim();
-            if(fmt.isEmpty()){
-                continue;
-            }
-            this.formats.add(fmt);
-        }
-        values = metaProfile.getOrDefault("suffixes", "yml, yaml, properties, xml").split(",");
-        for(String sfx:values){
-            sfx = sfx.trim();
-            if(sfx.isEmpty()){
-                continue;
-            }
-            this.suffixes.add(sfx);
-        }
-        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
-        Map<String, PropertySource> loadedPropertySources = loadDefaultPropertySources();
-        int defaultOrdinal = loadSources(builder, "<COMMON>", metaProfile, loadedPropertySources, 0) + 20;
-        // Load current profiles
-        for(String profile:ProfileManager.getInstance().getActiveProfiles()){
-            metaProfile = profilesConfig.with(
-                    ConfigurationFunctions.section(profile, true));
-            defaultOrdinal = loadSources(builder, profile, metaProfile, loadedPropertySources, defaultOrdinal) + 20;
-        }
-//         formats:  yaml, properties, xml-properties
-//    - SUFFIX:   yaml, yml, properties, xml
-//    - sources:
-//      - "named:env-properties"   # provider name, or class name
-//      - "named:main-args"
-//      - "named:sys-properties"
-//      - "resource:classpath:META-INF/config/**/*.SUFFIX"
-
-}
-
-    /**
-     * Loads all default registered property sources and providers.
-     * @return the default property sources available on the system.
-     */
-    private Map<String, PropertySource> loadDefaultPropertySources() {
-        Map<String, PropertySource> loadedPropertySources = new HashMap<>();
-        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)){
-            loadedPropertySources.put(ps.getName(), ps);
-        }
-        for(PropertySourceProvider prov: ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
-            for(PropertySource ps: prov.getPropertySources()){
-                loadedPropertySources.put(ps.getName(), ps);
-            }
-        }
-        return loadedPropertySources;
-    }
-
-    private int loadSources(ConfigurationContextBuilder builder, String profileId, Configuration metaProfile, Map<String,
-            PropertySource> defaultPropertySources, int defaultOrdinal) {
-        String[] values;
-        values = metaProfile.getOrDefault("sources","<default>").split(",");
-        if(values.length==1 && "<default>".equals(values[0])){
-            // load default property sources and providers from config as default.
-            // additional providers may be added depending on the active profile...
-            LOGGER.info("Using default configuration setup for "+profileId);
-            builder.addPropertySources(defaultPropertySources.values());
-        }else {
-            int newMaxOrdinal = defaultOrdinal;
-            LOGGER.info("Loading DSL based "+profileId+" configuration context...");
-            int count = 0;
-            for (String source : values) {
-                source = source.trim();
-                if (source.isEmpty()) {
-                    continue;
-                }
-                String sourceKey = getSourceKey(source);
-                LOGGER.info("Loading "+profileId+" configuration source: " + source);
-                // evaluate DSLSourceResolver and resolve PropertySources, register thm into context
-                // apply newMaxOrdinal...
-                DSLSourceResolver resolver = dslResolvers.get(sourceKey);
-                if(resolver==null){
-                    LOGGER.warning("DSL error: unresolvable source expression: "+ source);
-                    continue;
-                }
-                List<PropertySource> sources = resolver.resolve(source.substring(sourceKey.length()), defaultPropertySources, defaultOrdinal);
-                count += sources.size();
-                for(PropertySource ps:sources){
-                    if(ps.getOrdinal()>newMaxOrdinal){
-                        newMaxOrdinal = ps.getOrdinal();
-                    }
-                }
-                builder.addPropertySources(sources);
-            }
-            LOGGER.info("Loaded "+count+" DSL based "+profileId+" configuration contexts.");
-            return newMaxOrdinal;
-        }
-        return defaultOrdinal;
-    }
-
-    private String getSourceKey(String source) {
-        int index = source.indexOf(':');
-        if(index>0){
-            return source.substring(0,index);
-        }
-        return source;
-    }
-
-    private void loadDSLSourceResolvers() {
-        // Load the ConfigurationDSLSourceResolvers on the system
-        for(DSLSourceResolver res:ServiceContextManager.getServiceContext().getServices(DSLSourceResolver.class)){
-            this.dslResolvers.put(res.getKey(), res);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/DSLFormatManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/DSLFormatManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/DSLFormatManager.java
new file mode 100644
index 0000000..916fa49
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/DSLFormatManager.java
@@ -0,0 +1,115 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+
+import java.util.*;
+
+/**
+ * Component that manages the current supported formats:
+ * <pre>
+ * TAMAYA:
+ *   FORMAT-DEF:
+ *     - formats: yaml, properties, xml-properties
+ * </pre>
+ * Hereby:
+ * <ul>
+ *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
+ * </ul>
+ */
+public final class DSLFormatManager {
+
+    private static final DSLFormatManager INSTANCE = new DSLFormatManager();
+
+    /** The currently active formats, in order of precedence, the most significant are the last ones. */
+    private List<ConfigurationFormat> formats = new ArrayList<>();
+    /** The currently active suffixes, in order of precedence, the most significant are the last ones. */
+    private List<String> suffixes = new ArrayList<>();
+
+
+    /**
+     * Get the current instance.
+     * @return the current profile manager, never null.
+     */
+    public static DSLFormatManager getInstance(){
+        return INSTANCE;
+    }
+
+    private DSLFormatManager(){
+        Configuration metaConfig = MetaConfiguration.getConfiguration();
+        Configuration formatsConfig = metaConfig.with(
+                ConfigurationFunctions.section("TAMAYA.FORMATS"));
+        String[] formats = formatsConfig.getOrDefault("formats","yamk,properties,ini").split(",");
+        this.formats.addAll(ConfigurationFormats.getFormats(formats));
+        String[] suffixes = formatsConfig.getOrDefault("suffixes","yml,properties,ini").split(",");
+        for(String sfx:suffixes){
+            sfx = sfx.trim();
+            if(sfx.isEmpty()){
+                continue;
+            }
+            this.suffixes.add(sfx);
+        }
+    }
+
+
+    /**
+     * Allows to check if a suffix is currently activated.
+     * @param suffix the suffix name, not null.
+     * @return true, if the profile is defined.
+     */
+    public boolean isSuffixDefined(String suffix){
+        return this.suffixes.contains(suffix);
+    }
+
+    /**
+     * Allows to check if a format is selected.
+     * @param formatName the format name, not null.
+     * @return true, if the format is a selected.
+     */
+    public boolean isFormatSelected(String formatName){
+        for(ConfigurationFormat format:formats){
+            if(format.getName().equals(formatName)){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get the list of currently active suffixes.
+     * @return the list of currently active suffixes, never null.
+     */
+    public List<String> getSuffixes(){
+        return Collections.unmodifiableList(suffixes);
+    }
+
+    /**
+     * Get the list of currently active formats.
+     * @return the list of currently active formats, never null.
+     */
+    public List<ConfigurationFormat> getFormats(){
+        return Collections.unmodifiableList(formats);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
deleted file mode 100644
index aa5aa62..0000000
--- a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/EnvConfig.java
+++ /dev/null
@@ -1,102 +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.dsl;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.format.ConfigurationData;
-import org.apache.tamaya.format.ConfigurationFormat;
-import org.apache.tamaya.format.ConfigurationFormats;
-import org.apache.tamaya.json.YAMLFormat;
-import org.apache.tamaya.resource.ConfigResources;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spisupport.DefaultConfiguration;
-import org.apache.tamaya.spisupport.MapPropertySource;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Meta environment configuration builder and accessor. Normally this class shoulds never be accessed
- * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
- * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
- * setup whatever features they implement.
- */
-public final class EnvConfig {
-
-    private static final Logger LOGGER = Logger.getLogger(EnvConfig.class.getName());
-    private static EnvConfig INSTANCE = new EnvConfig();
-
-    private Configuration config;
-
-    private EnvConfig(){
-        ConfigurationFormat[] formats = loadFormats();
-        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
-        for(URL url:ConfigResources.getResourceResolver().getResources("tamaya-config.*")) {
-            for(ConfigurationFormat format:formats) {
-                if(format.accepts(url)){
-                    try(InputStream is = url.openStream()){
-                        ConfigurationData data = format.readConfiguration(url.toString(), is);
-                        builder.addPropertySources(new MapPropertySource(
-                                url.toString(), data.getCombinedProperties()));
-                    }catch(Exception e){
-                        LOGGER.log(Level.INFO, "Failed to read " + url + " with format " + format, e);
-                    }
-                }
-            }
-        }
-        this.config = new DefaultConfiguration(builder.build());
-        LOGGER.info("Meta-Configuration read: " + this.config.getProperties().size() + " entries.");
-    }
-
-    private ConfigurationFormat[] loadFormats() {
-        List<ConfigurationFormat> formats = new ArrayList<>();
-        String metaFormats = System.getProperty("tamaya.meta-formats");
-        if(metaFormats!=null){
-            String[] formatNames = metaFormats.split(",");
-            for(String formatName:formatNames){
-                formats.addAll(ConfigurationFormats.getFormats(formatName));
-            }
-        }
-        if(formats.isEmpty()){
-            formats.addAll(ConfigurationFormats.getFormats("yaml"));
-        }
-        if(formats.isEmpty()){
-            formats.add(new YAMLFormat());
-        }
-        return formats.toArray(new ConfigurationFormat[formats.size()]);
-    }
-
-    /**
-     * Access the system's meta-configuration. Normally this class shoulds never be accessed
-     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
-     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
-     * setup whatever features they implement.
-     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
-     * model.
-     */
-    public static Configuration getMetaConfiguration(){
-        return INSTANCE.config;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
deleted file mode 100644
index 52c4c48..0000000
--- a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/FormatManager.java
+++ /dev/null
@@ -1,168 +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.dsl;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.functions.ConfigurationFunctions;
-import org.apache.tamaya.resolver.Resolver;
-
-import java.util.*;
-
-/**
- * Component that manages the current supported formats:
- * <pre>
- * TAMAYA:
- *   FORMAT-DEF:
- *     - formats: yaml, properties, xml-properties
- * </pre>
- * Hereby:
- * <ul>
- *     <li><b>profiles</b> defines the available profiles, including implicit default profiles.</li>
- * </ul>
- */
-public class FormatManager {
-
-    private static final FormatManager INSTANCE = new FormatManager();
-
-    /** The currently active profiles, in order of precedence, the most significant are the last ones. */
-    private List<String> activeProfiles = new ArrayList<>();
-    /** A set of all defined profiles. */
-    private Set<String> profiles = new HashSet<>();
-    /** The current used default profiles, loaded initially, before all other profiles are loaded. */
-    private List<String> defaultProfiles = new ArrayList<>();
-
-    /**
-     * Get the current instance.
-     * @return the current profile manager, never null.
-     */
-    public static FormatManager getInstance(){
-        return INSTANCE;
-    }
-
-    private FormatManager(){
-        Configuration metaConfig = EnvConfig.getMetaConfiguration();
-        Configuration profileConfig = metaConfig.with(
-                ConfigurationFunctions.section("TAMAYA.ENV-DEF"));
-        String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
-        for(String sel:selectables){
-            sel = sel.trim();
-            if(sel.isEmpty()){
-                continue;
-            }
-            this.profiles.add(sel);
-        }
-        String[] defaults = profileConfig.getOrDefault("defaults","DEFAULT").split(",");
-        for(String def:defaults){
-            def = def.trim();
-            if(def.isEmpty()){
-                continue;
-            }
-            if(!isProfileDefined(def)){
-                throw new ConfigException("Invalid profile encountered: " +def + ", valid are: " + profiles);
-            }
-            this.defaultProfiles.add(def);
-        }
-        String[] expressions = profileConfig.getOrDefault("evaluation","${sys:ENV}, ${env:ENV}").split(",");
-        String currentEnvironment = null;
-        for(String exp:expressions){
-            exp = exp.trim();
-            if(exp.isEmpty()){
-                continue;
-            }
-            currentEnvironment = Resolver.evaluateExpression(exp, false);
-            if(currentEnvironment!=null){
-                currentEnvironment = currentEnvironment.trim();
-                if(!currentEnvironment.isEmpty()){
-                    break;
-                }
-            }
-        }
-        if(currentEnvironment==null|| currentEnvironment.isEmpty()){
-            currentEnvironment = profileConfig.getOrDefault("default-active", "DEV");
-        }
-        this.activeProfiles.addAll(defaultProfiles);
-        String[] profilesActive = currentEnvironment.split(",");
-        for(String prof:profilesActive){
-            prof = prof.trim();
-            if(prof.isEmpty()){
-                continue;
-            }
-            if(!isProfileDefined(prof)){
-                throw new ConfigException("Invalid profile encountered: " +prof + ", valid are: " + profiles);
-            }
-            this.activeProfiles.add(prof);
-        }
-    }
-
-    /**
-     * Allows to check if a profile is currently active.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is active.
-     */
-    public boolean isProfileActive(String profileName){
-        return this.activeProfiles.contains(profileName);
-    }
-
-    /**
-     * Allows to check if a profile is currently defined.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is defined.
-     */
-    public boolean isProfileDefined(String profileName){
-        return this.profiles.contains(profileName);
-    }
-
-    /**
-     * Allows to check if a profile is a default profile.
-     * @param profileName the profile name, not null.
-     * @return true, if the profile is a default profile.
-     */
-    public boolean isProfileDefault(String profileName){
-        return this.defaultProfiles.contains(profileName);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public List<String> getActiveProfiles(){
-        return Collections.unmodifiableList(activeProfiles);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public List<String> getDefaultProfiles(){
-        return Collections.unmodifiableList(defaultProfiles);
-    }
-
-    /**
-     * Get the list of currently active profiles.
-     * @return the list of currently active profiles, in order of precedence, the most significant
-     * are the last ones, never null.
-     */
-    public Set<String> getAllProfiles(){
-        return Collections.unmodifiableSet(profiles);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/MetaConfiguration.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/MetaConfiguration.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/MetaConfiguration.java
new file mode 100644
index 0000000..a16bfa8
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/MetaConfiguration.java
@@ -0,0 +1,144 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.ConfigurationFormats;
+import org.apache.tamaya.json.YAMLFormat;
+import org.apache.tamaya.resource.ConfigResources;
+import org.apache.tamaya.spi.ConfigurationContextBuilder;
+import org.apache.tamaya.spisupport.DefaultConfiguration;
+import org.apache.tamaya.spisupport.MapPropertySource;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Meta environment configuration builder and accessor. Normally this class shoulds never be accessed
+ * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+ * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+ * setup whatever features they implement.
+ */
+public final class MetaConfiguration {
+
+    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
+    private static MetaConfiguration INSTANCE = new MetaConfiguration();
+
+    private Configuration config;
+    private String resourceExpression;
+    private String[] formatNames;
+
+    /**
+     * Initializes the metaconfiguration.
+     * @param resourceExpression the resource expression that defines the resources to load.
+     * @param formatNames the format names to be used.
+     */
+    private void init(String resourceExpression, String... formatNames){
+        if(this.config!=null){
+            LOGGER.warning(">>> Reset of Meta-Configuration resource : " + resourceExpression);
+            LOGGER.warning(">>> Reset of Meta-Configuration formats  : " + Arrays.toString(formatNames));
+        }
+        if(resourceExpression==null){
+            resourceExpression = "tamaya-config.*";
+        }
+        LOGGER.info(">>> Meta-Configuration resource : " + resourceExpression);
+        ConfigurationFormat[] formats = loadFormats(formatNames);
+        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+        for(URL url:ConfigResources.getResourceResolver().getResources(resourceExpression)) {
+            for(ConfigurationFormat format:formats) {
+                if(format.accepts(url)){
+                    try(InputStream is = url.openStream()){
+                        ConfigurationData data = format.readConfiguration(url.toString(), is);
+                        builder.addPropertySources(new MapPropertySource(
+                                url.toString(), data.getCombinedProperties()));
+                    }catch(Exception e){
+                        LOGGER.log(Level.INFO, "Failed to read " + url + " with format " + format, e);
+                    }
+                }
+            }
+        }
+        this.config = new DefaultConfiguration(builder.build());
+        LOGGER.info("Meta-Configuration read: " + this.config.getProperties().size() + " entries.");
+    }
+
+    private ConfigurationFormat[] loadFormats(String... formatNames) {
+        List<ConfigurationFormat> formats = new ArrayList<>();
+        if(formatNames.length==0) {
+            String metaFormats = System.getProperty("tamaya.meta-formats");
+            if (metaFormats != null) {
+                formatNames = metaFormats.split(",");
+            }
+        }
+        for (String formatName : formatNames) {
+            formats.addAll(ConfigurationFormats.getFormats(formatName));
+        }
+        if(formats.isEmpty()){
+            formats.addAll(ConfigurationFormats.getFormats("yaml"));
+        }
+        if(formats.isEmpty()){
+            formats.add(new YAMLFormat());
+        }
+        LOGGER.info(">>> Meta-Configuration formats  : " + formats);
+        return formats.toArray(new ConfigurationFormat[formats.size()]);
+    }
+
+    /**
+     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
+     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+     * setup whatever features they implement.
+     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
+     * model.
+     */
+    public static Configuration getConfiguration(){
+        if(INSTANCE.config==null) {
+            INSTANCE.init(null);
+        }
+        return INSTANCE.config;
+    }
+
+    /**
+     * Access the system's meta-configuration, initialize if necessary. Normally this class shoulds never be accessed
+     * by client code. But it could be useful for extensions that extend the meta-configuration capabilities
+     * of tamaya having access to the meta-configuration, so they can read their own meta-entries to
+     * setup whatever features they implement.
+     *
+     * @param resourceExpression the resource expression that defines where the metaconfiguration
+     *                           files/resources are located.
+     * @param formatNames        the formats supported, if null all formats found are tried for each resource(=URL).
+     * @return the meta-configuration instance used for setting up the Tamaya's application configuration
+     * model.
+     */
+    public static Configuration getConfiguration(String resourceExpression,
+                                                 String... formatNames){
+        if(INSTANCE.config==null) {
+            INSTANCE.init(resourceExpression, formatNames);
+        }
+        return INSTANCE.config;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
index 6dba2f2..70211ca 100644
--- a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/ProfileManager.java
@@ -22,8 +22,12 @@ import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.Configuration;
 import org.apache.tamaya.functions.ConfigurationFunctions;
 import org.apache.tamaya.resolver.Resolver;
+import org.apache.tamaya.resolver.spi.ExpressionResolver;
+import org.apache.tamaya.spi.ServiceContextManager;
 
 import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Component that manages the current setup profiles for this environment/runtime. The profile manager
@@ -49,6 +53,7 @@ import java.util.*;
  */
 public final class ProfileManager {
 
+    private static final Logger LOG = Logger.getLogger(ProfileManager.class.getName());
     private static final ProfileManager INSTANCE = new ProfileManager();
 
     /** The currently active profiles, in order of precedence, the most significant are the last ones. */
@@ -68,7 +73,7 @@ public final class ProfileManager {
     }
 
     private ProfileManager(){
-        Configuration metaConfig = EnvConfig.getMetaConfiguration();
+        Configuration metaConfig = MetaConfiguration.getConfiguration();
         Configuration profileConfig = metaConfig.with(
                 ConfigurationFunctions.section("TAMAYA.PROFILES-DEF"));
         String[] selectables = profileConfig.getOrDefault("profiles","DEFAULT,DEV,TEST,PROD").split(",");
@@ -97,7 +102,7 @@ public final class ProfileManager {
             if(exp.isEmpty()){
                 continue;
             }
-            currentEnvironment = Resolver.evaluateExpression(exp, false);
+            currentEnvironment = evaluateExpression(exp);
             if(currentEnvironment!=null){
                 currentEnvironment = currentEnvironment.trim();
                 if(!currentEnvironment.isEmpty()){
@@ -123,6 +128,35 @@ public final class ProfileManager {
     }
 
     /**
+     * Evaluates the expressions to evaluate the current profile.
+     * Currently the following expressions are supported
+     * <pre>
+     * sys-property:xxx
+     * env-property:xxx
+     * </pre>
+     * {@code xxx} is the corresponding key.
+     * @param currentProfileExpression the profile expression.
+     * @return the evaluated String, or null.
+     */
+    private String evaluateExpression(String currentProfileExpression){
+        currentProfileExpression = currentProfileExpression.trim();
+        List<ExpressionResolver> resolvers = new ArrayList<>();
+        for(ExpressionResolver res: ServiceContextManager.getServiceContext().getServices(ExpressionResolver.class)){
+            resolvers.add(res);
+        }
+        for(ExpressionResolver res:resolvers){
+            if(currentProfileExpression.startsWith(res.getResolverPrefix())){
+                try{
+                    return res.evaluate(currentProfileExpression.substring(res.getResolverPrefix().length()));
+                }catch(Exception e){
+                    LOG.log(Level.FINEST, "Error evaluating resolver: " + res, e);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
      * Allows to check if a profile is currently active.
      * @param profileName the profile name, not null.
      * @return true, if the profile is active.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/dsl/TamayaConfigurator.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/dsl/TamayaConfigurator.java b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/TamayaConfigurator.java
new file mode 100644
index 0000000..c7c62b5
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/dsl/TamayaConfigurator.java
@@ -0,0 +1,234 @@
+/*
+ * 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.dsl;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.functions.ConfigurationFunctions;
+import org.apache.tamaya.spi.*;
+import org.apache.tamaya.staged.spi.DSLPropertySourceProvider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * Configuration class setting up the Tamaya runtime model.
+ */
+public final class TamayaConfigurator {
+
+    private static final Logger LOGGER = Logger.getLogger(MetaConfiguration.class.getName());
+    private static final Comparator<WrappedPropertySource> ORDINAL_COMPARATOR =
+            new Comparator<WrappedPropertySource>(){
+                @Override
+                public int compare(WrappedPropertySource o1, WrappedPropertySource o2) {
+                    return o1.getOrdinal() - o2.getOrdinal();
+                }
+            };
+
+    private static final TamayaConfigurator INSTANCE = new TamayaConfigurator();
+
+    private ConfigurationContext configurationContext;
+    private Set<String> formats = new HashSet<>();
+    private Set<String> suffixes = new HashSet<>();
+    private Map<String,DSLPropertySourceProvider> dslResolvers = new HashMap<>();
+
+
+    private TamayaConfigurator(){
+        configure(null);
+    }
+
+    /**
+     * Get the singleton instance.
+     * @return the instance, never null.
+     */
+    public static TamayaConfigurator getInstance(){
+        return INSTANCE;
+    }
+
+    /**
+     * Configures the Tamaya runtime using the metamodel configuration found at the default
+     * location.
+     * @see MetaConfiguration
+     */
+    public void configure(){
+        configure(null);
+    }
+
+    /**
+     * Configures the Tamaya runtime using the given resource location expression and (optionally)
+     * formats to be used for evaluating the metamodel configuration.
+     * @param resourceExpression resource expression for resolving the location of the
+     *                           meta configuration.
+     * @param formats the format names to be used, optional, but not null.
+     * @see MetaConfiguration
+     */
+    public void configure(String resourceExpression, String... formats){
+        loadDSLSourceResolvers();
+        Configuration metaConfig = MetaConfiguration.getConfiguration(resourceExpression, formats);
+        Configuration profilesConfig = metaConfig.with(
+                ConfigurationFunctions.section("TAMAYA.PROFILES.", true));
+        Configuration metaProfile = profilesConfig.with(
+                ConfigurationFunctions.section("<COMMON>.", true));
+        System.out.println(metaProfile.getProperties().keySet());
+        String[] values = metaProfile.getOrDefault("formats","yaml, properties, xml-properties").split(",");
+        for(String fmt:values){
+            fmt = fmt.trim();
+            if(fmt.isEmpty()){
+                continue;
+            }
+            this.formats.add(fmt);
+        }
+        values = metaProfile.getOrDefault("suffixes", "yml, yaml, properties, xml").split(",");
+        for(String sfx:values){
+            sfx = sfx.trim();
+            if(sfx.isEmpty()){
+                continue;
+            }
+            this.suffixes.add(sfx);
+        }
+        ConfigurationContextBuilder builder = ConfigurationProvider.getConfigurationContextBuilder();
+        Map<String, PropertySource> loadedPropertySources = loadDefaultPropertySources();
+        int defaultOrdinal = loadSources(builder, "<COMMON>", metaProfile, loadedPropertySources, 0) + 20;
+        // Load current profiles
+        for(String profile:ProfileManager.getInstance().getActiveProfiles()){
+            metaProfile = profilesConfig.with(
+                    ConfigurationFunctions.section(profile, true));
+            defaultOrdinal = loadSources(builder, profile, metaProfile, loadedPropertySources, defaultOrdinal) + 20;
+        }
+        //         formats:  yaml, properties, xml-properties
+        //    - SUFFIX:   yaml, yml, properties, xml
+        //    - sources:
+        //      - "named:env-properties"   # provider name, or class name
+        //      - "named:main-args"
+        //      - "named:sys-properties"
+        //      - "resource:classpath:META-INF/config/**/*.SUFFIX"
+
+    }
+
+    /**
+     * Loads all default registered property sources and providers.
+     * @return the default property sources available on the system.
+     */
+    private Map<String, PropertySource> loadDefaultPropertySources() {
+        Map<String, PropertySource> loadedPropertySources = new HashMap<>();
+        for(PropertySource ps: ServiceContextManager.getServiceContext().getServices(PropertySource.class)){
+            loadedPropertySources.put(ps.getName(), ps);
+        }
+        for(PropertySourceProvider prov: ServiceContextManager.getServiceContext().getServices(PropertySourceProvider.class)){
+            for(PropertySource ps: prov.getPropertySources()){
+                loadedPropertySources.put(ps.getName(), ps);
+            }
+        }
+        return loadedPropertySources;
+    }
+
+    private int loadSources(ConfigurationContextBuilder builder, String profileId, Configuration metaProfile, Map<String,
+            PropertySource> defaultPropertySources, int nextOrdinal) {
+        String[] values;
+        List<PropertySource> propertySourcesLoaded = new ArrayList<>();
+        values = metaProfile.getOrDefault("sources","<default>").split(",");
+        if(values.length==1 && "<default>".equals(values[0])){
+            // load default property sources and providers from config as default.
+            // additional providers may be added depending on the active profile...
+            LOGGER.info("Using default configuration setup for "+profileId);
+            nextOrdinal = addAndGetNextOrdinal(builder, defaultPropertySources.values(),
+                    propertySourcesLoaded, nextOrdinal);
+        }else {
+            LOGGER.info("Loading DSL based "+profileId+" configuration context...");
+            int count = 0;
+            for (String source : values) {
+                source = source.trim();
+                if (source.isEmpty()) {
+                    continue;
+                }
+                String sourceKey = getSourceKey(source);
+                LOGGER.info("Loading "+profileId+" configuration source: " + source);
+                // evaluate DSLSourceResolver and resolve PropertySources, register thm into context
+                // apply newMaxOrdinal...
+                DSLPropertySourceProvider resolver = dslResolvers.get(sourceKey);
+                if(resolver==null){
+                    LOGGER.warning("DSL error: unresolvable source expression: "+ source);
+                    continue;
+                }
+                List<PropertySource> sources = resolver.resolve(source.substring(sourceKey.length()),
+                        defaultPropertySources);
+                nextOrdinal = addAndGetNextOrdinal(builder, sources, propertySourcesLoaded, nextOrdinal);
+            }
+            LOGGER.info("Loaded "+count+" DSL based "+profileId+" configuration contexts.");
+        }
+        return nextOrdinal;
+    }
+
+    private int addAndGetNextOrdinal(ConfigurationContextBuilder builder, Collection<PropertySource> sourcesToAdd,
+                                     List<PropertySource> allPropertySources, int nextOrdinal) {
+        allPropertySources.addAll(wrapOrdinals(nextOrdinal, sourcesToAdd));
+        nextOrdinal = Math.max(calculateHighestOrdinal(allPropertySources)+1, nextOrdinal+1);
+        builder.addPropertySources(allPropertySources);
+        return nextOrdinal;
+    }
+
+    private List<WrappedPropertySource> wrapOrdinals(int nextOrdinal, Collection<PropertySource> propertySources) {
+        List<WrappedPropertySource> result = new ArrayList<>();
+        for(PropertySource ps: propertySources){
+            result.add(WrappedPropertySource.of(ps));
+        }
+        Collections.sort(result, ORDINAL_COMPARATOR);
+        for(WrappedPropertySource ps: result){
+            ps.setOrdinal(nextOrdinal++);
+        }
+        Collections.sort(result, ORDINAL_COMPARATOR);
+        return result;
+    }
+
+    private int calculateHighestOrdinal(Collection<PropertySource> sources) {
+        int maxOrdinal = 0;
+        for (PropertySource ps : sources) {
+            if (ps.getOrdinal() > maxOrdinal) {
+                maxOrdinal = ps.getOrdinal();
+            }
+        }
+        return maxOrdinal;
+    }
+
+    private String getSourceKey(String source) {
+        int index = source.indexOf(':');
+        if(index>0){
+            return source.substring(0,index);
+        }
+        return source;
+    }
+
+    private void loadDSLSourceResolvers() {
+        // Load the ConfigurationDSLSourceResolvers on the system
+        for(DSLPropertySourceProvider res:
+                ServiceContextManager.getServiceContext().getServices(
+                        DSLPropertySourceProvider.class)){
+            this.dslResolvers.put(res.getKey(), res);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
index 36fcd11..04a7359 100644
--- a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/BaseStagedPropertySourceProvider.java
@@ -1,121 +1,121 @@
-/*
- * 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.staged.spi;
-
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertySourceProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Implements a base property source provider that defines a multilayered
- * stage setup.
- */
-public abstract class BaseStagedPropertySourceProvider implements PropertySourceProvider {
-
-    /** The logger used. */
-    private static final Logger LOGGER = Logger.getLogger(BaseStagedPropertySourceProvider.class.getName());
-
-    /** the current environment stages in order of precedence (weakest first). */
-    private List<String> contextIds = new ArrayList<>();
-
-    /** Optional root context of the environment in the config tree. All entries loaded will be mapped into
-     * this root conztext.
-     */
-    private String rootContext;
-
-    /** List of PropertySources evaluated and returned to the current ConfigurationContext on load. */
-    private List<PropertySource> propertySources = new ArrayList<>();
-
-
-    /**
-     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
-     * @param rootContext the environment target root context, e.g. ENV. or null
-     *                               for not remapping the environment properties.
-     * @param contextIds the context ids, that build up the environment.
-     */
-    public BaseStagedPropertySourceProvider(String rootContext,
-                                            String... contextIds) {
-        this(rootContext, 10,10, contextIds);
-    }
-        /**
-         * Creates a new Environment provider.
-         * @param rootContext the environment target root context, e.g. ENV. or null
-         *                               for not remapping the environment properties.
-         * @param basePriority the base priority used for the weakest environment properties set.
-         * @param priorityIncrease the value the property source's priority should be increased with each
-         *                         environment context level added.
-         * @param contextIds the context ids, that build up the environment.
-         */
-    public BaseStagedPropertySourceProvider(String rootContext, int basePriority, int priorityIncrease,
-                                            String... contextIds) {
-        if (contextIds.length == 0) {
-            throw new ConfigException("At least one environment context id must be defined.");
-        }
-        if (rootContext == null) {
-            LOGGER.finest("No environment mapping is applied.");
-        }
-        this.rootContext = rootContext;
-        this.contextIds.addAll(Arrays.asList(contextIds));
-        int priority = basePriority;
-        for (String contextId : contextIds) {
-            propertySources.addAll(loadStageProperties(rootContext, contextId, priority));
-            priority += priorityIncrease;
-        }
-    }
-
-    /**
-     * Method that loads the environment properties for the given contextId.
-     * @param rootContext the root context, where entries read should be mapped to.
-     * @param contextId the contextId.
-     * @param priority  the target priority the created PropertySource should have. This priority is
-     *                  important, since it reflects the order as defined
-     *                  when configuring this class. Therefore it should not be overridden normally.
-     * @return the corresponding PrioritySources to be added, never null.
-     */
-    protected abstract Collection<PropertySource> loadStageProperties(
-            String rootContext, String contextId, int priority);
-
-    /**
-     * Get the environment context ids that define how this environment configuration
-     * is setup, in order of their increasing priority.
-     * @return the ordered list of context ids.
-     */
-    public List<String> getContextIds() {
-        return contextIds;
-    }
-
-    @Override
-    public String toString() {
-        return "EnvironmentPropertySourceProvider{" +
-                "contextIds=" + contextIds +
-                ", rootContext='" + rootContext + '\'' +
-                '}';
-    }
-
-    @Override
-    public Collection<PropertySource> getPropertySources() {
-        return propertySources;
-    }
-
-}
\ No newline at end of file
+///*
+// * 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.staged.spi;
+//
+//
+//import org.apache.tamaya.ConfigException;
+//import org.apache.tamaya.spi.PropertySource;
+//import org.apache.tamaya.spi.PropertySourceProvider;
+//
+//import java.util.ArrayList;
+//import java.util.Arrays;
+//import java.util.Collection;
+//import java.util.List;
+//import java.util.logging.Logger;
+//
+///**
+// * Implements a base property source provider that defines a multilayered
+// * stage setup.
+// */
+//public abstract class BaseStagedPropertySourceProvider implements PropertySourceProvider {
+//
+//    /** The logger used. */
+//    private static final Logger LOGGER = Logger.getLogger(BaseStagedPropertySourceProvider.class.getName());
+//
+//    /** the current environment stages in order of precedence (weakest first). */
+//    private List<String> contextIds = new ArrayList<>();
+//
+//    /** Optional root context of the environment in the config tree. All entries loaded will be mapped into
+//     * this root conztext.
+//     */
+//    private String rootContext;
+//
+//    /** List of PropertySources evaluated and returned to the current ConfigurationContext on load. */
+//    private List<PropertySource> propertySources = new ArrayList<>();
+//
+//
+//    /**
+//     * Creates a new Environment provider, hereby using 10 for basePriority and priorityIncrease.
+//     * @param rootContext the environment target root context, e.g. ENV. or null
+//     *                               for not remapping the environment properties.
+//     * @param contextIds the context ids, that build up the environment.
+//     */
+//    public BaseStagedPropertySourceProvider(String rootContext,
+//                                            String... contextIds) {
+//        this(rootContext, 10,10, contextIds);
+//    }
+//        /**
+//         * Creates a new Environment provider.
+//         * @param rootContext the environment target root context, e.g. ENV. or null
+//         *                               for not remapping the environment properties.
+//         * @param basePriority the base priority used for the weakest environment properties set.
+//         * @param priorityIncrease the value the property source's priority should be increased with each
+//         *                         environment context level added.
+//         * @param contextIds the context ids, that build up the environment.
+//         */
+//    public BaseStagedPropertySourceProvider(String rootContext, int basePriority, int priorityIncrease,
+//                                            String... contextIds) {
+//        if (contextIds.length == 0) {
+//            throw new ConfigException("At least one environment context id must be defined.");
+//        }
+//        if (rootContext == null) {
+//            LOGGER.finest("No environment mapping is applied.");
+//        }
+//        this.rootContext = rootContext;
+//        this.contextIds.addAll(Arrays.asList(contextIds));
+//        int priority = basePriority;
+//        for (String contextId : contextIds) {
+//            propertySources.addAll(loadStageProperties(rootContext, contextId, priority));
+//            priority += priorityIncrease;
+//        }
+//    }
+//
+//    /**
+//     * Method that loads the environment properties for the given contextId.
+//     * @param rootContext the root context, where entries read should be mapped to.
+//     * @param contextId the contextId.
+//     * @param priority  the target priority the created PropertySource should have. This priority is
+//     *                  important, since it reflects the order as defined
+//     *                  when configuring this class. Therefore it should not be overridden normally.
+//     * @return the corresponding PrioritySources to be added, never null.
+//     */
+//    protected abstract Collection<PropertySource> loadStageProperties(
+//            String rootContext, String contextId, int priority);
+//
+//    /**
+//     * Get the environment context ids that define how this environment configuration
+//     * is setup, in order of their increasing priority.
+//     * @return the ordered list of context ids.
+//     */
+//    public List<String> getContextIds() {
+//        return contextIds;
+//    }
+//
+//    @Override
+//    public String toString() {
+//        return "EnvironmentPropertySourceProvider{" +
+//                "contextIds=" + contextIds +
+//                ", rootContext='" + rootContext + '\'' +
+//                '}';
+//    }
+//
+//    @Override
+//    public Collection<PropertySource> getPropertySources() {
+//        return propertySources;
+//    }
+//
+//}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLPropertySourceProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLPropertySourceProvider.java
new file mode 100644
index 0000000..4482a5e
--- /dev/null
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLPropertySourceProvider.java
@@ -0,0 +1,51 @@
+/*
+ * 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.staged.spi;
+
+import org.apache.tamaya.spi.PropertySource;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Resolver to resolve/map DSL related source expressions into PropertySources
+ * loadable by a ConfigurationContext. Hereby the ordering of loaded property sources must be
+ * honored if possible by implicitly adapting/Overriding the default ordinal for the sources
+ * added.
+ */
+public interface DSLPropertySourceProvider {
+
+    /**
+     * Resolve the given expression (without the key part).
+     * @param sourceExpression the source expression, not null.
+     * @param defaultPropertySources the default property sources that can be used as defined by the functionality by
+     *                               a resolver.
+     * @return the list of loaded Property sources, never null.
+     */
+    List<PropertySource> resolve(String sourceExpression,
+                                 Map<String, PropertySource> defaultPropertySources);
+
+    /**
+     * Get the resolver key, which identifiesan expression to be resolved by a resolver instance.
+     * As an example {@code "named:"} is the key for an expression {@code "named:sys-properties"}.
+     * The method {@link #resolve(String, Map)} will onyl receive the secoind part of the expression.
+     * @return identifying key.
+     */
+    String getKey();
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
deleted file mode 100644
index e7e0168..0000000
--- a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/DSLSourceResolver.java
+++ /dev/null
@@ -1,54 +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.staged.spi;
-
-import org.apache.tamaya.spi.PropertySource;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Resolver to resolve/map DSL related source expressions into PropertySources
- * loadable by a ConfigurationContext. Hereby the ordering of loaded property sources must be
- * honored if possible by implicitly adapting/Overriding the default ordinal for the sources
- * added.
- */
-public interface DSLSourceResolver {
-
-    /**
-     * Resolve the given expression (without the key part).
-     * @param sourceExpression the source expression, not null.
-     * @param defaultPropertySources the default property sources that can be used as defined by the functionality by
-     *                               a resolver.
-     * @param latestMaxOrdinal the latest ordinal. Newly added property sources should have incresed ordinal values
-     *                         so the overall ordering is preserved as defined by the DSL user.
-     * @return the list of loaded Property sources, never null.
-     */
-    List<PropertySource> resolve(String sourceExpression,
-                                 Map<String, PropertySource> defaultPropertySources,
-                                 int latestMaxOrdinal);
-
-    /**
-     * Get the resolver key, which identifiesan expression to be resolved by a resolver instance.
-     * As an example {@code "named:"} is the key for an expression {@code "named:sys-properties"}.
-     * The method {@link #resolve(String, Map, int)} will onyl receive the secoind part of the expression.
-     * @return identifying key.
-     */
-    String getKey();
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
index e224d52..722d0d0 100644
--- a/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
+++ b/metamodels/staged/src/main/java/org/apache/tamaya/staged/spi/StagedConfigPropertiesProvider.java
@@ -1,137 +1,137 @@
-/*
- * 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.staged.spi;
-
-
-import org.apache.tamaya.spisupport.MapPropertySource;
-import org.apache.tamaya.spisupport.PropertiesResourcePropertySource;
-import org.apache.tamaya.resource.ConfigResources;
-import org.apache.tamaya.spi.PropertySource;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * Configuration provider that resolves to a location in the classpath.
- * Hereby the following system properties can be set to configure the provider
- * (all entries are optional):
- * <pre>
- *     env.STAGE   :   ordered list of configs to be loaded, e.g. sys-env,GLOBAL,TEST,DEV
- * </pre>
- * Adding {@code sys-env} as stage maps the current environment properties using
- * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
- * Similarly the same thing can be done by passing {@code sys-props} as context id for
- * adding the current System properties to the configuration tree.
- *
- * The rootContext can be used to remap the whole property space to an alternate subtree in
- * the configuration tree overall. This is very handy, if multiple instances of this class
- * are registered into the same configuration, but with different location setups. Remapping
- * configuration allows to separate these entries clearly.<br/>
- * Finally the resource location can be adapted by overriding {@link #getBaseResourcePath()}.
- * Different formats and loading mechanisms can be implemented by overriding
- * {@link #loadProperties(String, String, int, List)}.
- */
-public class StagedConfigPropertiesProvider extends BaseStagedPropertySourceProvider {
-
-    /** The system property to define the stages used. */
-    private static final String STAGE_PROP = "env.STAGE";
-    /** The logger used. */
-
-    private static final Logger LOGGER = Logger.getLogger(StagedConfigPropertiesProvider.class.getName());
-
-    /** The context id for adding the system's environment properties. */
-    private static final String DEFAULT_ENV = "sys-env";
-
-    /** The context id for adding the system's properties. */
-    private static final String DEFAULT_SYSPROPS = "sys-props";
-
-    /**
-     * Creates a new instance.
-     * @param rootContext the (optional) root context, can be null.
-     * @param stages the comma separated list of stages.
-     */
-    public StagedConfigPropertiesProvider(String rootContext, String... stages){
-        super(rootContext, evaluateStages(stages));
-    }
-
-    /**
-     * Creates a default instance. the stages are read from the {@code env.STAGE} system�propertx
-     * or a default is applied.
-     */
-    public StagedConfigPropertiesProvider(){
-        super(null, evaluateStages(null));
-    }
-
-    /**
-     * Evaluates the stages or returns the default STAGE entry.
-     * @return the stages to be used, never null.
-     */
-    private static String[] evaluateStages(String[] stages) {
-        if(stages!=null && stages.length>0){
-            return stages.clone();
-        }
-        String value = System.getProperty(STAGE_PROP);
-        if(value==null) {
-            value = System.getenv(STAGE_PROP);
-        }
-        if(value==null){
-            value = "sys-env,GLOBAL,DEVELOPMENT,sys-props";
-        }
-        return value.split(",");
-    }
-
-    @Override
-    protected Collection<PropertySource> loadStageProperties(
-            String rootContext, String contextId, int priority) {
-        List<PropertySource> result = new ArrayList<>();
-        if (DEFAULT_ENV.equals(contextId)){
-            result.add(new MapPropertySource(DEFAULT_ENV, System.getenv(),
-                    rootContext, priority));
-        }else if (DEFAULT_SYSPROPS.equals(contextId)){
-            result.add(new MapPropertySource(DEFAULT_SYSPROPS, System.getProperties(),
-                    rootContext, priority));
-        }
-        else{
-            loadProperties(rootContext, contextId, priority, result);
-        }
-        return result;
-    }
-
-    private void loadProperties(String rootContext, String contextId, int priority,
-                                List<PropertySource> result) {
-        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
-        if(cpExp.startsWith("/")){
-            cpExp = cpExp.substring(1);
-        }
-        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
-            result.add(new PropertiesResourcePropertySource(rootContext, url, priority));
-        }
-    }
-
-    /**
-     * Get the basic resource path used for lookup of properties files.
-     * @return the basic resource path, never null.
-     */
-    protected String getBaseResourcePath() {
-        return "";
-    }
-
-
-}
\ No newline at end of file
+///*
+// * 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.staged.spi;
+//
+//
+//import org.apache.tamaya.spisupport.MapPropertySource;
+//import org.apache.tamaya.spisupport.PropertiesResourcePropertySource;
+//import org.apache.tamaya.resource.ConfigResources;
+//import org.apache.tamaya.spi.PropertySource;
+//
+//import java.net.URL;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.List;
+//import java.util.logging.Logger;
+//
+///**
+// * Configuration provider that resolves to a location in the classpath.
+// * Hereby the following system properties can be set to configure the provider
+// * (all entries are optional):
+// * <pre>
+// *     env.STAGE   :   ordered list of configs to be loaded, e.g. sys-env,GLOBAL,TEST,DEV
+// * </pre>
+// * Adding {@code sys-env} as stage maps the current environment properties using
+// * the priority to be aliged with the context ordering, defined by {@code env.STAGE}.
+// * Similarly the same thing can be done by passing {@code sys-props} as context id for
+// * adding the current System properties to the configuration tree.
+// *
+// * The rootContext can be used to remap the whole property space to an alternate subtree in
+// * the configuration tree overall. This is very handy, if multiple instances of this class
+// * are registered into the same configuration, but with different location setups. Remapping
+// * configuration allows to separate these entries clearly.<br/>
+// * Finally the resource location can be adapted by overriding {@link #getBaseResourcePath()}.
+// * Different formats and loading mechanisms can be implemented by overriding
+// * {@link #loadProperties(String, String, int, List)}.
+// */
+//public class StagedConfigPropertiesProvider extends BaseStagedPropertySourceProvider {
+//
+//    /** The system property to define the stages used. */
+//    private static final String STAGE_PROP = "env.STAGE";
+//    /** The logger used. */
+//
+//    private static final Logger LOGGER = Logger.getLogger(StagedConfigPropertiesProvider.class.getName());
+//
+//    /** The context id for adding the system's environment properties. */
+//    private static final String DEFAULT_ENV = "sys-env";
+//
+//    /** The context id for adding the system's properties. */
+//    private static final String DEFAULT_SYSPROPS = "sys-props";
+//
+//    /**
+//     * Creates a new instance.
+//     * @param rootContext the (optional) root context, can be null.
+//     * @param stages the comma separated list of stages.
+//     */
+//    public StagedConfigPropertiesProvider(String rootContext, String... stages){
+//        super(rootContext, evaluateStages(stages));
+//    }
+//
+//    /**
+//     * Creates a default instance. the stages are read from the {@code env.STAGE} system�propertx
+//     * or a default is applied.
+//     */
+//    public StagedConfigPropertiesProvider(){
+//        super(null, evaluateStages(null));
+//    }
+//
+//    /**
+//     * Evaluates the stages or returns the default STAGE entry.
+//     * @return the stages to be used, never null.
+//     */
+//    private static String[] evaluateStages(String[] stages) {
+//        if(stages!=null && stages.length>0){
+//            return stages.clone();
+//        }
+//        String value = System.getProperty(STAGE_PROP);
+//        if(value==null) {
+//            value = System.getenv(STAGE_PROP);
+//        }
+//        if(value==null){
+//            value = "sys-env,GLOBAL,DEVELOPMENT,sys-props";
+//        }
+//        return value.split(",");
+//    }
+//
+//    @Override
+//    protected Collection<PropertySource> loadStageProperties(
+//            String rootContext, String contextId, int priority) {
+//        List<PropertySource> result = new ArrayList<>();
+//        if (DEFAULT_ENV.equals(contextId)){
+//            result.add(new MapPropertySource(DEFAULT_ENV, System.getenv(),
+//                    rootContext, priority));
+//        }else if (DEFAULT_SYSPROPS.equals(contextId)){
+//            result.add(new MapPropertySource(DEFAULT_SYSPROPS, System.getProperties(),
+//                    rootContext, priority));
+//        }
+//        else{
+//            loadProperties(rootContext, contextId, priority, result);
+//        }
+//        return result;
+//    }
+//
+//    private void loadProperties(String rootContext, String contextId, int priority,
+//                                List<PropertySource> result) {
+//        String cpExp = getBaseResourcePath()+'/' +contextId+".properties";
+//        if(cpExp.startsWith("/")){
+//            cpExp = cpExp.substring(1);
+//        }
+//        for(URL url: ConfigResources.getResourceResolver().getResources(cpExp)){
+//            result.add(new PropertiesResourcePropertySource(rootContext, url, priority));
+//        }
+//    }
+//
+//    /**
+//     * Get the basic resource path used for lookup of properties files.
+//     * @return the basic resource path, never null.
+//     */
+//    protected String getBaseResourcePath() {
+//        return "";
+//    }
+//
+//
+//}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider b/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
deleted file mode 100644
index 2bdf843..0000000
--- a/metamodels/staged/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertySourceProvider
+++ /dev/null
@@ -1,19 +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.staged.spi.StagedConfigPropertiesProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java b/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
index 73a9a59..9692d47 100644
--- a/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
+++ b/metamodels/staged/src/test/java/org/apache/tamaya/dsl/ProfileManagerTest.java
@@ -28,7 +28,7 @@ import static org.junit.Assert.*;
  */
 public class ProfileManagerTest {
 
-    private ProfileManager profileManager = new ProfileManager();
+    private ProfileManager profileManager = ProfileManager.getInstance();
 
     @org.junit.Test
     public void isProfileActive() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0b33f928/metamodels/staged/src/test/resources/tamaya-config.yaml
----------------------------------------------------------------------
diff --git a/metamodels/staged/src/test/resources/tamaya-config.yaml b/metamodels/staged/src/test/resources/tamaya-config.yaml
index a99eda9..c9de1c8 100644
--- a/metamodels/staged/src/test/resources/tamaya-config.yaml
+++ b/metamodels/staged/src/test/resources/tamaya-config.yaml
@@ -24,51 +24,56 @@ TAMAYA:
    - default-active:      DEV
    - defined-by:          sys-property:ENV, env-property:ENV
 
-  PROFILES:
-    <COMMON>:
+  FORMATS:
     - formats:  yaml, properties, xml-properties
     - suffixes:   yaml, yml, properties, xml
-    - sources:
-      - "named:env-properties"   # provider name, or class name
-      - "named:main-args"
-      - "named:sys-properties"
-      - "resource:classpath:META-INF/config/**/*.SUFFIX"
+
+  PROFILES:
+    <COMMON>:
+      - sources:
+        - "named:env-properties"   # provider name, or class name
+        - "named:main-args"
+        - "named:sys-properties"
+        - "resource:classpath:META-INF/config/**/*.SUFFIX"
     DEFAULT:
       - prio:       0   # optional
       - sources:
         - "resource:classpath:META-INF/defaults/**/*.SUFFIX"
         - "resource:file:${config.dir}/defaults/**/*.SUFFIX"
       - filters:
-        - "section:DEFAULTS\.*"
-        - "section:defaults\.*"
-        - "exclude:_\.*"   # removes all meta-entries
+        - "section:DEFAULTS\\.*"
+        - "section:defaults\\.*"
+        - "exclude:_\\.*"   # removes all meta-entries
     TEST:
       - prio:        100   # optional
       - filters:
-        - "section:TEST\.*"
-        - "section:test\.*"
+        - "section:TEST\\.*"
+        - "section:test\\.*"
     PROD:
       - prio:        1000   # optional
       - filters:
-        - "section:PROD\.*"
-        - "section:prod\.*"
+        - "section:PROD\\.*"
+        - "section:prod\\.*"
 
   MODEL:
-      a.b.c:        "Section"
+    - a.b.c:
+      - type:       "Section"
       - owner:      "Test Model"
       - children:   false
       - required:   true
       - validation: "my.abc.ValidatorClass"
 
-      java.version: "Parameter"
+    - java.version:
+      - type:       "Parameter"
       - owner:      "Expression Test"
       - expression: ".*v1.7.*"
       - required:   true
 
-      ch.trivadis:  "Section"       # Declaration only
+    - ch.trivadis:
+      - type:       "Section"       # Declaration only
 
   USAGE:
-      track:        true
+    track:        true
 
 #  FORMAT-DEF:
 #   - formats: yaml, properties, xml-properties


[40/50] [abbrv] incubator-tamaya-sandbox git commit: Added tabs for sys and env props and memory values. Exchanged dropwizard with tomcat.

Posted by pl...@apache.org.
Added tabs for sys and env props and memory values.
Exchanged dropwizard with tomcat.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/f618ada1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/f618ada1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/f618ada1

Branch: refs/heads/master
Commit: f618ada141c647974c46e8a2f7e595b348841c50
Parents: 19c422b
Author: anatole <an...@apache.org>
Authored: Sun Apr 17 22:25:17 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:44 2016 +0200

----------------------------------------------------------------------
 ui/pom.xml                                      |  53 ++++++----
 .../org/apache/tamaya/ui/ApplicationLayout.java |   2 +-
 ui/src/main/java/org/apache/tamaya/ui/MyUI.java | 100 -------------------
 .../java/org/apache/tamaya/ui/TamayaUI.java     |  60 +++++++++++
 .../org/apache/tamaya/ui/VaadinApplication.java |  91 -----------------
 .../java/org/apache/tamaya/ui/VaadinBundle.java |  55 ----------
 .../java/org/apache/tamaya/ui/VadiinApp.java    |  86 ++++++++++++++++
 .../org/apache/tamaya/ui/views/ConfigView.java  |  53 ++++++++--
 8 files changed, 225 insertions(+), 275 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index 216382f..4edbeb8 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -39,6 +39,9 @@ under the License.
         <mainClass>org.apache.tamaya.ui.VaadinApplication</mainClass>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <servlet.api.version>3.0.1</servlet.api.version>
+        <tomcat.version>7.0.57</tomcat.version>
+        <jersey.version>1.19.1</jersey.version>
+        <guava.version>18.0</guava.version>
     </properties>
 
 
@@ -89,35 +92,45 @@ under the License.
             <artifactId>vaadin-client-compiled</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.dropwizard</groupId>
-            <artifactId>dropwizard-core</artifactId>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>${guava.version}</version>
         </dependency>
         <dependency>
-            <groupId>io.dropwizard</groupId>
-            <artifactId>dropwizard-assets</artifactId>
+            <groupId>com.vaadin</groupId>
+            <artifactId>vaadin-themes</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.dropwizard</groupId>
-            <artifactId>dropwizard-testing</artifactId>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-core</artifactId>
+            <version>${tomcat.version}</version>
         </dependency>
-        <!--
-          Needed when using the widgetset optimizer (custom ConnectorBundleLoaderFactory).
-
-          For widgetset compilation, vaadin-client-compiler is automatically added on the
-          compilation classpath by vaadin-maven-plugin so normally there is no need for an
-          explicit dependency.
-        -->
-        <!--
         <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-client-compiler</artifactId>
-            <scope>provided</scope>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-jasper</artifactId>
+            <version>${tomcat.version}</version>
         </dependency>
-        -->
         <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-themes</artifactId>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-logging-juli</artifactId>
+            <version>${tomcat.version}</version>
         </dependency>
+        <!--<dependency>-->
+            <!--<groupId>javax.ws.rs</groupId>-->
+            <!--<artifactId>jsr311-api</artifactId>-->
+            <!--<version>1.1.1</version>-->
+            <!--<scope>provided</scope>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>com.sun.jersey</groupId>-->
+            <!--<artifactId>jersey-server</artifactId>-->
+            <!--<version>${jersey.version}</version>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>com.sun.jersey</groupId>-->
+            <!--<artifactId>jersey-servlet</artifactId>-->
+            <!--<version>${jersey.version}</version>-->
+        <!--</dependency>-->
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
index 7a303eb..2c303a8 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
@@ -54,7 +54,7 @@ public class ApplicationLayout extends HorizontalLayout {
     }
 
     private void setupNavigator() {
-        navigator = new Navigator(MyUI.getCurrent(), content);
+        navigator = new Navigator(VadiinApp.getCurrent(), content);
 
         registerViews();
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/MyUI.java b/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
deleted file mode 100644
index 0dce440..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/MyUI.java
+++ /dev/null
@@ -1,100 +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.ui;
-
-import javax.servlet.annotation.WebServlet;
-
-import com.google.common.eventbus.Subscribe;
-import com.vaadin.annotations.Theme;
-import com.vaadin.annotations.Title;
-import com.vaadin.annotations.VaadinServletConfiguration;
-import com.vaadin.navigator.Navigator;
-import com.vaadin.navigator.View;
-import com.vaadin.server.Page;
-import com.vaadin.server.VaadinRequest;
-import com.vaadin.server.VaadinServlet;
-import com.vaadin.server.VaadinSession;
-import com.vaadin.ui.*;
-import org.apache.tamaya.ui.components.LazyProvider;
-import org.apache.tamaya.ui.components.PageTitleUpdater;
-import org.apache.tamaya.ui.event.LogoutEvent;
-import org.apache.tamaya.ui.event.NavigationEvent;
-import org.apache.tamaya.ui.views.ErrorView;
-import org.apache.tamaya.ui.views.login.LoginEvent;
-import org.apache.tamaya.ui.views.login.LoginView;
-
-/**
- * This UI is the application entry point. A UI may either represent a browser window 
- * (or tab) or some part of a html page where a Vaadin application is embedded.
- * <p>
- * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
- * overridden to add component to the user interface and initialize non-component functionality.
- */
-@Theme("valo")
-@Title("Tamaya")
-public class MyUI extends UI {
-
-    private Content content = new Content();
-
-    @Override
-    protected void init(VaadinRequest vaadinRequest) {
-        setupEventBus();
-
-        if (CurrentUser.isLoggedIn()) {
-            setContent(new ApplicationLayout());
-        } else {
-            setContent(new LoginView());
-        }
-    }
-
-    @Subscribe
-    public void userLoggedIn(
-            LoginEvent event) {
-        CurrentUser.set(event.getUser());
-        setContent(new ApplicationLayout());
-    }
-
-    @Subscribe
-    public void navigateTo(NavigationEvent view) {
-        getNavigator().navigateTo(view.getViewName());
-    }
-
-    public static MyUI getCurrent() {
-        return (MyUI) UI.getCurrent();
-    }
-
-    @Subscribe
-    public void logout(LogoutEvent logoutEvent) {
-        // Don't invalidate the underlying HTTP session if you are using it for something else
-        VaadinSession.getCurrent().getSession().invalidate();
-        VaadinSession.getCurrent().close();
-        Page.getCurrent().reload();
-
-    }
-
-    private void setupEventBus() {
-        org.apache.tamaya.ui.event.EventBus.register(this);
-    }
-
-
-    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
-    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
-    public static class MyUIServlet extends VaadinServlet {
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java b/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
new file mode 100644
index 0000000..b90c402
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
@@ -0,0 +1,60 @@
+/*
+ * 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.ui;
+
+import com.vaadin.server.VaadinServlet;
+import org.apache.catalina.Context;
+import org.apache.catalina.Wrapper;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+
+import java.io.File;
+import java.util.logging.Logger;
+
+public class TamayaUI {
+
+    private static final Logger LOG = Logger.getLogger(TamayaUI.class.getName());
+
+
+    public static void main(String[] args) throws Exception {
+        Configuration config = ConfigurationProvider.getConfiguration();
+        String contextPath = config.getOrDefault("tamaya.server.contextPath", "/tamaya");
+        String appBase = ".";
+        Tomcat tomcat = new Tomcat();
+        tomcat.setPort(Integer.valueOf(config.getOrDefault("tamaya.server.port", Integer.class, 8090) ));
+
+        // Define a web application context.
+        Context context = tomcat.addWebapp(contextPath, new File(
+                appBase).getAbsolutePath());
+        // Add Vadiin servlet
+        Wrapper wrapper = tomcat.addServlet(context, "vadiin-servlet",
+                VaadinServlet.class.getName());
+        wrapper.addInitParameter("ui",
+                VadiinApp.class.getName());
+        wrapper.addInitParameter("productionMode",config.getOrDefault("tamaya.server.productionMode", String.class,
+                "false"));
+        wrapper.addInitParameter("asyncSupported", "true");
+        context.addServletMapping("/*", "vadiin-servlet");
+        // bootstrap.addBundle(new AssetsBundle("/VAADIN", "/VAADIN", null, "vaadin"));
+        tomcat.start();
+        tomcat.getServer().await();
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java b/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
deleted file mode 100644
index 1bdf19e..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/VaadinApplication.java
+++ /dev/null
@@ -1,91 +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.ui;
-
-import io.dropwizard.Application;
-import io.dropwizard.configuration.ConfigurationSourceProvider;
-import io.dropwizard.setup.Bootstrap;
-import io.dropwizard.setup.Environment;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.logging.Logger;
-
-public class VaadinApplication extends Application<VaadinApplication.Configuration> {
-
-    private static final Logger LOG = Logger.getLogger(VaadinApplication.class.getName());
-
-    @Override
-    public void run(Configuration configuration, Environment environment) throws Exception {
-        // empty
-    }
-
-    @Override
-    public void initialize(Bootstrap<Configuration> bootstrap) {
-        bootstrap.setConfigurationSourceProvider(new AdaptiveConfigurationsourceProvider());
-        bootstrap.addBundle(new VaadinBundle(MyUI.MyUIServlet.class, "/tamaya/*"));
-    }
-
-    /**
-     * Configuration source provider that reads from a file (similar to the default), but if not present/resovable also
-     * tries to resolve the path as URL or classpath resource.
-     */
-    private static class AdaptiveConfigurationsourceProvider implements ConfigurationSourceProvider{
-
-        @Override
-        public InputStream open(String path) throws IOException {
-            File file = new File(path);
-            if (file.exists()) {
-                LOG.info("Reading configuration from file: " + path);
-                return new FileInputStream(file);
-            }
-            try {
-                URL url = new URL(path);
-                LOG.info("Reading configuration from url: " + path);
-                return url.openStream();
-
-            } catch (Exception e) {
-                // continue
-            }
-            URL url = getClass().getClassLoader().getResource(path);
-            if (url != null) {
-                LOG.info("Reading configuration from classpath: " + path);
-                return url.openStream();
-            }
-            // try default
-            url = getClass().getClassLoader().getResource("/config/application.yml");
-            if (url != null) {
-                LOG.info("Reading configuration from classpath: /config/application.yml");
-                return url.openStream();
-            }
-            return null;
-        }
-    }
-
-    public static class Configuration extends io.dropwizard.Configuration {
-        public String name;
-    }
-
-    public static void main(String... args) throws Exception {
-        new VaadinApplication().run(args);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java b/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
deleted file mode 100644
index dcdce66..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/VaadinBundle.java
+++ /dev/null
@@ -1,55 +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.ui;
-
-import com.google.common.collect.Maps;
-import io.dropwizard.Bundle;
-import io.dropwizard.assets.AssetsBundle;
-import io.dropwizard.setup.Bootstrap;
-import io.dropwizard.setup.Environment;
-import org.eclipse.jetty.server.session.SessionHandler;
-
-import javax.servlet.Servlet;
-import java.util.Map;
-
-public class VaadinBundle implements Bundle {
-
-    private final Map<String, Class<? extends Servlet>> servlets = Maps.newLinkedHashMap();
-
-    private final SessionHandler sessionHandler;
-
-
-    public VaadinBundle(Class<? extends Servlet> servlet, String pathSpec) {
-        this.sessionHandler = new SessionHandler();
-        servlets.put(pathSpec, servlet);
-    }
-
-    @Override
-    public void initialize(Bootstrap<?> bootstrap) {
-        bootstrap.addBundle(new AssetsBundle("/VAADIN", "/VAADIN", null, "vaadin"));
-    }
-
-    @Override
-    public void run(Environment environment) {
-        environment.servlets().setSessionHandler(sessionHandler);
-        for (Map.Entry<String, Class<? extends Servlet>> servlet : servlets.entrySet()) {
-            environment.getApplicationContext().addServlet(servlet.getValue(), servlet.getKey());
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java b/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
new file mode 100644
index 0000000..60f3d34
--- /dev/null
+++ b/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
@@ -0,0 +1,86 @@
+/*
+ * 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.ui;
+
+import com.google.common.eventbus.Subscribe;
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.Title;
+import com.vaadin.server.Page;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinSession;
+import com.vaadin.ui.*;
+import org.apache.tamaya.ui.event.LogoutEvent;
+import org.apache.tamaya.ui.event.NavigationEvent;
+import org.apache.tamaya.ui.views.login.LoginEvent;
+import org.apache.tamaya.ui.views.login.LoginView;
+
+/**
+ * This UI is the application entry point. A UI may either represent a browser window 
+ * (or tab) or some part of a html page where a Vaadin application is embedded.
+ * <p>
+ * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
+ * overridden to add component to the user interface and initialize non-component functionality.
+ */
+@Theme("valo")
+@Title("Tamaya")
+public class VadiinApp extends UI {
+
+    private Content content = new Content();
+
+    @Override
+    protected void init(VaadinRequest vaadinRequest) {
+        setupEventBus();
+
+        if (CurrentUser.isLoggedIn()) {
+            setContent(new ApplicationLayout());
+        } else {
+            setContent(new LoginView());
+        }
+    }
+
+    @Subscribe
+    public void userLoggedIn(
+            LoginEvent event) {
+        CurrentUser.set(event.getUser());
+        setContent(new ApplicationLayout());
+    }
+
+    @Subscribe
+    public void navigateTo(NavigationEvent view) {
+        getNavigator().navigateTo(view.getViewName());
+    }
+
+    public static VadiinApp getCurrent() {
+        return (VadiinApp) UI.getCurrent();
+    }
+
+    @Subscribe
+    public void logout(LogoutEvent logoutEvent) {
+        // Don't invalidate the underlying HTTP session if you are using it for something else
+        VaadinSession.getCurrent().getSession().invalidate();
+        VaadinSession.getCurrent().close();
+        Page.getCurrent().reload();
+
+    }
+
+    private void setupEventBus() {
+        org.apache.tamaya.ui.event.EventBus.register(this);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/f618ada1/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
index 79e3389..e286bf2 100644
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
+++ b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
@@ -21,12 +21,8 @@ package org.apache.tamaya.ui.views;
 import com.vaadin.navigator.View;
 import com.vaadin.navigator.ViewChangeListener;
 import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.TextField;
-import com.vaadin.ui.Tree;
+import com.vaadin.ui.*;
+import javafx.scene.control.TabPane;
 import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.spi.ServiceContextManager;
 import org.apache.tamaya.ui.UIConstants;
@@ -35,7 +31,9 @@ import org.apache.tamaya.ui.components.VerticalSpacedLayout;
 import org.apache.tamaya.ui.services.MessageProvider;
 
 import javax.annotation.Priority;
+import java.util.Locale;
 import java.util.Map;
+import java.util.TreeMap;
 
 
 public class ConfigView extends VerticalSpacedLayout implements View {
@@ -75,6 +73,10 @@ public class ConfigView extends VerticalSpacedLayout implements View {
                 "This view shows the overall <b>raw</b> configuration tree. Dependening on your access rights you" +
                         "may see partial or masked data. Similarly configuration can be <i>read-only</i> or <i>mutable</i>.",
                 ContentMode.HTML);
+
+        TabSheet tabPane = new TabSheet();
+        VerticalLayout configLayout = new VerticalLayout();
+
         HorizontalLayout filters = new HorizontalLayout();
 
         Button filterButton = new Button("Filter", new Button.ClickListener() {
@@ -87,8 +89,43 @@ public class ConfigView extends VerticalSpacedLayout implements View {
         filters.addComponents(keyFilter, valueFilter, filterButton);
 
         fillTree();
-
-        addComponents(caption, description, filters, tree);
+        configLayout.addComponents(filters, tree);
+        tabPane.addTab(configLayout, "Configuration");
+        TextArea envProps = new TextArea();
+        StringBuilder b = new StringBuilder();
+        envProps.setHeight("100%");
+        envProps.setWidth("100%");
+        envProps.setSizeFull();
+        envProps.setRows(System.getenv().size());
+        for(Map.Entry<String,String> en:new TreeMap<>(System.getenv()).entrySet()){
+            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
+        }
+        envProps.setValue(b.toString());
+        envProps.setReadOnly(true);
+        tabPane.addTab(envProps, "Environment Properties");
+        TextArea sysProps = new TextArea();
+        sysProps.setSizeFull();
+        sysProps.setRows(System.getProperties().size());
+        b.setLength(0);
+        for(Map.Entry<Object,Object> en:new TreeMap<>(System.getProperties()).entrySet()){
+            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
+        }
+        sysProps.setValue(b.toString());
+        sysProps.setReadOnly(true);
+        tabPane.addTab(sysProps, "System Properties");
+        TextArea runtimeProps = new TextArea();
+        runtimeProps.setRows(5);
+        b.setLength(0);
+        b.append("Available Processors : ").append(Runtime.getRuntime().availableProcessors()).append('\n');
+        b.append("Free Memory          : ").append(Runtime.getRuntime().freeMemory()).append('\n');
+        b.append("Max Memory           : ").append(Runtime.getRuntime().maxMemory()).append('\n');
+        b.append("Total Memory         : ").append(Runtime.getRuntime().totalMemory()).append('\n');
+        b.append("Default Locale       : ").append(Locale.getDefault()).append('\n');
+        runtimeProps.setValue(b.toString());
+        runtimeProps.setReadOnly(true);
+        tabPane.addTab(runtimeProps, "Runtime Properties");
+        runtimeProps.setSizeFull();
+        addComponents(caption, description, tabPane);
 
         caption.addStyleName(UIConstants.LABEL_HUGE);
         description.addStyleName(UIConstants.LABEL_LARGE);


[15/50] [abbrv] incubator-tamaya-sandbox git commit: Changed proposed format slightly.

Posted by pl...@apache.org.
Changed proposed format slightly.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/854f0f89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/854f0f89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/854f0f89

Branch: refs/heads/master
Commit: 854f0f89c6e24cfe5cf732f746fb31f3756e7d80
Parents: a479971
Author: Anatole Tresch <an...@apache.org>
Authored: Thu Oct 29 13:09:26 2015 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Thu Oct 29 13:09:26 2015 +0100

----------------------------------------------------------------------
 .../META-INF/javaconfiguration.properties       | 28 ++++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/854f0f89/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 7d8031e..5cae030 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -20,31 +20,31 @@
 # Examples for collection syntax
 
 list=a,b,c
-list{collection-type}=List
-#list{collection-combinationPolicy}=MyLeftAppendingCombinationPolicy
+list.{collection-type}=List
+#list.{collection-combinationPolicy}=MyLeftAppendingCombinationPolicy
 
 arrayList=d;e;f
-arrayList{collection-type}=java.util.ArrayList
-arrayList{collection-separator}=;
-#arrayList{collection-valueParser}=myParserClass
+arrayList.{collection-type}=java.util.ArrayList
+arrayList.{collection-separator}=;
+#arrayList.{collection-valueParser}=myParserClass
 
 linkedList=g,h,i
-linkedList{collection-type}=java.util.LinkedList
+linkedList.{collection-type}=java.util.LinkedList
 
 set=a,b,b
-set{collection-type}=java.util.Set
-set{combinationPolicy}=WarnOnDuplicates
+set.{collection-type}=java.util.Set
+set.{eval-combinationPolicy}=WarnOnDuplicates
 
 sortedSet=a,c,b
-sortedSet{collection:type}=java.util.TreeSet
+sortedSet.{collection-type}=java.util.TreeSet
 
 map=1:a,2:b,3:c
-map{collection-type}=Map
-#map{collection-keyParser}=myParserClass
-#map{collection-valueParser}=myParserClass
+map.{collection-type}=Map
+#map.{collection-keyParser}=myParserClass
+#map.{collection-valueParser}=myParserClass
 
 sortedMap=|3:c||1:a||2:b|
-sortedMap{collection-type}=java.util.TreeMap
+sortedMap.{collection-type}=java.util.TreeMap
 
 concurrentMap=|3:c||1:a||2:b|
-concurrentMap{collection-type}=java.util.ConcurrentHashMap
\ No newline at end of file
+concurrentMap.{collection-type}=java.util.ConcurrentHashMap
\ No newline at end of file


[25/50] [abbrv] incubator-tamaya-sandbox git commit: Added more complex scenarios and features for configuring of collections. Refactored parsing logic into separate utility class.

Posted by pl...@apache.org.
Added more complex scenarios and features for configuring of collections. Refactored parsing logic into separate utility class.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/e94ac73d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/e94ac73d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/e94ac73d

Branch: refs/heads/master
Commit: e94ac73dfa88b9b974ec7b6eddb52a39fcbcdaeb
Parents: dda281b
Author: anatole <an...@apache.org>
Authored: Wed Feb 17 00:31:16 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Wed Feb 17 00:31:16 2016 +0100

----------------------------------------------------------------------
 .../internal/AdaptiveCombinationPolicy.java     |   3 +-
 .../internal/ArrayListConverter.java            |  50 ++----
 .../internal/CollectionConverter.java           |   1 -
 .../internal/ConcurrentHashMapConverter.java    |  25 +--
 .../collections/internal/HashMapConverter.java  |   6 +-
 .../collections/internal/HashSetConverter.java  |   5 +-
 .../collections/internal/ItemTokenizer.java     | 170 +++++++++++++++++++
 .../internal/LinkedListConverter.java           |   5 +-
 .../collections/internal/TreeSetConverter.java  |   5 +-
 .../collections/CollectionAdvancedTests.java    |  78 +++++++++
 .../collections/MyUpperCaseConverter.java       |  33 ++++
 .../META-INF/javaconfiguration.properties       |  30 ++--
 12 files changed, 324 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index 63fea76..ac5af36 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -68,6 +68,7 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
             }
         }
         // check for default collection combination policies for lists, sets, maps etc.
+        final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault('_' + key+".collection-separator", ",");
         String collectionType = ConfigurationProvider.getConfiguration().get('_' + key+".collection-type");
         if(collectionType!=null) {
             if (collectionType.startsWith("java.util.")) {
@@ -96,7 +97,7 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
                         String oldVal = newMapValue.get(key);
                         newMapValue.putAll(newValue.getConfigEntries());
                         if(oldVal!=null){
-                            newMapValue.put(key,oldVal + ',' + newValue.getValue());
+                            newMapValue.put(key,oldVal + SEPARATOR + newValue.getValue());
                         }
                         return newMapValue;
                     }else{

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
index e55b44a..3e95438 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tamaya.collections.internal;
 
+import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
@@ -47,47 +48,20 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
 
     @Override
     public ArrayList convert(String value, ConversionContext context) {
-        ArrayList<String> rawList = split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
-        if(converterClass!=null){
-            try {
-                PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                ArrayList<Object> mlist = new ArrayList<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
-                        TypeLiteral.of(context.getTargetType().getType())).build();
-                for(String raw:rawList){
-                    Object convValue = valueConverter.convert(raw, ctx);
-                    if(convValue!=null){
-                        mlist.add(convValue);
-                        continue;
-                    }
-                }
-                return mlist;
+        final String SEPARATOR = ConfigurationProvider.getConfiguration().getOrDefault(
+                '_' + context.getKey()+".collection-separator", ",");
+        List<String> rawList = ItemTokenizer.split(value, SEPARATOR);
 
-            } catch (Exception e) {
-                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
-            }
-        }
-        return rawList;
-    }
-
-    static ArrayList<String>  split(String value) {
-        ArrayList<String> result = new ArrayList<>();
-        int start = 0;
-        int end = value.indexOf(',',start);
-        while(end>0) {
-            if (end>0 && (value.charAt(end - 1) != '\\')) {
-                result.add(value.substring(start, end));
-                start = end + 1;
-                end = value.indexOf(',',start);
+        ArrayList<Object> mlist = new ArrayList<>();
+        for(String raw:rawList){
+            Object convValue = ItemTokenizer.convertValue(raw, context);
+            if (convValue != null) {
+                mlist.add(convValue);
             }else{
-                end = value.indexOf(',',end + 1);
+                LOG.log(Level.SEVERE, "Failed to convert collection value type for '"+raw+"'.");
             }
-            end = value.indexOf(',',start);
-        }
-        if(start < value.length()){
-            result.add(value.substring(start));
         }
-        return result;
+        return mlist;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
index ecd2878..0d9a799 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
@@ -23,7 +23,6 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 /**
  *  PropertyConverter for gnerating a LIST representation of values.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
index f472c4c..07aecc8 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
@@ -46,16 +46,17 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
 
     @Override
     public ConcurrentHashMap convert(String value, ConversionContext context) {
-        List<String> rawList = ArrayListConverter.split(value);
+        List<String> rawList = ItemTokenizer.split(value, context);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
                 ConcurrentHashMap<String,Object> mlist = new ConcurrentHashMap<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                        context.getConfigurationContext(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
-                    String[] items = splitItems(raw);
+                    String[] items = ItemTokenizer.splitMapEntry(raw, context);
                     Object convValue = valueConverter.convert(items[1], ctx);
                     if(convValue!=null){
                         mlist.put(items[0], convValue);
@@ -70,7 +71,7 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
         }
         ConcurrentHashMap<String,String> result = new ConcurrentHashMap<>();
         for(String raw:rawList){
-            String[] items = splitItems(raw);
+            String[] items = ItemTokenizer.splitMapEntry(raw, context);
             if(items!=null){
                 result.put(items[0], items[1]);
             }
@@ -78,19 +79,5 @@ public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentH
         return result;
     }
 
-    static String[] splitItems(String raw) {
-        String[] items = raw.split("::");
-        if(items[0].trim().startsWith("[")){
-            items[0]= items[0].trim();
-            items[0] = items[0].substring(1);
-        }else{
-            items[0]= items[0].trim();
-        }
-        if(items[1].trim().endsWith("]")){
-            items[1] = items[1].substring(0,items[1].length()-1);
-        }else{
-            items[1]= items[1].trim();
-        }
-        return items;
-    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 49defaa..29d7ad7 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -24,7 +24,6 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -47,13 +46,14 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
 
     @Override
     public HashMap convert(String value, ConversionContext context) {
-        List<String> rawList = ArrayListConverter.split(value);
+        List<String> rawList = ItemTokenizer.split(value, context);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
                 HashMap<String,Object> mlist = new HashMap<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                        context.getConfigurationContext(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
                     String[] items = splitItems(raw);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
index 0551549..47c32f6 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -49,13 +49,14 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
 
     @Override
     public HashSet convert(String value, ConversionContext context) {
-        List<String> rawList = ArrayListConverter.split(value);
+        List<String> rawList = ItemTokenizer.split(value, context);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
                 HashSet<Object> mlist = new HashSet<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                        context.getConfigurationContext(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
                     Object convValue = valueConverter.convert(raw, ctx);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
new file mode 100644
index 0000000..37f7cf1
--- /dev/null
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ItemTokenizer.java
@@ -0,0 +1,170 @@
+/*
+ * 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.collections.internal;
+
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Helper class that implements the tokenizing of the entries of a configuration value.
+ */
+final class ItemTokenizer {
+
+    private static final Logger LOG = Logger.getLogger(ItemTokenizer.class.getName());
+
+    /**
+     * Private singleton.
+     */
+    private ItemTokenizer(){}
+
+    /**
+     * Splits the given value using the given separator. Matcjhing is done by traversing the String value using
+     * {@code indexOf} calls, one by one. The last unresolvable item (without any next separator token)
+     * is added at the end of the list.
+     * @param value the value, not null.
+     * @param context the conversion context.
+     * @return the tokenized value as list, in order of occurrence.
+     */
+    public static List<String> split(String value, ConversionContext context){
+        return split(value, ConfigurationProvider.getConfiguration().getOrDefault(
+                '_' + context.getKey()+".collection-separator", ","));
+    }
+
+    /**
+     * Splits the given value using the given separator. Matcjhing is done by traversing the String value using
+     * {@code indexOf} calls, one by one. The last unresolvable item (without any next separator token)
+     * is added at the end of the list.
+     * @param value the value, not null.
+     * @param separator the separator to be used.
+     * @return the tokenized value as list, in order of occurrence.
+     */
+    public static List<String> split(String value, final String separator) {
+        ArrayList<String> result = new ArrayList<>();
+        int start = 0;
+        int end = value.indexOf(separator,start);
+        while(end>0) {
+            if (end>0 && (value.charAt(end - 1) != '\\')) {
+                result.add(value.substring(start, end));
+                start = end + separator.length();
+                end = value.indexOf(separator,start);
+            }else{
+                end = value.indexOf(separator,end + separator.length());
+            }
+            end = value.indexOf(separator,start);
+        }
+        if(start < value.length()){
+            result.add(value.substring(start));
+        }
+        return result;
+    }
+
+    /**
+     * plits the given String value as a map entry, splitting it into key and value part with the given separator.
+     * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
+     * parts are normally trimmed, unless they are enmcosed with brackets {@code []}.
+     * @param mapEntry the entry, not null.
+     * @param context the conversion context.
+     * @return an array of length 2, with the trimmed and parsed key/value pair.
+     */
+    public static String[] splitMapEntry(String mapEntry, ConversionContext context){
+        return splitMapEntry(mapEntry, ConfigurationProvider.getConfiguration().getOrDefault(
+                '_' + context.getKey()+".collection-map-separator", ","));
+    }
+
+    /**
+     * Splits the given String value as a map entry, splitting it into key and value part with the given separator.
+     * If the value cannot be split then {@code key = value = mapEntry} is used for further processing. key or value
+     * parts are normally trimmed, unless they are enmcosed with brackets {@code []}.
+     * @param mapEntry the entry, not null.
+     * @param separator the separator, not null.
+     * @return an array of length 2, with the trimmed and parsed key/value pair.
+     */
+    public static String[] splitMapEntry(final String mapEntry, final String separator) {
+        int index = mapEntry.indexOf(separator);
+        String[] items;
+        if(index<0) {
+            items = new String[]{mapEntry, mapEntry};
+        }else {
+            items = new String[]{mapEntry.substring(0,index),
+                                 mapEntry.substring(index+separator.length())};
+        }
+        if(items[0].trim().startsWith("[")){
+            items[0]= items[0].trim();
+            items[0] = items[0].substring(1);
+        }else{
+            items[0]= items[0].trim();
+        }
+        if(items[1].trim().endsWith("]")){
+            items[1] = items[1].substring(0,items[1].length()-1);
+        }else{
+            items[1]= items[1].trim();
+        }
+        return items;
+    }
+
+    /**
+     * Parses the given value into the required collection target type, defined by the context.
+     * @param value the raw String value.
+     * @param context the context
+     * @return the parsed value, or null.
+     */
+    public static Object convertValue(String value, ConversionContext context) {
+        String converterClass = context.getConfiguration().get('_' + context.getKey() + ".item-converter");
+        List<PropertyConverter<Object>> valueConverters = new ArrayList<>(1);
+        if (converterClass != null) {
+            try {
+                valueConverters.add((PropertyConverter<Object>) Class.forName(converterClass).newInstance());
+            } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+            }
+        }
+        if (TypeLiteral.getTypeParameters(context.getTargetType().getType()).length>0) {
+            valueConverters.addAll(context.getConfigurationContext().getPropertyConverters(
+                    TypeLiteral.of(TypeLiteral.getTypeParameters(context.getTargetType().getType())[0])));
+        }
+        ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                context.getConfigurationContext(), context.getKey(),
+                TypeLiteral.of(context.getTargetType().getType())).build();
+        Object result = null;
+        if (valueConverters.isEmpty()) {
+            return value;
+        } else {
+            for (PropertyConverter<Object> conv : valueConverters) {
+                try {
+                    result = conv.convert(value, ctx);
+                    if (result != null) {
+                        return result;
+                    }
+                } catch (Exception e) {
+                    LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
+                }
+            }
+        }
+        LOG.log(Level.SEVERE, "Failed to convert collection value type for '" + value + "'.");
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index f882c78..986a303 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -46,13 +46,14 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> {
 
     @Override
     public LinkedList convert(String value, ConversionContext context) {
-        List<String> rawList = ArrayListConverter.split(value);
+        List<String> rawList = ItemTokenizer.split(value, context);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
                 LinkedList<Object> mlist = new LinkedList<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                        context.getConfigurationContext(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
                     Object convValue = valueConverter.convert(raw, ctx);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index e9e2282..f9cba02 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -47,13 +47,14 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> {
 
     @Override
     public TreeSet convert(String value, ConversionContext context) {
-        List<String> rawList = ArrayListConverter.split(value);
+        List<String> rawList = ItemTokenizer.split(value, context);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
                 TreeSet<Object> mlist = new TreeSet<>();
-                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
+                ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(),
+                        context.getConfigurationContext(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
                     Object convValue = valueConverter.convert(raw, ctx);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
new file mode 100644
index 0000000..435ed5d
--- /dev/null
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionAdvancedTests.java
@@ -0,0 +1,78 @@
+package org.apache.tamaya.collections;
+
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
+import org.junit.Test;
+
+import java.util.Currency;
+import java.util.List;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Created by atsticks on 16.02.16.
+ */
+public class CollectionAdvancedTests {
+
+    /**
+     * Tests if a custom separator works, Config is
+     * <pre>
+     *  sep-list=a,b,c|d,e,f|g,h,i
+     *  _sep-list.collection-type=List
+     *  _sep-list.collection-separator=|
+     * </pre>
+     */
+    @Test
+    public void testCustomSeparator(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("sep-list", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(3, items.size());
+        assertEquals("a,b,c", items.get(0));
+        assertEquals("d,e,f", items.get(1));
+        assertEquals("g,h,i", items.get(2));
+    }
+
+    /**
+     * Test typed content.
+     * <pre>
+     *  currency-list=CHF,USD,YEN
+     *  _currency-list.collection-type=List
+     * </pre>
+     */
+    @Test
+    public void testTypedContent(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<Currency> items = config.get("currency-list", new TypeLiteral<List<Currency>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(3, items.size());
+        assertEquals("CHF", items.get(0).getCurrencyCode());
+        assertEquals("USD", items.get(1).getCurrencyCode());
+        assertEquals("USS", items.get(2).getCurrencyCode());
+    }
+
+    /**
+     * Tests if a custom parser works, Config is
+     * <pre>
+     *  parser-list=a,b,c
+     *  _parser-list.collection-type=List
+     *  _parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
+     * </pre>
+     */
+    @Test
+    public void testCustomParser(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("parser-list", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(3, items.size());
+        assertEquals("(A)", items.get(0));
+        assertEquals("(B)", items.get(1));
+        assertEquals("(C)", items.get(2));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
new file mode 100644
index 0000000..1c95261
--- /dev/null
+++ b/collections/src/test/java/org/apache/tamaya/collections/MyUpperCaseConverter.java
@@ -0,0 +1,33 @@
+/*
+ * 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.collections;
+
+import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
+
+/**
+ * Example converter that is used for testing the custom parsing functionality. It sorrounds values with () and
+ * converts them to uppercase.
+ */
+public class MyUpperCaseConverter implements PropertyConverter<String>{
+    @Override
+    public String convert(String value, ConversionContext context) {
+        return "("+value.toUpperCase()+")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/e94ac73d/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index 76e5e84..2bb8414 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -56,22 +56,14 @@ _typed.hashmap.collection-type=java.util.HashMap
 typed.treemap=1::a, 2::b, 3::c, [4:: ]
 _typed.treemap.collection-type=TreeMap
 
-# Config for tests with combination policy
-list=a,b,c
-_list.collection-type=List
-arrayList=d,e,f
-_arrayList.collection-type=java.util.ArrayList
-linkedList=g,h,i
-_linkedList.collection-type=java.util.LinkedList
-set=a,b,b
-_set.collection-type=java.util.Set
-sortedSet=a,c,b
-_sortedSet.collection-type=java.util.TreeSet
-map=1::a, 2::b, 3::c
-_map.collection-type=Map
-sortedmap=[3 :: c], 1 :: a, 2 :: b
-_sortedmap.collection-type=SorteedMap
-treemap=[3 :: c], 1 :: a, 2 :: b
-_treemap.collection-type=java.util.TreeMap
-concurrentMap=[3::c], 1::a, key::value
-_concurrentMap.collection-type=java.util.ConcurrentHashMap
\ No newline at end of file
+# Config for advanced tests
+sep-list=a,b,c|d,e,f|g,h,i
+_sep-list.collection-type=List
+_sep-list.collection-separator=|
+currency-list=CHF,USD,USS
+_currency-list.collection-type=List
+
+parser-list=a,b,c
+_parser-list.collection-type=List
+_parser-list.item-converter=org.apache.tamaya.collections.MyUpperCaseConverter
+


[06/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.

Posted by pl...@apache.org.
TAMAYA-115: Implemented multi classpath environment PropertySourceProvider, with relocation capability.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/47eb7a5d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/47eb7a5d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/47eb7a5d

Branch: refs/heads/master
Commit: 47eb7a5d02e88199650d4f23e78f5d2c8b39dadc
Parents: 4f0ff1e
Author: anatole <an...@apache.org>
Authored: Tue Oct 6 09:48:40 2015 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Oct 6 09:55:40 2015 +0200

----------------------------------------------------------------------
 .../apache/tamaya/environment/package-info.java | 22 --------------------
 ...org.apache.tamaya.environment.spi.ContextSpi | 19 -----------------
 2 files changed, 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/47eb7a5d/environment/src/main/java/org/apache/tamaya/environment/package-info.java
----------------------------------------------------------------------
diff --git a/environment/src/main/java/org/apache/tamaya/environment/package-info.java b/environment/src/main/java/org/apache/tamaya/environment/package-info.java
deleted file mode 100644
index 5500785..0000000
--- a/environment/src/main/java/org/apache/tamaya/environment/package-info.java
+++ /dev/null
@@ -1,22 +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.
- */
-/**
- * Main API of the environment module.
- */
-package org.apache.tamaya.resource.internal;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/47eb7a5d/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
----------------------------------------------------------------------
diff --git a/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi b/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
deleted file mode 100644
index 166dd67..0000000
--- a/environment/src/test/resources/META-INF/services/org.apache.tamaya.environment.spi.ContextSpi
+++ /dev/null
@@ -1,19 +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.environment.internal.SingleEnvironmentManager


[34/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-91 Implemented converter for periods.

Posted by pl...@apache.org.
TAMAYA-91 Implemented converter for periods.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/ea500630
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/ea500630
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/ea500630

Branch: refs/heads/master
Commit: ea5006302eb1080b568591bd37dd70a9bd56d9ed
Parents: c005f28
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Thu Mar 10 22:11:31 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Thu Mar 10 22:11:44 2016 +0100

----------------------------------------------------------------------
 .../apache/tamaya/jodatime/PeriodConverter.java | 15 +++---
 .../org.apache.tamaya.spi.PropertyConverter     |  3 +-
 .../tamaya/jodatime/PeriodConverterIT.java      | 51 ++++++++++++++++++++
 .../tamaya/jodatime/PeriodConverterTest.java    | 40 ++++++++++++---
 4 files changed, 94 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ea500630/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
index 6aca863..a350d58 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
@@ -37,11 +37,9 @@ import java.util.regex.Pattern;
  * period:</p>
  *
  *   <ol>
- *     <li>Alternatice format ({@code Pyyyy-mm-ddThh:mm:ss})</li>
+ *     <li>Alternative format ({@code Pyyyy-mm-ddThh:mm:ss})</li>
  *     <li>ISO format ({@code PyYmMwWdDThHmMsS})</li>
  *   </ol>
- *
- *
  */
 public class PeriodConverter implements PropertyConverter<org.joda.time.Period> {
 
@@ -60,11 +58,11 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period>
 
     @Override
     public Period convert(String value, ConversionContext context) {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
-
         String trimmed = Objects.requireNonNull(value).trim();
-        MutablePeriod result = null;
 
+        addSupportedFormats(context);
+
+        MutablePeriod result = null;
         PeriodParser format = null;
 
         if (isISOFormat(trimmed)) {
@@ -85,6 +83,11 @@ public class PeriodConverter implements PropertyConverter<org.joda.time.Period>
         return result != null ? result.toPeriod() : null;
     }
 
+    private void addSupportedFormats(ConversionContext context) {
+        context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS");
+        context.addSupportedFormats(PeriodConverter.class, "Pyyyy-mm-ddThh:mm:ss");
+    }
+
     private boolean isISOFormat(String value) {
         return ISO_PATTERN.matcher(value).matches();
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ea500630/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
----------------------------------------------------------------------
diff --git a/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
index e182a4c..f312e9d 100644
--- a/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
@@ -17,4 +17,5 @@
 # under the License.
 #
 org.apache.tamaya.jodatime.DateTimeConverter
-org.apache.tamaya.jodatime.DateTimeZoneConverter
\ No newline at end of file
+org.apache.tamaya.jodatime.DateTimeZoneConverter
+org.apache.tamaya.jodatime.PeriodConverter

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ea500630/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
new file mode 100644
index 0000000..f110754
--- /dev/null
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
@@ -0,0 +1,51 @@
+/*
+ * 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.jodatime;
+
+
+import org.apache.tamaya.spi.PropertyConverter;
+import org.apache.tamaya.spi.ServiceContextManager;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.notNullValue;
+
+public class PeriodConverterIT {
+    @Test
+    public void periodConverterCanBeFoundAsServiceProvider() {
+        List<PropertyConverter> formats = ServiceContextManager.getServiceContext()
+                                                               .getServices(PropertyConverter.class);
+
+        PropertyConverter<?> converter = null;
+
+        for (PropertyConverter format : formats) {
+            if (format instanceof PeriodConverter) {
+                converter = format;
+                break;
+            }
+        }
+
+        assertThat("Converter not found via service context.", converter, notNullValue());
+        assertThat(converter, instanceOf(PeriodConverter.class));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ea500630/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
index 23689cd..0affb2c 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
+import org.joda.time.DateTime;
 import org.joda.time.Period;
 import org.joda.time.format.ISOPeriodFormat;
 import org.joda.time.format.PeriodFormatter;
@@ -28,7 +30,10 @@ import org.mockito.Mockito;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
 
 public class PeriodConverterTest {
     /*
@@ -40,7 +45,6 @@ public class PeriodConverterTest {
 
     private static PeriodFormatter FORMATTER = ISOPeriodFormat.standard();
 
-    @Ignore
     @Test
     public void canConvertPropertiesInAllSupportedFormats() {
         Object[][] inputResultPairs = {
@@ -57,11 +61,7 @@ public class PeriodConverterTest {
              {"P1YT1S", FORMATTER.parsePeriod("P1Y0M0W0DT0H0M1S")},
 
              // Alternative format
-             {"P0002-03-00T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")},
-             {"P0002-03T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")},
-             {"P0002T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")},
-             {"P0002T00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")}
-
+             {"P0002-03-00T00:00:05", FORMATTER.parsePeriod("P2Y3M0W0DT0H0M5S")}
         };
 
         ConversionContext context = Mockito.mock(ConversionContext.class);
@@ -74,9 +74,33 @@ public class PeriodConverterTest {
         }
     }
 
-    @Ignore
+    @Test
+    public void invalidInputValuesResultInReturningNull() {
+        String[] inputValues = {
+            "P0002-03T00:00:05",
+            "P0002T00:00:05",
+            "P0002T00:05"
+        };
+
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
+        for (String input : inputValues) {
+            Period period = converter.convert(input, context);
+
+            assertThat(period, nullValue());
+        }
+    }
+
     @Test
     public void allSupportedFormatsAreAddedToTheConversionContext() {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+        String name = PeriodConverter.class.getSimpleName();
+
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build();
+
+        converter.convert("P7Y0M0W0DT0H0M0S", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(2));
+        assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")"));
     }
 }


[22/50] [abbrv] incubator-tamaya-sandbox git commit: Added test and fixes for collection support.

Posted by pl...@apache.org.
Added test and fixes for collection support.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/0d9afc23
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/0d9afc23
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/0d9afc23

Branch: refs/heads/master
Commit: 0d9afc2375d6d62710ebbae104d256b5f0a59274
Parents: 8e237d9
Author: anatole <an...@apache.org>
Authored: Mon Feb 15 01:51:23 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Feb 15 01:51:23 2016 +0100

----------------------------------------------------------------------
 .../internal/AdaptiveCombinationPolicy.java     |  7 +++++
 .../collections/internal/HashMapConverter.java  | 27 ++++++++++++++++----
 .../internal/LinkedListConverter.java           |  2 +-
 .../collections/internal/SetConverter.java      |  2 +-
 .../collections/internal/TreeMapConverter.java  |  6 ++---
 .../collections/internal/TreeSetConverter.java  |  4 +--
 6 files changed, 36 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index 9170eb3..161e874 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -43,6 +43,13 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
 
     @Override
     public Map<String,String> collect(Map<String,String> currentValue, String key, PropertySource propertySource){
+        if(key.startsWith("_")){
+            PropertyValue newValue = propertySource.get(key);
+            if(newValue!=null){
+                return newValue.getConfigEntries();
+            }
+            return currentValue;
+        }
         String adaptiveCombinationPolicyClass  = ConfigurationProvider.getConfiguration().get('_' + key+".combinationPolicy");
         if(adaptiveCombinationPolicyClass!=null){
             PropertyValueCombinationPolicy delegatePolicy = null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 76ded4f..8091dc6 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -24,6 +24,7 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -68,13 +69,29 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
                 LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
             }
         }
-        return null;
+        HashMap<String,String> result = new HashMap<>();
+        for(String raw:rawList){
+            String[] items = splitItems(raw);
+            if(items!=null){
+                result.put(items[0], items[1]);
+            }
+        }
+        return result;
     }
 
     static String[] splitItems(String raw) {
-        String[] items = new String[2];
-        // check for '[]'
-        // else split with ':'
-        return raw.split("::");
+        String[] items = raw.split("::");
+        if(items[0].trim().startsWith("[")){
+            items[0]= items[0].trim();
+            items[0] = items[0].substring(1);
+        }else{
+            items[0]= items[0].trim();
+        }
+        if(items[1].trim().endsWith("]")){
+            items[1] = items[1].substring(0,items[1].length()-1);
+        }else{
+            items[1]= items[1].trim();
+        }
+        return items;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index d41211c..f1c2514 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -56,7 +56,7 @@ public class LinkedListConverter implements PropertyConverter<LinkedList> {
                 LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
             }
         }
-        return null;
+        return new LinkedList(rawList);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
index ddf19ad..27fdee9 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
@@ -27,7 +27,7 @@ import java.util.Set;
 /**
  *  PropertyConverter for gnerating a LIST representation of values.
  */
-public class SetConverter implements PropertyConverter<Set<?>> {
+public class SetConverter implements PropertyConverter<Set> {
 
     @Override
     public Set convert(String value, ConversionContext context) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
index 08b92fd..b350944 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeMapConverter.java
@@ -26,7 +26,7 @@ import java.util.TreeMap;
 /**
  *  PropertyConverter for gnerating HashMap representation of a values.
  */
-public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> {
+public class TreeMapConverter implements PropertyConverter<TreeMap> {
 
     /** The shared instance, used by other collection converters in this package.*/
     private static TreeMapConverter INSTANCE = new TreeMapConverter();
@@ -40,7 +40,7 @@ public class TreeMapConverter implements PropertyConverter<TreeMap<?,?>> {
     }
 
     @Override
-    public TreeMap<?, ?> convert(String value, ConversionContext context) {
-        return null;
+    public TreeMap convert(String value, ConversionContext context) {
+        return new TreeMap<>(HashMapConverter.getInstance().convert(value, context));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/0d9afc23/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index fca00de..32fee83 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -30,7 +30,7 @@ import java.util.logging.Logger;
 /**
  *  PropertyConverter for gnerating HashSet representation of a values.
  */
-public class TreeSetConverter implements PropertyConverter<TreeSet<?>> {
+public class TreeSetConverter implements PropertyConverter<TreeSet> {
 
     private static final Logger LOG = Logger.getLogger(TreeSetConverter.class.getName());
 
@@ -68,6 +68,6 @@ public class TreeSetConverter implements PropertyConverter<TreeSet<?>> {
                 LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
             }
         }
-        return null;
+        return new TreeSet<>(rawList);
     }
 }


[38/50] [abbrv] incubator-tamaya-sandbox git commit: Set new development version.

Posted by pl...@apache.org.
Set new development version.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/ae0a9f14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/ae0a9f14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/ae0a9f14

Branch: refs/heads/master
Commit: ae0a9f144424b04886c59656464ca649b02a0f83
Parents: c4c3d9b
Author: anatole <an...@apache.org>
Authored: Thu Apr 14 00:47:11 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Thu Apr 14 00:47:11 2016 +0200

----------------------------------------------------------------------
 integration/pom.xml       | 2 +-
 jodatime/pom.xml          | 2 +-
 metamodels/pom.xml        | 2 +-
 metamodels/simple/pom.xml | 2 +-
 metamodels/staged/pom.xml | 2 +-
 pom.xml                   | 2 +-
 remote/pom.xml            | 2 +-
 sysprops/pom.xml          | 2 +-
 ui/pom.xml                | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/integration/pom.xml
----------------------------------------------------------------------
diff --git a/integration/pom.xml b/integration/pom.xml
index efecb5e..e0d54d6 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -24,7 +24,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-extensions</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
     </parent>
 
     <packaging>pom</packaging>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/jodatime/pom.xml
----------------------------------------------------------------------
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 71ffc7a..0280212 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -25,7 +25,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/metamodels/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/pom.xml b/metamodels/pom.xml
index 79513d2..9304deb 100644
--- a/metamodels/pom.xml
+++ b/metamodels/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/metamodels/simple/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/simple/pom.xml b/metamodels/simple/pom.xml
index 1d1b26b..9c96c28 100644
--- a/metamodels/simple/pom.xml
+++ b/metamodels/simple/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext.metamodels</groupId>
         <artifactId>tamaya-metamodels</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
     <artifactId>tamaya-metamodels-simple</artifactId>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/metamodels/staged/pom.xml
----------------------------------------------------------------------
diff --git a/metamodels/staged/pom.xml b/metamodels/staged/pom.xml
index 324ea5e..52a1e73 100644
--- a/metamodels/staged/pom.xml
+++ b/metamodels/staged/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext.metamodels</groupId>
         <artifactId>tamaya-metamodels</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 543b896..12a3760 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya</groupId>
         <artifactId>tamaya-all</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
     </parent>
 
     <artifactId>tamaya-sandbox</artifactId>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/remote/pom.xml
----------------------------------------------------------------------
diff --git a/remote/pom.xml b/remote/pom.xml
index e47b2bf..c8917f4 100644
--- a/remote/pom.xml
+++ b/remote/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-extensions</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/sysprops/pom.xml
----------------------------------------------------------------------
diff --git a/sysprops/pom.xml b/sysprops/pom.xml
index 96f0cd9..c40f4ea 100644
--- a/sysprops/pom.xml
+++ b/sysprops/pom.xml
@@ -23,7 +23,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-sandbox</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
     <artifactId>tamaya-sysprops</artifactId>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/ae0a9f14/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
index b3a3b95..f11aa75 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -24,7 +24,7 @@ under the License.
     <parent>
         <groupId>org.apache.tamaya.ext</groupId>
         <artifactId>tamaya-extensions</artifactId>
-        <version>0.2-incubating-SNAPSHOT</version>
+        <version>0.3-incubating-SNAPSHOT</version>
         <relativePath>..</relativePath>
     </parent>
 


[24/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-114: Tested and implemented base functionality.

Posted by pl...@apache.org.
TAMAYA-114: Tested and implemented base functionality.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/dda281b2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/dda281b2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/dda281b2

Branch: refs/heads/master
Commit: dda281b2e2c76c061e7c183f52d7565617f14566
Parents: e37c2e0
Author: anatole <an...@apache.org>
Authored: Mon Feb 15 17:25:02 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Feb 15 17:25:02 2016 +0100

----------------------------------------------------------------------
 .../internal/AdaptiveCombinationPolicy.java     |  12 +-
 .../internal/ArrayListConverter.java            |  10 +-
 .../internal/CollectionConverter.java           |  30 ++-
 .../internal/ConcurrentHashMapConverter.java    |  14 +-
 .../collections/internal/HashMapConverter.java  |   4 +-
 .../collections/internal/HashSetConverter.java  |   4 +-
 .../internal/LinkedListConverter.java           |  13 +-
 .../collections/internal/ListConverter.java     |  21 +-
 .../collections/internal/MapConverter.java      |  25 ++-
 .../collections/internal/SetConverter.java      |  21 +-
 .../collections/internal/TreeSetConverter.java  |   2 +-
 .../org.apache.tamaya.spi.PropertyConverter     |   1 +
 .../collections/CollectionsBaseTests.java       | 202 ++++++++++++++++++-
 .../CollectionsTypedReadOnlyTests.java          | 199 +++++++-----------
 .../collections/CollectionsTypedTests.java      | 165 ++++++++-------
 .../META-INF/javaconfiguration.properties       |  34 ++++
 16 files changed, 525 insertions(+), 232 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
index 161e874..63fea76 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/AdaptiveCombinationPolicy.java
@@ -24,6 +24,7 @@ import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
 
 import javax.annotation.Priority;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -88,14 +89,21 @@ public class AdaptiveCombinationPolicy implements PropertyValueCombinationPolicy
                 case "SortedMap":
                     PropertyValue newValue = propertySource.get(key);
                     if(newValue!=null){
-                        Map<String,String> newMapValue = new HashMap<>(currentValue);
+                        Map<String,String> newMapValue = new HashMap<>();
+                        if(currentValue!=null){
+                            newMapValue.putAll(currentValue);
+                        }
                         String oldVal = newMapValue.get(key);
+                        newMapValue.putAll(newValue.getConfigEntries());
                         if(oldVal!=null){
                             newMapValue.put(key,oldVal + ',' + newValue.getValue());
                         }
                         return newMapValue;
                     }else{
-                        return newValue.getConfigEntries();
+                        if(currentValue!=null){
+                            return currentValue;
+                        }
+                        return Collections.emptyMap();
                     }
                 default:
                     LOG.log(Level.SEVERE, "Unsupported collection-type for key: " + key + ": " + collectionType);

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
index 4c6b06d..e55b44a 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ArrayListConverter.java
@@ -47,8 +47,8 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
 
     @Override
     public ArrayList convert(String value, ConversionContext context) {
-        List<String> rawList = split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        ArrayList<String> rawList = split(value);
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
@@ -68,11 +68,11 @@ public class ArrayListConverter implements PropertyConverter<ArrayList> {
                 LOG.log(Level.SEVERE, "Error convertion config to ArrayList type.", e);
             }
         }
-        return null;
+        return rawList;
     }
 
-    static List<String>  split(String value) {
-        List<String> result = new ArrayList<>();
+    static ArrayList<String>  split(String value) {
+        ArrayList<String> result = new ArrayList<>();
         int start = 0;
         int end = value.indexOf(',',start);
         while(end>0) {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
index 80d65cd..ecd2878 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/CollectionConverter.java
@@ -23,6 +23,7 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
 /**
  *  PropertyConverter for gnerating a LIST representation of values.
@@ -31,6 +32,33 @@ public class CollectionConverter implements PropertyConverter<Collection> {
 
     @Override
     public Collection convert(String value, ConversionContext context) {
-        return Collections.unmodifiableCollection(ArrayListConverter.getInstance().convert(value, context));
+        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "List");
+        if(collectionType.startsWith("java.util.")){
+            collectionType = collectionType.substring("java.util.".length());
+        }
+        Collection result = null;
+        switch(collectionType){
+            case "List":
+            case "ArrayList":
+            default:
+                result = ArrayListConverter.getInstance().convert(value, context);
+                break;
+            case "LinkedList":
+                result = LinkedListConverter.getInstance().convert(value, context);
+                break;
+            case "Set":
+            case "HashSet":
+                result = HashSetConverter.getInstance().convert(value, context);
+                break;
+            case "SortedSet":
+            case "TreeSet":
+                result = TreeSetConverter.getInstance().convert(value, context);
+                break;
+        }
+        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
+                Boolean.class, Boolean.TRUE)){
+            return Collections.unmodifiableCollection(result);
+        }
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
index e425a27..f472c4c 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ConcurrentHashMapConverter.java
@@ -22,16 +22,16 @@ import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
 import org.apache.tamaya.spi.PropertyConverter;
 
-import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
- *  PropertyConverter for gnerating HashMap representation of a values.
+ *  PropertyConverter for gnerating ConcurrentHashMap representation of a values.
  */
-public class ConcurrentHashMapConverter implements PropertyConverter<HashMap> {
-    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
+public class ConcurrentHashMapConverter implements PropertyConverter<ConcurrentHashMap> {
+    private static final Logger LOG = Logger.getLogger(ConcurrentHashMapConverter.class.getName());
 
     /** The shared instance, used by other collection converters in this package.*/
     private static ConcurrentHashMapConverter INSTANCE = new ConcurrentHashMapConverter();
@@ -45,13 +45,13 @@ public class ConcurrentHashMapConverter implements PropertyConverter<HashMap> {
     }
 
     @Override
-    public HashMap convert(String value, ConversionContext context) {
+    public ConcurrentHashMap convert(String value, ConversionContext context) {
         List<String> rawList = ArrayListConverter.split(value);
         String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
-                HashMap<String,Object> mlist = new HashMap<>();
+                ConcurrentHashMap<String,Object> mlist = new ConcurrentHashMap<>();
                 ConversionContext ctx = new ConversionContext.Builder(context.getConfiguration(), context.getKey(),
                         TypeLiteral.of(context.getTargetType().getType())).build();
                 for(String raw:rawList){
@@ -68,7 +68,7 @@ public class ConcurrentHashMapConverter implements PropertyConverter<HashMap> {
                 LOG.log(Level.SEVERE, "Error convertion config to HashMap type.", e);
             }
         }
-        HashMap<String,String> result = new HashMap<>();
+        ConcurrentHashMap<String,String> result = new ConcurrentHashMap<>();
         for(String raw:rawList){
             String[] items = splitItems(raw);
             if(items!=null){

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
index 8091dc6..49defaa 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashMapConverter.java
@@ -32,7 +32,7 @@ import java.util.logging.Logger;
  *  PropertyConverter for gnerating HashMap representation of a values.
  */
 public class HashMapConverter implements PropertyConverter<HashMap> {
-    private static final Logger LOG = Logger.getLogger(ArrayListConverter.class.getName());
+    private static final Logger LOG = Logger.getLogger(HashMapConverter.class.getName());
 
     /** The shared instance, used by other collection converters in this package.*/
     private static HashMapConverter INSTANCE = new HashMapConverter();
@@ -48,7 +48,7 @@ public class HashMapConverter implements PropertyConverter<HashMap> {
     @Override
     public HashMap convert(String value, ConversionContext context) {
         List<String> rawList = ArrayListConverter.split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
index 2c402fb..0551549 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/HashSetConverter.java
@@ -50,7 +50,7 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
     @Override
     public HashSet convert(String value, ConversionContext context) {
         List<String> rawList = ArrayListConverter.split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();
@@ -70,6 +70,6 @@ public class HashSetConverter implements PropertyConverter<HashSet> {
                 LOG.log(Level.SEVERE, "Error convertion config to HashSet type.", e);
             }
         }
-        return null;
+        return new HashSet(rawList);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
index f1c2514..f882c78 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/LinkedListConverter.java
@@ -33,10 +33,21 @@ import java.util.logging.Logger;
 public class LinkedListConverter implements PropertyConverter<LinkedList> {
     private static final Logger LOG = Logger.getLogger(LinkedListConverter.class.getName());
 
+    /** The shared instance, used by other collection converters in this package.*/
+    private static LinkedListConverter INSTANCE = new LinkedListConverter();
+
+    /**
+     * Provide a shared instance, used by other collection converters in this package.
+     * @return the shared instance, never null.
+     */
+    static LinkedListConverter getInstance(){
+        return INSTANCE;
+    }
+
     @Override
     public LinkedList convert(String value, ConversionContext context) {
         List<String> rawList = ArrayListConverter.split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
index 2299bac..65fc54e 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/ListConverter.java
@@ -31,6 +31,25 @@ public class ListConverter implements PropertyConverter<List> {
 
     @Override
     public List convert(String value, ConversionContext context) {
-        return Collections.unmodifiableList(ArrayListConverter.getInstance().convert(value, context));
+        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "List");
+        if(collectionType.startsWith("java.util.")){
+            collectionType = collectionType.substring("java.util.".length());
+        }
+        List result = null;
+        switch(collectionType){
+            case "List":
+            case "ArrayList":
+            default:
+                result = ArrayListConverter.getInstance().convert(value, context);
+                break;
+            case "LinkedList":
+                result = LinkedListConverter.getInstance().convert(value, context);
+                break;
+        }
+        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
+                Boolean.class, Boolean.TRUE)){
+            return Collections.unmodifiableList(result);
+        }
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
index dcd2919..606e14f 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/MapConverter.java
@@ -23,6 +23,7 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.util.Collections;
 import java.util.Map;
+import java.util.Set;
 
 /**
  *  PropertyConverter for gnerating HashMap representation of a values.
@@ -31,6 +32,28 @@ public class MapConverter implements PropertyConverter<Map> {
 
     @Override
     public Map convert(String value, ConversionContext context) {
-        return Collections.unmodifiableMap(HashMapConverter.getInstance().convert(value, context));
+        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "Map");
+        if(collectionType.startsWith("java.util.")){
+            collectionType = collectionType.substring("java.util.".length());
+        }
+        Map result = null;
+        switch(collectionType){
+            case "Map":
+            case "HashMap":
+            default:
+                result = HashMapConverter.getInstance().convert(value, context);
+                break;
+            case "TreeMap":
+                result = TreeMapConverter.getInstance().convert(value, context);
+                break;
+            case "ConcurrentHashMap":
+                result = ConcurrentHashMapConverter.getInstance().convert(value, context);
+                break;
+        }
+        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
+                Boolean.class, Boolean.TRUE)){
+            return Collections.unmodifiableMap(result);
+        }
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
index 27fdee9..75301bc 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/SetConverter.java
@@ -31,6 +31,25 @@ public class SetConverter implements PropertyConverter<Set> {
 
     @Override
     public Set convert(String value, ConversionContext context) {
-        return Collections.unmodifiableSet(HashSetConverter.getInstance().convert(value, context));
+        String collectionType = context.getConfiguration().getOrDefault('_' + context.getKey()+".collection-type", "Set");
+        if(collectionType.startsWith("java.util.")){
+            collectionType = collectionType.substring("java.util.".length());
+        }
+        Set result = null;
+        switch(collectionType){
+            case "Set":
+            case "HashSet":
+            default:
+                result = HashSetConverter.getInstance().convert(value, context);
+                break;
+            case "TreeSet":
+                result = TreeSetConverter.getInstance().convert(value, context);
+                break;
+        }
+        if(context.getConfiguration().getOrDefault('_' + context.getKey()+".read-only",
+                Boolean.class, Boolean.TRUE)){
+            return Collections.unmodifiableSet(result);
+        }
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
index 32fee83..e9e2282 100644
--- a/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
+++ b/collections/src/main/java/org/apache/tamaya/collections/internal/TreeSetConverter.java
@@ -48,7 +48,7 @@ public class TreeSetConverter implements PropertyConverter<TreeSet> {
     @Override
     public TreeSet convert(String value, ConversionContext context) {
         List<String> rawList = ArrayListConverter.split(value);
-        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-valueParser");
+        String converterClass = context.getConfiguration().get('_' + context.getKey()+".collection-parser");
         if(converterClass!=null){
             try {
                 PropertyConverter<?> valueConverter = (PropertyConverter<?>) Class.forName(converterClass).newInstance();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
----------------------------------------------------------------------
diff --git a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
index c4cf2ae..9a93a69 100644
--- a/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ b/collections/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
@@ -19,6 +19,7 @@
 org.apache.tamaya.collections.internal.ArrayListConverter
 org.apache.tamaya.collections.internal.CollectionConverter
 org.apache.tamaya.collections.internal.HashMapConverter
+org.apache.tamaya.collections.internal.ConcurrentHashMapConverter
 org.apache.tamaya.collections.internal.HashSetConverter
 org.apache.tamaya.collections.internal.LinkedListConverter
 org.apache.tamaya.collections.internal.ListConverter

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
index ca100ea..34c82cb 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsBaseTests.java
@@ -1,29 +1,227 @@
+/*
+ * 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.collections;
 
+import org.apache.tamaya.Configuration;
+import org.apache.tamaya.ConfigurationProvider;
+import org.apache.tamaya.TypeLiteral;
 import org.junit.Test;
 
+import java.util.*;
+
+import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
 /**
- * Created by atsticks on 14.02.16.
+ * Basic tests for Tamaya collection support. Relevant configs for this tests:
+ * <pre>base.items=1,2,3,4,5,6,7,8,9,0
+ * base.map=1::a, 2::b, 3::c, [4:: ]
+ * </pre>
  */
 public class CollectionsBaseTests {
 
     @Test
     public void testList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = config.get("base.items", new TypeLiteral<List<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (List<String>) config.get("base.items", List.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
 
+    @Test
+    public void testArrayList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        ArrayList<String> items = config.get("base.items", new TypeLiteral<ArrayList<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (ArrayList<String>) config.get("base.items", ArrayList.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testLinkedList_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        LinkedList<String> items = config.get("base.items", new TypeLiteral<LinkedList<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (LinkedList<String>) config.get("base.items", LinkedList.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
     }
 
     @Test
     public void testSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<Set<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (Set<String>) config.get("base.items", Set.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testSortedSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<SortedSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (SortedSet<String>) config.get("base.items", SortedSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
 
+    @Test
+    public void testHashSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = config.get("base.items", new TypeLiteral<HashSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (HashSet<String>) config.get("base.items", HashSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+    }
+
+    @Test
+    public void testTreeSet_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        TreeSet<String> items = config.get("base.items", new TypeLiteral<TreeSet<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (TreeSet<String>) config.get("base.items", TreeSet.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
     }
 
     @Test
     public void testMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<Map<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (Map<String,String>) config.get("base.map", Map.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
 
+    @Test
+    public void testHashMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<HashMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (HashMap<String,String>) config.get("base.map", HashMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
     }
 
     @Test
-    public void testCollection_String(){
+    public void testSortedMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = config.get("base.map", new TypeLiteral<SortedMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items = (Map<String,String>) config.get("base.map", SortedMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
+
+    @Test
+    public void testTreeMap_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        TreeMap<String,String> items = config.get("base.map", new TypeLiteral<TreeMap<String,String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+        items =  config.get("base.map", TreeMap.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(4, items.size());
+        assertEquals("a", items.get("1"));
+        assertEquals("b", items.get("2"));
+        assertEquals("c", items.get("3"));
+        assertEquals(" ", items.get("4"));
+    }
 
+    @Test
+    public void testCollection_String(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("base.items", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        items = (Collection<String>) config.get("base.items", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
index 04b0564..7882512 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedReadOnlyTests.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.collections;
 
 import org.apache.tamaya.Configuration;
@@ -8,9 +26,7 @@ import org.junit.Test;
 import java.util.*;
 
 import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Basic tests for Tamaya collection support. Relevant configs for this tests:
@@ -20,69 +36,87 @@ import static org.junit.Assert.assertTrue;
  */
 public class CollectionsTypedReadOnlyTests {
 
-    @Test
-    public void testArrayListList_String(){
+    @Test(expected=UnsupportedOperationException.class)
+    public void testArrayListList_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         List<String> items = config.get("typed.arraylist", new TypeLiteral<List<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-        items = (List<String>) config.get("typed.arraylist", List.class);
+        items.add("test");
+    }
+
+    @Test(expected=UnsupportedOperationException.class)
+    public void testArrayListList_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = (List<String>) config.get("typed.arraylist", List.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
+        items.add("test");
     }
 
-    @Test
-    public void testLinkedListList_String(){
+    @Test(expected=UnsupportedOperationException.class)
+    public void testLinkedListList_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         List<String> items = config.get("typed.linkedlist", new TypeLiteral<List<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-        items = (List<String>) config.get("typed.linkedlist", List.class);
+        items.add("test");
+    }
+
+    @Test(expected=UnsupportedOperationException.class)
+    public void testLinkedListList_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        List<String> items = (List<String>) config.get("typed.linkedlist", List.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
+        items.add("test");
     }
 
 
-    @Test
-    public void testHashSet_String(){
+    @Test(expected=UnsupportedOperationException.class)
+    public void testHashSet_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         Set<String> items = config.get("typed.hashset", new TypeLiteral<Set<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-        items = (Set<String>) config.get("typed.hashset", Set.class);
+        items.add("test");
+    }
+    @Test(expected=UnsupportedOperationException.class)
+    public void testHashSet_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = (Set<String>) config.get("typed.hashset", Set.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
+        items.add("test");
     }
 
-    @Test
-    public void testTreeSet_String(){
+    @Test(expected=UnsupportedOperationException.class)
+    public void testTreeSet_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         Set<String> items = config.get("typed.treeset", new TypeLiteral<Set<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-        items = (Set<String>) config.get("typed.treeset", Set.class);
+        items.add("test");
+    }
+    @Test(expected=UnsupportedOperationException.class)
+    public void testTreeSet_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Set<String> items = items = (Set<String>) config.get("typed.treeset", Set.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
+        items.add("test");
     }
 
-    @Test
-    public void testHashMap_String(){
+    @Test(expected=UnsupportedOperationException.class)
+    public void testHashMap_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         Map<String,String> items = config.get("typed.hashmap", new TypeLiteral<Map<String,String>>(){});
         assertNotNull(items);
@@ -92,8 +126,12 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof HashMap);
-        items = (Map<String,String>) config.get("typed.hashmap", Map.class);
+        items.put("g","hjhhj");
+    }
+    @Test(expected=UnsupportedOperationException.class)
+    public void testHashMap_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = (Map<String,String>) config.get("typed.hashmap", Map.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -101,11 +139,12 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof HashMap);
+        items.put("g","hjhhj");
     }
 
-    @Test
-    public void testTreeMap_String(){
+
+    @Test(expected=UnsupportedOperationException.class)
+    public void testTreeMap_1(){
         Configuration config = ConfigurationProvider.getConfiguration();
         Map<String,String> items = config.get("typed.treemap", new TypeLiteral<Map<String,String>>(){});
         assertNotNull(items);
@@ -115,8 +154,12 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof TreeMap);
-        items = (Map<String,String>) config.get("typed.treemap", Map.class);
+        items.put("g","hjhhj");
+    }
+    @Test(expected=UnsupportedOperationException.class)
+    public void testTreeMap_2(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Map<String,String> items = (Map<String,String>) config.get("typed.treemap", Map.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -124,97 +167,7 @@ public class CollectionsTypedReadOnlyTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        assertTrue(items instanceof TreeMap);
-    }
-
-
-    @Test
-    public void testCollection_TreeMap(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.treemap", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeMap);
-        items = (Collection<String>) config.get("typed.treemap", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeMap);
-    }
-
-    @Test
-    public void testCollection_HashMap(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.hashmap", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashMap);
-        items = (Collection<String>) config.get("typed.hashmap", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashMap);
+        items.put("g","hjhhj");
     }
 
-    @Test
-    public void testCollection_HashSet(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.hashset", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-        items = (Collection<String>) config.get("typed.hashset", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof HashSet);
-    }
-
-    @Test
-    public void testCollection_TreeSet(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.treeset", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-        items = (Collection<String>) config.get("typed.treeset", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof TreeSet);
-    }
-
-    @Test
-    public void testCollection_ArrayList(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.arraylist", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-        items = (Collection<String>) config.get("typed.arraylist", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof ArrayList);
-    }
-
-    @Test
-    public void testCollection_LinkedList(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("typed.linkedlist", new TypeLiteral<Collection<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-        items = (Collection<String>) config.get("typed.linkedlist", Collection.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        assertTrue(items instanceof LinkedList);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
index 71a86fb..b4e4d52 100644
--- a/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
+++ b/collections/src/test/java/org/apache/tamaya/collections/CollectionsTypedTests.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.tamaya.collections;
 
 import org.apache.tamaya.Configuration;
@@ -10,6 +28,7 @@ import java.util.*;
 import static junit.framework.TestCase.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Basic tests for Tamaya collection support. Relevant configs for this tests:
@@ -20,100 +39,70 @@ import static org.junit.Assert.assertNotNull;
 public class CollectionsTypedTests {
 
     @Test
-    public void testList_String(){
+    public void testArrayListList_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        List<String> items = config.get("base.items", new TypeLiteral<List<String>>(){});
+        List<String> items = config.get("typed2.arraylist", new TypeLiteral<List<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        items = (List<String>) config.get("base.items", List.class);
+        assertTrue(items instanceof ArrayList);
+        items = (List<String>) config.get("typed2.arraylist", List.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
     }
 
     @Test
-    public void testArrayList_String(){
+    public void testLinkedListList_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        ArrayList<String> items = config.get("base.items", new TypeLiteral<ArrayList<String>>(){});
+        List<String> items = config.get("typed2.linkedlist", new TypeLiteral<List<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        items = (ArrayList<String>) config.get("base.items", ArrayList.class);
+        assertTrue(items instanceof LinkedList);
+        items = (List<String>) config.get("typed2.linkedlist", List.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
     }
 
-    @Test
-    public void testLinkedList_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        LinkedList<String> items = config.get("base.items", new TypeLiteral<LinkedList<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (LinkedList<String>) config.get("base.items", LinkedList.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<Set<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (Set<String>) config.get("base.items", Set.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
-
-    @Test
-    public void testSortedSet_String(){
-        Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<SortedSet<String>>(){});
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-        items = (SortedSet<String>) config.get("base.items", SortedSet.class);
-        assertNotNull(items);
-        assertFalse(items.isEmpty());
-        assertEquals(10, items.size());
-    }
 
     @Test
     public void testHashSet_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        Set<String> items = config.get("base.items", new TypeLiteral<HashSet<String>>(){});
+        Set<String> items = config.get("typed2.hashset", new TypeLiteral<Set<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        items = (HashSet<String>) config.get("base.items", HashSet.class);
+        assertTrue(items instanceof HashSet);
+        items = (Set<String>) config.get("typed2.hashset", Set.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
     }
 
     @Test
     public void testTreeSet_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        TreeSet<String> items = config.get("base.items", new TypeLiteral<TreeSet<String>>(){});
+        Set<String> items = config.get("typed2.treeset", new TypeLiteral<Set<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        items = (TreeSet<String>) config.get("base.items", TreeSet.class);
+        assertTrue(items instanceof TreeSet);
+        items = (Set<String>) config.get("typed2.treeset", Set.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
     }
 
     @Test
-    public void testMap_String(){
+    public void testHashMap_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<Map<String,String>>(){});
+        Map<String,String> items = config.get("typed2.hashmap", new TypeLiteral<Map<String,String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -121,7 +110,8 @@ public class CollectionsTypedTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        items = (Map<String,String>) config.get("base.map", Map.class);
+        assertTrue(items instanceof HashMap);
+        items = (Map<String,String>) config.get("typed2.hashmap", Map.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -129,12 +119,13 @@ public class CollectionsTypedTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof HashMap);
     }
 
     @Test
-    public void testHashMap_String(){
+    public void testTreeMap_String(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<HashMap<String,String>>(){});
+        Map<String,String> items = config.get("typed2.treemap", new TypeLiteral<Map<String,String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -142,7 +133,8 @@ public class CollectionsTypedTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
-        items = (HashMap<String,String>) config.get("base.map", HashMap.class);
+        assertTrue(items instanceof TreeMap);
+        items = (Map<String,String>) config.get("typed2.treemap", Map.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(4, items.size());
@@ -150,60 +142,67 @@ public class CollectionsTypedTests {
         assertEquals("b", items.get("2"));
         assertEquals("c", items.get("3"));
         assertEquals(" ", items.get("4"));
+        assertTrue(items instanceof TreeMap);
     }
 
     @Test
-    public void testSortedMap_String(){
+    public void testCollection_HashSet(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        Map<String,String> items = config.get("base.map", new TypeLiteral<SortedMap<String,String>>(){});
+        Collection<String> items = config.get("typed2.hashset", new TypeLiteral<Collection<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items = (Map<String,String>) config.get("base.map", SortedMap.class);
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
+        items = (Collection<String>) config.get("typed2.hashset", Collection.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
+        assertEquals(10, items.size());
+        assertTrue(items instanceof HashSet);
     }
 
     @Test
-    public void testTreeMap_String(){
+    public void testCollection_TreeSet(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        TreeMap<String,String> items = config.get("base.map", new TypeLiteral<TreeMap<String,String>>(){});
+        Collection<String> items = config.get("typed2.treeset", new TypeLiteral<Collection<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
-        items =  config.get("base.map", TreeMap.class);
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
+        items = (Collection<String>) config.get("typed2.treeset", Collection.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
-        assertEquals(4, items.size());
-        assertEquals("a", items.get("1"));
-        assertEquals("b", items.get("2"));
-        assertEquals("c", items.get("3"));
-        assertEquals(" ", items.get("4"));
+        assertEquals(10, items.size());
+        assertTrue(items instanceof TreeSet);
     }
 
     @Test
-    public void testCollection_String(){
+    public void testCollection_ArrayList(){
         Configuration config = ConfigurationProvider.getConfiguration();
-        Collection<String> items = config.get("base.items", new TypeLiteral<Collection<String>>(){});
+        Collection<String> items = config.get("typed2.arraylist", new TypeLiteral<Collection<String>>(){});
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
-        items = (Collection<String>) config.get("base.items", Collection.class);
+        assertTrue(items instanceof ArrayList);
+        items = (Collection<String>) config.get("typed2.arraylist", Collection.class);
         assertNotNull(items);
         assertFalse(items.isEmpty());
         assertEquals(10, items.size());
+        assertTrue(items instanceof ArrayList);
     }
+
+    @Test
+    public void testCollection_LinkedList(){
+        Configuration config = ConfigurationProvider.getConfiguration();
+        Collection<String> items = config.get("typed2.linkedlist", new TypeLiteral<Collection<String>>(){});
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+        items = (Collection<String>) config.get("typed2.linkedlist", Collection.class);
+        assertNotNull(items);
+        assertFalse(items.isEmpty());
+        assertEquals(10, items.size());
+        assertTrue(items instanceof LinkedList);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dda281b2/collections/src/test/resources/META-INF/javaconfiguration.properties
----------------------------------------------------------------------
diff --git a/collections/src/test/resources/META-INF/javaconfiguration.properties b/collections/src/test/resources/META-INF/javaconfiguration.properties
index ca3c66e..76e5e84 100644
--- a/collections/src/test/resources/META-INF/javaconfiguration.properties
+++ b/collections/src/test/resources/META-INF/javaconfiguration.properties
@@ -22,6 +22,40 @@
 base.items=1,2,3,4,5,6,7,8,9,0
 base.map=1::a, 2::b, 3::c, [4:: ]
 
+# Config for tests with explcit implementation types
+typed2.arraylist=1,2,3,4,5,6,7,8,9,0
+_typed2.arraylist.collection-type=ArrayList
+_typed2.arraylist.read-only=false
+typed2.linkedlist=1,2,3,4,5,6,7,8,9,0
+_typed2.linkedlist.collection-type=java.util.LinkedList
+_typed2.linkedlist.read-only=false
+typed2.hashset=1,2,3,4,5,6,7,8,9,0
+_typed2.hashset.collection-type=HashSet
+_typed2.hashset.read-only=false
+typed2.treeset=1,2,3,4,5,6,7,8,9,0
+_typed2.treeset.collection-type=TreeSet
+_typed2.treeset.read-only=false
+typed2.hashmap=1::a, 2::b, 3::c, [4:: ]
+_typed2.hashmap.collection-type=java.util.HashMap
+_typed2.hashmap.read-only=false
+typed2.treemap=1::a, 2::b, 3::c, [4:: ]
+_typed2.treemap.collection-type=TreeMap
+_typed2.treemap.read-only=false
+
+# Config for tests with combination policy, writable
+typed.arraylist=1,2,3,4,5,6,7,8,9,0
+_typed.arraylist.collection-type=ArrayList
+typed.linkedlist=1,2,3,4,5,6,7,8,9,0
+_typed.linkedlist.collection-type=java.util.LinkedList
+typed.hashset=1,2,3,4,5,6,7,8,9,0
+_typed.hashset.collection-type=HashSet
+typed.treeset=1,2,3,4,5,6,7,8,9,0
+_typed.treeset.collection-type=TreeSet
+typed.hashmap=1::a, 2::b, 3::c, [4:: ]
+_typed.hashmap.collection-type=java.util.HashMap
+typed.treemap=1::a, 2::b, 3::c, [4:: ]
+_typed.treemap.collection-type=TreeMap
+
 # Config for tests with combination policy
 list=a,b,c
 _list.collection-type=List


[42/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-149 Final fixes restabilizing modules after Tomcat is now used.

Posted by pl...@apache.org.
TAMAYA-149 Final fixes restabilizing modules after Tomcat is now used.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/543eedbc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/543eedbc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/543eedbc

Branch: refs/heads/master
Commit: 543eedbc8974c74469807f1fe03915dde012893f
Parents: f618ada
Author: anatole <an...@apache.org>
Authored: Tue Apr 19 13:42:48 2016 +0200
Committer: anatole <an...@apache.org>
Committed: Tue Apr 19 13:53:44 2016 +0200

----------------------------------------------------------------------
 ui/pom.xml                                      | 254 -------------------
 .../org/apache/tamaya/ui/ApplicationLayout.java |  96 -------
 .../main/java/org/apache/tamaya/ui/Content.java |  34 ---
 .../java/org/apache/tamaya/ui/CurrentUser.java  |  41 ---
 .../main/java/org/apache/tamaya/ui/NavBar.java  |  94 -------
 .../java/org/apache/tamaya/ui/TamayaUI.java     |  60 -----
 .../java/org/apache/tamaya/ui/UIConstants.java  |  35 ---
 ui/src/main/java/org/apache/tamaya/ui/User.java |  56 ----
 .../java/org/apache/tamaya/ui/VadiinApp.java    |  86 -------
 .../java/org/apache/tamaya/ui/ViewProvider.java |  66 -----
 .../tamaya/ui/components/LazyProvider.java      |  50 ----
 .../tamaya/ui/components/PageTitleUpdater.java  |  45 ----
 .../ui/components/VerticalSpacedLayout.java     |  32 ---
 .../org/apache/tamaya/ui/event/EventBus.java    |  52 ----
 .../org/apache/tamaya/ui/event/LogoutEvent.java |  22 --
 .../apache/tamaya/ui/event/NavigationEvent.java |  32 ---
 .../ConfigurationBasedMessageProvider.java      | 174 -------------
 .../ui/internal/ConfiguredMessageProvider.java  |  61 -----
 .../internal/ResourceBundleMessageProvider.java |  91 -------
 .../tamaya/ui/internal/URLPropertySource.java   |  60 -----
 .../tamaya/ui/services/MessageProvider.java     |  43 ----
 .../apache/tamaya/ui/services/UserService.java  |  30 ---
 .../apache/tamaya/ui/views/ComponentView.java   | 175 -------------
 .../org/apache/tamaya/ui/views/ConfigView.java  | 199 ---------------
 .../org/apache/tamaya/ui/views/ErrorView.java   |  40 ---
 .../org/apache/tamaya/ui/views/HomeView.java    |  80 ------
 .../apache/tamaya/ui/views/login/LoginBox.java  |  91 -------
 .../tamaya/ui/views/login/LoginEvent.java       |  15 --
 .../apache/tamaya/ui/views/login/LoginView.java |  13 -
 .../services/org.apache.tamaya.ui.ViewProvider  |  21 --
 ...rg.apache.tamaya.ui.services.MessageProvider |  19 --
 ui/src/main/resources/config/application.yml    |  28 --
 ui/src/main/resources/ui/lang/tamaya.properties |  28 --
 ui/src/test/resources/config/application.yml    |  32 ---
 34 files changed, 2255 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/pom.xml
----------------------------------------------------------------------
diff --git a/ui/pom.xml b/ui/pom.xml
deleted file mode 100644
index 4edbeb8..0000000
--- a/ui/pom.xml
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <parent>
-        <groupId>org.apache.tamaya.ext</groupId>
-        <artifactId>tamaya-extensions</artifactId>
-        <version>0.3-incubating-SNAPSHOT</version>
-        <relativePath>..</relativePath>
-    </parent>
-
-    <packaging>war</packaging>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>tamaya-ui</artifactId>
-    <name>Apache Tamaya Modules - UI</name>
-
-    <properties>
-        <vaadin.version>7.6.4</vaadin.version>
-        <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
-        <mainClass>org.apache.tamaya.ui.VaadinApplication</mainClass>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <servlet.api.version>3.0.1</servlet.api.version>
-        <tomcat.version>7.0.57</tomcat.version>
-        <jersey.version>1.19.1</jersey.version>
-        <guava.version>18.0</guava.version>
-    </properties>
-
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>com.vaadin</groupId>
-                <artifactId>vaadin-bom</artifactId>
-                <version>${vaadin.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya</groupId>
-            <artifactId>tamaya-core</artifactId>
-            <version>${project.version}</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tamaya.ext</groupId>
-            <artifactId>tamaya-spisupport</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--<dependency>-->
-            <!--<groupId>javax.servlet</groupId>-->
-            <!--<artifactId>javax.servlet-api</artifactId>-->
-            <!--<version>${servlet.api.version}</version>-->
-        <!--</dependency>-->
-        <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-server</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-push</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-client-compiled</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>${guava.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.vaadin</groupId>
-            <artifactId>vaadin-themes</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tomcat.embed</groupId>
-            <artifactId>tomcat-embed-core</artifactId>
-            <version>${tomcat.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tomcat.embed</groupId>
-            <artifactId>tomcat-embed-jasper</artifactId>
-            <version>${tomcat.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tomcat.embed</groupId>
-            <artifactId>tomcat-embed-logging-juli</artifactId>
-            <version>${tomcat.version}</version>
-        </dependency>
-        <!--<dependency>-->
-            <!--<groupId>javax.ws.rs</groupId>-->
-            <!--<artifactId>jsr311-api</artifactId>-->
-            <!--<version>1.1.1</version>-->
-            <!--<scope>provided</scope>-->
-        <!--</dependency>-->
-        <!--<dependency>-->
-            <!--<groupId>com.sun.jersey</groupId>-->
-            <!--<artifactId>jersey-server</artifactId>-->
-            <!--<version>${jersey.version}</version>-->
-        <!--</dependency>-->
-        <!--<dependency>-->
-            <!--<groupId>com.sun.jersey</groupId>-->
-            <!--<artifactId>jersey-servlet</artifactId>-->
-            <!--<version>${jersey.version}</version>-->
-        <!--</dependency>-->
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>src/main/webapp/VAADIN/themes/mytheme/addons.scss</exclude>
-                        <exclude>src/main/webapp/VAADIN/themes/mytheme/styles.css</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.3</version>
-                <configuration>
-                    <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <!-- Exclude some unnecessary files generated by the GWT compiler. -->
-                    <packagingExcludes>WEB-INF/classes/VAADIN/gwt-unitCache/**,
-                        WEB-INF/classes/VAADIN/widgetsets/WEB-INF/**</packagingExcludes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>com.vaadin</groupId>
-                <artifactId>vaadin-maven-plugin</artifactId>
-                <version>${vaadin.plugin.version}</version>
-                <configuration>
-                    <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
-                    <webappDirectory>${basedir}/target/classes/VAADIN/widgetsets</webappDirectory>
-                    <draftCompile>false</draftCompile>
-                    <compileReport>false</compileReport>
-                    <style>OBF</style>
-                    <strict>true</strict>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>update-theme</goal>
-                            <goal>update-widgetset</goal>
-                            <goal>compile</goal>
-                            <!-- Comment out compile-theme goal to use on-the-fly theme compilation -->
-                            <goal>compile-theme</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-clean-plugin</artifactId>
-                <!--<version>2.6.1</version>-->
-                <!-- Clean up also any pre-compiled themes -->
-                <configuration>
-                    <filesets>
-                        <fileset>
-                            <directory>src/main/webapp/VAADIN/themes</directory>
-                            <includes>
-                                <include>**/styles.css</include>
-                                <include>**/styles.scss.cache</include>
-                            </includes>
-                        </fileset>
-                    </filesets>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <artifactId>maven-shade-plugin</artifactId>
-                <configuration>
-                    <createDependencyReducedPom>true</createDependencyReducedPom>
-                    <filters>
-                        <filter>
-                            <artifact>*:*</artifact>
-                            <excludes>
-                                <exclude>META-INF/*.SF</exclude>
-                                <exclude>META-INF/*.DSA</exclude>
-                                <exclude>META-INF/*.RSA</exclude>
-                            </excludes>
-                        </filter>
-                    </filters>
-                </configuration>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <transformers>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                    <mainClass>${mainClass}</mainClass>
-                                </transformer>
-                            </transformers>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-
-    <repositories>
-        <repository>
-            <id>vaadin-addons</id>
-            <url>http://maven.vaadin.com/vaadin-addons</url>
-        </repository>
-        <repository>
-            <id>vaadin-snapshots</id>
-            <url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java b/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
deleted file mode 100644
index 2c303a8..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/ApplicationLayout.java
+++ /dev/null
@@ -1,96 +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.ui;
-
-import com.vaadin.navigator.Navigator;
-import com.vaadin.ui.HorizontalLayout;
-import com.vaadin.ui.Panel;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.components.LazyProvider;
-import org.apache.tamaya.ui.components.PageTitleUpdater;
-import org.apache.tamaya.ui.views.ErrorView;
-
-
-public class ApplicationLayout extends HorizontalLayout {
-
-    private NavBar navBar;
-    private Panel content;
-    private Navigator navigator;
-
-    public ApplicationLayout() {
-        addStyleName(UIConstants.MAIN_LAYOUT);
-
-        setSizeFull();
-
-        initLayouts();
-        setupNavigator();
-    }
-
-    private void initLayouts() {
-        navBar = new NavBar();
-        // Use panel as main content container to allow it's content to scroll
-        content = new Panel();
-        content.setSizeFull();
-        content.addStyleName(UIConstants.PANEL_BORDERLESS);
-
-        addComponents(navBar, content);
-        setExpandRatio(content, 1);
-    }
-
-    private void setupNavigator() {
-        navigator = new Navigator(VadiinApp.getCurrent(), content);
-
-        registerViews();
-
-        // Add view change listeners so we can do things like select the correct menu item and update the page title
-        navigator.addViewChangeListener(navBar);
-        navigator.addViewChangeListener(new PageTitleUpdater());
-
-        navigator.navigateTo(navigator.getState());
-    }
-
-    private void registerViews() {
-        for(ViewProvider provider: ServiceContextManager.getServiceContext().getServices(ViewProvider.class)) {
-            addView(provider);
-        }
-        navigator.setErrorView(ErrorView.class);
-    }
-
-    /**
-     * Registers av given view to the navigator and adds it to the NavBar
-     */
-    private void addView(ViewProvider provider) {
-
-        switch (provider.getLifecycle()) {
-            case CREATE:
-                navigator.addView(provider.getUrlPattern(), provider.createView());
-                break;
-            case LAZY:
-                navigator.addProvider(new LazyProvider(provider.getUrlPattern(), provider));
-                break;
-            case EAGER:
-                try {
-                    navigator.addView(provider.getUrlPattern(), provider.createView());
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-        }
-        navBar.addView(provider.getUrlPattern(), provider.getDisplayName());
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/Content.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/Content.java b/ui/src/main/java/org/apache/tamaya/ui/Content.java
deleted file mode 100644
index c03fdf1..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/Content.java
+++ /dev/null
@@ -1,34 +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.ui;
-
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.Label;
-
-import java.io.Serializable;
-
-/**
- * Created by atsticks on 29.03.16.
- */
-public class Content extends HorizontalSplitPanel implements Serializable{
-
-    public Content(){
-        this.addComponents(new Label("Left"), new Label("Content"));
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java b/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
deleted file mode 100644
index 8c754e2..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/CurrentUser.java
+++ /dev/null
@@ -1,41 +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.ui;
-
-import com.vaadin.server.VaadinSession;
-
-/**
- * Convenience wrapper for storing and retreiving a user from the VaadinSession
- */
-public class CurrentUser {
-
-    private static final String KEY = "currentser";
-
-    public static void set(User user) {
-        VaadinSession.getCurrent().setAttribute(KEY, user);
-    }
-
-    public static User get() {
-        return (User) VaadinSession.getCurrent().getAttribute(KEY);
-    }
-
-    public static boolean isLoggedIn() {
-        return get() != null;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java b/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
deleted file mode 100644
index 16b9860..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/NavBar.java
+++ /dev/null
@@ -1,94 +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.ui;
-
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.server.FontAwesome;
-import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.Button;
-import com.vaadin.ui.CssLayout;
-import com.vaadin.ui.Label;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.event.EventBus;
-import org.apache.tamaya.ui.event.LogoutEvent;
-import org.apache.tamaya.ui.event.NavigationEvent;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class NavBar extends CssLayout implements ViewChangeListener {
-
-    private Map<String, Button> buttonMap = new HashMap<>();
-
-    public NavBar() {
-        setHeight("100%");
-        addStyleName(UIConstants.MENU_ROOT);
-        addStyleName(UIConstants.NAVBAR);
-        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
-        Label logo = new Label("<strong>"+ messages.getMessage("project.name")+"</strong>", ContentMode.HTML);
-        logo.addStyleName(UIConstants.MENU_TITLE);
-        addComponent(logo);
-
-        addLogoutButton();
-    }
-
-    private void addLogoutButton() {
-        MessageProvider messages = ServiceContextManager.getServiceContext().getService(MessageProvider.class);
-        Button logout = new Button(messages.getMessage("default.label.logout"), new Button.ClickListener() {
-            @Override
-            public void buttonClick(Button.ClickEvent clickEvent) {
-                EventBus.post(new LogoutEvent());
-            }
-        });
-        addComponent(logout);
-
-        logout.addStyleName(UIConstants.BUTTON_LOGOUT);
-        logout.addStyleName(UIConstants.BUTTON_BORDERLESS);
-        logout.setIcon(FontAwesome.SIGN_OUT);
-    }
-
-    public void addView(final String uri, String displayName) {
-        Button viewButton = new Button(displayName, new Button.ClickListener() {
-            @Override
-            public void buttonClick(Button.ClickEvent clickEvent) {
-                EventBus.post(new NavigationEvent(uri));
-            }
-        });
-        viewButton.addStyleName(UIConstants.MENU_ITEM);
-        viewButton.addStyleName(UIConstants.BUTTON_BORDERLESS);
-        buttonMap.put(uri, viewButton);
-
-        addComponent(viewButton, components.size() - 1);
-    }
-
-    @Override
-    public boolean beforeViewChange(ViewChangeEvent event) {
-        return true; // false blocks navigation, always return true here
-    }
-
-    @Override
-    public void afterViewChange(ViewChangeEvent event) {
-        for(Button button: buttonMap.values()){
-            button.removeStyleName(UIConstants.SELECTED);
-        }
-        Button button = buttonMap.get(event.getViewName());
-        if (button != null) button.addStyleName(UIConstants.SELECTED);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java b/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
deleted file mode 100644
index b90c402..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/TamayaUI.java
+++ /dev/null
@@ -1,60 +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.ui;
-
-import com.vaadin.server.VaadinServlet;
-import org.apache.catalina.Context;
-import org.apache.catalina.Wrapper;
-import org.apache.catalina.startup.Tomcat;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-
-import java.io.File;
-import java.util.logging.Logger;
-
-public class TamayaUI {
-
-    private static final Logger LOG = Logger.getLogger(TamayaUI.class.getName());
-
-
-    public static void main(String[] args) throws Exception {
-        Configuration config = ConfigurationProvider.getConfiguration();
-        String contextPath = config.getOrDefault("tamaya.server.contextPath", "/tamaya");
-        String appBase = ".";
-        Tomcat tomcat = new Tomcat();
-        tomcat.setPort(Integer.valueOf(config.getOrDefault("tamaya.server.port", Integer.class, 8090) ));
-
-        // Define a web application context.
-        Context context = tomcat.addWebapp(contextPath, new File(
-                appBase).getAbsolutePath());
-        // Add Vadiin servlet
-        Wrapper wrapper = tomcat.addServlet(context, "vadiin-servlet",
-                VaadinServlet.class.getName());
-        wrapper.addInitParameter("ui",
-                VadiinApp.class.getName());
-        wrapper.addInitParameter("productionMode",config.getOrDefault("tamaya.server.productionMode", String.class,
-                "false"));
-        wrapper.addInitParameter("asyncSupported", "true");
-        context.addServletMapping("/*", "vadiin-servlet");
-        // bootstrap.addBundle(new AssetsBundle("/VAADIN", "/VAADIN", null, "vaadin"));
-        tomcat.start();
-        tomcat.getServer().await();
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java b/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
deleted file mode 100644
index 2f75b5c..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/UIConstants.java
+++ /dev/null
@@ -1,35 +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.ui;
-
-import com.vaadin.ui.themes.ValoTheme;
-
-/**
- * Helper for theme. Less typos in CSS style names and easier to find usages in project.
- */
-public class UIConstants extends ValoTheme {
-
-    public static final String MAIN_LAYOUT = "main-layout";
-    public static final String NAVBAR = "navbar";
-    public static final String SELECTED = "selected";
-    public static final String LOGIN_BOX = "login-box";
-
-
-    public static final String BUTTON_LOGOUT = "logout";
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/User.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/User.java b/ui/src/main/java/org/apache/tamaya/ui/User.java
deleted file mode 100644
index 2201bdb..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/User.java
+++ /dev/null
@@ -1,56 +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.ui;
-
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * Created by atsticks on 29.03.16.
- */
-public class User {
-
-    private String userID = "-";
-    private String fulLName = ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-            .getMessage("default.label.unknown");
-    private Date logInDate = new Date();
-
-    public User(String userID, String fullName){
-        this.userID = Objects.requireNonNull(userID);
-        this.fulLName = fullName;
-        if(fullName==null){
-            this.fulLName = userID;
-        }
-    }
-
-    public String getUserID() {
-        return userID;
-    }
-
-    public String getFullName() {
-        return fulLName;
-    }
-
-    public String getLoginDate(){
-        return logInDate.toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java b/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
deleted file mode 100644
index 60f3d34..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/VadiinApp.java
+++ /dev/null
@@ -1,86 +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.ui;
-
-import com.google.common.eventbus.Subscribe;
-import com.vaadin.annotations.Theme;
-import com.vaadin.annotations.Title;
-import com.vaadin.server.Page;
-import com.vaadin.server.VaadinRequest;
-import com.vaadin.server.VaadinSession;
-import com.vaadin.ui.*;
-import org.apache.tamaya.ui.event.LogoutEvent;
-import org.apache.tamaya.ui.event.NavigationEvent;
-import org.apache.tamaya.ui.views.login.LoginEvent;
-import org.apache.tamaya.ui.views.login.LoginView;
-
-/**
- * This UI is the application entry point. A UI may either represent a browser window 
- * (or tab) or some part of a html page where a Vaadin application is embedded.
- * <p>
- * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
- * overridden to add component to the user interface and initialize non-component functionality.
- */
-@Theme("valo")
-@Title("Tamaya")
-public class VadiinApp extends UI {
-
-    private Content content = new Content();
-
-    @Override
-    protected void init(VaadinRequest vaadinRequest) {
-        setupEventBus();
-
-        if (CurrentUser.isLoggedIn()) {
-            setContent(new ApplicationLayout());
-        } else {
-            setContent(new LoginView());
-        }
-    }
-
-    @Subscribe
-    public void userLoggedIn(
-            LoginEvent event) {
-        CurrentUser.set(event.getUser());
-        setContent(new ApplicationLayout());
-    }
-
-    @Subscribe
-    public void navigateTo(NavigationEvent view) {
-        getNavigator().navigateTo(view.getViewName());
-    }
-
-    public static VadiinApp getCurrent() {
-        return (VadiinApp) UI.getCurrent();
-    }
-
-    @Subscribe
-    public void logout(LogoutEvent logoutEvent) {
-        // Don't invalidate the underlying HTTP session if you are using it for something else
-        VaadinSession.getCurrent().getSession().invalidate();
-        VaadinSession.getCurrent().close();
-        Page.getCurrent().reload();
-
-    }
-
-    private void setupEventBus() {
-        org.apache.tamaya.ui.event.EventBus.register(this);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java b/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
deleted file mode 100644
index 35990ab..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/ViewProvider.java
+++ /dev/null
@@ -1,66 +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.ui;
-
-import com.vaadin.navigator.View;
-
-/**
- * Interface to register Tamaya UI parts. For priorization also use the @Priority annotations.
- */
-public interface ViewProvider {
-
-    /**
-     * View lifecycle options that determine when a view is created and how long an instance is used.
-     */
-    enum ViewLifecycle {
-        /** Creates a new view instance whenever the view is showed. */
-        CREATE,
-        /** Loads the view on first access. */
-        LAZY,
-        /** Eagerly preloads the view. */
-        EAGER
-    }
-
-    /**
-     * Get the view lifecycle model.
-     * @return the lifecycle model, not null.
-     */
-    ViewLifecycle getLifecycle();
-
-    /**
-     * Get the url pattern where this view should be accessible.
-     * @return the url pattern, not null.
-     */
-    String getUrlPattern();
-
-    /**
-     * Get the name to be displayed for this view. This value will also be used to lookup a name from the {@code /ui/lang/tamaya}
-     *                                   bundle. If not found the value returned will be used for display.
-     *
-     * @return the name to be displayed, or its resource bundle key, not null.
-     */
-    String getDisplayName();
-
-    /**
-     * Method that is called to create a new view instance.
-     * @see #getLifecycle()
-     * @return a new view instance, not null.
-     */
-    View createView();
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java b/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
deleted file mode 100644
index 867b802..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/components/LazyProvider.java
+++ /dev/null
@@ -1,50 +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.ui.components;
-
-import com.vaadin.navigator.View;
-import org.apache.tamaya.ui.ViewProvider;
-
-import java.util.Objects;
-
-/**
- * Lazily initializes a view when it's first accessed, then always returns the
- * same instance on subsequent calls.
- */
-public class LazyProvider implements com.vaadin.navigator.ViewProvider {
-    private ViewProvider provider;
-    private View view;
-
-    public LazyProvider(String viewName, ViewProvider provider) {
-        this.provider = Objects.requireNonNull(provider);
-    }
-
-    @Override
-    public String getViewName(String s) {
-        return provider.getDisplayName();
-    }
-
-    @Override
-    public View getView(String viewName) {
-        if (view == null) {
-            view = provider.createView();
-        }
-        return view;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java b/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
deleted file mode 100644
index a236d55..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/components/PageTitleUpdater.java
+++ /dev/null
@@ -1,45 +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.ui.components;
-
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.server.Page;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-
-public class PageTitleUpdater implements ViewChangeListener {
-
-    @Override
-    public boolean beforeViewChange(ViewChangeEvent event) {
-        return true;
-    }
-
-    @Override
-    public void afterViewChange(ViewChangeEvent event) {
-        View view = event.getNewView();
-        String displayName = ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-                .getMessage("view."+view.getClass().getSimpleName()+".name");
-        if (displayName != null) {
-            Page.getCurrent().setTitle(displayName);
-        }
-
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java b/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
deleted file mode 100644
index 94fc980..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/components/VerticalSpacedLayout.java
+++ /dev/null
@@ -1,32 +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.ui.components;
-
-import com.vaadin.ui.VerticalLayout;
-
-/**
- * Vertical layout with spacing and margin on by default
- */
-public class VerticalSpacedLayout extends VerticalLayout {
-
-    public VerticalSpacedLayout() {
-        setMargin(true);
-        setSpacing(true);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java b/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
deleted file mode 100644
index ffa9ba4..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/event/EventBus.java
+++ /dev/null
@@ -1,52 +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.ui.event;
-
-
-import com.google.common.eventbus.SubscriberExceptionContext;
-import com.google.common.eventbus.SubscriberExceptionHandler;
-
-/**
- * Convenience class for accessing the _UI Scoped_ EventBus. If you are using something like the CDI event
- * bus, you don't need a class like this.
- */
-public final class EventBus {
-
-    private static final com.google.common.eventbus.EventBus EVENT_BUS =
-            new com.google.common.eventbus.EventBus(new SubscriberExceptionHandler(){
-                @Override
-                public void handleException(Throwable throwable, SubscriberExceptionContext subscriberExceptionContext) {
-                    throwable.printStackTrace();
-                }
-            });
-
-    private EventBus(){}
-
-    public static void register(final Object listener) {
-        EVENT_BUS.register(listener);
-    }
-
-    public static void unregister(final Object listener) {
-        EVENT_BUS.unregister(listener);
-    }
-
-    public static void post(final Object event) {
-        EVENT_BUS.post(event);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
deleted file mode 100644
index ec00a42..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/event/LogoutEvent.java
+++ /dev/null
@@ -1,22 +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.ui.event;
-
-public class LogoutEvent {
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java b/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
deleted file mode 100644
index 9d3b744..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/event/NavigationEvent.java
+++ /dev/null
@@ -1,32 +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.ui.event;
-
-
-public class NavigationEvent {
-    private String viewName;
-
-    public NavigationEvent(String viewName) {
-        this.viewName = viewName;
-    }
-
-    public String getViewName() {
-        return viewName;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
deleted file mode 100644
index 99521c4..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfigurationBasedMessageProvider.java
+++ /dev/null
@@ -1,174 +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.ui.internal;
-
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spisupport.BasePropertySource;
-import org.apache.tamaya.spisupport.DefaultConfiguration;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
- * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
- * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
- * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
- */
-public final class ConfigurationBasedMessageProvider implements MessageProvider{
-
-    /**
-     * The property name for configuring the resource bundle's base name either as
-     * system property, environment property or configuration entry.
-     */
-    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
-
-    private final String baseName = evaluateBaseName();
-
-    private Map<String, Map<String,String>> propertiesCache = new ConcurrentHashMap<>();
-
-
-    /**
-     * Private singleton constructor.
-     */
-    public ConfigurationBasedMessageProvider(){
-
-    }
-
-    /**
-     * Get a message using the defaul locale.
-     * @param key the message key, not null.
-     * @return the resolved message, or the bundle ID, never null.
-     */
-    public String getMessage(String key){
-        return getMessage(key, Locale.getDefault());
-    }
-
-    /**
-     * Get a message.
-     * @param key the message key, not null.
-     * @param locale the target locale, or null, for the default locale.
-     * @return the resolved message, or the key, never null.
-     */
-    public String getMessage(String key, Locale locale){
-        List<String> bundleIds = evaluateBundleIds(locale);
-        for(String bundleID:bundleIds){
-            Map<String,String> entries = this.propertiesCache.get(bundleID);
-            if(entries==null){
-                entries = loadEntries(bundleID);
-            }
-            String value = entries.get(key);
-            if(value!=null){
-                return value;
-            }
-        }
-        return null;
-    }
-
-    private Map<String, String> loadEntries(String bundleID) {
-        ConfigurationContextBuilder ctxBuilder = ConfigurationProvider.getConfigurationContextBuilder();
-        for(String format:new String[]{"xml", "properties"}) {
-            try {
-                Enumeration<URL> urls = getClass().getClassLoader().getResources(bundleID+"."+format);
-                while(urls.hasMoreElements()){
-                    URL url = urls.nextElement();
-                    ctxBuilder.addPropertySources(new URLPropertySource(url));
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        Map<String, String>  entries = new DefaultConfiguration(ctxBuilder.build()).getProperties();
-        this.propertiesCache.put(bundleID, entries);
-        return entries;
-    }
-
-    private List<String> evaluateBundleIds(Locale locale) {
-        List<String> bundleIds = new ArrayList<>();
-        String country = locale.getCountry();
-        if(country==null){
-            country="";
-        }
-        String lang = locale.getLanguage();
-        if(lang==null){
-            lang="";
-        }
-        String variant = locale.getVariant();
-        if(variant==null){
-            variant="";
-        }
-        String key = baseName + "_"+country+"_"+lang+"_"+variant;
-        key = reduceKey(key);
-        if(!bundleIds.contains(key)){
-            bundleIds.add(key);
-        }
-        key = baseName + "_"+country+"_"+lang;
-        key = reduceKey(key);
-        if(!bundleIds.contains(key)){
-            bundleIds.add(key);
-        }
-        key = baseName + "_"+country;
-        key = reduceKey(key);
-        if(!bundleIds.contains(key)){
-            bundleIds.add(key);
-        }
-        key = baseName;
-        if(!bundleIds.contains(key)){
-            bundleIds.add(key);
-        }
-        return bundleIds;
-    }
-
-    /**
-     * Remove all doubled '_' hereby normalizing the bundle key.
-     * @param key the key, not null.
-     * @return the normaliuzed key, not null.
-     */
-    private String reduceKey(String key) {
-        String reduced = key.replace("___","_").replace("__","_");
-        if(reduced.endsWith("_")){
-            reduced = reduced.substring(0,reduced.length()-1);
-        }
-        return reduced;
-    }
-
-    /**
-     * Evaluates the base name to be used for creating the resource bundle used.
-     * @return
-     */
-    private String evaluateBaseName() {
-        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
-        if(baseName==null || baseName.isEmpty()){
-            baseName = System.getenv("tamaya.ui.baseName");
-        }
-        if(baseName==null || baseName.isEmpty()){
-            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
-        }
-        if(baseName==null || baseName.isEmpty()){
-            baseName = "ui/lang/tamaya";
-        }
-        return baseName.replace('.', '/');
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
deleted file mode 100644
index e2a761c..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/internal/ConfiguredMessageProvider.java
+++ /dev/null
@@ -1,61 +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.ui.internal;
-//
-//import org.apache.tamaya.ui.services.MessageProvider;
-//
-//import java.util.Locale;
-//import java.util.ResourceBundle;
-//
-///**
-// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
-// */
-//public class ConfiguredMessageProvider implements MessageProvider{
-//
-//    /**
-//     * Private singleton constructor.
-//     */
-//    public ConfiguredMessageProvider(){}
-//
-//    /**
-//     * Get a message using the defaul locale.
-//     * @param bundleID the message bundle key, not null.
-//     * @return the resolved message, or the bundle ID, never null.
-//     */
-//    public String getMessage(String bundleID){
-//        return getMessage(bundleID, Locale.getDefault());
-//    }
-//
-//    /**
-//     * Get a message.
-//     * @param bundleID the message bundle key, not null.
-//     * @param locale the target locale, or null, for the default locale.
-//     * @return the resolved message, or the bundle ID, never null.
-//     */
-//    public String getMessage(String bundleID, Locale locale){
-//        try{
-//            ResourceBundle bundle = ResourceBundle.getBundle("ui/lang/tamaya", locale);
-//            return bundle.getString(bundleID);
-//        }
-//        catch(Exception e){
-//            return bundleID;
-//        }
-//    }
-//
-//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
deleted file mode 100644
index c0aa092..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/internal/ResourceBundleMessageProvider.java
+++ /dev/null
@@ -1,91 +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.ui.internal;
-//
-//import org.apache.tamaya.ConfigurationProvider;
-//import org.apache.tamaya.ui.services.MessageProvider;
-//
-//import java.util.Locale;
-//import java.util.ResourceBundle;
-//
-///**
-// * Component resolving messages for being shown in the UI, based on the ResourceBundle mechanisms.
-// * The baseName used can optionally be configured by setting {@code tamaya.ui.baseName} either as system property,
-// * environment property or Tamaya configuration. Be aware that the JDK resource bundle mechanism only reads
-// * the first property file on the classpath (or a corresponding class file implementing ResourceBundle).
-// */
-//public class ResourceBundleMessageProvider implements MessageProvider{
-//
-//    private static final String BASENAME = evaluateBaseName();
-//
-//    /**
-//     * The property name for configuring the resource bundle's base name either as
-//     * system property, environment property or configuration entry.
-//     */
-//    private static final String TAMAYA_UI_BASE_NAME = "tamaya.ui.baseName";
-//
-//    /**
-//     * Evaluates the base name to be used for creating the resource bundle used.
-//     * @return
-//     */
-//    private static String evaluateBaseName() {
-//        String baseName = System.getProperty(TAMAYA_UI_BASE_NAME);
-//        if(baseName==null || baseName.isEmpty()){
-//            baseName = System.getenv("tamaya.ui.baseName");
-//        }
-//        if(baseName==null || baseName.isEmpty()){
-//            baseName = ConfigurationProvider.getConfiguration().get("tamaya.ui.baseName");
-//        }
-//        if(baseName==null || baseName.isEmpty()){
-//            baseName = "ui/lang/tamaya";
-//        }
-//        return baseName;
-//    }
-//
-//    /**
-//     * Private singleton constructor.
-//     */
-//    public ResourceBundleMessageProvider(){}
-//
-//    /**
-//     * Get a message using the defaul locale.
-//     * @param bundleID the message bundle key, not null.
-//     * @return the resolved message, or the bundle ID, never null.
-//     */
-//    public String getMessage(String bundleID){
-//        return getMessage(bundleID, Locale.getDefault());
-//    }
-//
-//    /**
-//     * Get a message.
-//     * @param bundleID the message bundle key, not null.
-//     * @param locale the target locale, or null, for the default locale.
-//     * @return the resolved message, or the bundle ID, never null.
-//     */
-//    public String getMessage(String bundleID, Locale locale){
-//        try{
-//            ResourceBundle bundle = ResourceBundle.getBundle(BASENAME, locale);
-//            return bundle.getString(bundleID);
-//        }
-//        catch(Exception e){
-//            return bundleID;
-//        }
-//    }
-//
-//}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java b/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
deleted file mode 100644
index 0727515..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/internal/URLPropertySource.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.apache.tamaya.ui.internal;
-
-import org.apache.tamaya.spisupport.BasePropertySource;
-import org.apache.tamaya.spisupport.MapPropertySource;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Simple property source, used for internationalization.
- */
-final class URLPropertySource extends BasePropertySource{
-
-    private static final Logger LOG = Logger.getLogger(URLPropertySource.class.getName());
-    private URL url;
-    private Map<String, String> properties;
-
-    public URLPropertySource(URL url){
-        this.url = Objects.requireNonNull(url);
-        load();
-    }
-
-    /**
-     * Loads/reloads the properties from the URL. If loading of the properties failed the previus state is preserved,
-     * unless there is no such state. In this case an empty map is assigned.
-     */
-    public void load(){
-        try(InputStream is = url.openStream()) {
-            Properties props = new Properties();
-            if (url.getFile().endsWith(".xml")) {
-                props.loadFromXML(is);
-            } else {
-                props.load(is);
-            }
-            properties = Collections.unmodifiableMap(MapPropertySource.getMap(props));
-        }
-        catch(Exception e){
-            LOG.log(Level.WARNING, "Failed to read config from "+url,e);
-            if(properties==null) {
-                properties = Collections.emptyMap();
-            }
-        }
-    }
-
-    @Override
-    public String getName() {
-        return url.toString();
-    }
-
-    @Override
-    public Map<String, String> getProperties() {
-        return properties;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java b/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
deleted file mode 100644
index a15ae46..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/services/MessageProvider.java
+++ /dev/null
@@ -1,43 +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.ui.services;
-
-import java.util.Locale;
-
-/**
- * Component resolving messages for being shown in the UI.
- */
-public interface MessageProvider {
-
-    /**
-     * Get a message using the default locale.
-     * @param key the message key, not null.
-     * @return the resolved message, or the key, never null.
-     */
-    String getMessage(String key);
-
-    /**
-     * Get a message.
-     * @param key the message key, not null.
-     * @param locale the target locale, or null, for the default locale.
-     * @return the resolved message, or the key, never null.
-     */
-    String getMessage(String key, Locale locale);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java b/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
deleted file mode 100644
index 71a8a43..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/services/UserService.java
+++ /dev/null
@@ -1,30 +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.ui.services;
-
-import org.apache.tamaya.ui.User;
-
-/**
- * Created by atsticks on 29.03.16.
- */
-public interface UserService {
-
-    User login(String userId, String credentials);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
deleted file mode 100644
index 7572510..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ComponentView.java
+++ /dev/null
@@ -1,175 +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.ui.views;
-
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.Tree;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.*;
-import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewProvider;
-import org.apache.tamaya.ui.components.VerticalSpacedLayout;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import javax.annotation.Priority;
-import java.util.List;
-import java.util.Map;
-
-
-public class ComponentView extends VerticalSpacedLayout implements View {
-
-
-    @Priority(20)
-    public static final class Provider implements ViewProvider{
-
-        @Override
-        public ViewLifecycle getLifecycle() {
-            return ViewLifecycle.CREATE;
-        }
-
-        @Override
-        public String getUrlPattern() {
-            return "/components";
-        }
-
-        @Override
-        public String getDisplayName() {
-            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-                    .getMessage("view.components.name");
-        }
-
-        @Override
-        public View createView(){
-            return new ComponentView();
-        }
-    }
-
-
-    private Tree configTree = new Tree(ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-            .getMessage("default.label.components"));
-
-
-    public ComponentView() {
-        Label caption = new Label("Components");
-        Label description = new Label(
-                "This view shows the components currently active. This information may be useful when checking if an" +
-                        "configuration extension is loaded and for inspection of the configuration and property sources" +
-                        "invovlved.",
-                ContentMode.HTML);
-
-        fillComponentTree();
-
-        addComponents(caption, description, configTree);
-
-        caption.addStyleName(UIConstants.LABEL_HUGE);
-        description.addStyleName(UIConstants.LABEL_LARGE);
-
-    }
-
-    private void fillComponentTree() {
-        configTree.removeAllItems();
-        Configuration config = ConfigurationProvider.getConfiguration();
-
-        String currentParent = "General";
-        configTree.addItem(currentParent);
-        configTree.addItem("Configuration.class");
-        configTree.setItemCaption("Configuration.class", "Configuration class = " + config.getClass().getName());
-        configTree.setParent("Configuration.class", currentParent);
-        configTree.setChildrenAllowed("Configuration.class", false);
-
-        configTree.addItem("ConfigurationContext.class");
-        configTree.setItemCaption("ConfigurationContext.class", "ConfigurationContext class = " + config.getContext().getClass().getName());
-        configTree.setParent("ConfigurationContext.class", currentParent);
-        configTree.setChildrenAllowed("ConfigurationContext.class", false);
-
-        configTree.addItem("PropertyValueCombinationPolicy.class");
-        configTree.setItemCaption("PropertyValueCombinationPolicy.class", PropertyValueCombinationPolicy.class.getSimpleName() + " class = " + config.getContext().getPropertyValueCombinationPolicy().getClass().getName());
-        configTree.setParent("PropertyValueCombinationPolicy.class", currentParent);
-        configTree.setChildrenAllowed("PropertyValueCombinationPolicy.class", false);
-
-        configTree.addItem("ConfigurationContext.types");
-        configTree.setItemCaption("ConfigurationContext.types", "Configurable types");
-        configTree.setParent("ConfigurationContext.types", currentParent);
-        for(Map.Entry<TypeLiteral<?>,List<PropertyConverter<?>>> en:config.getContext().getPropertyConverters().entrySet()){
-            configTree.addItem(en.getKey());
-            configTree.setItemCaption(en.getKey(), "Type = " + en.getKey().toString());
-            configTree.setParent(en.getKey(), "ConfigurationContext.types");
-            for(PropertyConverter conv: en.getValue()){
-                configTree.addItem(conv);
-                configTree.setItemCaption(conv, conv.getClass().getName());
-                configTree.setChildrenAllowed(conv, false);
-                configTree.setParent(conv, en.getKey());
-            }
-        }
-        configTree.addItem("ConfigurationContext.filters");
-        configTree.setItemCaption("ConfigurationContext.filters", "Property Filters");
-        for(PropertyFilter filter: config.getContext().getPropertyFilters()){
-            configTree.addItem(filter);
-            configTree.setItemCaption(filter, filter.getClass().getName());
-            configTree.setChildrenAllowed(filter, false);
-            configTree.setParent(filter, "ConfigurationContext.filters");
-        }
-        configTree.addItem("ConfigurationContext.sources");
-        configTree.setItemCaption("ConfigurationContext.sources", "Property Sources");
-        for(PropertySource source: config.getContext().getPropertySources()){
-            configTree.addItem(source);
-            configTree.setItemCaption(source, "name = "+source.getName());
-            configTree.setParent(source, "ConfigurationContext.sources");
-
-            configTree.addItem(source.toString() + ".ordinal");
-            configTree.setItemCaption(source.toString() + ".ordinal", "ordinal = "+source.getOrdinal());
-            configTree.setParent(source.toString() + ".ordinal", source);
-            configTree.setChildrenAllowed(source.toString() + ".ordinal", false);
-            configTree.addItem(source.toString() + ".class");
-            configTree.setItemCaption(source.toString() + ".class", "class = "+source.getClass().getName());
-            configTree.setChildrenAllowed(source.toString() + ".class", false);
-            configTree.setParent(source.toString() + ".class", source);
-            Map<String,String> props = source.getProperties();
-            configTree.addItem(props);
-            configTree.setItemCaption(props, "properties:");
-            configTree.setParent(props, source);
-            for(Map.Entry propEn:props.entrySet()){
-                String entryKey = props.hashCode() + propEn.getKey().toString();
-                configTree.addItem(entryKey);
-                configTree.setChildrenAllowed(entryKey, false);
-                configTree.setItemCaption(entryKey, propEn.getKey() + "=" + propEn.getValue());
-                configTree.setParent(entryKey, props);
-            }
-        }
-    }
-
-    private String getCaption(String key, String value) {
-        int index = key.lastIndexOf('.');
-        if(index<0){
-            return key + " = " + value;
-        }else{
-            return key.substring(index+1) + " = " + value;
-        }
-    }
-
-    @Override
-    public void enter(ViewChangeListener.ViewChangeEvent event) {
-
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
deleted file mode 100644
index e286bf2..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ConfigView.java
+++ /dev/null
@@ -1,199 +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.ui.views;
-
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.shared.ui.label.ContentMode;
-import com.vaadin.ui.*;
-import javafx.scene.control.TabPane;
-import org.apache.tamaya.ConfigurationProvider;
-import org.apache.tamaya.spi.ServiceContextManager;
-import org.apache.tamaya.ui.UIConstants;
-import org.apache.tamaya.ui.ViewProvider;
-import org.apache.tamaya.ui.components.VerticalSpacedLayout;
-import org.apache.tamaya.ui.services.MessageProvider;
-
-import javax.annotation.Priority;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TreeMap;
-
-
-public class ConfigView extends VerticalSpacedLayout implements View {
-
-    @Priority(10)
-    public static final class Provider implements ViewProvider{
-
-        @Override
-        public ViewLifecycle getLifecycle() {
-            return ViewLifecycle.CREATE;
-        }
-
-        @Override
-        public String getUrlPattern() {
-            return "/config";
-        }
-
-        @Override
-        public String getDisplayName() {
-            return ServiceContextManager.getServiceContext().getService(MessageProvider.class)
-                    .getMessage("view.config.name");
-        }
-
-        @Override
-        public View createView(){
-            return new ConfigView();
-        }
-    }
-
-    private TextField keyFilter = new TextField("Key filter");
-    private TextField valueFilter = new TextField("Value filter");
-    private Tree tree = new Tree("Current Configuration");
-
-    public ConfigView() {
-        Label caption = new Label("Raw Configuration");
-        Label description = new Label(
-                "This view shows the overall <b>raw</b> configuration tree. Dependening on your access rights you" +
-                        "may see partial or masked data. Similarly configuration can be <i>read-only</i> or <i>mutable</i>.",
-                ContentMode.HTML);
-
-        TabSheet tabPane = new TabSheet();
-        VerticalLayout configLayout = new VerticalLayout();
-
-        HorizontalLayout filters = new HorizontalLayout();
-
-        Button filterButton = new Button("Filter", new Button.ClickListener() {
-            @Override
-            public void buttonClick(Button.ClickEvent clickEvent) {
-                fillTree();
-            }
-        });
-        filters.setDefaultComponentAlignment(Alignment.BOTTOM_LEFT);
-        filters.addComponents(keyFilter, valueFilter, filterButton);
-
-        fillTree();
-        configLayout.addComponents(filters, tree);
-        tabPane.addTab(configLayout, "Configuration");
-        TextArea envProps = new TextArea();
-        StringBuilder b = new StringBuilder();
-        envProps.setHeight("100%");
-        envProps.setWidth("100%");
-        envProps.setSizeFull();
-        envProps.setRows(System.getenv().size());
-        for(Map.Entry<String,String> en:new TreeMap<>(System.getenv()).entrySet()){
-            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
-        }
-        envProps.setValue(b.toString());
-        envProps.setReadOnly(true);
-        tabPane.addTab(envProps, "Environment Properties");
-        TextArea sysProps = new TextArea();
-        sysProps.setSizeFull();
-        sysProps.setRows(System.getProperties().size());
-        b.setLength(0);
-        for(Map.Entry<Object,Object> en:new TreeMap<>(System.getProperties()).entrySet()){
-            b.append(en.getKey()).append("=").append(en.getValue()).append('\n');
-        }
-        sysProps.setValue(b.toString());
-        sysProps.setReadOnly(true);
-        tabPane.addTab(sysProps, "System Properties");
-        TextArea runtimeProps = new TextArea();
-        runtimeProps.setRows(5);
-        b.setLength(0);
-        b.append("Available Processors : ").append(Runtime.getRuntime().availableProcessors()).append('\n');
-        b.append("Free Memory          : ").append(Runtime.getRuntime().freeMemory()).append('\n');
-        b.append("Max Memory           : ").append(Runtime.getRuntime().maxMemory()).append('\n');
-        b.append("Total Memory         : ").append(Runtime.getRuntime().totalMemory()).append('\n');
-        b.append("Default Locale       : ").append(Locale.getDefault()).append('\n');
-        runtimeProps.setValue(b.toString());
-        runtimeProps.setReadOnly(true);
-        tabPane.addTab(runtimeProps, "Runtime Properties");
-        runtimeProps.setSizeFull();
-        addComponents(caption, description, tabPane);
-
-        caption.addStyleName(UIConstants.LABEL_HUGE);
-        description.addStyleName(UIConstants.LABEL_LARGE);
-
-    }
-
-    private void fillTree() {
-        String keyFilterExp = this.keyFilter.getValue();
-        if(keyFilterExp.isEmpty()){
-            keyFilterExp = null;
-        }
-        String valueFilterExp = this.valueFilter.getValue();
-        if(valueFilterExp.isEmpty()){
-            valueFilterExp = null;
-        }
-        tree.removeAllItems();
-        for(Map.Entry<String,String> entry: ConfigurationProvider.getConfiguration().getProperties().entrySet()){
-            String key = entry.getKey();
-            if(keyFilterExp!=null && !key.matches(keyFilterExp)){
-                continue;
-            }
-            if(valueFilterExp!=null && !entry.getValue().matches(valueFilterExp)){
-                continue;
-            }
-            tree.addItem(key);
-            tree.setItemCaption(key, getCaption(key, entry.getValue()));
-            tree.setChildrenAllowed(key, false);
-            String parent = null;
-            int start = 0;
-            int index = key.indexOf('.', start);
-            while(index>0){
-                String subItem = key.substring(0,index);
-                String caption = key.substring(start, index);
-                tree.addItem(subItem);
-                tree.setItemCaption(subItem, caption);
-                if(parent!=null){
-                    tree.setParent(subItem, parent);
-                }
-                parent = subItem;
-                start = index+1;
-                index = key.indexOf('.', start);
-            }
-            String lastItem = key.substring(start);
-            if(!lastItem.equals(key)){
-                if(parent!=null){
-                    tree.setParent(key, parent);
-                }else{
-                    // should not happen
-                }
-            }else{ // singl root entry
-                if(parent!=null) {
-                    tree.setParent(key, parent);
-                }
-            }
-        }
-    }
-
-    private String getCaption(String key, String value) {
-        int index = key.lastIndexOf('.');
-        if(index<0){
-            return key + " = " + value;
-        }else{
-            return key.substring(index+1) + " = " + value;
-        }
-    }
-
-    @Override
-    public void enter(ViewChangeListener.ViewChangeEvent event) {
-
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/543eedbc/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
----------------------------------------------------------------------
diff --git a/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java b/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
deleted file mode 100644
index ef3fa2e..0000000
--- a/ui/src/main/java/org/apache/tamaya/ui/views/ErrorView.java
+++ /dev/null
@@ -1,40 +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.ui.views;
-
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener;
-import com.vaadin.ui.Alignment;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
-import org.apache.tamaya.ui.UIConstants;
-
-public class ErrorView extends VerticalLayout implements View {
-
-    @Override
-    public void enter(ViewChangeListener.ViewChangeEvent event) {
-        setSizeFull();
-        setMargin(true);
-        Label label = new Label("Could not find a view with that name. You are most likely doing it wrong.");
-        label.addStyleName(UIConstants.LABEL_FAILURE);
-
-        addComponent(label);
-        setComponentAlignment(label, Alignment.MIDDLE_CENTER);
-    }
-}
\ No newline at end of file



[31/50] [abbrv] incubator-tamaya-sandbox git commit: TAMAYA-72 Updated test for DateTimeConverter

Posted by pl...@apache.org.
TAMAYA-72 Updated test for DateTimeConverter


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/1b70d6a0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/1b70d6a0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/1b70d6a0

Branch: refs/heads/master
Commit: 1b70d6a061f10296f8086971f2fee58e105823c6
Parents: 7fbc3f0
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sun Mar 6 20:48:09 2016 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sun Mar 6 20:48:09 2016 +0100

----------------------------------------------------------------------
 .../tamaya/jodatime/DateTimeConverter.java      | 44 +++++++++++++-------
 .../tamaya/jodatime/DateTimeConverterTest.java  | 22 +++++++++-
 .../jodatime/DateTimeZoneConverterTest.java     |  2 +
 .../org/apache/tamaya/jodatime/FullStackIT.java |  4 ++
 .../tamaya/jodatime/PeriodConverterTest.java    |  1 +
 5 files changed, 57 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1b70d6a0/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
----------------------------------------------------------------------
diff --git a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
index f584f76..864eb32 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/DateTimeConverter.java
@@ -47,24 +47,40 @@ import java.util.Objects;
  * </ul>
  */
 public class DateTimeConverter implements PropertyConverter<DateTime> {
+    static final String PARSER_FORMATS[] = {
+        "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
+        "yyyy-MM-dd'T'HH:mm:ss.SSSz",
+        "yyyy-MM-dd'T'HH:mm:ss.SSS z",
+        "yyyy-MM-dd'T'HH:mm:ssZ",
+        "yyyy-MM-dd'T'HH:mm:ssz",
+        "yyyy-MM-dd'T'HH:mm:ss z",
+        "yyyy-MM-dd'T'HH:mmZ",
+        "yyyy-MM-dd'T'HH:mmz",
+        "yyyy-MM-dd'T'HH:mm z",
+        "yyyy-MM-dd'T'HHZ",
+        "yyyy-MM-dd'T'HHz",
+        "yyyy-MM-dd'T'HH z",
+    };
+
+
     // The DateTimeFormatter returned by ISODateTimeFormat are thread safe
     // according to the JavaDoc of JodaTime
-    private final static DateTimeParser FORMATS[] = {
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS z").getParser(),
+    final static DateTimeParser FORMATS[] = {
+         DateTimeFormat.forPattern(PARSER_FORMATS[0]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[1]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[2]).getParser(),
 
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssz").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss z").getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[3]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[4]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[5]).getParser(),
 
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmZ").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmz").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm z").getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[6]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[7]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[8]).getParser(),
 
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HHZ").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HHz").getParser(),
-         DateTimeFormat.forPattern("yyyy-MM-dd'T'HH z").getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[9]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[10]).getParser(),
+         DateTimeFormat.forPattern(PARSER_FORMATS[11]).getParser(),
     };
 
     protected static final DateTimeFormatter formatter;
@@ -75,7 +91,7 @@ public class DateTimeConverter implements PropertyConverter<DateTime> {
 
     @Override
     public DateTime convert(String value, ConversionContext context) {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+        context.addSupportedFormats(DateTimeConverter.class, PARSER_FORMATS);
 
         String trimmed = Objects.requireNonNull(value).trim();
         DateTime result = null;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1b70d6a0/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
index 57ddd40..483ee83 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
@@ -18,7 +18,9 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
+import org.apache.tamaya.spi.PropertyConverter;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
@@ -30,6 +32,13 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyVararg;
+import static org.mockito.Mockito.doCallRealMethod;
 
 public class DateTimeConverterTest {
     /*
@@ -90,9 +99,18 @@ public class DateTimeConverterTest {
         }
     }
 
-    @Ignore
     @Test
     public void allSupportedFormatsAreAddedToTheConversionContext() {
-        if (true == true) throw new RuntimeException("Method must catch up with the current API!");
+        ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build();
+
+        converter.convert("2007-08-31T16+00:00", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length));
+
+        for (String format : DateTimeConverter.PARSER_FORMATS) {
+            String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")";
+            assertThat(context.getSupportedFormats(), hasItem(expected));
+        }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1b70d6a0/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
index 31180fd..6620044 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -32,6 +32,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 public class DateTimeZoneConverterTest {
     private DateTimeZoneConverter converter = new DateTimeZoneConverter();
 
+    @Ignore
     @Test
     public void canConvertDateTimeZoneInformation() {
         Object[][] inputResultPairs = {
@@ -62,6 +63,7 @@ public class DateTimeZoneConverterTest {
         }
     }
 
+    @Ignore
     @Test
     public void invalidInputValuesResultInReturningNull() {
         String[] inputValues = {

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1b70d6a0/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
index e6c3a9c..3aa1082 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
@@ -22,6 +22,7 @@ import org.apache.tamaya.Configuration;
 import org.apache.tamaya.ConfigurationProvider;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -30,6 +31,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.joda.time.format.ISODateTimeFormat.dateTime;
 
 public class FullStackIT {
+
+    @Ignore
     @Test
     public void retrieveJodaTimeValuesFromConfiguration() {
 
@@ -44,6 +47,7 @@ public class FullStackIT {
         assertThat(dateTimeValue, equalTo(dateTime().parseDateTime("2010-08-08T14:00:15.5+10:00")));
     }
 
+    @Ignore
     @Test
     public void retrieveDateTimeZoneValueFromConfiguration() {
         Configuration configuration = ConfigurationProvider.getConfiguration();

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/1b70d6a0/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
----------------------------------------------------------------------
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
index 7341af4..23689cd 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -40,6 +40,7 @@ public class PeriodConverterTest {
 
     private static PeriodFormatter FORMATTER = ISOPeriodFormat.standard();
 
+    @Ignore
     @Test
     public void canConvertPropertiesInAllSupportedFormats() {
         Object[][] inputResultPairs = {