This is an automated email from the git hooks/post-receive script. New commit to branch feature/7458 in repository observe. See http://git.codelutin.com/observe.git commit ea86ae6913b46c64f4b9be640feb55014525a710 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 18 14:22:47 2015 +0200 Ajout d'une exception lorsqu'on a pas pas trouvé une donnée + test de suppression --- .../services/service/DataNotFoundException.java | 30 ++++++++++++++++ .../services/service/ReferentialService.java | 8 ++--- .../services/service/ReferentialServiceTopia.java | 21 ++++++----- .../service/ReferentialServiceTopiaTest.java | 42 ++++++++++++++++++++++ 4 files changed, 89 insertions(+), 12 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataNotFoundException.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataNotFoundException.java new file mode 100644 index 0000000..1653e5e --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataNotFoundException.java @@ -0,0 +1,30 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.dto.IdDto; + +/** + * Pour signifier qu'on a demandé une resources non existente. + * Created on 18/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataNotFoundException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + private final Class<? extends IdDto> type; + private final String id; + + public DataNotFoundException(Class<? extends IdDto> type, String id) { + this.type = type; + this.id = id; + } + + public Class<? extends IdDto> getType() { + return type; + } + + public String getId() { + return id; + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java index 36690b5..1ef629f 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -17,9 +17,9 @@ public interface ReferentialService extends ObserveService { <R extends ReferentialDto> ReferentialLabelSetDto getReferentialLabelSet(Class<R> type); - <R extends ReferentialDto> FormDto<R> loadToRead(Class<R> type, String id); + <R extends ReferentialDto> FormDto<R> loadToRead(Class<R> type, String id) throws DataNotFoundException; - <R extends ReferentialDto> FormDto<R> loadToEdit(Class<R> type, String id); + <R extends ReferentialDto> FormDto<R> loadToEdit(Class<R> type, String id) throws DataNotFoundException; <R extends ReferentialDto> FormDto<R> preCreate(Class<R> type); @@ -27,9 +27,9 @@ public interface ReferentialService extends ObserveService { <R extends ReferentialDto> String save(FormDto<R> form); @Write - <R extends ReferentialDto> void delete(Class<R> type, String id); + <R extends ReferentialDto> void delete(Class<R> type, String id) throws DataNotFoundException; @Write - <R extends ReferentialDto> void delete(Class<R> type, Collection<String> ids); + <R extends ReferentialDto> void delete(Class<R> type, Collection<String> ids) throws DataNotFoundException; } 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 ce04fb3..32e6d52 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 @@ -241,7 +241,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe public <D extends ReferentialDto> ReferentialLabelSetDto getReferentialLabelSet(Class<D> dtoType, String id) { Class<TopiaEntity> entityType = getEntityType(dtoType); - TopiaEntity entity = loadEntity(entityType, id); + TopiaEntity entity = loadEntity(dtoType, entityType, id); LinkedHashSet<ReferentialLabelDto<D>> labels = new LinkedHashSet<>(1); ReferentialLabelDto<D> dto = ReferentialLabelDtos.newReferentialLabelDto(dtoType, serviceContext.getReferentialLocale(), entity); labels.add(dto); @@ -252,7 +252,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe @Override public <D extends ReferentialDto> FormDto<D> loadToRead(Class<D> dtoType, String id) { Class<? extends TopiaEntity> entityType = getEntityType(dtoType); - TopiaEntity entity = loadEntity(entityType, id); + TopiaEntity entity = loadEntity(dtoType, entityType, id); FormDto<D> form = entityToReadReferentialFormDto(dtoType, entity); return form; } @@ -260,7 +260,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe @Override public <D extends ReferentialDto> FormDto<D> loadToEdit(Class<D> dtoType, String id) { Class<? extends TopiaEntity> entityType = getEntityType(dtoType); - TopiaEntity entity = loadEntity(entityType, id); + TopiaEntity entity = loadEntity(dtoType, entityType, id); FormDto<D> form = entityToEditReferentialFormDto(dtoType, entity); return form; } @@ -274,7 +274,6 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe return form; } - public <D extends ReferentialDto> String save(FormDto<D> form) { Class<D> dtoType = form.getType(); TopiaEntity entity = referentialDtoToEntity(form.getForm()); @@ -287,13 +286,13 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe @Override public <D extends ReferentialDto> void delete(Class<D> dtoType, String id) { Class<? extends TopiaEntity> entityType = getEntityType(dtoType); - deleteEntity(entityType, Collections.singleton(id)); + deleteEntity(dtoType, entityType, Collections.singleton(id)); } @Override public <D extends ReferentialDto> void delete(Class<D> dtoType, Collection<String> ids) { Class<? extends TopiaEntity> entityType = getEntityType(dtoType); - deleteEntity(entityType, ids); + deleteEntity(dtoType, entityType, ids); } protected <E extends TopiaEntity> List<E> loadEntities(Class<E> entityType) { @@ -303,10 +302,13 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe return entities; } - protected <E extends TopiaEntity> E loadEntity(Class<E> entityType, String id) { + protected <D extends ReferentialDto, E extends TopiaEntity> E loadEntity(Class<D> dtoType, Class<E> entityType, String id) { TopiaContext transaction = serviceContext.getTransaction(); TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); E entity = dao.findByTopiaId(id); + if (entity == null) { + throw new DataNotFoundException(dtoType, id); + } return entity; } @@ -324,11 +326,14 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe return entity; } - protected <E extends TopiaEntity> void deleteEntity(Class<E> entityType, Iterable<String> ids) { + protected <D extends ReferentialDto, E extends TopiaEntity> void deleteEntity(Class<D> dtoType, Class<E> entityType, Iterable<String> ids) { TopiaContext transaction = serviceContext.getTransaction(); TopiaDAO<E> dao = ObserveDAOHelper.getDAO(transaction, entityType); for (String id : ids) { E entity = dao.findByTopiaId(id); + if (entity == null) { + throw new DataNotFoundException(dtoType, id); + } dao.delete(entity); } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java index df8c676..3bcb151 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java @@ -2,11 +2,15 @@ package fr.ird.observe.services.service; import fr.ird.observe.db.DataSource; import fr.ird.observe.entities.migration.H2DataSourceMigration; +import fr.ird.observe.entities.referentiel.LengthWeightParameter; +import fr.ird.observe.entities.referentiel.Program; import fr.ird.observe.services.ObserveServiceContextTopia; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.LengthWeightParameterDto; +import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialLabelSetDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -107,6 +111,17 @@ public class ReferentialServiceTopiaTest { } + @Test + public void testDelete() throws Exception { + + TopiaContext tx = dataSourceResource.newTransaction("testDelete"); + + delete(tx, ProgramDto.class, Program.class); + delete(tx, LengthWeightParameterDto.class, LengthWeightParameter.class); + + + } + protected void loadToRead(TopiaContext tx, Class dtoType, Class entityType) { TopiaDAO<?> dao = dataSourceResource.getDataSource().getDAO(tx, entityType); long expectedCount = dao.count(); @@ -170,4 +185,31 @@ public class ReferentialServiceTopiaTest { } } + protected void delete(TopiaContext tx, Class dtoType, Class entityType) { + + TopiaDAO<?> dao = dataSourceResource.getDataSource().getDAO(tx, entityType); + long expectedCount = dao.count(); + + TopiaEntity entity = dao.iterator().next(); + if (log.isInfoEnabled()) { + log.info("Test delete: " + entity.getTopiaId()); + } + + FormDto formDto = service.loadToRead(dtoType, entity.getTopiaId()); + Assert.assertNotNull(formDto); + Assert.assertNotNull(formDto.getForm()); + Assert.assertNotNull(formDto.getForm().getId()); + + service.delete(dtoType, entity.getTopiaId()); + + Assert.assertEquals(expectedCount - 1, dao.count()); + + try { + service.loadToRead(dtoType, entity.getTopiaId()); + Assert.fail(); + } catch (DataNotFoundException e) { + Assert.assertTrue(true); + } + + } } \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.