com.qpark.eip.core.spring.AbstractPlaceholderConfigurer.java Source code

Java tutorial

Introduction

Here is the source code for com.qpark.eip.core.spring.AbstractPlaceholderConfigurer.java

Source

/*******************************************************************************
 * Copyright (c) 2013, 2014, 2015 QPark Consulting  S.a r.l.
 * 
 * This program and the accompanying materials are made available under the 
 * terms of the Eclipse Public License v1.0. 
 * The Eclipse Public License is available at 
 * http://www.eclipse.org/legal/epl-v10.html.
 ******************************************************************************/
package com.qpark.eip.core.spring;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;

import com.qpark.eip.core.ReInitalizeable;

/**
 * Provides properties loaded by the {@link PropertyPlaceholderConfigurer}
 * routines.
 *
 * @author bhausen
 */
public abstract class AbstractPlaceholderConfigurer extends PropertyPlaceholderConfigurer
        implements Map<String, String>, ReInitalizeable, ApplicationContextAware {
    /**
     * @param properties
     *            The loaded properties
     * @return the {@link TreeMap} containing the translations.
     */
    public static TreeMap<String, String> setupTranslationMap(final Map<String, String> properties) {
        TreeMap<String, String> translationMap = new TreeMap<String, String>();
        String number;
        String source;
        String translated;
        for (String s0 : properties.keySet()) {
            if (s0.trim().length() > 0 && !s0.trim().startsWith("#") && s0.indexOf('.') > 0) {
                number = s0.substring(0, s0.indexOf('.'));
                for (String s1 : properties.keySet()) {
                    source = null;
                    translated = null;
                    if (s1.trim().length() > 0 && !s1.trim().startsWith("#") && s1.startsWith(number)
                            && !s1.equals(s0)) {
                        if (s0.contains("source")) {
                            source = s0;
                        } else if (s1.contains("source")) {
                            source = s1;
                        }
                        if (s0.contains("translated")) {
                            translated = s0;
                        } else if (s1.contains("translated")) {
                            translated = s1;
                        }
                        if (source != null && translated != null) {
                            translationMap.put(properties.get(source), properties.get(translated));
                        }
                    }
                }
            }
        }
        return translationMap;
    }

    /** The map containing all the properties. */
    private final TreeMap<String, String> properties = new TreeMap<String, String>();
    /** The application context. */
    protected ApplicationContext applicationContext;

    /**
     * Not supported!
     *
     * @see java.util.Map#clear()
     */
    @Override
    public void clear() {
    }

    /**
     * @see java.util.Map#containsKey(java.lang.Object)
     */
    @Override
    public boolean containsKey(final Object key) {
        return this.properties.containsKey(key);
    }

    /**
     * @see java.util.Map#containsValue(java.lang.Object)
     */
    @Override
    public boolean containsValue(final Object value) {
        return this.properties.containsValue(value);
    }

    /**
     * @see java.util.Map#entrySet()
     */
    @Override
    public Set<java.util.Map.Entry<String, String>> entrySet() {
        return Collections.unmodifiableSet(this.properties.entrySet());
    }

    /**
     * @see java.util.Map#get(java.lang.Object)
     */
    @Override
    public String get(final Object key) {
        return this.properties.get(key);
    }

    /**
     * @return All loaded properties
     */
    public Map<String, String> getProperties() {
        return Collections.unmodifiableMap(this.properties);
    }

    /**
     * @return Get the property
     */
    public String getProperty(final String key) {
        return this.properties.get(key);
    }

    /**
     * @return Get the property
     */
    public String getProperty(final String key, final String defaultValue) {
        String value = defaultValue;
        if (this.properties.containsKey(key)) {
            value = this.properties.get(key);
        }
        return value;
    }

    /**
     * @return Get the property
     */
    public int getProperty(final String key, final int defaultValue) {
        int value = defaultValue;
        if (this.properties.containsKey(key)) {
            try {
                value = Integer.parseInt(this.getProperty(key, String.valueOf(defaultValue)));
            } catch (NumberFormatException e) {
                value = defaultValue;
            }
        }
        return value;
    }

    /**
     * @return Get the property
     */
    public long getProperty(final String key, final long defaultValue) {
        long value = defaultValue;
        if (this.properties.containsKey(key)) {
            try {
                value = Long.parseLong(this.getProperty(key, String.valueOf(defaultValue)));
            } catch (NumberFormatException e) {
                value = defaultValue;
            }
        }
        return value;
    }

    /**
     * Get the property names as {@link Set}.
     * 
     * @return the property names.
     */
    public Set<String> stringPropertyNames() {
        return this.properties.keySet();
    }

    /**
     * @return Get the property
     */
    public double getProperty(final String key, final double defaultValue) {
        double value = defaultValue;
        if (this.properties.containsKey(key)) {
            try {
                value = Double.parseDouble(this.getProperty(key, String.valueOf(defaultValue)));
            } catch (NumberFormatException e) {
                value = defaultValue;
            }
        }
        return value;
    }

    /**
     * @see java.util.Map#isEmpty()
     */
    @Override
    public boolean isEmpty() {
        return this.properties.isEmpty();
    }

    /**
     * @see java.util.Map#keySet()
     */
    @Override
    public Set<String> keySet() {
        return this.properties.keySet();
    }

    /**
     * @see org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#processProperties(org.springframework.beans.factory.config.ConfigurableListableBeanFactory,
     *      java.util.Properties)
     */
    @Override
    protected void processProperties(final ConfigurableListableBeanFactory beanFactoryToProcess,
            final Properties props) throws BeansException {
        super.processProperties(beanFactoryToProcess, props);
        for (String k : props.stringPropertyNames()) {
            this.properties.put(k, props.getProperty(k));
        }
    }

    /**
     * We do not update properties!
     *
     * @see java.util.Map#put(java.lang.Object, java.lang.Object)
     */
    @Override
    public String put(final String key, final String value) {
        if (!this.properties.containsKey(key)) {
            return this.properties.put(key, value);
        } else {
            return this.properties.get(key);
        }
    }

    /**
     * We do not update properties!
     *
     * @see java.util.Map#putAll(java.util.Map)
     */
    @Override
    public void putAll(final Map<? extends String, ? extends String> m) {
        for (Map.Entry<? extends String, ? extends String> e : m.entrySet()) {
            this.put(e.getKey(), e.getValue());
        }
    }

    /**
     * @see com.qpark.eip.core.ReInitalizeable#reInitalize()
     */
    @Override
    public void reInitalize() {
        if (ConfigurableApplicationContext.class.isInstance(this.applicationContext)) {
            this.properties.clear();
            this.postProcessBeanFactory(
                    ((ConfigurableApplicationContext) this.applicationContext).getBeanFactory());
        }
    }

    /**
     * We do not remove properties!
     *
     * @see java.util.Map#remove(java.lang.Object)
     */
    @Override
    public String remove(final Object key) {
        // We do not remove properties
        return this.properties.get(key);
    }

    /**
     * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
     */
    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    /**
     * @see java.util.Map#size()
     */
    @Override
    public int size() {
        return this.properties.size();
    }

    /**
     * @see java.util.Map#values()
     */
    @Override
    public Collection<String> values() {
        return Collections.unmodifiableCollection(this.properties.values());
    }
}