branch feature/7520 updated (f78d367 -> c8e08f0)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7520 in repository observe. See http://git.codelutin.com/observe.git from f78d367 ajout de la date de mise a jour dans les DTO (refs #7470 #7520) new ed448f1 lever un execption en cas de modification concurent d'une entité siuvie en modif (refs #7470 #7520) new c8e08f0 fix npe (refs #7470 #7520) The 2 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 c8e08f0b9be83dd9c2b64d7f7a4a1871fe054905 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Sep 11 11:20:59 2015 +0200 fix npe (refs #7470 #7520) commit ed448f184e12d42c1eddc95a669fe259c58d35aa Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Sep 11 11:09:27 2015 +0200 lever un execption en cas de modification concurent d'une entité siuvie en modif (refs #7470 #7520) Summary of changes: .../service/ConcurrentModificationException.java | 26 +++++++++++++++ .../ird/observe/services/ObserveServiceTopia.java | 17 +++++++++- .../service/seine/TripSeineServiceTopiaTest.java | 38 ++++++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/ConcurrentModificationException.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7520 in repository observe. See http://git.codelutin.com/observe.git commit ed448f184e12d42c1eddc95a669fe259c58d35aa Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Sep 11 11:09:27 2015 +0200 lever un execption en cas de modification concurent d'une entité siuvie en modif (refs #7470 #7520) --- .../service/ConcurrentModificationException.java | 26 +++++++++++++++ .../ird/observe/services/ObserveServiceTopia.java | 17 +++++++++- .../service/seine/TripSeineServiceTopiaTest.java | 38 ++++++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ConcurrentModificationException.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ConcurrentModificationException.java new file mode 100644 index 0000000..8d70181 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ConcurrentModificationException.java @@ -0,0 +1,26 @@ +package fr.ird.observe.services.service; + +import java.util.Date; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ConcurrentModificationException extends RuntimeException { + + protected final Date lastUpdate; + + protected final Date currentUpdate; + + public ConcurrentModificationException(Date lastUpdate, Date currentUpdate) { + this.lastUpdate = lastUpdate; + this.currentUpdate = currentUpdate; + } + + public Date getLastUpdate() { + return lastUpdate; + } + + public Date getCurrentUpdate() { + return currentUpdate; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index a71a061..e609d92 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -21,6 +21,7 @@ import fr.ird.observe.services.builder.EntityToReferentialReferenceDtoBuilder; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; +import fr.ird.observe.services.dto.FollowedUpdateDto; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.FormDtos; import fr.ird.observe.services.dto.IdDto; @@ -32,6 +33,7 @@ import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.ReferenceSetDtos; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.ConcurrentModificationException; import fr.ird.observe.services.service.DataNotFoundException; import fr.ird.observe.services.service.DataSourceService; import org.apache.commons.lang3.StringUtils; @@ -315,11 +317,24 @@ public class ObserveServiceTopia implements ObserveService { } else { - entity = loadEntity(dtoType, entityType, dto.getId()); } + if (FollowedUpdateEntity.class.isAssignableFrom(entityType) + && FollowedUpdateDto.class.isAssignableFrom(dtoType)) { + + Date lasUpdate = ((FollowedUpdateEntity) entity).getLastUpdate(); + Date currentUpdate = ((FollowedUpdateDto) dto).getLastUpdate(); + + if (! lasUpdate.equals(currentUpdate)) { + + throw new ConcurrentModificationException(lasUpdate, currentUpdate); + + } + + } + try (DtoToEntityBuilder<D, E> entityBuilder = DtoToEntityBuilder.create(dtoType, entityType, this)) { entityBuilder.build(dto, entity); diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java index b4c0d2f..6610c46 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/seine/TripSeineServiceTopiaTest.java @@ -15,6 +15,7 @@ import fr.ird.observe.services.dto.referential.VesselDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.dto.seine.TripSeineStubDto; import fr.ird.observe.services.service.AbstractServiceTopiaTest; +import fr.ird.observe.services.service.ConcurrentModificationException; import fr.ird.observe.services.service.ReferentialService; import org.junit.Assert; import org.junit.Test; @@ -332,6 +333,43 @@ public class TripSeineServiceTopiaTest extends AbstractServiceTopiaTest { } + @Test(expected = ConcurrentModificationException.class) + public void saveConcurrentTest() { + + FormDto<TripSeineDto> formDto = service.loadToEdit(TRIP_SEINE_ID_1); + + TripSeineDto tripSeineDto = formDto.getForm(); + + ReferenceSetDto<PersonDto> personRefs = formDto.getReferenceSetDto(PersonDto.class); + ReferenceSetDto<OceanDto> oceanRefs = formDto.getReferenceSetDto(OceanDto.class); + ReferenceSetDto<HarbourDto> harbourRefs = formDto.getReferenceSetDto(HarbourDto.class); + + tripSeineDto.setCaptain((ReferentialReferenceDto<PersonDto>) personRefs.getReference(0)); + tripSeineDto.setDataEntryOperator((ReferentialReferenceDto<PersonDto>) personRefs.getReference(2)); + + tripSeineDto.setOcean((ReferentialReferenceDto<OceanDto>) oceanRefs.getReference(0)); + + tripSeineDto.setDepartureHarbour((ReferentialReferenceDto<HarbourDto>) harbourRefs.getReference(0)); + tripSeineDto.setLandingHarbour((ReferentialReferenceDto<HarbourDto>) harbourRefs.getReference(1)); + + // première sauvegarde + service.save(formDto); + + tripSeineDto.setErsId("ersid"); + + tripSeineDto.setStartDate(DateUtil.createDate(24, 8, 2015)); + tripSeineDto.setEndDate(DateUtil.createDate(24, 9, 2015)); + + tripSeineDto.setFormsUrl("http://une.url.com/formulaire"); + tripSeineDto.setReportsUrl("http://une.url.com/rapport"); + + tripSeineDto.setComment("Un commentaire"); + + // la deuxième sauvegarde doit lever une ConcurrentModificationException + service.save(formDto); + + } + @Test public void deleteTest() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7520 in repository observe. See http://git.codelutin.com/observe.git commit c8e08f0b9be83dd9c2b64d7f7a4a1871fe054905 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Fri Sep 11 11:20:59 2015 +0200 fix npe (refs #7470 #7520) --- .../src/main/java/fr/ird/observe/services/ObserveServiceTopia.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index e609d92..7855e94 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -327,7 +327,7 @@ public class ObserveServiceTopia implements ObserveService { Date lasUpdate = ((FollowedUpdateEntity) entity).getLastUpdate(); Date currentUpdate = ((FollowedUpdateDto) dto).getLastUpdate(); - if (! lasUpdate.equals(currentUpdate)) { + if (lasUpdate != null && ! lasUpdate.equals(currentUpdate)) { throw new ConcurrentModificationException(lasUpdate, currentUpdate); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm