branch feature/8148-correctionParanamer created (now 42812cb)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8148-correctionParanamer in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git at 42812cb mettre a jour le cache de référentiel après la sauvegarde d'un element de ce référentiel (see #8148). This branch includes the following new commits: new edef715 utiliser dans l'implemenation les même noms de pramétre des méthode que l'interface (see #8148). new 35725f0 remplacer la librairie Paranamer par l'api Java 8 (see #8148). new 42812cb mettre a jour le cache de référentiel après la sauvegarde d'un element de ce référentiel (see #8148). The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 42812cbb7aa50808756f85d2421abe587efd35de Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Mar 22 13:59:46 2016 +0100 mettre a jour le cache de référentiel après la sauvegarde d'un element de ce référentiel (see #8148). commit 35725f02286e1365cfaf473452b11aef3cf850bc Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Mar 22 13:56:47 2016 +0100 remplacer la librairie Paranamer par l'api Java 8 (see #8148). commit edef71510ca2be0462b5217f33a7a40252bc92bc Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Mar 21 11:09:11 2016 +0100 utiliser dans l'implemenation les même noms de pramétre des méthode que l'interface (see #8148). -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8148-correctionParanamer in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit edef71510ca2be0462b5217f33a7a40252bc92bc Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Mar 21 11:09:11 2016 +0100 utiliser dans l'implemenation les même noms de pramétre des méthode que l'interface (see #8148). --- .../services/service/ReferentialServiceTopia.java | 57 +++++++++------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java index 40b233e..14ec415 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java @@ -25,17 +25,11 @@ package fr.ird.observe.services.service; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.EntityMap; -import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; -import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.Species; -import fr.ird.observe.entities.referentiel.Species2; -import fr.ird.observe.entities.referentiel.SpeciesList; -import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.binder.BinderEngine; import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; @@ -43,10 +37,7 @@ import fr.ird.observe.services.dto.AbstractReferenceSet; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DtoMap; import fr.ird.observe.services.dto.Form; -import fr.ird.observe.services.dto.IdDtos; import fr.ird.observe.services.dto.constants.ReferenceStatus; -import fr.ird.observe.services.dto.constants.ReferentialLocale; -import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.reference.ReferenceSetDefinition; import fr.ird.observe.services.dto.reference.request.ReferenceSetRequestDefinition; import fr.ird.observe.services.dto.reference.request.ReferenceSetRequestDefinitions; @@ -54,9 +45,7 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.dto.referential.SpeciesDto; -import fr.ird.observe.services.dto.referential.SpeciesListDto; import fr.ird.observe.services.dto.result.SaveResultDto; -import fr.ird.observe.services.dto.seine.TripSeineDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaDao; @@ -147,14 +136,14 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } @Override - public <D extends ReferentialDto> Form<D> loadForm(Class<D> dtoType, String id) { + public <D extends ReferentialDto> Form<D> loadForm(Class<D> type, String id) { if (log.isTraceEnabled()) { - log.trace("loadForm(" + dtoType.getName() + ", " + id + ")"); + log.trace("loadForm(" + type.getName() + ", " + id + ")"); } - ObserveReferentialEntity entity = loadEntity(dtoType, id); + ObserveReferentialEntity entity = loadEntity(type, id); //FIXME Definir une definition pour chaque formulaire de référentiel - Form<D> form = referentialEntityToForm(dtoType, entity, null); + Form<D> form = referentialEntityToForm(type, entity, null); D dto = form.getObject(); dto.setVersion(entity.getTopiaVersion()); @@ -181,48 +170,48 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } @Override - public <D extends ReferentialDto> Form<D> preCreate(Class<D> dtoType) { + public <D extends ReferentialDto> Form<D> preCreate(Class<D> type) { if (log.isTraceEnabled()) { - log.trace("preCreate(" + dtoType.getName() + ")"); + log.trace("preCreate(" + type.getName() + ")"); } - Class<ObserveReferentialEntity> entityType = getReferentialEntityType(dtoType); + Class<ObserveReferentialEntity> entityType = getReferentialEntityType(type); ObserveReferentialEntity entity = newEntity(entityType); //TODO Voir selon le type d'entité si il y a des valeurs par défaut à utiliser //FIXME Definir une definition pour chaque formulaire de référentiel - Form<D> form = referentialEntityToForm(dtoType, entity, null); + Form<D> form = referentialEntityToForm(type, entity, null); return form; } - public <D extends ReferentialDto> SaveResultDto save(D dto) { + public <D extends ReferentialDto> SaveResultDto save(D bean) { if (log.isTraceEnabled()) { - log.trace("save(" + dto.getId() + ")"); + log.trace("save(" + bean.getId() + ")"); } - ObserveReferentialEntity entity = loadOrCreateEntityFromReferentialDto(dto); - copyReferentialDtoToEntity(dto, entity); + ObserveReferentialEntity entity = loadOrCreateEntityFromReferentialDto(bean); + copyReferentialDtoToEntity(bean, entity); return saveEntity(entity); } @Override - public <D extends ReferentialDto> void delete(Class<D> dtoType, String id) { + public <D extends ReferentialDto> void delete(Class<D> type, String id) { if (log.isTraceEnabled()) { - log.trace("delete(" + dtoType.getName() + ", " + id + ")"); + log.trace("delete(" + type.getName() + ", " + id + ")"); } - Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(dtoType); - deleteEntity(dtoType, entityType, Collections.singleton(id)); + Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(type); + deleteEntity(type, entityType, Collections.singleton(id)); } @Override - public <D extends ReferentialDto> void delete(Class<D> dtoType, Collection<String> ids) { + public <D extends ReferentialDto> void delete(Class<D> type, Collection<String> ids) { if (log.isTraceEnabled()) { - log.trace("delete(" + dtoType.getName() + ", [" + Joiner.on(", ").join(ids) + "])"); + log.trace("delete(" + type.getName() + ", [" + Joiner.on(", ").join(ids) + "])"); } - Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(dtoType); - deleteEntity(dtoType, entityType, ids); + Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(type); + deleteEntity(type, entityType, ids); } @Override @@ -266,12 +255,12 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe } @Override - public <D extends ReferentialDto> boolean exists(Class<D> dtoType, String id) { + public <D extends ReferentialDto> boolean exists(Class<D> type, String id) { if (log.isTraceEnabled()) { - log.trace("exists(" + dtoType.getName() + ", " + id + ")"); + log.trace("exists(" + type.getName() + ", " + id + ")"); } - Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(dtoType); + Class<? extends ObserveReferentialEntity> entityType = getReferentialEntityType(type); return existsEntity(entityType, id); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8148-correctionParanamer in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 35725f02286e1365cfaf473452b11aef3cf850bc Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Mar 22 13:56:47 2016 +0100 remplacer la librairie Paranamer par l'api Java 8 (see #8148). --- .../web/injector/ObserveDtoInjector.java | 27 ++++++++++++++++++++++ observe-entities/pom.xml | 4 ---- observe-services-api/pom.xml | 21 +++++++++-------- observe-services-configuration-api/pom.xml | 19 --------------- ...bserveDataSourceConfigurationRestConstants.java | 2 ++ .../services/ObserveServiceFactoryRest.java | 17 ++++++++++++-- observe-services-runner/pom.xml | 19 --------------- .../referential/ReferentialBinderSupport.java | 2 +- 8 files changed, 56 insertions(+), 55 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveDtoInjector.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveDtoInjector.java index 5694eee..29891c5 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveDtoInjector.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/ObserveDtoInjector.java @@ -23,6 +23,8 @@ package fr.ird.observe.application.web.injector; */ import com.google.gson.Gson; +import com.google.gson.JsonParseException; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; import fr.ird.observe.services.dto.ObserveDto; import org.apache.commons.beanutils.converters.AbstractConverter; import org.apache.commons.logging.Log; @@ -32,6 +34,7 @@ import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler; import org.debux.webmotion.server.mapping.Mapping; import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; /** * Created on 07/09/15. @@ -59,6 +62,30 @@ public class ObserveDtoInjector extends AbstractConverter implements ExecutorPar String gsonContent= ((String[])parameterTree.getValue())[0]; + if (generic instanceof TypeVariable) { + TypeVariable typeVariable = (TypeVariable) generic; + + String parameterizedTypeParam = ObserveDataSourceConfigurationRestConstants.PARAMETERIZED_TYPE_PREFIX + typeVariable.getName(); + + Call.ParameterTree parameterizedTypeParameterTree = call.getParameterTree().getObject().get(parameterizedTypeParam); + + String parameterizedTypeClassName= ((String[])parameterizedTypeParameterTree.getValue())[0]; + + try { + generic = Class.forName(parameterizedTypeClassName); + } catch (ClassNotFoundException cnfe) { + if (log.isErrorEnabled()) { + log.error("An exception occurred", cnfe); + } + throw new JsonParseException("Class not found: " + parameterizedTypeClassName, cnfe); + } + + if (log.isInfoEnabled()) { + log.info("find parameterized type " + typeVariable.getName() + " as " + parameterizedTypeClassName); + } + + } + observeDto = gson.fromJson(gsonContent, generic); if (log.isInfoEnabled()) { diff --git a/observe-entities/pom.xml b/observe-entities/pom.xml index d4fcf4a..1049d9a 100644 --- a/observe-entities/pom.xml +++ b/observe-entities/pom.xml @@ -54,10 +54,6 @@ <groupId>org.nuiton</groupId> <artifactId>nuiton-version</artifactId> </dependency> - <dependency> - <groupId>org.nuiton.i18n</groupId> - <artifactId>nuiton-i18n</artifactId> - </dependency> <!-- commons --> <dependency> diff --git a/observe-services-api/pom.xml b/observe-services-api/pom.xml index b3da66d..5c07f09 100644 --- a/observe-services-api/pom.xml +++ b/observe-services-api/pom.xml @@ -42,6 +42,10 @@ <groupId>org.nuiton</groupId> <artifactId>nuiton-validator</artifactId> </dependency> + <dependency> + <groupId>org.nuiton.i18n</groupId> + <artifactId>nuiton-i18n</artifactId> + </dependency> <!-- commons dependencies --> <dependency> @@ -119,16 +123,13 @@ </executions> </plugin> <plugin> - <groupId>com.thoughtworks.paranamer</groupId> - <artifactId>paranamer-maven-plugin</artifactId> - <executions> - <execution> - <id>extract-paranamer</id> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <compilerArgs> + <arg>-parameters</arg> + </compilerArgs> + </configuration> </plugin> </plugins> diff --git a/observe-services-configuration-api/pom.xml b/observe-services-configuration-api/pom.xml index 372c433..bad9429 100644 --- a/observe-services-configuration-api/pom.xml +++ b/observe-services-configuration-api/pom.xml @@ -52,23 +52,4 @@ </dependencies> - <build> - - <plugins> - <plugin> - <groupId>com.thoughtworks.paranamer</groupId> - <artifactId>paranamer-maven-plugin</artifactId> - <executions> - <execution> - <id>extract-paranamer</id> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - - </build> - </project> \ No newline at end of file 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 index 217b6dd..dbba4d4 100644 --- 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 @@ -45,4 +45,6 @@ public interface ObserveDataSourceConfigurationRestConstants { String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"; + String PARAMETERIZED_TYPE_PREFIX = "parameterized_type_"; + } 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 03dc3d7..57af2f9 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 @@ -52,6 +52,8 @@ import org.apache.commons.logging.LogFactory; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.lang.reflect.TypeVariable; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; @@ -318,9 +320,9 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport impl SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_PATTERN); - String[] strings = paranamer.lookupParameterNames(method); int index = 0; - for (String name : strings) { + for (Parameter parameter : method.getParameters()) { + String name = parameter.getName(); if (args.length >= (index + 1)) { Object value = args[index]; if (value != null && value instanceof String) { @@ -332,6 +334,17 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport impl } else if (value != null) { requestBuilder.addParameter(name, value); } + // si c'est un type parametré, on envoie la class correspondante a ce type + if (parameter.getParameterizedType() instanceof TypeVariable) { + TypeVariable typeVariable = (TypeVariable) parameter.getParameterizedType(); + requestBuilder.addParameter(PARAMETERIZED_TYPE_PREFIX + typeVariable.getName(), value.getClass().getCanonicalName()); + + if (log.isInfoEnabled()) { + log.info("add parameterized type " + typeVariable.getName() + " as " + value.getClass() + " into request" ); + } + + } + } if (reinjectConfiguration && PARAMETER_DATA_SOURCE_CONFIGURATION.equals(name)) { diff --git a/observe-services-runner/pom.xml b/observe-services-runner/pom.xml index ae389b1..34b782a 100644 --- a/observe-services-runner/pom.xml +++ b/observe-services-runner/pom.xml @@ -92,23 +92,4 @@ </dependencies> - <build> - - <plugins> - <plugin> - <groupId>com.thoughtworks.paranamer</groupId> - <artifactId>paranamer-maven-plugin</artifactId> - <executions> - <execution> - <id>extract-paranamer</id> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - - </build> - </project> \ No newline at end of file diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java b/observe-services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java index a19c380..7055adc 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/binder/referential/ReferentialBinderSupport.java @@ -136,10 +136,10 @@ public abstract class ReferentialBinderSupport<E extends ObserveReferentialEntit protected void copyEntityI18nFieldsToDto(I18nReferentialEntity entity, I18nReferentialDto dto) { + dto.setLabel1(entity.getLabel1()); dto.setLabel2(entity.getLabel2()); dto.setLabel3(entity.getLabel3()); dto.setLabel4(entity.getLabel4()); - dto.setLabel1(entity.getLabel1()); dto.setLabel5(entity.getLabel5()); dto.setLabel6(entity.getLabel6()); dto.setLabel7(entity.getLabel7()); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8148-correctionParanamer in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 42812cbb7aa50808756f85d2421abe587efd35de Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Mar 22 13:59:46 2016 +0100 mettre a jour le cache de référentiel après la sauvegarde d'un element de ce référentiel (see #8148). --- .../ird/observe/ui/content/ContentUIHandler.java | 1 + .../ui/content/ref/ContentReferenceUIHandler.java | 44 ++++++---------------- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java index eab6b00..fe3b9b5 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java @@ -976,6 +976,7 @@ public abstract class ContentUIHandler<E extends IdDto> { list.setData(data); list.putClientProperty("data", data); + list.getList().setListData(data.toArray()); } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java index cca8e33..da303ce 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/ref/ContentReferenceUIHandler.java @@ -52,6 +52,7 @@ import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.swing.ErrorDialogUI; import jaxx.runtime.swing.editor.bean.BeanListHeader; import jaxx.runtime.validator.swing.SwingValidatorUtil; +import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.FastDateFormat; import org.apache.commons.logging.Log; @@ -682,6 +683,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content } SaveResultDto saveResult = getReferentialService().save(bean); + saveResult.toDto(bean); if (bean instanceof ProgramDto) { @@ -693,6 +695,10 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content } + // on met a jour le referentiel dans le cache et le model + ReferenceSetRequestDefinitions requestDefinition = ReferenceSetRequestDefinitions.get(getBeanType()); + loadReferentialReferenceSetsInModel(requestDefinition.name()); + return true; } @@ -746,6 +752,10 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content treeHelper.updateProgram((ProgramDto) bean); } + // on met a jour le referentiel dans le cache et le model + ReferenceSetRequestDefinitions requestDefinition = ReferenceSetRequestDefinitions.get(getBeanType()); + loadReferentialReferenceSetsInModel(requestDefinition.name()); + return true; } @@ -762,7 +772,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content // recherche des utilisation du bean dans la base DtoMap usages = getReferentialService().findAllUsages(bean); - if (usages.isEmpty()) { + if (MapUtils.isEmpty(usages)) { if (log.isDebugEnabled()) { log.debug("No usage found, no warning to display"); } @@ -803,38 +813,6 @@ public class ContentReferenceUIHandler<E extends ReferentialDto> extends Content return incomingReferences; } - //FIXME -// @Override -// protected E onPreCreate(TopiaContext tx, -// Object parent, -// E bean) throws TopiaException { -// -// // par defaut, les objets en creation sont activés -// bean.setTopiaId(null); -// bean.setTopiaCreateDate(null); -// bean.setTopiaVersion(0); -// bean.setStatus(ReferenceStatus.enabled); -// return bean; -// } - - //FIXME -// @Override -// protected final E onCreate(TopiaContext tx, -// Object parent, -// E editBean) throws TopiaException { -// -// // obtention du dictionnaire de la clef metier -// Map<String, Object> properties = -// getLoadBinder().obtainProperties(editBean, getModel().getNaturalIds()); -// -// // creation de l'entite -// TopiaDAO<E> dao = getDataSource().getDAO(tx, getModel().getBeanType()); -// E beanToSave = dao.create(properties); -// -// // application du topiaId sur le bean d'édition -// editBean.setTopiaId(beanToSave.getTopiaId()); -// return beanToSave; -// } public <I> int[] updateIndices(JList<I> jlist, Collection<I> list) { if (log.isDebugEnabled()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm