This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit ec568b5369ea7287010ae9323e179a8ed56cfde1 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Oct 15 17:44:50 2015 +0200 Migration de l'écran des estimations sur l'object (refs #7601) --- .../fr/ird/observe/ObserveOpenDataManager.java | 5 ++ .../ui/content/table/ContentTableUIHandler.java | 2 +- .../table/impl/seine/ObjectSchoolEstimateUI.jaxx | 12 ++- .../impl/seine/ObjectSchoolEstimateUIHandler.java | 38 ++++------ .../impl/seine/ObjectSchoolEstimateUIModel.java | 40 +++++++--- .../ObjectSchoolEstimateServiceController.java | 4 +- .../ird/observe/entities/referentiel/Species2.java | 18 +++++ .../observe/entities/referentiel/SpeciesLists.java | 11 +++ .../service/seine/ObjectSchoolEstimateService.java | 2 +- .../ird/observe/services/ObserveServiceTopia.java | 22 ++++-- .../ird/observe/services/entity/EntitiesSet.java | 36 +++++++++ .../services/entity/ObserveEntitiesFilters.java | 87 ++++++++++++++-------- .../services/entity/ObserveEntityFilter.java | 11 ++- .../services/entity/SpeciesListEntitiesSet.java | 27 +++++++ .../services/entity/UniverseEntitiesSet.java | 30 ++++++++ .../seine/ObjectSchoolEstimateServiceTopia.java | 4 +- 16 files changed, 258 insertions(+), 91 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveOpenDataManager.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveOpenDataManager.java index eb113de..d146008 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveOpenDataManager.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveOpenDataManager.java @@ -148,6 +148,11 @@ public class ObserveOpenDataManager implements Closeable { || isOpenActivityLongline(openableId); } + public boolean isOpenActivity(String activityId) { + return isOpenActivitySeine(activityId) + || isOpenActivityLongline(activityId); + } + @Override public void close() { openTripSeineId = null; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java index dc0cb19..081c03b 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java @@ -97,7 +97,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex String activityId = dataContext.getSelectedActivityId(); - if (activityId.equals(dataContext.getOpenActivityId())) { + if (getOpenDataManager().isOpenActivity(activityId)) { // mode mise a jour return ContentMode.UPDATE; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx index 8dec537..4c5d393 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx @@ -21,19 +21,17 @@ --> <fr.ird.observe.ui.content.table.ContentTableUI - superGenericType='FloatingObjectDto, ObjectSchoolEstimateDto' + superGenericType='FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto' contentTitle='{n("observe.common.schoolEstimate")}' saveNewEntryText='{n("observe.action.create.schoolEstimate")}' - saveNewEntryTip='{n("observe.action.create.schoolEstimate.tip")}' - - > + saveNewEntryTip='{n("observe.action.create.schoolEstimate.tip")}'> <style source="../../CommonTable.css"/> <import> fr.ird.observe.services.dto.ReferenceDto fr.ird.observe.services.dto.CommentableDto - fr.ird.observe.services.dto.seine.FloatingObjectDto + fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto fr.ird.observe.services.dto.referential.SpeciesDto fr.ird.observe.ui.content.table.* @@ -54,7 +52,7 @@ <ObjectSchoolEstimateUIModel id='model' constructorParams='this'/> <!-- edit bean --> - <FloatingObjectDto id='bean'/> + <FloatingObjectSchoolEstimateDto id='bean'/> <!-- table edit bean --> <ObjectSchoolEstimateDto id='tableEditBean'/> @@ -65,7 +63,7 @@ <!-- le validateur de l'écran --> <BeanValidator id='validator' autoField='true' - beanClass='fr.ird.observe.services.dto.seine.FloatingObjectDto' + beanClass='fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto' errorTableModel='{getErrorTableModel()}' context='n1-update-schoolEstimate'/> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java index 4b8ff2c..495b6c9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java @@ -22,20 +22,20 @@ package fr.ird.observe.ui.content.table.impl.seine; import fr.ird.observe.ObserveSwingApplicationContext; -import fr.ird.observe.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.business.db.constants.DataContextType; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.referential.SpeciesDto; -import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDtos; import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; -import fr.ird.observe.services.dto.seine.TargetSampleDtos; -import fr.ird.observe.services.service.seine.FloatingObjectService; +import fr.ird.observe.services.service.seine.ObjectSchoolEstimateService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.content.table.ContentTableUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.*; +import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import static org.nuiton.i18n.I18n.n; @@ -44,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectDto, ObjectSchoolEstimateDto> { +public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> { /** Logger */ @@ -84,35 +84,23 @@ public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<Floatin n("observe.schoolEstimate.table.weight"), n("observe.schoolEstimate.table.weight.tip")); - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesDto.class)); + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, ReferenceDto.class, SpeciesDto.class.getSimpleName())); UIHelper.setTableColumnRenderer(table, 1, UIHelper.newEmptyNumberTableCellRenderer(renderer)); } @Override - public void initUI() throws Exception { - - // add a listPredicate to get only species from the correct configured speciesList - ObserveSwingApplicationConfig config = getUi().getContextValue(ObserveSwingApplicationConfig.class); - String speciesListId = config.getSpeciesListSeineObjectSchoolEstimateId(); - prepareSpeciesList(speciesListId, getUi().getSpecies(), n("observe.error.speciesList.seine.objectSchoolEstimate.notFound")); - - super.initUI(); - - } - - @Override - protected void doPersist(FloatingObjectDto bean) { - getFloatingObjectService().save(getSelectedParentId(), bean); + protected void doPersist(FloatingObjectSchoolEstimateDto bean) { + getObjectSchoolEstimateService().save(bean); } @Override protected void loadEditBean(String beanId) { - FormDto<FloatingObjectDto> formDto = getFloatingObjectService().loadToEdit(beanId); + FormDto<FloatingObjectSchoolEstimateDto> formDto = getObjectSchoolEstimateService().loadToEdit(beanId); getModel().setFormDto(formDto); - TargetSampleDtos.copyCommentableDto(formDto.getForm(), getBean()); + FloatingObjectSchoolEstimateDtos.copyFloatingObjectSchoolEstimateDto(formDto.getForm(), getBean()); } - protected FloatingObjectService getFloatingObjectService() { - return ObserveSwingApplicationContext.get().newService(FloatingObjectService.class); + protected ObjectSchoolEstimateService getObjectSchoolEstimateService() { + return ObserveSwingApplicationContext.get().newService(ObjectSchoolEstimateService.class); } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java index 31c2519..dd6d814 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java @@ -23,13 +23,15 @@ package fr.ird.observe.ui.content.table.impl.seine; */ import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDtos; import fr.ird.observe.ui.content.table.ContentTableMeta; import fr.ird.observe.ui.content.table.ContentTableModel; import fr.ird.observe.ui.content.table.ContentTableUIModel; import fr.ird.observe.ui.content.table.ObserveContentTableUI; +import java.util.Collection; import java.util.List; /** @@ -38,19 +40,20 @@ import java.util.List; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObjectDto, ObjectSchoolEstimateDto> { +public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> { private static final long serialVersionUID = 1L; public ObjectSchoolEstimateUIModel(ObjectSchoolEstimateUI ui) { - super(FloatingObjectDto.class, + super(FloatingObjectSchoolEstimateDto.class, ObjectSchoolEstimateDto.class, new String[]{ - //FIXME -// FloatingObjectDto.PROPERTY_OBJECT_SCHOOL_ESTIMATE, - FloatingObjectDto.PROPERTY_COMMENT}, - new String[]{ObjectSchoolEstimateDto.PROPERTY_SPECIES, ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT} + FloatingObjectSchoolEstimateDto.PROPERTY_OBJECT_SCHOOL_ESTIMATE, + FloatingObjectSchoolEstimateDto.PROPERTY_COMMENT}, + new String[]{ + ObjectSchoolEstimateDto.PROPERTY_SPECIES, + ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT} ); List<ContentTableMeta<ObjectSchoolEstimateDto>> metas = Lists.newArrayList( @@ -62,8 +65,25 @@ public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObj } @Override - protected ContentTableModel<FloatingObjectDto, ObjectSchoolEstimateDto> createTableModel(ObserveContentTableUI<FloatingObjectDto, ObjectSchoolEstimateDto> ui, List<ContentTableMeta<ObjectSchoolEstimateDto>> contentTableMetas) { - // FIXME - return null; + protected ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> createTableModel( + ObserveContentTableUI<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> ui, + List<ContentTableMeta<ObjectSchoolEstimateDto>> contentTableMetas) { + + return new ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto>(ui, contentTableMetas) { + @Override + protected Collection<ObjectSchoolEstimateDto> getChilds(FloatingObjectSchoolEstimateDto bean) { + return bean.getObjectSchoolEstimate(); + } + + @Override + protected void load(ObjectSchoolEstimateDto source, ObjectSchoolEstimateDto target) { + ObjectSchoolEstimateDtos.copyObjectSchoolEstimateDto(source, target); + } + + @Override + protected void setChilds(FloatingObjectSchoolEstimateDto parent, List<ObjectSchoolEstimateDto> childs) { + parent.setObjectSchoolEstimate(childs); + } + }; } } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ObjectSchoolEstimateServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ObjectSchoolEstimateServiceController.java index d74691a..66e6737 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ObjectSchoolEstimateServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/ObjectSchoolEstimateServiceController.java @@ -47,7 +47,7 @@ public class ObjectSchoolEstimateServiceController extends ObserveAuthenticatedS } @Override - public String save(FormDto<FloatingObjectSchoolEstimateDto> form) { - return service.save(form); + public String save(FloatingObjectSchoolEstimateDto dto) { + return service.save(dto); } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Species2.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Species2.java index 0e5ec3e..d80a2d6 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Species2.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/Species2.java @@ -51,6 +51,10 @@ public class Species2 { return new SpeciesByIdPredicate(ids); } + public static Predicate<Species> newSpeciesListPredicate(SpeciesList speciesList) { + return new SpeciesBySpeciesListPredicate(speciesList); + } + public static <E extends Species> List<E> filterByOcean(Collection<E> speciess, final Ocean ocean) { @@ -129,4 +133,18 @@ public class Species2 { return ids.contains(input.getTopiaId()); } } + + private static class SpeciesBySpeciesListPredicate implements Predicate<Species> { + + private final SpeciesList speciesList; + + public SpeciesBySpeciesListPredicate(SpeciesList speciesList) { + this.speciesList = speciesList; + } + + @Override + public boolean apply(Species input) { + return speciesList.containsSpecies(input); + } + } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/SpeciesLists.java b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/SpeciesLists.java new file mode 100644 index 0000000..e10d867 --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/entities/referentiel/SpeciesLists.java @@ -0,0 +1,11 @@ +package fr.ird.observe.entities.referentiel; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class SpeciesLists { + + // FIXME cette valeur n'est pas au bon endroit ici + public static String SPECIES_LIST_SEINE_OBJECT_SCHOOL_ESTIMATE_ID = "fr.ird.observe.entities.referentiel.SpeciesList#1239832675370#0.1"; + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateService.java index 8f9599e..73b9117 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateService.java @@ -44,5 +44,5 @@ public interface ObjectSchoolEstimateService extends ObserveService { @Write @WriteDataPermission @PostRequest - String save(FormDto<FloatingObjectSchoolEstimateDto> form); + String save(FloatingObjectSchoolEstimateDto dto); } 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 3584780..741cddc 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 @@ -24,11 +24,8 @@ package fr.ird.observe.services; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import fr.ird.observe.ObserveTopiaApplicationContext; @@ -60,6 +57,7 @@ import fr.ird.observe.services.dto.ReferenceSetDtos; import fr.ird.observe.services.dto.ReferenceTypeName; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.entity.EntitiesSet; import fr.ird.observe.services.entity.ObserveEntitiesFilters; import fr.ird.observe.services.entity.ObserveEntityFilter; import fr.ird.observe.services.service.ConcurrentModificationException; @@ -362,7 +360,7 @@ public class ObserveServiceTopia implements ObserveService { filter.getDtoType(), filter.getPropertyName(), filter.getEntityType(), - filter.getFilter()); + filter.getEntitiesSet()); labels.add(referenceSet); } FormDto<D> form = FormDtos.newFormDto(dtoType, dto, labels.build()); @@ -430,7 +428,7 @@ public class ObserveServiceTopia implements ObserveService { protected <D extends IdDto> ReferenceSetDto<D> getReferenceSet(Class<D> dtoType) { Class<TopiaEntity> entityType = getEntityType(dtoType); - return getReferenceSet(dtoType, null, entityType, Predicates.alwaysTrue()); + return getReferenceSet(dtoType, null, entityType, null); } @@ -438,8 +436,18 @@ public class ObserveServiceTopia implements ObserveService { Class<D> dtoType, String propertyName, Class<E> entityType, - Predicate<? super E> filter) { - Iterable<E> entities = Iterables.filter(loadEntities(entityType), filter); + EntitiesSet<E> entitiesSet) { + + Iterable<E> entities; + + if (entitiesSet == null) { + + entities = loadEntities(entityType); + + } else { + entities = entitiesSet.getEntities(serviceContext.getTopiaPersistenceContext()); + } + LinkedHashSet<ReferenceDto<D>> labels = new LinkedHashSet<>(); for (TopiaEntity entity : entities) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSet.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSet.java new file mode 100644 index 0000000..6b57f17 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSet.java @@ -0,0 +1,36 @@ +package fr.ird.observe.services.entity; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import fr.ird.observe.ObserveTopiaPersistenceContext; +import org.nuiton.topia.persistence.TopiaEntity; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public abstract class EntitiesSet<E extends TopiaEntity> { + + protected final Predicate<E> filter; + + public EntitiesSet(Predicate<E> filter) { + this.filter = filter; + } + + public EntitiesSet() { + this.filter = null; + } + + protected abstract Iterable<E> getEntitiesSetBase(ObserveTopiaPersistenceContext persistenceContext); + + public Predicate<E> getFilter() { + return filter; + } + + public Iterable<E> getEntities(ObserveTopiaPersistenceContext persistenceContext) { + Iterable<E> result = getEntitiesSetBase(persistenceContext); + if (filter != null) { + result = Iterables.filter(result, filter); + } + return result; + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java index 355b0c4..05f9ecc 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntitiesFilters.java @@ -5,10 +5,15 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Maps; import fr.ird.observe.entities.longline.TripLongline; +import fr.ird.observe.entities.referentiel.Person; import fr.ird.observe.entities.referentiel.Persons; import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.referentiel.SpeciesLists; +import fr.ird.observe.entities.referentiel.Vessel; import fr.ird.observe.entities.referentiel.Vessels; +import fr.ird.observe.entities.seine.ObjectSchoolEstimate; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.services.dto.IdDto; import org.nuiton.topia.persistence.TopiaEntity; @@ -20,18 +25,39 @@ import java.util.Map; */ public class ObserveEntitiesFilters { - protected static Map<Class<? extends TopiaEntity>, Map<String, Predicate<? extends TopiaEntity>>> FILTERS = null; + protected static Map<Class<? extends TopiaEntity>, Map<String, EntitiesSet>> ENTITIES_SETS = null; - protected static <P extends TopiaEntity> void addFilter(Class<P> parentType, String propertyName, Predicate<? extends TopiaEntity> filter) { + protected static <P extends TopiaEntity, C extends TopiaEntity> void addFilter( + Class<P> parentType, + Class<C> propertyType, + String propertyName, + Predicate<C> filter) { + + if (ReferenceEntity.class.isAssignableFrom(propertyType)) { - Map<String, Predicate<? extends TopiaEntity>> filterByProperty = FILTERS.get(parentType); + filter = Predicates.and(filter, (Predicate<C>) ReferenceEntities.newEnablePredicate()); - if (filterByProperty == null) { - filterByProperty = Maps.newHashMap(); - FILTERS.put(parentType, filterByProperty); } - filterByProperty.put(propertyName, filter); + EntitiesSet<C> entitiesSet = new UniverseEntitiesSet<C>(propertyType, filter); + + addFilter(parentType, propertyName, entitiesSet); + + } + + protected static <P extends TopiaEntity, C extends TopiaEntity> void addFilter( + Class<P> parentType, + String propertyName, + EntitiesSet<C> entitiesSet) { + + Map<String, EntitiesSet> entitiesSetByProperty = ENTITIES_SETS.get(parentType); + + if (entitiesSetByProperty == null) { + entitiesSetByProperty = Maps.newHashMap(); + ENTITIES_SETS.put(parentType, entitiesSetByProperty); + } + + entitiesSetByProperty.put(propertyName, entitiesSet); } @@ -46,41 +72,37 @@ public class ObserveEntitiesFilters { Preconditions.checkNotNull(dtoType, "DTO type is required"); Preconditions.checkNotNull(propertyName, "Property name is required"); - if (FILTERS == null) { + if (ENTITIES_SETS == null) { init(); } - Predicate<C> predicate = null; + EntitiesSet<C> entitiesSet = null; - Map<String, Predicate<? extends TopiaEntity>> filterByProperty = FILTERS.get(parentType); + Map<String, EntitiesSet> filterByProperty = ENTITIES_SETS.get(parentType); if (filterByProperty != null) { - predicate = (Predicate<C>) filterByProperty.get(propertyName); + entitiesSet = (EntitiesSet<C>) filterByProperty.get(propertyName); } ObserveEntityFilter<P, C, D> observeEntityFilter; - if (predicate == null) { + if (entitiesSet == null) { if (ReferenceEntity.class.isAssignableFrom(propertyType)) { - predicate = (Predicate<C>) ReferenceEntities.newEnablePredicate(); + entitiesSet = new UniverseEntitiesSet<C>(propertyType, (Predicate<C>) ReferenceEntities.newEnablePredicate()); } else { - predicate = Predicates.alwaysTrue(); + entitiesSet = new UniverseEntitiesSet<C>(propertyType); + } - observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, null, predicate); + observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, null, entitiesSet); } else { - if (ReferenceEntity.class.isAssignableFrom(propertyType)) { - - predicate = Predicates.and(predicate, (Predicate<C>) ReferenceEntities.newEnablePredicate()); - - } - observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, propertyName, predicate); + observeEntityFilter = new ObserveEntityFilter<P, C, D>(parentType, propertyType, dtoType, propertyName, entitiesSet); } return observeEntityFilter; @@ -88,18 +110,23 @@ public class ObserveEntitiesFilters { } public static void init() { - FILTERS = Maps.newHashMap(); + ENTITIES_SETS = Maps.newHashMap(); // TripSeine - addFilter(TripSeine.class, TripSeine.PROPERTY_CAPTAIN, Persons.newCaptainPredicate()); - addFilter(TripSeine.class, TripSeine.PROPERTY_OBSERVER, Persons.newObserverPredicate()); - addFilter(TripSeine.class, TripSeine.PROPERTY_DATA_ENTRY_OPERATOR, Persons.newDataEntryOperatorPredicate()); - addFilter(TripSeine.class, TripSeine.PROPERTY_VESSEL, Vessels.newVesselSeinePredicate()); + addFilter(TripSeine.class, Person.class, TripSeine.PROPERTY_CAPTAIN, Persons.newCaptainPredicate()); + addFilter(TripSeine.class, Person.class, TripSeine.PROPERTY_OBSERVER, Persons.newObserverPredicate()); + addFilter(TripSeine.class, Person.class, TripSeine.PROPERTY_DATA_ENTRY_OPERATOR, Persons.newDataEntryOperatorPredicate()); + addFilter(TripSeine.class, Vessel.class, TripSeine.PROPERTY_VESSEL, Vessels.newVesselSeinePredicate()); // TripLongLine - addFilter(TripLongline.class, TripLongline.PROPERTY_CAPTAIN, Persons.newCaptainPredicate()); - addFilter(TripLongline.class, TripLongline.PROPERTY_OBSERVER, Persons.newObserverPredicate()); - addFilter(TripLongline.class, TripLongline.PROPERTY_DATA_ENTRY_OPERATOR, Persons.newDataEntryOperatorPredicate()); - addFilter(TripLongline.class, TripLongline.PROPERTY_VESSEL, Vessels.newVesselLonglinePredicate()); + addFilter(TripLongline.class, Person.class, TripLongline.PROPERTY_CAPTAIN, Persons.newCaptainPredicate()); + addFilter(TripLongline.class, Person.class, TripLongline.PROPERTY_OBSERVER, Persons.newObserverPredicate()); + addFilter(TripLongline.class, Person.class, TripLongline.PROPERTY_DATA_ENTRY_OPERATOR, Persons.newDataEntryOperatorPredicate()); + addFilter(TripLongline.class, Vessel.class, TripLongline.PROPERTY_VESSEL, Vessels.newVesselLonglinePredicate()); + + // ObjectSchoolEstimate + addFilter(ObjectSchoolEstimate.class, + ObjectSchoolEstimate.PROPERTY_SPECIES, + new SpeciesListEntitiesSet(ReferenceEntities.<Species>newEnablePredicate(), SpeciesLists.SPECIES_LIST_SEINE_OBJECT_SCHOOL_ESTIMATE_ID)); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java index 74d8d64..216d867 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/ObserveEntityFilter.java @@ -1,6 +1,5 @@ package fr.ird.observe.services.entity; -import com.google.common.base.Predicate; import fr.ird.observe.services.dto.IdDto; import org.nuiton.topia.persistence.TopiaEntity; @@ -17,14 +16,14 @@ public class ObserveEntityFilter<P extends TopiaEntity, C extends TopiaEntity, D protected final String propertyName; - protected final Predicate<C> filter; + protected final EntitiesSet<C> entitiesSet; - public ObserveEntityFilter(Class<P> parentType, Class<C> entityType, Class<D> dtoType, String propertyName, Predicate<C> filter) { + public ObserveEntityFilter(Class<P> parentType, Class<C> entityType, Class<D> dtoType, String propertyName, EntitiesSet<C> entitiesSet) { this.parentType = parentType; this.entityType = entityType; this.dtoType = dtoType; this.propertyName = propertyName; - this.filter = filter; + this.entitiesSet = entitiesSet; } public Class<P> getParentType() { @@ -43,8 +42,8 @@ public class ObserveEntityFilter<P extends TopiaEntity, C extends TopiaEntity, D return propertyName; } - public Predicate<C> getFilter() { - return filter; + public EntitiesSet<C> getEntitiesSet() { + return entitiesSet; } @Override diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/SpeciesListEntitiesSet.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/SpeciesListEntitiesSet.java new file mode 100644 index 0000000..3b6a54b --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/SpeciesListEntitiesSet.java @@ -0,0 +1,27 @@ +package fr.ird.observe.services.entity; + +import com.google.common.base.Predicate; +import fr.ird.observe.ObserveTopiaPersistenceContext; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.referentiel.SpeciesList; +import fr.ird.observe.entities.referentiel.SpeciesListTopiaDao; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class SpeciesListEntitiesSet extends EntitiesSet<Species> { + + protected final String speciesListId; + + public SpeciesListEntitiesSet(Predicate<Species> filter, String speciesListId) { + super(filter); + this.speciesListId = speciesListId; + } + + @Override + protected Iterable<Species> getEntitiesSetBase(ObserveTopiaPersistenceContext persistenceContext) { + SpeciesListTopiaDao speciesListDao = persistenceContext.getSpeciesListDao(); + SpeciesList speciesList = speciesListDao.forTopiaIdEquals(speciesListId).findUnique(); + return speciesList.getSpecies(); + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/UniverseEntitiesSet.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/UniverseEntitiesSet.java new file mode 100644 index 0000000..239d0d5 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/UniverseEntitiesSet.java @@ -0,0 +1,30 @@ +package fr.ird.observe.services.entity; + +import com.google.common.base.Predicate; +import fr.ird.observe.ObserveTopiaPersistenceContext; +import org.nuiton.topia.persistence.TopiaDao; +import org.nuiton.topia.persistence.TopiaEntity; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class UniverseEntitiesSet<E extends TopiaEntity> extends EntitiesSet<E> { + + protected final Class<E> entityClass; + + public UniverseEntitiesSet(Class<E> entityClass, Predicate<E> filter) { + super(filter); + this.entityClass = entityClass; + } + + public UniverseEntitiesSet(Class<E> entityClass) { + super(); + this.entityClass = entityClass; + } + + protected Iterable<E> getEntitiesSetBase(ObserveTopiaPersistenceContext persistenceContext) { + TopiaDao<E> dao = persistenceContext.getDao(entityClass); + return dao.findAll(); + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java index 440a9e9..51a1c05 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/ObjectSchoolEstimateServiceTopia.java @@ -65,10 +65,10 @@ public class ObjectSchoolEstimateServiceTopia extends ObserveServiceTopia implem } @Override - public String save(FormDto<FloatingObjectSchoolEstimateDto> form) { + public String save(FloatingObjectSchoolEstimateDto dto) { FloatingObject floatingObject = - dtoToEntity(FloatingObjectSchoolEstimateDto.class, FloatingObject.class, form.getForm()); + dtoToEntity(FloatingObjectSchoolEstimateDto.class, FloatingObject.class, dto); floatingObject = saveEntity(FloatingObject.class, floatingObject); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.