You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2015/01/03 12:59:20 UTC

[11/27] incubator-tamaya git commit: TAMAYA-19: Reorganized dormant part for better focus of future discussions.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/ConfiguredType.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/ConfiguredType.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/ConfiguredType.java
deleted file mode 100644
index 879d54a..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/ConfiguredType.java
+++ /dev/null
@@ -1,222 +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.core.internal.inject;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.*;
-
-import org.apache.tamaya.core.properties.PropertyChangeSet;
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.PropertySource;
-import org.apache.tamaya.annotation.*;
-import org.apache.tamaya.core.internal.Utils;
-
-/**
- * Structure that contains and manages configuration related things for a configured type registered.
- * Created by Anatole on 03.10.2014.
- */
-@SuppressWarnings({"rawtypes", "unchecked"})
-public class ConfiguredType {
-    /**
-     * A list with all annotated instance variables.
-     */
-    private List<ConfiguredField> configuredFields = new ArrayList<>();
-    /**
-     * A list with all annotated methods (templates).
-     */
-    private List<ConfiguredSetterMethod> configuredSetterMethods = new ArrayList<>();
-    /**
-     * A list with all callback methods listening to config changes.
-     */
-    private List<ConfigChangeCallbackMethod> callbackMethods = new ArrayList<>();
-    /**
-     * The basic type.
-     */
-    private Class type;
-
-    /**
-     * Creates an instance of this class hereby evaluating the config annotations given for later effective
-     * injection (configuration) of instances.
-     *
-     * @param type the instance type.
-     */
-
-    public ConfiguredType(Class type) {
-        this.type = Objects.requireNonNull(type);
-        initFields(type);
-        initMethods(type);
-    }
-
-    private void initFields(Class type) {
-        for (Field f : type.getDeclaredFields()) {
-            if (f.isAnnotationPresent(NoConfig.class)) {
-                continue;
-            }
-            try {
-                ConfiguredField configuredField = new ConfiguredField(f);
-                configuredFields.add(configuredField);
-            } catch (Exception e) {
-                throw new ConfigException("Failed to initialized configured field: " +
-                        f.getDeclaringClass().getName() + '.' + f.getName(), e);
-            }
-        }
-    }
-
-    private void initMethods(Class type) {
-        // TODO revisit this logic here...
-        for (Method m : type.getDeclaredMethods()) {
-            if (m.isAnnotationPresent(NoConfig.class)) {
-                continue;
-            }
-            ObservesConfigChange mAnnot = m.getAnnotation(ObservesConfigChange.class);
-            Collection<ConfiguredProperty> propertiesAnnots = Utils.getAnnotations(m, ConfiguredProperty.class, ConfiguredProperties.class);
-            if (type.isInterface()) {
-                // it is a template
-                if (mAnnot != null) {
-                    if (m.isDefault()) {
-                        addObserverMethod(m);
-                    }
-                } else {
-                    if (m.isDefault()) {
-                        addPropertySetter(m, propertiesAnnots);
-                    }
-                }
-            } else {
-                if (mAnnot != null) {
-                    addObserverMethod(m);
-                } else {
-                    addPropertySetter(m, propertiesAnnots);
-                }
-            }
-        }
-    }
-
-    private boolean addPropertySetter(Method m, Collection<ConfiguredProperty> propertiesAnnots) {
-        if (!propertiesAnnots.isEmpty()) {
-            if (m.getParameterTypes().length == 0) {
-                // getter method
-                Class<?> returnType = m.getReturnType();
-                if (!void.class.equals(returnType)) {
-                    try {
-                        configuredSetterMethods.add(new ConfiguredSetterMethod(m));
-                        return true;
-                    } catch (Exception e) {
-                        throw new ConfigException("Failed to initialized configured setter method: " +
-                                m.getDeclaringClass().getName() + '.' + m.getName(), e);
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-
-
-    private void addObserverMethod(Method m) {
-        if (m.getParameterTypes().length != 1) {
-            return;
-        }
-        if (!m.getParameterTypes()[0].equals(PropertyChangeSet.class)) {
-            return;
-        }
-        if (!void.class.equals(m.getReturnType())) {
-            return;
-        }
-        try {
-            this.callbackMethods.add(new ConfigChangeCallbackMethod(m));
-        } catch (Exception e) {
-            throw new ConfigException("Failed to initialized configured callback method: " +
-                    m.getDeclaringClass().getName() + '.' + m.getName(), e);
-        }
-    }
-
-
-    /**
-     * Method called to configure an instance.
-     *
-     * @param instance       The instance to be configured.
-     * @param configurations Configuration instances that replace configuration served by services. This allows
-     *                       more easily testing and adaption.
-     */
-    public void configure(Object instance, Configuration... configurations) {
-        for (ConfiguredField field : configuredFields) {
-            field.applyInitialValue(instance, configurations);
-        }
-        for (ConfiguredSetterMethod method : configuredSetterMethods) {
-            method.applyInitialValue(instance, configurations);
-            // TODO, if method should be recalled on changes, corresponding callbacks could be registered here
-            WeakConfigListenerManager.of().registerConsumer(instance, method.createConsumer(instance, configurations));
-        }
-        // Register callbacks for this intance (weakly)
-        for (ConfigChangeCallbackMethod callback : callbackMethods) {
-            WeakConfigListenerManager.of().registerConsumer(instance, callback.createConsumer(instance, configurations));
-        }
-    }
-
-
-    private String getName(Object source) {
-        if (source instanceof PropertySource) {
-            PropertySource ps = (PropertySource) source;
-            return ps.getName();
-        }
-        return "N/A";
-    }
-
-
-    public boolean isConfiguredBy(Configuration configuration) {
-        // TODO implement this
-        return true;
-    }
-
-    public static boolean isConfigured(Class type) {
-        if (type.getAnnotation(DefaultAreas.class) != null) {
-            return true;
-        }
-        // if no class level annotation is there we might have field level annotations only
-        for (Field field : type.getDeclaredFields()) {
-            if (field.isAnnotationPresent(ConfiguredProperties.class)) {
-                return true;
-            }
-        }
-        // if no class level annotation is there we might have method level annotations only
-        for (Method method : type.getDeclaredMethods()) {
-            if (method.isAnnotationPresent(ConfiguredProperties.class)) {
-                return true;
-            }
-        }
-        for (Field field : type.getDeclaredFields()) {
-            if (field.isAnnotationPresent(ConfiguredProperty.class)) {
-                return true;
-            }
-        }
-        // if no class level annotation is there we might have method level annotations only
-        for (Method method : type.getDeclaredMethods()) {
-            if (method.isAnnotationPresent(ConfiguredProperty.class)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public Class getType() {
-        return this.type;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/InjectionUtils.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/InjectionUtils.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/InjectionUtils.java
deleted file mode 100644
index d80ee80..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/InjectionUtils.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.apache.tamaya.core.internal.inject;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.apache.tamaya.ConfigException;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.PropertyAdapter;
-import org.apache.tamaya.annotation.*;
-import org.apache.tamaya.annotation.WithPropertyAdapter;
-import org.apache.tamaya.core.internal.Utils;
-import org.apache.tamaya.spi.PropertyAdapterSpi;
-
-/**
- * Created by Anatole on 19.12.2014.
- */
-@SuppressWarnings("unchecked")
-final class InjectionUtils {
-
-    private InjectionUtils(){}
-
-    /**
-     * This method evaluates the {@link org.apache.tamaya.Configuration} that currently is valid for the given target field/method.
-     *
-     * @return the {@link org.apache.tamaya.Configuration} instance to be used, never null.
-     */
-    public static Configuration getConfiguration(ConfiguredProperty prop, Configuration... configuration) {
-        String name = prop.config();
-        if (name != null && !name.trim().isEmpty()) {
-            return Configuration.current(name.trim());
-        }
-        return Configuration.current();
-    }
-
-    /**
-     * Evaluates all absolute configuration key based on the annotations found on a class.
-     *
-     * @param areasAnnot          the (optional) annotation definining areas to be looked up.
-     * @param propertyAnnotation  the annotation on field/method level that may defined one or
-     *                            several keys to be looked up (in absolute or relative form).
-     * @return the list current keys in order how they should be processed/looked up.
-     */
-    public static List<String> evaluateKeys(Member member, DefaultAreas areasAnnot, ConfiguredProperty propertyAnnotation) {
-        List<String> keys = new ArrayList<>(Arrays.asList(propertyAnnotation.keys()));
-        if (keys.isEmpty()) //noinspection UnusedAssignment
-            keys.add(member.getName());
-        ListIterator<String> iterator = keys.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 (areasAnnot != null) {
-                    // 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 : areasAnnot.value()) {
-                        iterator.add(area.isEmpty() ? next : area + '.' + next);
-                    }
-                }
-            }
-        }
-        return keys;
-    }
-
-    /**
-     * Evaluates all absolute configuration key based on the member name found.
-     *
-     * @param areasAnnot          the (optional) annotation definining areas to be looked up.
-     * @return the list current keys in order how they should be processed/looked up.
-     */
-    public static List<String> evaluateKeys(Member member, DefaultAreas areasAnnot) {
-        List<String> keys = new ArrayList<>();
-        String name = member.getName();
-        String mainKey;
-        if(name.startsWith("get") || name.startsWith("set")){
-            mainKey = Character.toLowerCase(name.charAt(3)) + name.substring(4);
-        }
-        else{
-            mainKey = Character.toLowerCase(name.charAt(0)) + name.substring(1);
-        }
-        keys.add(mainKey);
-        if (areasAnnot != null) {
-            // Add prefixed entries, including absolute (root) entry for "" area keys.
-            for (String area : areasAnnot.value()) {
-                if(!area.isEmpty()) {
-                    keys.add(area + '.' + mainKey);
-                }
-            }
-        }
-        else{ // add package name
-            keys.add(member.getDeclaringClass().getName()+'.'+mainKey);
-        }
-        return keys;
-    }
-
-    /**
-     * Internally evaluated the current valid configuration keys based on the given annotations present.
-     *
-     * @return the keys to be returned, or null.
-     */
-    public static String getConfigValue(Method method, Configuration... configurations) {
-        DefaultAreas areasAnnot = method.getDeclaringClass().getAnnotation(DefaultAreas.class);
-        WithLoadPolicy loadPolicy = Utils.getAnnotation(WithLoadPolicy.class, method, method.getDeclaringClass());
-        return getConfigValueInternal(method, areasAnnot, loadPolicy, configurations);
-    }
-
-
-    /**
-     * Internally evaluated the current valid configuration keys based on the given annotations present.
-     *
-     * @return the keys to be returned, or null.
-     */
-    public static String getConfigValue(Field field, Configuration... configurations) {
-        DefaultAreas areasAnnot = field.getDeclaringClass().getAnnotation(DefaultAreas.class);
-        WithLoadPolicy loadPolicy = Utils.getAnnotation(WithLoadPolicy.class, field, field.getDeclaringClass());
-        return getConfigValueInternal(field, areasAnnot, loadPolicy, configurations);
-    }
-
-    /**
-     * Internally evaluated the current valid configuration keys based on the given annotations present.
-     *
-     * @return the keys to be returned, or null.
-     */
-    private static String getConfigValueInternal(AnnotatedElement element, DefaultAreas areasAnnot, WithLoadPolicy loadPolicy, Configuration... configurations) {
-        Collection<ConfiguredProperty> configuredProperties = Utils.getAnnotations(
-                element, ConfiguredProperty.class, ConfiguredProperties.class);
-        DefaultValue defaultAnnot = element.getAnnotation(DefaultValue.class);
-        String configValue = null;
-        if(configuredProperties.isEmpty()){
-            List<String> keys = InjectionUtils.evaluateKeys((Member)element, areasAnnot);
-            Configuration config = InjectionUtils.getConfiguration("default", configurations);
-            configValue = evaluteConfigValue(configValue, keys, config);
-        }
-        else {
-            for (ConfiguredProperty prop : configuredProperties) {
-                List<String> keys = InjectionUtils.evaluateKeys((Member) element, areasAnnot, prop);
-                Configuration config = InjectionUtils.getConfiguration(prop, configurations);
-                configValue = evaluteConfigValue(configValue, keys, config);
-            }
-        }
-        if (configValue == null && defaultAnnot != null) {
-            return defaultAnnot.value();
-        }
-        return configValue;
-    }
-
-    private static String evaluteConfigValue(String configValue, List<String> keys, Configuration config) {
-        for (String key : keys) {
-            configValue = config.get(key).orElse(null);
-            if (configValue != null) {
-                break;
-            }
-        }
-        if (configValue != null) {
-            // net step perform expression resolution, if any
-            configValue =  Configuration.evaluateValue(configValue, config);
-        }
-        return configValue;
-    }
-
-
-    @SuppressWarnings("rawtypes")
-	public static <T> T adaptValue(AnnotatedElement element, Class<T> targetType, String configValue){
-        try {
-            // Check for adapter/filter
-//            T adaptedValue = null;
-            WithPropertyAdapter codecAnnot = element.getAnnotation(WithPropertyAdapter.class);
-            Class<? extends PropertyAdapter> codecType;
-            if (codecAnnot != null) {
-                codecType = codecAnnot.value();
-                if (!codecType.equals(PropertyAdapter.class)) {
-                    // TODO cache here...
-//                    Codec<String> codec = codecType.newInstance();
-//                    adaptedValue = (T) codec.adapt(configValue);
-                }
-            }
-            if (String.class.equals(targetType)) {
-                 return (T)configValue;
-            } else {
-                PropertyAdapter<?> adapter = PropertyAdapter.getInstance(targetType);
-                 return (T)adapter.adapt(configValue);
-            }
-        } catch (Exception e) {
-            throw new ConfigException("Failed to annotate configured member: " + element, e);
-        }
-    }
-
-    /**
-     * This method evaluates the {@link Configuration} that currently is valid for the given target field/method.
-     * @param configurations Configuration instances that replace configuration served by services. This allows
-     *                       more easily testing and adaption.
-     * @return the {@link Configuration} instance to be used, never null.
-     */
-    public static Configuration getConfiguration(String name, Configuration... configurations) {
-        if(name!=null) {
-            for(Configuration conf: configurations){
-                if(name.equals(conf.getName())){
-                    return conf;
-                }
-            }
-            return Configuration.current(name);
-        }
-        else{
-            for(Configuration conf: configurations){
-                if("default".equals(conf.getName())){
-                    return conf;
-                }
-            }
-        }
-        return Configuration.current();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/WeakConfigListenerManager.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/WeakConfigListenerManager.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/WeakConfigListenerManager.java
deleted file mode 100644
index e9b9ec3..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/inject/WeakConfigListenerManager.java
+++ /dev/null
@@ -1,117 +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.core.internal.inject;
-
-import org.apache.tamaya.core.properties.PropertyChangeSet;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.StampedLock;
-import java.util.function.Consumer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Simple listener container that only holds weak references on the listeners.
- */
-public final class WeakConfigListenerManager{
-
-    private static final WeakConfigListenerManager INSTANCE = new WeakConfigListenerManager();
-
-    private static final Logger LOG = Logger.getLogger(WeakConfigListenerManager.class.getName());
-    private StampedLock lock = new StampedLock();
-    private Map<Object,Consumer<PropertyChangeSet>> listenerReferences = new WeakHashMap<>();
-
-    /** Private singleton constructor. */
-    private WeakConfigListenerManager(){}
-
-    public static WeakConfigListenerManager of(){
-        return INSTANCE;
-    }
-
-    /**
-     * Registers the given consumer for the instance. If a consumer already exists for this instance the given
-     * consumer is appended.
-     * @param instance the instance, not null.
-     * @param listener the consumer.
-     */
-    public void registerConsumer(Object instance, Consumer<PropertyChangeSet> listener){
-        Lock writeLock = lock.asWriteLock();
-        try {
-            writeLock.lock();
-            Consumer<PropertyChangeSet> l = listenerReferences.get(instance);
-            if (l == null) {
-                listenerReferences.put(instance, listener);
-            } else {
-                listenerReferences.put(instance, l.andThen(listener));
-            }
-        }
-        finally{
-            writeLock.unlock();
-        }
-    }
-
-    /**
-     * Unregisters all consumers for the given instance.
-     * @param instance the instance, not null.
-     */
-    public void unregisterConsumer(Object instance) {
-        Lock writeLock = lock.asWriteLock();
-        try {
-            writeLock.lock();
-            listenerReferences.remove(instance);
-        }
-        finally{
-            writeLock.unlock();
-        }
-    }
-
-    /**
-     * Publishes a change event to all consumers registered.
-     * @param change the change event, not null.
-     */
-    public void publishChangeEvent(PropertyChangeSet change){
-        Lock readLock = lock.asReadLock();
-        try{
-            readLock.lock();
-            listenerReferences.values().parallelStream().forEach(l -> {
-                try{
-                    l.accept(change);
-                }
-                catch(Exception e){
-                    LOG.log(Level.SEVERE, "ConfigChangeListener failed: " + l.getClass().getName(), e);
-                }
-            });
-        }
-        finally{
-            readLock.unlock();
-        }
-    }
-
-
-    @Override
-    public String toString(){
-        return "WeakConfigListenerManager{" +
-                "listenerReferences=" + listenerReferences +
-                '}';
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/AbstractDelegatingLogger.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/AbstractDelegatingLogger.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/AbstractDelegatingLogger.java
deleted file mode 100644
index cc0ac45..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/AbstractDelegatingLogger.java
+++ /dev/null
@@ -1,411 +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.core.internal.logging;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.logging.*;
-
-/**
- * java.util.logging.Logger implementation delegating to another framework.
- * All methods can be used except:
- * setLevel
- * addHandler / getHandlers
- * setParent / getParent
- * setUseParentHandlers / getUseParentHandlers
- *
- * @author gnodet
- */
-public abstract class AbstractDelegatingLogger extends Logger {
-
-    protected AbstractDelegatingLogger(final String name, final String resourceBundleName) {
-        super(name, resourceBundleName);
-    }
-
-    public void log(final LogRecord record) {
-        if (isLoggable(record.getLevel())) {
-            doLog(record);
-        }
-    }
-
-    public void log(final Level level, final String msg) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            doLog(lr);
-        }
-    }
-
-    public void log(final Level level, final String msg, final Object param1) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            final Object[] params = {param1};
-            lr.setParameters(params);
-            doLog(lr);
-        }
-    }
-
-    public void log(final Level level, final String msg, final Object[] params) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setParameters(params);
-            doLog(lr);
-        }
-    }
-
-    public void log(final Level level, final String msg, final Throwable thrown) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setThrown(thrown);
-            doLog(lr);
-        }
-    }
-
-    public void logp(final Level level, final String sourceClass, final String sourceMethod, final String msg) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            doLog(lr);
-        }
-    }
-
-    public void logp(final Level level, final String sourceClass, final String sourceMethod, final String msg, final Object param1) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            final Object[] params = {param1};
-            lr.setParameters(params);
-            doLog(lr);
-        }
-    }
-
-    public void logp(final Level level, final String sourceClass, final String sourceMethod, final String msg, final Object[] params) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            lr.setParameters(params);
-            doLog(lr);
-        }
-    }
-
-    public void logp(final Level level, final String sourceClass, final String sourceMethod, final String msg, final Throwable thrown) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            lr.setThrown(thrown);
-            doLog(lr);
-        }
-    }
-
-    public void logrb(final Level level, final String sourceClass, final String sourceMethod, final String bundleName, final String msg) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            doLog(lr, bundleName);
-        }
-    }
-
-    public void logrb(final Level level, final String sourceClass, final String sourceMethod,
-                      final String bundleName, final String msg, final Object param1) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            final Object[] params = {param1};
-            lr.setParameters(params);
-            doLog(lr, bundleName);
-        }
-    }
-
-    public void logrb(final Level level, final String sourceClass, final String sourceMethod,
-                      final String bundleName, final String msg, final Object[] params) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            lr.setParameters(params);
-            doLog(lr, bundleName);
-        }
-    }
-
-    public void logrb(final Level level, final String sourceClass, final String sourceMethod,
-                      final String bundleName, final String msg, final Throwable thrown) {
-        if (isLoggable(level)) {
-            final LogRecord lr = new LogRecord(level, msg);
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            lr.setThrown(thrown);
-            doLog(lr, bundleName);
-        }
-    }
-
-    public void entering(final String sourceClass, final String sourceMethod) {
-        if (isLoggable(Level.FINER)) {
-            logp(Level.FINER, sourceClass, sourceMethod, "ENTRY");
-        }
-    }
-
-    public void entering(final String sourceClass, final String sourceMethod, final Object param1) {
-        if (isLoggable(Level.FINER)) {
-            final Object[] params = {param1};
-            logp(Level.FINER, sourceClass, sourceMethod, "ENTRY {0}", params);
-        }
-    }
-
-    public void entering(final String sourceClass, final String sourceMethod, final Object[] params) {
-        if (isLoggable(Level.FINER)) {
-            final String msg = "ENTRY";
-            if (params == null) {
-                logp(Level.FINER, sourceClass, sourceMethod, msg);
-                return;
-            }
-            final StringBuilder builder = new StringBuilder(msg);
-            for (int i = 0; i < params.length; i++) {
-                builder.append(" {");
-                builder.append(Integer.toString(i));
-                builder.append("}");
-            }
-            logp(Level.FINER, sourceClass, sourceMethod, builder.toString(), params);
-        }
-    }
-
-    public void exiting(final String sourceClass, final String sourceMethod) {
-        if (isLoggable(Level.FINER)) {
-            logp(Level.FINER, sourceClass, sourceMethod, "RETURN");
-        }
-    }
-
-    public void exiting(final String sourceClass, final String sourceMethod, final Object result) {
-        if (isLoggable(Level.FINER)) {
-            final Object[] params = {result};
-            logp(Level.FINER, sourceClass, sourceMethod, "RETURN {0}", params);
-        }
-    }
-
-    public void throwing(final String sourceClass, final String sourceMethod, final Throwable thrown) {
-        if (isLoggable(Level.FINER)) {
-            final LogRecord lr = new LogRecord(Level.FINER, "THROW");
-            lr.setSourceClassName(sourceClass);
-            lr.setSourceMethodName(sourceMethod);
-            lr.setThrown(thrown);
-            doLog(lr);
-        }
-    }
-
-    public void severe(final String msg) {
-        if (isLoggable(Level.SEVERE)) {
-            final LogRecord lr = new LogRecord(Level.SEVERE, msg);
-            doLog(lr);
-        }
-    }
-
-    public void warning(final String msg) {
-        if (isLoggable(Level.WARNING)) {
-            final LogRecord lr = new LogRecord(Level.WARNING, msg);
-            doLog(lr);
-        }
-    }
-
-    public void info(final String msg) {
-        if (isLoggable(Level.INFO)) {
-            final LogRecord lr = new LogRecord(Level.INFO, msg);
-            doLog(lr);
-        }
-    }
-
-    public void config(final String msg) {
-        if (isLoggable(Level.CONFIG)) {
-            final LogRecord lr = new LogRecord(Level.CONFIG, msg);
-            doLog(lr);
-        }
-    }
-
-    public void fine(final String msg) {
-        if (isLoggable(Level.FINE)) {
-            final LogRecord lr = new LogRecord(Level.FINE, msg);
-            doLog(lr);
-        }
-    }
-
-    public void finer(final String msg) {
-        if (isLoggable(Level.FINER)) {
-            final LogRecord lr = new LogRecord(Level.FINER, msg);
-            doLog(lr);
-        }
-    }
-
-    public void finest(final String msg) {
-        if (isLoggable(Level.FINEST)) {
-            final LogRecord lr = new LogRecord(Level.FINEST, msg);
-            doLog(lr);
-        }
-    }
-
-    public void setLevel(final Level newLevel) throws SecurityException {
-        throw new UnsupportedOperationException();
-    }
-
-    public abstract Level getLevel();
-
-    public boolean isLoggable(final Level level) {
-        final Level l = getLevel();
-        return level.intValue() >= l.intValue() && l != Level.OFF;
-    }
-
-    protected boolean supportsHandlers() {
-        return false;
-    }
-
-    public synchronized void addHandler(final Handler handler) throws SecurityException {
-        if (supportsHandlers()) {
-            super.addHandler(handler);
-            return;
-        }
-        throw new UnsupportedOperationException();
-    }
-
-    public synchronized void removeHandler(final Handler handler) throws SecurityException {
-        if (supportsHandlers()) {
-            super.removeHandler(handler);
-            return;
-        }
-        throw new UnsupportedOperationException();
-    }
-
-    public synchronized Handler[] getHandlers() {
-        if (supportsHandlers()) {
-            return super.getHandlers();
-        }
-        throw new UnsupportedOperationException();
-    }
-
-    public synchronized void setUseParentHandlers(final boolean useParentHandlers) {
-        if (supportsHandlers()) {
-            super.setUseParentHandlers(useParentHandlers);
-            return;
-        }
-        throw new UnsupportedOperationException();
-    }
-
-    public synchronized boolean getUseParentHandlers() {
-        if (supportsHandlers()) {
-            return super.getUseParentHandlers();
-        }
-        throw new UnsupportedOperationException();
-    }
-
-    public Logger getParent() {
-        return null;
-    }
-
-    public void setParent(final Logger parent) {
-        throw new UnsupportedOperationException();
-    }
-
-    protected void doLog(final LogRecord lr) {
-        lr.setLoggerName(getName());
-        final String rbname = getResourceBundleName();
-        if (rbname != null) {
-            lr.setResourceBundleName(rbname);
-            lr.setResourceBundle(getResourceBundle());
-        }
-        internalLog(lr);
-    }
-
-    protected void doLog(final LogRecord lr, final String rbname) {
-        lr.setLoggerName(getName());
-        if (rbname != null) {
-            lr.setResourceBundleName(rbname);
-            lr.setResourceBundle(loadResourceBundle(rbname));
-        }
-        internalLog(lr);
-    }
-
-    protected void internalLog(final LogRecord record) {
-        final Filter filter = getFilter();
-        if (filter != null && !filter.isLoggable(record)) {
-            return;
-        }
-        final String msg = formatMessage(record);
-        internalLogFormatted(msg, record);
-    }
-
-    protected abstract void internalLogFormatted(String msg, LogRecord record);
-
-    protected String formatMessage(final LogRecord record) {
-        String format = record.getMessage();
-        final ResourceBundle catalog = record.getResourceBundle();
-        if (catalog != null) {
-            try {
-                format = catalog.getString(record.getMessage());
-            } catch (final MissingResourceException ex) {
-                format = record.getMessage();
-            }
-        }
-        try {
-            final Object[] parameters = record.getParameters();
-            if (parameters == null || parameters.length == 0) {
-                return format;
-            }
-            if (format.contains("{0") || format.contains("{1")
-                || format.contains("{2") || format.contains("{3")) {
-                return MessageFormat.format(format, parameters);
-            }
-            return format;
-        } catch (final Exception ex) {
-            return format;
-        }
-    }
-
-    /**
-     * Load the specified resource bundle
-     *
-     * @param resourceBundleName the name current the resource bundle to load, cannot be null
-     * @return the loaded resource bundle.
-     * @throws MissingResourceException If the specified resource bundle can not be loaded.
-     */
-    static ResourceBundle loadResourceBundle(final String resourceBundleName) {
-        // try context class loader to load the resource
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        if (null != cl) {
-            try {
-                return ResourceBundle.getBundle(resourceBundleName, Locale.getDefault(), cl);
-            } catch (final MissingResourceException e) {
-                // Failed to load using context classloader, ignore
-            }
-        }
-        // try system class loader to load the resource
-        cl = ClassLoader.getSystemClassLoader();
-        if (null != cl) {
-            try {
-                return ResourceBundle.getBundle(resourceBundleName, Locale.getDefault(), cl);
-            } catch (final MissingResourceException e) {
-                // Failed to load using system classloader, ignore
-            }
-        }
-        return null;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4j2Logger.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4j2Logger.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4j2Logger.java
deleted file mode 100644
index 35ae4ab..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4j2Logger.java
+++ /dev/null
@@ -1,97 +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.core.internal.logging;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-
-public class Log4j2Logger extends AbstractDelegatingLogger {
-    private static final Map<Level, org.apache.logging.log4j.Level> TO_LOG4J = new HashMap<>();
-
-    private final Logger log;
-
-    static {
-        //older versions current log4j don't have TRACE, use debug
-//        org.apache.logging.log4j.Level t = org.apache.logging.log4j.Level.DEBUG;
-
-        TO_LOG4J.put(Level.ALL, org.apache.logging.log4j.Level.ALL);
-        TO_LOG4J.put(Level.SEVERE, org.apache.logging.log4j.Level.ERROR);
-        TO_LOG4J.put(Level.WARNING, org.apache.logging.log4j.Level.WARN);
-        TO_LOG4J.put(Level.INFO, org.apache.logging.log4j.Level.INFO);
-        TO_LOG4J.put(Level.CONFIG, org.apache.logging.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINE, org.apache.logging.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINER, org.apache.logging.log4j.Level.TRACE);
-        TO_LOG4J.put(Level.FINEST, org.apache.logging.log4j.Level.TRACE);
-        TO_LOG4J.put(Level.OFF, org.apache.logging.log4j.Level.OFF);
-    }
-
-    public Log4j2Logger(final String name, final String resourceBundleName) {
-        super(name, resourceBundleName);
-        log = LogManager.getLogger(name);
-    }
-
-    public Level getLevel() {
-        final org.apache.logging.log4j.Level l = log.getLevel();
-        if (l != null) {
-            return fromL4J(l);
-        }
-        return null;
-    }
-
-    protected void internalLogFormatted(final String msg, final LogRecord record) {
-        log.log(TO_LOG4J.get(record.getLevel()), msg, record.getThrown());
-    }
-
-
-    private Level fromL4J(final org.apache.logging.log4j.Level l) {
-        Level l2 = null;
-        switch (l.getStandardLevel()) {
-            case ALL:
-                l2 = Level.ALL;
-                break;
-            case FATAL:
-                l2 = Level.SEVERE;
-                break;
-            case ERROR:
-                l2 = Level.SEVERE;
-                break;
-            case WARN:
-                l2 = Level.WARNING;
-                break;
-            case INFO:
-                l2 = Level.INFO;
-                break;
-            case DEBUG:
-                l2 = Level.FINE;
-                break;
-            case OFF:
-                l2 = Level.OFF;
-                break;
-            case TRACE:
-                l2 = Level.FINEST;
-                break;
-            default:
-                l2 = Level.FINE;
-        }
-        return l2;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4jLogger.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4jLogger.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4jLogger.java
deleted file mode 100644
index 224378c..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Log4jLogger.java
+++ /dev/null
@@ -1,200 +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.core.internal.logging;
-
-import org.apache.log4j.Appender;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.Priority;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-
-/**
- * java.util.logging.Logger implementation delegating to Log4j.
- * All methods can be used except:
- * setLevel
- * addHandler / getHandlers
- * setParent / getParent
- * setUseParentHandlers / getUseParentHandlers
- *
- * @author gnodet
- */
-public class Log4jLogger extends AbstractDelegatingLogger {
-    private static final Map<Level, org.apache.log4j.Level> TO_LOG4J = new HashMap<>();
-    private static final org.apache.log4j.Level TRACE;
-
-    private final Logger log;
-
-    static {
-        //older versions current log4j don't have TRACE, use debug
-        org.apache.log4j.Level t = org.apache.log4j.Level.DEBUG;
-        try {
-            final Field f = org.apache.log4j.Level.class.getField("TRACE");
-            t = (org.apache.log4j.Level) f.get(null);
-        } catch (final Throwable ex) {
-            //ignore, assume old version current log4j
-        }
-        TRACE = t;
-
-        TO_LOG4J.put(Level.ALL, org.apache.log4j.Level.ALL);
-        TO_LOG4J.put(Level.SEVERE, org.apache.log4j.Level.ERROR);
-        TO_LOG4J.put(Level.WARNING, org.apache.log4j.Level.WARN);
-        TO_LOG4J.put(Level.INFO, org.apache.log4j.Level.INFO);
-        TO_LOG4J.put(Level.CONFIG, org.apache.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINE, org.apache.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINER, TRACE);
-        TO_LOG4J.put(Level.FINEST, TRACE);
-        TO_LOG4J.put(Level.OFF, org.apache.log4j.Level.OFF);
-    }
-
-    public Log4jLogger(final String name, final String resourceBundleName) {
-        super(name, resourceBundleName);
-        log = LogManager.getLogger(name);
-    }
-
-    public Level getLevel() {
-        final org.apache.log4j.Level l = log.getEffectiveLevel();
-        if (l != null) {
-            return fromL4J(l);
-        }
-        return null;
-    }
-
-    public void setLevel(final Level newLevel) throws SecurityException {
-        log.setLevel(TO_LOG4J.get(newLevel));
-    }
-
-    public synchronized void addHandler(final Handler handler) throws SecurityException {
-        log.addAppender(new HandlerWrapper(handler));
-    }
-
-    public synchronized void removeHandler(final Handler handler) throws SecurityException {
-        log.removeAppender("HandlerWrapper-" + handler.hashCode());
-    }
-
-    public synchronized Handler[] getHandlers() {
-        final List<Handler> ret = new ArrayList<>();
-        final Enumeration<?> en = log.getAllAppenders();
-        while (en.hasMoreElements()) {
-            final Appender ap = (Appender) en.nextElement();
-            if (ap instanceof HandlerWrapper) {
-                ret.add(((HandlerWrapper) ap).getHandler());
-            }
-        }
-        return ret.toArray(new Handler[ret.size()]);
-    }
-
-    protected void internalLogFormatted(final String msg, final LogRecord record) {
-        log.log(AbstractDelegatingLogger.class.getName(),
-            TO_LOG4J.get(record.getLevel()),
-            msg,
-            record.getThrown());
-    }
-
-
-    private Level fromL4J(final org.apache.log4j.Level l) {
-        Level l2 = null;
-        switch (l.toInt()) {
-            case org.apache.log4j.Level.ALL_INT:
-                l2 = Level.ALL;
-                break;
-            case org.apache.log4j.Level.FATAL_INT:
-                l2 = Level.SEVERE;
-                break;
-            case org.apache.log4j.Level.ERROR_INT:
-                l2 = Level.SEVERE;
-                break;
-            case org.apache.log4j.Level.WARN_INT:
-                l2 = Level.WARNING;
-                break;
-            case org.apache.log4j.Level.INFO_INT:
-                l2 = Level.INFO;
-                break;
-            case org.apache.log4j.Level.DEBUG_INT:
-                l2 = Level.FINE;
-                break;
-            case org.apache.log4j.Level.OFF_INT:
-                l2 = Level.OFF;
-                break;
-            default:
-                if (l.toInt() == TRACE.toInt()) {
-                    l2 = Level.FINEST;
-                }
-        }
-        return l2;
-    }
-
-
-    private class HandlerWrapper extends AppenderSkeleton {
-        Handler handler;
-
-        public HandlerWrapper(final Handler h) {
-            handler = h;
-            name = "HandlerWrapper-" + h.hashCode();
-        }
-
-        public Handler getHandler() {
-            return handler;
-        }
-
-        @Override
-        protected void append(final LoggingEvent event) {
-            final LogRecord lr = new LogRecord(fromL4J(event.getLevel()),
-                event.getMessage().toString());
-            lr.setLoggerName(event.getLoggerName());
-            if (event.getThrowableInformation() != null) {
-                lr.setThrown(event.getThrowableInformation().getThrowable());
-            }
-            final String rbname = getResourceBundleName();
-            if (rbname != null) {
-                lr.setResourceBundleName(rbname);
-                lr.setResourceBundle(getResourceBundle());
-            }
-            handler.publish(lr);
-        }
-
-        public void close() {
-            handler.close();
-            closed = true;
-        }
-
-        public boolean requiresLayout() {
-            return false;
-        }
-
-        @Override
-        public Priority getThreshold() {
-            return TO_LOG4J.get(handler.getLevel());
-        }
-
-        @Override
-        public boolean isAsSevereAsThreshold(final Priority priority) {
-            final Priority p = getThreshold();
-            return p == null || priority.isGreaterOrEqual(p);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Slf4jLogger.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Slf4jLogger.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Slf4jLogger.java
deleted file mode 100644
index a580128..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/logging/Slf4jLogger.java
+++ /dev/null
@@ -1,181 +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.core.internal.logging;
-
-import org.slf4j.spi.LocationAwareLogger;
-
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-
-/**
- * <p>
- * java.util.logging.Logger implementation delegating to SLF4J.
- * </p>
- * <p>
- * Methods {@link java.util.logging.Logger#setParent(Logger)}, {@link java.util.logging.Logger#getParent()},
- * {@link java.util.logging.Logger#setUseParentHandlers(boolean)} and
- * {@link java.util.logging.Logger#getUseParentHandlers()} are not overrriden.
- * </p>
- * <p>
- * Level annotation inspired by {@link org.slf4j.bridge.SLF4JBridgeHandler}:
- * </p>
- * <p/>
- * <pre>
- * FINEST  -&gt; TRACE
- * FINER   -&gt; DEBUG
- * FINE    -&gt; DEBUG
- * CONFIG  -&gt; DEBUG
- * INFO    -&gt; INFO
- * WARN ING -&gt; WARN
- * SEVER   -&gt; ERROR
- * </pre>
- */
-public class Slf4jLogger extends AbstractDelegatingLogger {
-
-    private static final String FQCN = AbstractDelegatingLogger.class.getName();
-
-    private final org.slf4j.Logger logger;
-    private LocationAwareLogger locationAwareLogger;
-
-
-    public Slf4jLogger(final String name, final String resourceBundleName) {
-        super(name, resourceBundleName);
-        logger = org.slf4j.LoggerFactory.getLogger(name);
-        if (logger instanceof LocationAwareLogger) {
-            locationAwareLogger = (LocationAwareLogger) logger;
-        }
-    }
-
-    @Override
-    protected boolean supportsHandlers() {
-        return true;
-    }
-
-    @Override
-    public Level getLevel() {
-        final Level level;
-        // Verify fromMap the wider (trace) to the narrower (error)
-        if (logger.isTraceEnabled()) {
-            level = Level.FINEST;
-        } else if (logger.isDebugEnabled()) {
-            // map to the lowest between FINER, FINE and CONFIG
-            level = Level.FINER;
-        } else if (logger.isInfoEnabled()) {
-            level = Level.INFO;
-        } else if (logger.isWarnEnabled()) {
-            level = Level.WARNING;
-        } else if (logger.isErrorEnabled()) {
-            level = Level.SEVERE;
-        } else {
-            level = Level.OFF;
-        }
-        return level;
-    }
-
-    @Override
-    public boolean isLoggable(final Level level) {
-        final int i = level.intValue();
-        if (i == Level.OFF.intValue()) {
-            return false;
-        } else if (i >= Level.SEVERE.intValue()) {
-            return logger.isErrorEnabled();
-        } else if (i >= Level.WARNING.intValue()) {
-            return logger.isWarnEnabled();
-        } else if (i >= Level.INFO.intValue()) {
-            return logger.isInfoEnabled();
-        } else if (i >= Level.FINER.intValue()) {
-            return logger.isDebugEnabled();
-        }
-        return logger.isTraceEnabled();
-    }
-
-
-    @Override
-    protected void internalLogFormatted(final String msg, final LogRecord record) {
-
-        final Level level = record.getLevel();
-        final Throwable t = record.getThrown();
-
-        final Handler[] targets = getHandlers();
-        if (targets != null) {
-            for (final Handler h : targets) {
-                h.publish(record);
-            }
-        }
-        if (!getUseParentHandlers()) {
-            return;
-        }
-
-        /*
-        * As we can not use a "switch ... case" block but only a "if ... else if ..." block, the order current the
-        * comparisons is important. We first try log level FINE then INFO, WARN, FINER, etc
-        */
-        if (Level.FINE.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.debug(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, t);
-            }
-        } else if (Level.INFO.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.info(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.INFO_INT, msg, null, t);
-            }
-        } else if (Level.WARNING.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.warn(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.WARN_INT, msg, null, t);
-            }
-        } else if (Level.FINER.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.trace(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, t);
-            }
-        } else if (Level.FINEST.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.trace(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.TRACE_INT, msg, null, t);
-            }
-        } else if (Level.ALL.equals(level)) {
-            // should never occur, all is used to configure java.util.logging
-            // but not accessible by the API Logger.xxx() API
-            if (locationAwareLogger == null) {
-                logger.error(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.ERROR_INT, msg, null, t);
-            }
-        } else if (Level.SEVERE.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.error(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.ERROR_INT, msg, null, t);
-            }
-        } else if (Level.CONFIG.equals(level)) {
-            if (locationAwareLogger == null) {
-                logger.debug(msg, t);
-            } else {
-                locationAwareLogger.log(null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, t);
-            }
-        }
-        // don't log if Level.OFF
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractFileResolvingResource.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractFileResolvingResource.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractFileResolvingResource.java
deleted file mode 100644
index ff35687..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractFileResolvingResource.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright 2002-2013 the original author or authors.
- *
- * Licensed under the 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.core.internal.resources.io;
-
-import org.apache.tamaya.core.resource.Resource;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLConnection;
-
-/**
- * Abstract base class for resources which resolve URLs into File references,
- * such as {@code UrlResource} or {@link ClassPathResource}.
- *
- * <p>Detects the "file" protocol as well as the JBoss "vfs" protocol in URLs,
- * resolving file system references accordingly.
- *
- * @author Juergen Hoeller
- * @since 3.0
- */
-abstract class AbstractFileResolvingResource extends AbstractResource {
-
-	/**
-	 * This implementation returns a File reference for the underlying class path
-	 * resource, provided that it refers to a file in the file system.
-	 */
-	@Override
-	public File getFile() throws IOException {
-		URL url = getURL();
-		if (url.getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {
-			return VfsResourceDelegate.getResource(url).getFile();
-		}
-		return ResourceUtils.getFile(url, getDescription());
-	}
-
-	/**
-	 * This implementation determines the underlying File
-	 * (or jar file, in case current a resource in a jar/zip).
-	 */
-	@Override
-	protected File getFileForLastModifiedCheck() throws IOException {
-		URL url = getURL();
-		if (ResourceUtils.isJarURL(url)) {
-			URL actualUrl = ResourceUtils.extractJarFileURL(url);
-			if (actualUrl.getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {
-				return VfsResourceDelegate.getResource(actualUrl).getFile();
-			}
-			return ResourceUtils.getFile(actualUrl, "Jar URL");
-		}
-		else {
-			return getFile();
-		}
-	}
-
-	/**
-	 * This implementation returns a File reference for the underlying class path
-	 * resource, provided that it refers to a file in the file system.
-	 * @see ResourceUtils#getFile(java.net.URI, String)
-	 */
-	protected File getFile(URI uri) throws IOException {
-		if (uri.getScheme().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {
-			return VfsResourceDelegate.getResource(uri).getFile();
-		}
-		return ResourceUtils.getFile(uri, getDescription());
-	}
-
-
-	@Override
-	public boolean exists() {
-		try {
-			URL url = getURL();
-			if (ResourceUtils.isFileURL(url)) {
-				// Proceed with file system resolution...
-				return getFile().exists();
-			}
-			else {
-				// Try a URL connection content-length header...
-				URLConnection con = url.openConnection();
-				customizeConnection(con);
-				HttpURLConnection httpCon =
-						(con instanceof HttpURLConnection ? (HttpURLConnection) con : null);
-				if (httpCon != null) {
-					int code = httpCon.getResponseCode();
-					if (code == HttpURLConnection.HTTP_OK) {
-						return true;
-					}
-					else if (code == HttpURLConnection.HTTP_NOT_FOUND) {
-						return false;
-					}
-				}
-				if (con.getContentLength() >= 0) {
-					return true;
-				}
-				if (httpCon != null) {
-					// no HTTP OK status, and no content-length header: give up
-					httpCon.disconnect();
-					return false;
-				}
-				else {
-					// Fall back to stream existence: can we open the stream?
-					InputStream is = getInputStream();
-					is.close();
-					return true;
-				}
-			}
-		}
-		catch (IOException ex) {
-			return false;
-		}
-	}
-
-	@Override
-	public boolean isReadable() {
-		try {
-			URL url = getURL();
-			if (ResourceUtils.isFileURL(url)) {
-				// Proceed with file system resolution...
-				File file = getFile();
-				return (file.canRead() && !file.isDirectory());
-			}
-			else {
-				return true;
-			}
-		}
-		catch (IOException ex) {
-			return false;
-		}
-	}
-
-	@Override
-	public long contentLength() throws IOException {
-		URL url = getURL();
-		if (ResourceUtils.isFileURL(url)) {
-			// Proceed with file system resolution...
-			return getFile().length();
-		}
-		else {
-			// Try a URL connection content-length header...
-			URLConnection con = url.openConnection();
-			customizeConnection(con);
-			return con.getContentLength();
-		}
-	}
-
-	@Override
-	public long lastModified() throws IOException {
-		URL url = getURL();
-		if (ResourceUtils.isFileURL(url) || ResourceUtils.isJarURL(url)) {
-			// Proceed with file system resolution...
-			return super.lastModified();
-		}
-		else {
-			// Try a URL connection last-modified header...
-			URLConnection con = url.openConnection();
-			customizeConnection(con);
-			return con.getLastModified();
-		}
-	}
-
-
-	/**
-	 * Customize the given {@link URLConnection}, obtained in the course current an
-	 * {@link #exists()}, {@link #contentLength()} or {@link #lastModified()} call.
-	 * <p>Calls {@link ResourceUtils#useCachesIfNecessary(URLConnection)} and
-	 * delegates to {@link #customizeConnection(HttpURLConnection)} if possible.
-	 * Can be overridden in subclasses.
-	 * @param con the URLConnection to customize
-	 * @throws IOException if thrown from URLConnection methods
-	 */
-	protected void customizeConnection(URLConnection con) throws IOException {
-		ResourceUtils.useCachesIfNecessary(con);
-		if (con instanceof HttpURLConnection) {
-			customizeConnection((HttpURLConnection) con);
-		}
-	}
-
-	/**
-	 * Customize the given {@link HttpURLConnection}, obtained in the course current an
-	 * {@link #exists()}, {@link #contentLength()} or {@link #lastModified()} call.
-	 * <p>Sets request method "HEAD" by default. Can be overridden in subclasses.
-	 * @param con the HttpURLConnection to customize
-	 * @throws IOException if thrown from HttpURLConnection methods
-	 */
-	protected void customizeConnection(HttpURLConnection con) throws IOException {
-		con.setRequestMethod("HEAD");
-	}
-
-
-	/**
-	 * Inner delegate class, avoiding a hard JBoss VFS API dependency at runtime.
-	 */
-	private static class VfsResourceDelegate {
-
-		public static Resource getResource(URL url) throws IOException {
-			return new VfsResource(VfsUtils.getRoot(url));
-		}
-
-		public static Resource getResource(URI uri) throws IOException {
-			return new VfsResource(VfsUtils.getRoot(uri));
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/b56817f7/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractResource.java
----------------------------------------------------------------------
diff --git a/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractResource.java b/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractResource.java
deleted file mode 100644
index a1c91a5..0000000
--- a/dormant/core/src/main/java/org/apache/tamaya/core/internal/resources/io/AbstractResource.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 2002-2014 the original author or authors.
- *
- * Licensed under the 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.core.internal.resources.io;
-
-import org.apache.tamaya.core.resource.Resource;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.Objects;
-
-
-/**
- * Convenience base class for {@link org.apache.tamaya.core.resource.Resource} implementations,
- * pre-implementing typical behavior.
- *
- * <p>The "exists" method will check whether a File or InputStream can
- * be opened; "isOpen" will always return false; "getURL" and "getFile"
- * throw an exception; and "toString" will return the description.
- *
- * @author Juergen Hoeller
- * @since 28.12.2003
- */
-public abstract class AbstractResource implements Resource {
-
-	/**
-	 * This implementation checks whether a File can be opened,
-	 * falling back to whether an InputStream can be opened.
-	 * This will cover both directories and content resources.
-	 */
-	@Override
-	public boolean exists() {
-		// Try file existence: can we find the file in the file system?
-		try {
-			return getFile().exists();
-		}
-		catch (IOException ex) {
-			// Fall back to stream existence: can we open the stream?
-			try {
-				InputStream is = getInputStream();
-				is.close();
-				return true;
-			}
-			catch (Throwable isEx) {
-				return false;
-			}
-		}
-	}
-
-	/**
-	 * This implementation always returns {@code true}.
-	 */
-	@Override
-	public boolean isReadable() {
-		return true;
-	}
-
-	/**
-	 * This implementation always returns {@code false}.
-	 */
-	@Override
-	public boolean isOpen() {
-		return false;
-	}
-
-	/**
-	 * This implementation throws a FileNotFoundException, assuming
-	 * that the resource cannot be resolved to a URL.
-	 */
-	@Override
-	public URL getURL() throws IOException {
-		throw new FileNotFoundException(getDescription() + " cannot be resolved to URL");
-	}
-
-	/**
-	 * This implementation builds a URI based on the URL returned
-	 * by {@link #getURL()}.
-	 */
-	@Override
-	public URI getURI() throws IOException {
-		URL url = getURL();
-		try {
-			return ResourceUtils.toURI(url);
-		}
-		catch (URISyntaxException ex) {
-			throw new IllegalStateException("Invalid URI [" + url + "]", ex);
-		}
-	}
-
-	/**
-	 * This implementation throws a FileNotFoundException, assuming
-	 * that the resource cannot be resolved to an absolute file path.
-	 */
-	@Override
-	public File getFile() throws IOException {
-		throw new FileNotFoundException(getDescription() + " cannot be resolved to absolute file path");
-	}
-
-	/**
-	 * This implementation reads the entire InputStream to calculate the
-	 * content length. Subclasses will almost always be able to provide
-	 * a more optimal version current this, e.g. checking a File length.
-	 * @throws IllegalStateException if {@code #getInputStreamSupplier()} returns null.
-	 */
-	@Override
-	public long contentLength() throws IOException {
-		InputStream is = this.getInputStream();
-        Objects.requireNonNull(is, "resource input stream must not be null");
-		try {
-			long size = 0;
-			byte[] buf = new byte[255];
-			int read;
-			while ((read = is.read(buf)) != -1) {
-				size += read;
-			}
-			return size;
-		}
-		finally {
-			try {
-				is.close();
-			}
-			catch (IOException ex) {
-			}
-		}
-	}
-
-	/**
-	 * This implementation checks the timestamp current the underlying File,
-	 * if available.
-	 * @see #getFileForLastModifiedCheck()
-	 */
-	@Override
-	public long lastModified() throws IOException {
-		long lastModified = getFileForLastModifiedCheck().lastModified();
-		if (lastModified == 0L) {
-			throw new FileNotFoundException(getDescription() +
-					" cannot be resolved in the file system for resolving its last-modified timestamp");
-		}
-		return lastModified;
-	}
-
-	/**
-	 * Determine the File to use for timestamp checking.
-	 * <p>The default implementation delegates to {@link #getFile()}.
-	 * @return the File to use for timestamp checking (never {@code null})
-	 * @throws IOException if the resource cannot be resolved as absolute
-	 * file path, i.e. if the resource is not available in a file system
-	 */
-	protected File getFileForLastModifiedCheck() throws IOException {
-		return getFile();
-	}
-
-	/**
-	 * This implementation throws a FileNotFoundException, assuming
-	 * that relative resources cannot be created for this resource.
-	 */
-	@Override
-	public Resource createRelative(String relativePath) throws IOException {
-		throw new FileNotFoundException("Cannot of a relative resource for " + getDescription());
-	}
-
-	/**
-	 * This implementation always returns {@code null},
-	 * assuming that this resource type does not have a filename.
-	 */
-	@Override
-	public String getFilename() {
-		return null;
-	}
-
-
-	/**
-	 * This implementation returns the description current this resource.
-	 * @see #getDescription()
-	 */
-	@Override
-	public String toString() {
-		return getDescription();
-	}
-
-	/**
-	 * This implementation compares description strings.
-	 * @see #getDescription()
-	 */
-	@Override
-	public boolean equals(Object obj) {
-		return (obj == this ||
-			(obj instanceof Resource && ((Resource) obj).getDescription().equals(getDescription())));
-	}
-
-	/**
-	 * This implementation returns the description's hash code.
-	 * @see #getDescription()
-	 */
-	@Override
-	public int hashCode() {
-		return getDescription().hashCode();
-	}
-
-}