From 291648c405d37e51e2ffc5a7664d8e329cf40fd3 Mon Sep 17 00:00:00 2001 From: Dancovich Date: Wed, 9 Oct 2013 12:07:32 -0300 Subject: [PATCH] Refatorado extrator de configuração em Map para inverter a ordem dos elementos. Agora o formato é prefixo.nome_do_mapa.chave=valor --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationMapValueExtractor.java | 16 ++++++---------- impl/core/src/test/java/configuration/field/map/PropertiesMapFieldConfig.java | 2 +- impl/core/src/test/resources/configuration/field/map/demoiselle.properties | 10 +++++----- impl/core/src/test/resources/configuration/field/map/demoiselle.xml | 24 +++++++++++------------- impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java | 22 +++++++++++----------- impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigValueExtractor.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigurationStore.java | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 204 insertions(+), 40 deletions(-) create mode 100644 impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigValueExtractor.java create mode 100644 impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigurationStore.java diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationMapValueExtractor.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationMapValueExtractor.java index c288ab6..6f8aa26 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationMapValueExtractor.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationMapValueExtractor.java @@ -50,12 +50,6 @@ import org.apache.commons.configuration.Configuration; import br.gov.frameworkdemoiselle.annotation.Priority; import br.gov.frameworkdemoiselle.configuration.ConfigurationValueExtractor; -/** - * - * TODO Adicionar verificação da existência de duas ou mais configurações JDBC com mesmo nome. Lançar INFO ou Exceção. - * - */ - @Priority(L2_PRIORITY) public class ConfigurationMapValueExtractor implements ConfigurationValueExtractor { @@ -63,7 +57,7 @@ public class ConfigurationMapValueExtractor implements ConfigurationValueExtract public Object getValue(String prefix, String key, Field field, Configuration configuration) throws Exception { Map value = null; - String regexp = "^(" + prefix + ")((.+)\\.)?(" + key + ")$"; + String regexp = "^(" + prefix + ")(" + key + ")(\\.(\\w+))?$"; Pattern pattern = Pattern.compile(regexp); for (Iterator iter = configuration.getKeys(); iter.hasNext();) { @@ -71,14 +65,16 @@ public class ConfigurationMapValueExtractor implements ConfigurationValueExtract Matcher matcher = pattern.matcher(iterKey); if (matcher.matches()) { - String confKey = matcher.group(1) + (matcher.group(2) == null ? "" : matcher.group(2)) - + matcher.group(4); + String confKey = matcher.group(1) + matcher.group(2) + ( matcher.group(3)!=null ? matcher.group(3) : "" ); + + /*matcher.group(1) + (matcher.group(2) == null ? "" : matcher.group(2)) + + matcher.group(4);*/ if (value == null) { value = new HashMap(); } - String mapKey = matcher.group(3) == null ? "default" : matcher.group(3); + String mapKey = matcher.group(4) == null ? "default" : matcher.group(4); value.put(mapKey, configuration.getString(confKey)); } } diff --git a/impl/core/src/test/java/configuration/field/map/PropertiesMapFieldConfig.java b/impl/core/src/test/java/configuration/field/map/PropertiesMapFieldConfig.java index f5bd4cc..9e83e04 100644 --- a/impl/core/src/test/java/configuration/field/map/PropertiesMapFieldConfig.java +++ b/impl/core/src/test/java/configuration/field/map/PropertiesMapFieldConfig.java @@ -39,6 +39,6 @@ package configuration.field.map; import static br.gov.frameworkdemoiselle.configuration.ConfigType.PROPERTIES; import br.gov.frameworkdemoiselle.configuration.Configuration; -@Configuration(type = PROPERTIES) +@Configuration(type = PROPERTIES,prefix="configuration.test") public class PropertiesMapFieldConfig extends AbstractMapFieldConfig { } diff --git a/impl/core/src/test/resources/configuration/field/map/demoiselle.properties b/impl/core/src/test/resources/configuration/field/map/demoiselle.properties index 1e711aa..9e0a667 100644 --- a/impl/core/src/test/resources/configuration/field/map/demoiselle.properties +++ b/impl/core/src/test/resources/configuration/field/map/demoiselle.properties @@ -33,9 +33,9 @@ # ou escreva para a Fundação do Software Livre (FSF) Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. -item1.stringWithDefinedKeyMap=demoiselle -item2.stringWithDefinedKeyMap=framework -item1.emptyValueMap= -item2.emptyValueMap= +configuration.test.stringWithDefinedKeyMap.item1=demoiselle +configuration.test.stringWithDefinedKeyMap.item2=framework +configuration.test.emptyValueMap.item1= +configuration.test.emptyValueMap.item2= -stringWithUndefinedKeyMap=undefined +configuration.test.stringWithUndefinedKeyMap=undefined diff --git a/impl/core/src/test/resources/configuration/field/map/demoiselle.xml b/impl/core/src/test/resources/configuration/field/map/demoiselle.xml index 576b971..763b8ce 100644 --- a/impl/core/src/test/resources/configuration/field/map/demoiselle.xml +++ b/impl/core/src/test/resources/configuration/field/map/demoiselle.xml @@ -36,17 +36,15 @@ --> - - demoiselle - - - framework - - undefined - - - - - - + + demoiselle + framework + + + undefined + + + + + diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java index 6ae670d..0e9439f 100644 --- a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java +++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfig.java @@ -37,10 +37,10 @@ package br.gov.frameworkdemoiselle.internal.configuration; import java.io.Serializable; -import java.util.Map; import br.gov.frameworkdemoiselle.annotation.Name; import br.gov.frameworkdemoiselle.configuration.Configuration; + /** * Provide used to access the configurations of the JDBC connection * @@ -56,41 +56,41 @@ public class JDBCConfig implements Serializable { private String defaultDataSourceName; @Name("jndi.name") - private Map jndiName; + private JDBCConfigurationStore jndiName; @Name("driver.class") - private Map driverClass; + private JDBCConfigurationStore driverClass; @Name("url") - private Map url; + private JDBCConfigurationStore url; @Name("username") - private Map username; + private JDBCConfigurationStore username; @Name("password") - private Map password; + private JDBCConfigurationStore password; public String getDefaultDataSourceName() { return defaultDataSourceName; } - public Map getJndiName() { + public JDBCConfigurationStore getJndiName() { return jndiName; } - public Map getDriverClass() { + public JDBCConfigurationStore getDriverClass() { return driverClass; } - public Map getUrl() { + public JDBCConfigurationStore getUrl() { return url; } - public Map getUsername() { + public JDBCConfigurationStore getUsername() { return username; } - public Map getPassword() { + public JDBCConfigurationStore getPassword() { return password; } } diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigValueExtractor.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigValueExtractor.java new file mode 100644 index 0000000..812546a --- /dev/null +++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigValueExtractor.java @@ -0,0 +1,90 @@ +/* + * Demoiselle Framework + * Copyright (C) 2010 SERPRO + * ---------------------------------------------------------------------------- + * This file is part of Demoiselle Framework. + * + * Demoiselle Framework is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License version 3 + * along with this program; if not, see + * or write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301, USA. + * ---------------------------------------------------------------------------- + * Este arquivo é parte do Framework Demoiselle. + * + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação + * do Software Livre (FSF). + * + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português + * para maiores detalhes. + * + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título + * "LICENCA.txt", junto com esse programa. Se não, acesse + * ou escreva para a Fundação do Software Livre (FSF) Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. + */ +package br.gov.frameworkdemoiselle.internal.configuration; + +import static br.gov.frameworkdemoiselle.annotation.Priority.L2_PRIORITY; + +import java.lang.reflect.Field; +import java.util.Iterator; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.configuration.Configuration; + +import br.gov.frameworkdemoiselle.annotation.Priority; +import br.gov.frameworkdemoiselle.configuration.ConfigurationValueExtractor; + +/** + * + * TODO Adicionar verificação da existência de duas ou mais configurações JDBC com mesmo nome. Lançar INFO ou Exceção. + * + */ +@Priority(L2_PRIORITY) +public class JDBCConfigValueExtractor implements ConfigurationValueExtractor { + + @Override + public Object getValue(String prefix, String key, Field field, Configuration configuration) throws Exception { + JDBCConfigurationStore value = null; + + String regexp = "^(" + prefix + ")((.+)\\.)?(" + key + ")$"; + Pattern pattern = Pattern.compile(regexp); + + for (Iterator iter = configuration.getKeys(); iter.hasNext();) { + String iterKey = iter.next(); + Matcher matcher = pattern.matcher(iterKey); + + if (matcher.matches()) { + String confKey = matcher.group(1) + (matcher.group(2) == null ? "" : matcher.group(2)) + + matcher.group(4); + + if (value == null) { + value = new JDBCConfigurationStore(); + } + + String mapKey = matcher.group(3) == null ? "default" : matcher.group(3); + value.put(mapKey, configuration.getString(confKey)); + } + } + + return value; + } + + @Override + public boolean isSupported(Field field) { + return field.getType() == JDBCConfigurationStore.class; + } +} diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigurationStore.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigurationStore.java new file mode 100644 index 0000000..73f0dfa --- /dev/null +++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/JDBCConfigurationStore.java @@ -0,0 +1,80 @@ +package br.gov.frameworkdemoiselle.internal.configuration; + +import java.io.Serializable; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + + +public class JDBCConfigurationStore implements Cloneable, Serializable { + + private static final long serialVersionUID = 1L; + + private HashMap properties = new HashMap(); + + public int size() { + return properties.size(); + } + + public boolean isEmpty() { + return properties.isEmpty(); + } + + public String get(Object key) { + return properties.get(key); + } + + public boolean equals(Object o) { + return properties.equals(o); + } + + public boolean containsKey(Object key) { + return properties.containsKey(key); + } + + public String put(String key, String value) { + return properties.put(key, value); + } + + public int hashCode() { + return properties.hashCode(); + } + + public String toString() { + return properties.toString(); + } + + public void putAll(Map m) { + properties.putAll(m); + } + + public String remove(Object key) { + return properties.remove(key); + } + + public void clear() { + properties.clear(); + } + + public boolean containsValue(Object value) { + return properties.containsValue(value); + } + + public Object clone() { + return properties.clone(); + } + + public Set keySet() { + return properties.keySet(); + } + + public Collection values() { + return properties.values(); + } + + public Set> entrySet() { + return properties.entrySet(); + } +} -- libgit2 0.21.2