This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit ac15a064813ed7a2d0e33d6ed4616df2aeec9db3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 30 13:01:36 2016 +0200 Use reflections insted of service loader + clean code --- pom.xml | 28 ++++++++++- services-api/pom.xml | 5 ++ .../services/ObserveServiceFactorySupport.java | 17 ++++--- .../services/ObserveServiceInitializer.java | 4 +- .../ConsolidateActivitySeineDataResult.java | 57 +++++++++++++++++++--- .../service/actions/report/ReportBuilder.java | 23 ++++----- .../diff/ReferentialDataSourceState.java | 2 +- .../diff/ReferentialDataSourceStates.java | 2 +- ...UnidirectionalReferentialSynchronizeEngine.java | 4 +- .../actions/validate/ValidateResultForDtos.java | 8 +-- services-runner/pom.xml | 5 ++ .../ObserveDataSourceConfigurationMainFactory.java | 2 +- .../{ => runner}/ObserveServiceMainFactory.java | 56 ++++++++++++--------- .../src/test/resources/log4j.properties | 32 ------------ 14 files changed, 151 insertions(+), 94 deletions(-) diff --git a/pom.xml b/pom.xml index b720abe..08e5aaa 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ <module>services-configuration-rest</module> <module>services-model</module> <module>services-api</module> - <module>test-data</module> + <module>test</module> <module>entities</module> <module>entities-migration</module> <module>services-topia-validation</module> @@ -135,6 +135,7 @@ <hibernateVersion>4.3.11.Final</hibernateVersion> <sl4jVersion>1.7.21</sl4jVersion> <swingXVersion>1.6.5-1</swingXVersion> + <reflectionsVersion>0.9.10</reflectionsVersion> <geoToolsVersion>15.0</geoToolsVersion> <webmotionVersion>2.5</webmotionVersion> @@ -682,6 +683,12 @@ </exclusions> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + <version>${reflectionsVersion}</version> + </dependency> + <!-- provided dependencies --> <dependency> @@ -871,6 +878,25 @@ <version>${processorPluginVersion}</version> </plugin> + <plugin> + <groupId>org.codehaus.gmavenplus</groupId> + <artifactId>gmavenplus-plugin</artifactId> + <version>1.5</version> + <dependencies> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + <version>${reflectionsVersion}</version> + </dependency> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + <version>2.4.3</version> + <scope>runtime</scope> + </dependency> + </dependencies> + </plugin> + </plugins> </pluginManagement> <extensions> diff --git a/services-api/pom.xml b/services-api/pom.xml index 84cbb27..45112ed 100644 --- a/services-api/pom.xml +++ b/services-api/pom.xml @@ -71,6 +71,11 @@ <artifactId>gson</artifactId> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + </dependency> + <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> diff --git a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java index 888e636..79b420a 100644 --- a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java +++ b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java @@ -25,7 +25,9 @@ package fr.ird.observe.services; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import org.reflections.Reflections; +import java.util.Set; import java.util.concurrent.ExecutionException; /** @@ -59,17 +61,20 @@ public abstract class ObserveServiceFactorySupport implements ObserveServiceFact return CacheBuilder.newBuilder().build(new CacheLoader<Class<?>, Class<?>>() { + Reflections reflections = new Reflections("fr.ird.observe.services"); + @Override public Class<?> load(Class<?> key) throws Exception { - String fqn = key.getName() + suffix; - try { - Class<?> classImpl = Class.forName(fqn); - return classImpl; - } catch (ClassNotFoundException e) { - throw new IllegalStateException("Could not get class: " + fqn, e); + Set<Class<?>> impls = reflections.getSubTypesOf((Class) key); + for (Class<?> impl : impls) { + if (impl.getSimpleName().endsWith(suffix)) { + return impl; + } } + throw new IllegalStateException("Could not get class: " + key); + } }); diff --git a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java index ff8a8b0..2c00b65 100644 --- a/services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java +++ b/services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java @@ -189,11 +189,11 @@ public class ObserveServiceInitializer { this.referentialLocale = referentialLocale; } - protected void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) { + public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) { this.dataSourceConnection = Optional.ofNullable(dataSourceConnection); } - protected void setDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { + public void setDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { this.dataSourceConfiguration = Optional.ofNullable(dataSourceConfiguration); } diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java index f26e72f..cdb3426 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java @@ -134,6 +134,21 @@ public class ConsolidateActivitySeineDataResult implements Serializable,ObserveD return newValue; } + public void setTargetLengthId(String targetLengthId) { + this.targetLengthId = targetLengthId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Float newValue) { + this.newValue = newValue; + } } public static class NonTargetLengthModification implements Serializable { @@ -164,6 +179,21 @@ public class ConsolidateActivitySeineDataResult implements Serializable,ObserveD return newValue; } + public void setNonTargetLengthId(String nonTargetLengthId) { + this.nonTargetLengthId = nonTargetLengthId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Float newValue) { + this.newValue = newValue; + } } public static class NonTargetCatchModification implements Serializable { @@ -194,30 +224,45 @@ public class ConsolidateActivitySeineDataResult implements Serializable,ObserveD return newValue; } + public void setNonTargetCatchId(String nonTargetCatchId) { + this.nonTargetCatchId = nonTargetCatchId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Number newValue) { + this.newValue = newValue; + } } - void setActivitySeineId(String activitySeineId) { + public void setActivitySeineId(String activitySeineId) { this.activitySeineId = activitySeineId; } - void setActivitySeineLabel(String activitySeineLabel) { + public void setActivitySeineLabel(String activitySeineLabel) { this.activitySeineLabel = activitySeineLabel; } - void setSchoolTypeChanged(SchoolType oldSchoolType, SchoolType newSchoolType) { + public void setSchoolTypeChanged(SchoolType oldSchoolType, SchoolType newSchoolType) { this.oldSchoolType = oldSchoolType; this.newSchoolType = newSchoolType; } - void setTargetLengthModifications(ImmutableSet<TargetLengthModification> targetLengthModifications) { + public void setTargetLengthModifications(ImmutableSet<TargetLengthModification> targetLengthModifications) { this.targetLengthModifications = targetLengthModifications; } - void setNonTargetLengthModifications(ImmutableSet<NonTargetLengthModification> nonTargetLengthModifications) { + public void setNonTargetLengthModifications(ImmutableSet<NonTargetLengthModification> nonTargetLengthModifications) { this.nonTargetLengthModifications = nonTargetLengthModifications; } - void setNonTargetCatchModifications(ImmutableSet<NonTargetCatchModification> nonTargetCatchModifications) { + public void setNonTargetCatchModifications(ImmutableSet<NonTargetCatchModification> nonTargetCatchModifications) { this.nonTargetCatchModifications = nonTargetCatchModifications; } diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/report/ReportBuilder.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/report/ReportBuilder.java index d60a06f..13b5d35 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/report/ReportBuilder.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/report/ReportBuilder.java @@ -161,18 +161,16 @@ public class ReportBuilder { } } - Report report = new Report(reportName, - name, - description, - rowHeaders, - columnHeaders, - operationss, - variables, - repeatVariables, - requests + return new Report(reportName, + name, + description, + rowHeaders, + columnHeaders, + operationss, + variables, + repeatVariables, + requests ); - - return report; } protected Map<String, String> detectReportProperties(String reportName) { @@ -290,8 +288,7 @@ public class ReportBuilder { repeat = new ReportRequest.RequestRepeat(repeatName, realRepeatLayout); } - ReportRequest def = new ReportRequest(realLayout, x, y, hql, repeat); - return def; + return new ReportRequest(realLayout, x, y, hql, repeat); } protected ReportOperation[] getOperations(String reportName, Map<String, String> dico) { diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceState.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceState.java index 5e1619e..3e180f0 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceState.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceState.java @@ -81,7 +81,7 @@ public class ReferentialDataSourceState<R extends ReferentialDto> { * @param version la version du référentiel à ajouter * @param disabled {@code true} si le référentiel est désactivé */ - void addReferentialVersion(String id, Date lastUpdateDate, long version, boolean disabled) { + public void addReferentialVersion(String id, Date lastUpdateDate, long version, boolean disabled) { diffStates.add(new ReferentialSynchronizeDiffState(id, lastUpdateDate, version, disabled)); } } diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceStates.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceStates.java index 6bb652a..a3a9e0a 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceStates.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialDataSourceStates.java @@ -63,7 +63,7 @@ public class ReferentialDataSourceStates { * @param referentialName le nom du référentiel * @param sourceState les états pour ce type de référentiel */ - <R extends ReferentialDto> void addReferentialVersion(Class<R> referentialName, ReferentialDataSourceState<R> sourceState) { + public <R extends ReferentialDto> void addReferentialVersion(Class<R> referentialName, ReferentialDataSourceState<R> sourceState) { diffStatesByType.put(referentialName, sourceState); } } diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java index aca3954..d66adf6 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java @@ -79,13 +79,11 @@ public class UnidirectionalReferentialSynchronizeEngine { } - UnidirectionalReferentialSynchronizeContext context = new UnidirectionalReferentialSynchronizeContext( + return new UnidirectionalReferentialSynchronizeContext( referentialSynchronizeRequestBuilders.build(), callbackRequests ); - return context; - } public UnidirectionalReferentialSynchronizeResult prepareResult(UnidirectionalReferentialSynchronizeContext context, UnidirectionalReferentialSynchronizeCallbackResults callbackResults) { diff --git a/services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateResultForDtos.java b/services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateResultForDtos.java index d86c49f..73f20e6 100644 --- a/services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateResultForDtos.java +++ b/services-api/src/main/java/fr/ird/observe/services/service/actions/validate/ValidateResultForDtos.java @@ -71,16 +71,12 @@ public class ValidateResultForDtos { public static EnumSet<NuitonValidatorScope> getScopes(ValidateResultForDto<?> validateResultForDto) { - EnumSet<NuitonValidatorScope> result = Sets.newEnumSet(Iterables.transform(validateResultForDto.getMessages(), ValidationMessage::getScope), NuitonValidatorScope.class); - - return result; + return Sets.newEnumSet(Iterables.transform(validateResultForDto.getMessages(), ValidationMessage::getScope), NuitonValidatorScope.class); } public static List<ValidationMessage> scopeMessageFilter(final NuitonValidatorScope scope, ValidateResultForDto<?> validateResultForDto) { - List<ValidationMessage> result = Lists.newLinkedList(validateResultForDto.getMessages().stream().filter(input -> scope.equals(input.getScope())).collect(Collectors.toList())); - - return result; + return Lists.newLinkedList(validateResultForDto.getMessages().stream().filter(input -> scope.equals(input.getScope())).collect(Collectors.toList())); } } diff --git a/services-runner/pom.xml b/services-runner/pom.xml index 2e5572e..f0c3e5b 100644 --- a/services-runner/pom.xml +++ b/services-runner/pom.xml @@ -70,6 +70,11 @@ <artifactId>guava</artifactId> </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + </dependency> + <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> diff --git a/services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveDataSourceConfigurationMainFactory.java similarity index 99% rename from services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java rename to services-runner/src/main/java/fr/ird/observe/services/runner/ObserveDataSourceConfigurationMainFactory.java index 3304fae..2b58b27 100644 --- a/services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java +++ b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveDataSourceConfigurationMainFactory.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services; +package fr.ird.observe.services.runner; /* * #%L diff --git a/services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java similarity index 69% rename from services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java rename to services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java index f05053a..0cce698 100644 --- a/services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java +++ b/services-runner/src/main/java/fr/ird/observe/services/runner/ObserveServiceMainFactory.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services; +package fr.ird.observe.services.runner; /* * #%L @@ -24,12 +24,18 @@ package fr.ird.observe.services; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.ObserveServiceFactory; +import fr.ird.observe.services.ObserveServiceInitializer; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.reflections.Reflections; -import java.util.ServiceLoader; +import java.lang.reflect.Modifier; +import java.util.Objects; +import java.util.Set; /** * Created on 16/08/15. @@ -43,7 +49,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { private static final ObserveServiceMainFactory GET = new ObserveServiceMainFactory(); - protected final ImmutableSet<ObserveServiceFactory> delegateFactories; + private final ImmutableSet<ObserveServiceFactory> delegateFactories; public static ObserveServiceMainFactory get() { return GET; @@ -78,8 +84,8 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { @Override public <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, Class<S> serviceType) { - Preconditions.checkNotNull(observeServiceInitializer, "observeServiceInitializerContext can't be null."); - Preconditions.checkNotNull(serviceType, "serviceType can't be null."); + Objects.requireNonNull(observeServiceInitializer, "observeServiceInitializerContext can't be null."); + Objects.requireNonNull(serviceType, "serviceType can't be null."); ObserveServiceFactory factory; if (observeServiceInitializer.withDataSourceConnection()) { @@ -90,7 +96,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { throw new IllegalStateException("No dataSourceConnection, nor dataSourceConfiguration given."); } - Preconditions.checkNotNull(factory, "factory can't be null."); + Objects.requireNonNull(factory, "factory can't be null."); if (log.isDebugEnabled()) { log.debug("Using factory: " + factory); @@ -109,33 +115,39 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { @Override public void close() { - for (ObserveServiceFactory delegateFactory : delegateFactories) { - delegateFactory.close(); - } + delegateFactories.forEach(ObserveServiceFactory::close); } - protected ObserveServiceMainFactory() { + private ObserveServiceMainFactory() { if (log.isInfoEnabled()) { log.info("Init MainServiceFactory."); } ImmutableSet.Builder<ObserveServiceFactory> builder = new ImmutableSet.Builder<>(); - ServiceLoader<ObserveServiceFactory> load = ServiceLoader.load(ObserveServiceFactory.class); - for (ObserveServiceFactory factory : load) { - - if (log.isInfoEnabled()) { - log.info("Found service factory: " + factory); - } - factory.setMainServiceFactory(this); - builder.add(factory); - - } + Set<Class<? extends ObserveServiceFactory>> factoryTypes = new Reflections("fr.ird.observe.services").getSubTypesOf(ObserveServiceFactory.class); + + factoryTypes.stream() + .filter(factoryType -> !Modifier.isAbstract(factoryType.getModifiers())) + .filter(factoryType -> !ObserveServiceMainFactory.class.equals(factoryType)) + .forEach(factoryType -> { + ObserveServiceFactory factory; + try { + factory = factoryType.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new ExceptionInInitializerError(e); + } + if (log.isInfoEnabled()) { + log.info("Found service factory: " + factory); + } + factory.setMainServiceFactory(this); + builder.add(factory); + }); delegateFactories = builder.build(); } - protected <S extends ObserveService> ObserveServiceFactory getFactory(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + private <S extends ObserveService> ObserveServiceFactory getFactory(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { ObserveServiceFactory result = null; for (ObserveServiceFactory serviceFactory : delegateFactories) { @@ -150,7 +162,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { } - protected <S extends ObserveService> ObserveServiceFactory getFactory(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) { + private <S extends ObserveService> ObserveServiceFactory getFactory(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) { ObserveServiceFactory result = null; for (ObserveServiceFactory serviceFactory : delegateFactories) { diff --git a/services-runner/src/test/resources/log4j.properties b/services-runner/src/test/resources/log4j.properties deleted file mode 100644 index 92dca32..0000000 --- a/services-runner/src/test/resources/log4j.properties +++ /dev/null @@ -1,32 +0,0 @@ -### -# #%L -# ObServe :: Services Runner -# %% -# Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/gpl-3.0.html>. -# #L% -### - -# Global logging configuration -log4j.rootLogger=ERROR, stdout -#log4j.rootLogger=ERROR, stdout -# Console output... -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%c:%L) %M - %m%n -#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n - -log4j.logger.fr.ird.observe=INFO -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.