This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463-2 in repository observe. See http://git.codelutin.com/observe.git commit b2f2af56fb5cad8cd9b39c5e791a06720dc9b70e Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 07:34:49 2015 +0200 Introduction de constants pour les choses mises dans les headers de la requete (See #7463) --- .../application/web/ObserveWebMotionFilter.java | 27 ++++-- ...bserveDataSourceConfigurationRestConstants.java | 23 +++++ .../services/ObserveServiceFactoryRest.java | 104 ++++++++++++++------- 3 files changed, 111 insertions(+), 43 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java index e34a42d..e823654 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java @@ -10,6 +10,7 @@ import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationCont import fr.ird.observe.application.web.security.UnknownObserveWebUserException; import fr.ird.observe.application.web.security.UnknownObserveWebUserForDatabaseException; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.apache.commons.lang3.StringUtils; import org.debux.webmotion.server.WebMotionFilter; @@ -22,7 +23,7 @@ import java.util.Locale; /** * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveWebMotionFilter extends WebMotionFilter { +public class ObserveWebMotionFilter extends WebMotionFilter implements ObserveDataSourceConfigurationRestConstants { public void inject(HttpContext context) throws InvalidAuthenticationTokenException, UnknownObserveWebUserException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserForDatabaseException, InvalidAdminKeyApiException { @@ -35,7 +36,7 @@ public class ObserveWebMotionFilter extends WebMotionFilter { Locale applicationLocale = getApplicationLocale(request); ReferentialLocale referentialLocale = getReferentialLocale(request); - String adminApiKey = getRequestHeaderOrParameterValueOrNull(request, "adminApiKey"); + String adminApiKey = getRequestHeaderOrParameterValueOrNull(request, REQUEST_ADMIN_API_KEY); if (adminApiKey != null) { String configurationAdminKey = applicationContext.getApplicationConfiguration().getAdminApiKey(); @@ -43,8 +44,8 @@ public class ObserveWebMotionFilter extends WebMotionFilter { throw new InvalidAdminKeyApiException(adminApiKey); } } - ObserveWebRequestContext requestContext = new ObserveWebRequestContext(applicationContext, securityContext, applicationLocale, referentialLocale, adminApiKey); + ObserveWebRequestContext requestContext = new ObserveWebRequestContext(applicationContext, securityContext, applicationLocale, referentialLocale, adminApiKey); ObserveWebRequestContext.setRequestContext(context, requestContext); doProcess(); @@ -52,28 +53,32 @@ public class ObserveWebMotionFilter extends WebMotionFilter { } protected ReferentialLocale getReferentialLocale(HttpServletRequest request) { + ReferentialLocale referentialLocale = null; - String referentialLocaleStr = getRequestHeaderOrParameterValueOrNull(request, "referentialLocale"); + String referentialLocaleStr = getRequestHeaderOrParameterValueOrNull(request, REQUEST_REFERENTIAL_LOCALE); if (referentialLocaleStr != null) { Locale referentialLoca = ConverterUtil.convert(Locale.class, referentialLocaleStr); referentialLocale = ReferentialLocale.valueOf(referentialLoca); } return referentialLocale; + } protected Locale getApplicationLocale(HttpServletRequest request) { + Locale applicationLocale = null; - String applicationLocaleStr = getRequestHeaderOrParameterValueOrNull(request, "applicationLocale"); + String applicationLocaleStr = getRequestHeaderOrParameterValueOrNull(request, REQUEST_APPLICATION_LOCALE); if (applicationLocaleStr != null) { applicationLocale = ConverterUtil.convert(Locale.class, applicationLocaleStr); } return applicationLocale; + } protected ObserveWebRequestSecurityContext createSecurityContext(ObserveWebApplicationContext applicationContext, HttpServletRequest request) throws InvalidAuthenticationTokenException, UnknownObserveWebUserForDatabaseException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserException { ObserveWebRequestSecurityContext securityContext = null; - String authenticationToken = getRequestHeaderOrParameterValueOrNull(request, "authenticationToken"); + String authenticationToken = getRequestHeaderOrParameterValueOrNull(request, REQUEST_AUTHENTICATION_TOKEN); if (StringUtils.isNotBlank(authenticationToken)) { // Recherche de la configuration à la source de donnée @@ -85,9 +90,9 @@ public class ObserveWebMotionFilter extends WebMotionFilter { // Cas où on l'utilisateur n'est pas connecté - String userLogin = getRequestParameterValueOrNull(request, "userLogin"); - String userPassword = getRequestParameterValueOrNull(request, "userPassword"); - String userDatabaseName = getRequestParameterValueOrNull(request, "userDatabaseName"); + String userLogin = getRequestParameterValueOrNull(request, REQUEST_USER_LOGIN); + String userPassword = getRequestParameterValueOrNull(request, REQUEST_USER_PASSWORD); + String userDatabaseName = getRequestParameterValueOrNull(request, REQUEST_USER_DATABASE_NAME); if (!(userLogin == null && userPassword == null)) { @@ -105,19 +110,23 @@ public class ObserveWebMotionFilter extends WebMotionFilter { } protected String getRequestHeaderOrParameterValueOrNull(HttpServletRequest request, String parameterName) { + String result = request.getHeader(parameterName); if (StringUtils.isBlank(result)) { result = getRequestParameterValueOrNull(request, parameterName); } return result; + } protected String getRequestParameterValueOrNull(HttpServletRequest request, String parameterName) { + String parameterValue = request.getParameter(parameterName); if (StringUtils.isBlank(parameterValue)) { parameterValue = null; } return parameterValue; + } } diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java new file mode 100644 index 0000000..f093639 --- /dev/null +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRestConstants.java @@ -0,0 +1,23 @@ +package fr.ird.observe.services.configuration; + +/** + * Created on 04/09/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface ObserveDataSourceConfigurationRestConstants { + + String REQUEST_APPLICATION_LOCALE = "applicationLocale"; + + String REQUEST_REFERENTIAL_LOCALE = "referentialLocale"; + + String REQUEST_AUTHENTICATION_TOKEN = "authenticationToken"; + + String REQUEST_USER_LOGIN = "userLogin"; + + String REQUEST_USER_PASSWORD = "userPassword"; + + String REQUEST_USER_DATABASE_NAME = "userDatabaseName"; + + String REQUEST_ADMIN_API_KEY = "adminApiKey"; +} diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java index e324069..be71661 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java @@ -8,15 +8,20 @@ import com.google.gson.Gson; import com.thoughtworks.paranamer.CachingParanamer; import com.thoughtworks.paranamer.Paranamer; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestNotAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestSupport; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; import fr.ird.observe.services.http.RequestBuilder; import fr.ird.observe.services.spi.Write; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Type; import java.util.Collection; /** @@ -24,26 +29,22 @@ import java.util.Collection; * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { +public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport implements ObserveDataSourceConfigurationRestConstants { /** Logger. */ private static final Log log = LogFactory.getLog(ObserveServiceFactoryRest.class); - public static final String AUTHENTICATION_TOKEN = "authenticationToken"; - - public static final String APPLICATION_LOCALE = "applicationLocale"; - - public static final String REFERENTIAL_LOCALE = "referentialLocale"; - protected final CachingParanamer paranamer = new CachingParanamer(); protected final Supplier<Gson> gsonSupplier = new ObserveDtoGsonSupplier(); @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); - return dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest; + return dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestSupport; + } @Override @@ -56,7 +57,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { Preconditions.checkNotNull(observeServiceInitializer.getTemporaryDirectoryRoot(), "temporaryDirectoryRoot can't be null."); ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializer.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); - Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest, "dataSourceConfiguration must be of type ObserveRestClientDataSourceConfiguration"); + Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestSupport, "dataSourceConfiguration must be of type ObserveDataSourceConfigurationRestSupport"); S service = newRemoteProxyServiceInstance(serviceType, observeServiceInitializer); return service; @@ -78,7 +79,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { protected static class RemoteInvocationHandler<E extends ObserveService> implements InvocationHandler { - protected final String authenticationToken; + protected final ObserveDataSourceConfigurationRestSupport dataSourceConfiguration; protected final Supplier<Gson> gsonSupplier; @@ -96,8 +97,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { this.paranamer = paranamer; this.serviceClass = serviceClass; - ObserveDataSourceConfigurationRest dataSourceConfiguration = (ObserveDataSourceConfigurationRest) observeServiceInitializer.getDataSourceConfiguration(); - this.authenticationToken = dataSourceConfiguration.getAuthenticationToken(); + this.dataSourceConfiguration = (ObserveDataSourceConfigurationRestSupport) observeServiceInitializer.getDataSourceConfiguration(); this.serviceUrl = dataSourceConfiguration.getServerUrl() + "/" + serviceClass.getSimpleName(); this.gsonSupplier = gsonSupplier; this.applicationLocale = observeServiceInitializer.getApplicationLocale().toString(); @@ -129,7 +129,42 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { if (log.isDebugEnabled()) { log.debug("Invoke remote service on endpoint: " + url); } + RequestBuilder requestBuilder = new RequestBuilder(url, gsonSupplier); + addParameters(requestBuilder, method, args); + addHeaders(requestBuilder); + Object result = getResult(method, requestBuilder); + + return result; + + } + + protected Object getResult(Method method, RequestBuilder requestBuilder) throws IOException { + + Object result; + try { + + boolean writeData = method.isAnnotationPresent(Write.class); + + Type genericReturnType = method.getGenericReturnType(); + if (writeData) { + result = requestBuilder.postAndGetJsonAndCloseConnection(genericReturnType); + } else { + result = requestBuilder.getJsonAndCloseConnection(genericReturnType); + } + + } catch (RuntimeException re) { + if (log.isWarnEnabled()) { + log.warn("An error occurred during remote service call", re); + } + throw re; + } + return result; + + } + + protected void addParameters(RequestBuilder requestBuilder, Method method, Object... args) throws IOException { + String[] strings = paranamer.lookupParameterNames(method); int index = 0; for (String name : strings) { @@ -145,32 +180,33 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { } index++; } - if (!Strings.isNullOrEmpty(authenticationToken)) { - requestBuilder.addHeader(AUTHENTICATION_TOKEN, authenticationToken); + + } + + protected void addHeaders(RequestBuilder requestBuilder) { + + if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestNotAuthenticated) { + + ObserveDataSourceConfigurationRestNotAuthenticated sourceConfiguration = (ObserveDataSourceConfigurationRestNotAuthenticated) dataSourceConfiguration; + requestBuilder.addHeader(REQUEST_USER_LOGIN, sourceConfiguration.getLogin()); + requestBuilder.addHeader(REQUEST_USER_PASSWORD, new String(sourceConfiguration.getPassword())); + if (sourceConfiguration.withDatabaseName()) { + + requestBuilder.addHeader(REQUEST_USER_DATABASE_NAME, sourceConfiguration.getOptionalDatabaseName().get()); + } + + } else if (dataSourceConfiguration instanceof ObserveDataSourceConfigurationRestAuthenticated) { + + ObserveDataSourceConfigurationRestAuthenticated sourceConfiguration = (ObserveDataSourceConfigurationRestAuthenticated) dataSourceConfiguration; + requestBuilder.addHeader(REQUEST_AUTHENTICATION_TOKEN, sourceConfiguration.getAuthenticationToken()); + } if (!Strings.isNullOrEmpty(applicationLocale)) { - requestBuilder.addHeader(APPLICATION_LOCALE, applicationLocale); + requestBuilder.addHeader(REQUEST_APPLICATION_LOCALE, applicationLocale); } if (!Strings.isNullOrEmpty(referentialLocale)) { - requestBuilder.addHeader(REFERENTIAL_LOCALE, referentialLocale); - } - Object result; - try { - - boolean writeData = method.isAnnotationPresent(Write.class); - - if (writeData) { - result = requestBuilder.postAndGetJsonAndCloseConnection(method.getGenericReturnType()); - } else { - result = requestBuilder.getJsonAndCloseConnection(method.getGenericReturnType()); - } - } catch (RuntimeException re) { - if (log.isWarnEnabled()) { - log.warn("An error occurred during remote service call", re); - } - throw re; + requestBuilder.addHeader(REQUEST_REFERENTIAL_LOCALE, referentialLocale); } - return result; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.