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 65f44643858b4d38a4c7150fad92c7962f3b0da4 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Oct 20 08:52:20 2015 +0200 Migration de l'écran de la faune accesoire (refs #7609) --- .../content/table/impl/seine/NonTargetCatchUI.css | 9 +- .../content/table/impl/seine/NonTargetCatchUI.jaxx | 15 +- .../table/impl/seine/NonTargetCatchUIHandler.java | 272 ++++++++------------- .../table/impl/seine/NonTargetCatchUIModel.java | 62 +++-- .../v1/seine/NonTargetCatchServiceController.java | 9 +- .../observe/entities/seine/NonTargetLenghts.java | 20 ++ .../service/seine/NonTargetCatchService.java | 5 +- .../main/xmi/observe-services-dto-seine.properties | 1 + .../services/dto/ObserveDtosInitializer.java | 1 + .../services/entity/EntitiesSetFactory.java | 9 + .../service/seine/NonTargetCatchServiceTopia.java | 100 +++++++- 11 files changed, 281 insertions(+), 222 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.css index deccd5f..e2cc569 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.css @@ -29,11 +29,10 @@ labelFor:{species}; } - //FIXME -//#species { -// property:{NonTargetCatchDto.PROPERTY_SPECIES}; -// selectedItem:{tableEditBean.getSpecies()}; -//} +#species { + property:{NonTargetCatchDto.PROPERTY_SPECIES}; + selectedItem:{tableEditBean.getSpecies()}; +} #speciesFateLabel { text:"observe.common.speciesFate"; diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx index 9636945..cea2797 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUI.jaxx @@ -22,19 +22,17 @@ <fr.ird.observe.ui.content.table.ContentTableUI - superGenericType='SetSeineDto, NonTargetCatchDto' + superGenericType='SetSeineNonTargetCatchDto, NonTargetCatchDto' contentTitle='{n("observe.common.nonTargetCatch")}' saveNewEntryText='{n("observe.action.create.nonTargetCatch")}' - saveNewEntryTip='{n("observe.action.create.nonTargetCatch.tip")}' - - > + saveNewEntryTip='{n("observe.action.create.nonTargetCatch.tip")}'> <style source="../../CommonTable.css"/> <import> fr.ird.observe.services.dto.ReferenceDto fr.ird.observe.services.dto.CommentableDto - fr.ird.observe.services.dto.seine.SetSeineDto + fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto fr.ird.observe.services.dto.seine.NonTargetCatchDto fr.ird.observe.services.dto.referential.seine.SpeciesFateDto fr.ird.observe.services.dto.referential.SpeciesDto @@ -58,7 +56,7 @@ <NonTargetCatchUIModel id='model' constructorParams='this'/> <!-- edit bean --> - <SetSeineDto id='bean'/> + <SetSeineNonTargetCatchDto id='bean'/> <!-- table edit bean --> <NonTargetCatchDto id='tableEditBean'/> @@ -69,12 +67,11 @@ <!-- le validateur de l'écran --> <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineDto' + beanClass='fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto' errorTableModel='{getErrorTableModel()}' context='n1-update-nonTargetCatch'> <!-- clef unique --> - <!--FIXME--> - <!--<field name="nonTargetCatch" component="editorPanel"/>--> + <field name="nonTargetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java index 477693c..2d864f0 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java @@ -21,30 +21,41 @@ */ package fr.ird.observe.ui.content.table.impl.seine; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ird.observe.ObserveSwingApplicationContext; 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.ReferenceSetDto; import fr.ird.observe.services.dto.constants.seine.NonTargetCatchComputedValueSource; +import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto; import fr.ird.observe.services.dto.referential.seine.SpeciesFateDto; import fr.ird.observe.services.dto.seine.NonTargetCatchDto; +import fr.ird.observe.services.dto.seine.NonTargetCatchDtos; import fr.ird.observe.services.dto.seine.NonTargetLengthDto; -import fr.ird.observe.services.dto.seine.SetSeineDto; -import fr.ird.observe.services.dto.seine.SetSeineDtos; -import fr.ird.observe.services.service.seine.SetSeineService; +import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; +import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDtos; +import fr.ird.observe.services.service.seine.NonTargetCatchService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.content.table.ContentTableModel; import fr.ird.observe.ui.content.table.ContentTableUIHandler; import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; -import javax.swing.*; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -53,7 +64,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineDto, NonTargetCatchDto> { +public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTargetCatchDto, NonTargetCatchDto> { /** Logger */ static private Log log = LogFactory.getLog(NonTargetCatchUIHandler.class); @@ -204,52 +215,13 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineDto, return getDataContext().getSelectedSetId(); } -// @Override -// protected SetSeine loadEditBean(ContentMode mode, -// DataContext dataContext, -// DataService dataService, -// DataSource dataSource) { -// -// List<Species> speciesList; -// -// if (mode == ContentMode.UPDATE) { -// -// // get current ocean -// Ocean ocean = dataService.getTripOcean( -// dataSource, dataContext.getSelectedTripId()); -// -// ObserveSwingApplicationConfig config = getUi().getContextValue(ObserveSwingApplicationConfig.class); -// String speciesListId = config.getSpeciesListSeineNonTargetCatchId(); -// -// // get all species -// List<Species> allSpecies = -// dataService.loadDecoratedSpecies(dataSource, speciesListId); -// -// // filtre par status actif -// ReferenceEntities.filterReferentielListByStatus(allSpecies); -// -// // filtre par ocean -// speciesList = Species2.filterByOcean(allSpecies, ocean); -// -// } else { -// -// speciesList = new ArrayList<Species>(); -// } -// -// ALL_ESPECES_ENTRY.setContextValue(getUi(), speciesList); -// if (log.isDebugEnabled()) { -// log.debug("speciesList = " + speciesList.size()); -// } -// return super.loadEditBean(mode, dataContext, dataService, dataSource); -// } - @Override protected void onSelectedRowChanged(int editingRow, NonTargetCatchDto bean, boolean create) { NonTargetCatchUI ui = getUi(); - ContentTableModel<SetSeineDto, NonTargetCatchDto> model = getTableModel(); + ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto> model = getTableModel(); if (!model.isEditable()) { @@ -257,24 +229,22 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineDto, return; } - //FIXME -// List<SpeciesDto> availableEspeces; + List<ReferenceDto<SpeciesDto>> availableEspeces; JComponent requestFocus; if (create) { - //FIXME -// availableEspeces = new ArrayList<SpeciesDto>(ALL_ESPECES_ENTRY.getContextValue(ui)); + ReferenceSetDto<SpeciesDto> speciesDtoReferenceSetDto = getModel().getFormDto().getReferenceSetDto(SpeciesDto.class); + Set<ReferenceDto<SpeciesDto>> speciesSet = (Set) speciesDtoReferenceSetDto.getReference(); + availableEspeces = Lists.newArrayList(speciesSet); requestFocus = ui.getSpecies(); } else { - //FIXME -// SpeciesDto species = bean.getSpecies(); -// availableEspeces = Arrays.asList(species); + ReferenceDto<SpeciesDto> species = bean.getSpecies(); + availableEspeces = Lists.newArrayList(species); requestFocus = ui.getTable(); } - //FIXME -// ui.getSpecies().setData(availableEspeces); + ui.getSpecies().setData(availableEspeces); requestFocus.requestFocus(); NonTargetCatchDto tableEditBean = getTableEditBean(); @@ -321,9 +291,9 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineDto, n("observe.nonTargetCatch.table.comment"), n("observe.nonTargetCatch.table.comment.tip")); - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesDto.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesFateDto.class)); - UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReasonForDiscardDto.class)); + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, ReferenceDto.class, SpeciesDto.class.getSimpleName())); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, ReferenceDto.class, SpeciesFateDto.class.getSimpleName())); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReferenceDto.class, ReasonForDiscardDto.class.getSimpleName())); UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); UIHelper.setTableColumnRenderer(table, 4, UIHelper.newEmptyNumberTableCellRenderer(renderer)); UIHelper.setTableColumnRenderer(table, 5, UIHelper.newEmptyNumberTableCellRenderer(renderer)); @@ -331,132 +301,84 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineDto, UIHelper.setTableColumnRenderer(table, 7, UIHelper.newStringTableCellRenderer(renderer, 10, true)); } - //FIXME -// @Override -// protected boolean doSave(SetSeine bean, -// DataService dataService, -// DataSource dataSource, -// TopiaEntityBinder<SetSeine> binder) throws Exception { -// try { -// return super.doSave(bean, dataService, dataSource, binder); -// } finally { -// -// // toujours supprimer la référence du context, quoiqu'il arrive -// ALL_TAILLES_TO_DELETE_ENTRY.removeContextValue(getUi()); -// } -// } - - //FIXME -// @Override -// protected boolean prepareSave(SetSeine editBean, List<NonTargetCatch> objets) throws Exception { -// super.prepareSave(editBean, objets); -// -// List<Species> speciessUsed = getTableModel().getColumnValues(0); -// -// Collection<Species> speciessToDelete = new HashSet<Species>(); -// List<NonTargetLength> tailleToDelete = new ArrayList<NonTargetLength>(); -// -// getDataService().getObsoleteEspeceForNonTargetSample(getDataSource(), -// editBean.getTopiaId(), -// speciessUsed, -// speciessToDelete, -// tailleToDelete); -// -// if (!tailleToDelete.isEmpty()) { -// -// // il existe des echantillon faune a supprimer on demande une -// // confirmation -// StringBuilder sb = new StringBuilder(); -// StringBuilder sb2 = new StringBuilder(); -// Decorator<Species> decorator; -// Decorator<NonTargetLength> decorator2; -// decorator = getDecoratorService().getDecoratorByType(Species.class); -// decorator2 = getDecoratorService().getDecoratorByType(NonTargetLength.class); -// -// for (Species e : speciessToDelete) { -// sb.append(" - ").append(decorator.toString(e)).append('\n'); -// } -// for (NonTargetLength t : tailleToDelete) { -// sb2.append(" - ").append(decorator2.toString(t)).append('\n'); -// } -// int reponse = UIHelper.askUser( -// t("observe.title.need.confirm"), -// t("observe.nonTargetCatch.message.table.will.delete.nonTargetSample", sb.toString(), sb2.toString()), -// JOptionPane.ERROR_MESSAGE, -// new Object[]{ -// t("observe.choice.continue"), -// t("observe.choice.cancel")}, -// 0); -// if (log.isDebugEnabled()) { -// log.debug("response : " + reponse); -// } -// boolean canContinue = false; -// switch (reponse) { -// case 0: -// // wil reset ui -// canContinue = true; -// break; -// } -// if (!canContinue) { -// // l'utilisateur a choisi de ne pas continuer -// return false; -// } -// -// // on conserve les tailles a supprimer -// ALL_TAILLES_TO_DELETE_ENTRY.setContextValue(getUi(), tailleToDelete); -// } -// -// // mise a jour de la propriete nonTargetDiscarded -// -// boolean hasRejet = false; -// for (NonTargetCatch c : objets) { -// if (c.getReasonForDiscard() != null) { -// // on a trouve un rejet de faune -// hasRejet = true; -// break; -// } -// } -// editBean.setNonTargetDiscarded(hasRejet); -// -// return true; -// } - - //FIXME -// @Override -// protected void onUpdateFinalize(TopiaContext tx, SetSeine bean, Collection<NonTargetCatch> oldChilds) { -// -// List<NonTargetLength> tailleToDelete = -// ALL_TAILLES_TO_DELETE_ENTRY.getContextValue(getUi()); -// -// if (tailleToDelete != null && !tailleToDelete.isEmpty()) { -// -// // on a demande la suppression de taille obsoletes -// -// if (log.isInfoEnabled()) { -// log.info("Will remove " + tailleToDelete.size() + -// " obsolete nonTargetSample(s)."); -// } -// -// NonTargetSample echantillon = bean.getNonTargetSample().get(0); -// -// // on supprime les echantillons obsoletes -// echantillon.getNonTargetLength().removeAll(tailleToDelete); -// } -// } + @Override + protected boolean prepareSave(SetSeineNonTargetCatchDto editBean, List<NonTargetCatchDto> objets) throws Exception { + super.prepareSave(editBean, objets); + + //on cherche si parmis les captures supprimer certaines ont des échantillon + SetSeineNonTargetCatchDto originalSetSeineNonTargetCatchDto = getModel().getFormDto().getForm(); + + Set<ReferentialReferenceDto<SpeciesDto>> speciesToDelete = Sets.newHashSet(); + + for (NonTargetCatchDto nonTargetCatchDto : originalSetSeineNonTargetCatchDto.getNonTargetCatch()) { + + if (nonTargetCatchDto.isHasSample()) { + + ReferentialReferenceDto<SpeciesDto> species = nonTargetCatchDto.getSpecies(); + + Iterable<NonTargetCatchDto> currentTargetCatchSpecies = NonTargetCatchDtos.filterBySpecies(objets, species); + + if (Iterables.isEmpty(currentTargetCatchSpecies)) { + + speciesToDelete.add(species); + + } + } + + } + + if (!speciesToDelete.isEmpty()) { + + // il existe des echantillon faune a supprimer on demande une + // confirmation + StringBuilder sb = new StringBuilder(512); + Decorator<ReferenceDto> decorator = + getDecoratorService().getDecoratorByType(ReferenceDto.class, SpeciesDto.class.getSimpleName()); + + for (ReferentialReferenceDto<SpeciesDto> species : speciesToDelete) { + sb.append(" - ").append(decorator.toString(species)).append('\n'); + } + int reponse = UIHelper.askUser( + t("observe.title.need.confirm"), + t("observe.nonTargetCatch.message.table.will.delete.nonTargetSample", sb.toString()), + JOptionPane.ERROR_MESSAGE, + new Object[]{ + t("observe.choice.continue"), + t("observe.choice.cancel")}, + 0); + if (log.isDebugEnabled()) { + log.debug("response : " + reponse); + } + boolean canContinue = false; + switch (reponse) { + case 0: + // wil reset ui + canContinue = true; + break; + } + if (!canContinue) { + // l'utilisateur a choisi de ne pas continuer + return false; + } + } + + return true; + } @Override - protected void doPersist(SetSeineDto bean) { - getSetSeineService().save(getSelectedParentId(), bean); + protected void doPersist(SetSeineNonTargetCatchDto bean) { + getNonTargetCatchService().save(bean); } @Override protected void loadEditBean(String beanId) { - FormDto<SetSeineDto> formDto = getSetSeineService().loadToEdit(beanId); + String tripSeineId = getDataContext().getSelectedTripSeineId(); + FormDto<SetSeineNonTargetCatchDto> formDto = getNonTargetCatchService().loadToEdit(beanId, tripSeineId); getModel().setFormDto(formDto); - SetSeineDtos.copySetSeineDto(formDto.getForm(), getBean()); + SetSeineNonTargetCatchDtos.copySetSeineNonTargetCatchDto(formDto.getForm(), getBean()); } - protected SetSeineService getSetSeineService() { - return ObserveSwingApplicationContext.get().newService(SetSeineService.class); + protected NonTargetCatchService getNonTargetCatchService() { + return ObserveSwingApplicationContext.get().newService(NonTargetCatchService.class); } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIModel.java index 494c67c..31fbc32 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIModel.java @@ -24,12 +24,15 @@ package fr.ird.observe.ui.content.table.impl.seine; import com.google.common.collect.Lists; import fr.ird.observe.services.dto.seine.NonTargetCatchDto; +import fr.ird.observe.services.dto.seine.NonTargetCatchDtos; import fr.ird.observe.services.dto.seine.SetSeineDto; +import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; 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,36 +41,32 @@ import java.util.List; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineDto, NonTargetCatchDto> { +public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineNonTargetCatchDto, NonTargetCatchDto> { private static final long serialVersionUID = 1L; public NonTargetCatchUIModel(NonTargetCatchUI ui) { - super(SetSeineDto.class, + super(SetSeineNonTargetCatchDto.class, NonTargetCatchDto.class, new String[]{ - //FIXME -// SetSeineDto.PROPERTY_NON_TARGET_CATCH, - SetSeineDto.PROPERTY_NON_TARGET_DISCARDED}, + SetSeineNonTargetCatchDto.PROPERTY_NON_TARGET_CATCH}, new String[]{ - //FIXME -// NonTargetCatchDto.PROPERTY_SPECIES, - NonTargetCatchDto.PROPERTY_CATCH_WEIGHT, - NonTargetCatchDto.PROPERTY_TOTAL_COUNT, - NonTargetCatchDto.PROPERTY_MEAN_WEIGHT, - NonTargetCatchDto.PROPERTY_MEAN_LENGTH, - NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD, - NonTargetCatchDto.PROPERTY_SPECIES_FATE, - NonTargetCatchDto.PROPERTY_TOTAL_COUNT_COMPUTED_SOURCE, - NonTargetCatchDto.PROPERTY_MEAN_WEIGHT_COMPUTED_SOURCE, - NonTargetCatchDto.PROPERTY_CATCH_WEIGHT_COMPUTED_SOURCE, - NonTargetCatchDto.PROPERTY_MEAN_LENGTH_COMPUTED_SOURCE, - NonTargetCatchDto.PROPERTY_COMMENT + NonTargetCatchDto.PROPERTY_SPECIES, + NonTargetCatchDto.PROPERTY_CATCH_WEIGHT, + NonTargetCatchDto.PROPERTY_TOTAL_COUNT, + NonTargetCatchDto.PROPERTY_MEAN_WEIGHT, + NonTargetCatchDto.PROPERTY_MEAN_LENGTH, + NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD, + NonTargetCatchDto.PROPERTY_SPECIES_FATE, + NonTargetCatchDto.PROPERTY_TOTAL_COUNT_COMPUTED_SOURCE, + NonTargetCatchDto.PROPERTY_MEAN_WEIGHT_COMPUTED_SOURCE, + NonTargetCatchDto.PROPERTY_CATCH_WEIGHT_COMPUTED_SOURCE, + NonTargetCatchDto.PROPERTY_MEAN_LENGTH_COMPUTED_SOURCE, + NonTargetCatchDto.PROPERTY_COMMENT }); List<ContentTableMeta<NonTargetCatchDto>> metas = Lists.newArrayList( - //FIXME -// ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES, false), + ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES_FATE, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_CATCH_WEIGHT, false), @@ -81,8 +80,25 @@ public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineDto, NonT } @Override - protected ContentTableModel<SetSeineDto, NonTargetCatchDto> createTableModel(ObserveContentTableUI<SetSeineDto, NonTargetCatchDto> ui, List<ContentTableMeta<NonTargetCatchDto>> contentTableMetas) { - // FIXME - return null; + protected ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto> createTableModel( + ObserveContentTableUI<SetSeineNonTargetCatchDto, NonTargetCatchDto> ui, + List<ContentTableMeta<NonTargetCatchDto>> contentTableMetas) { + + return new ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto>(ui, contentTableMetas) { + @Override + protected Collection<NonTargetCatchDto> getChilds(SetSeineNonTargetCatchDto bean) { + return bean.getNonTargetCatch(); + } + + @Override + protected void load(NonTargetCatchDto source, NonTargetCatchDto target) { + NonTargetCatchDtos.copyNonTargetCatchDto(source, target); + } + + @Override + protected void setChilds(SetSeineNonTargetCatchDto parent, List<NonTargetCatchDto> childs) { + bean.setNonTargetCatch(childs); + } + }; } } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/NonTargetCatchServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/NonTargetCatchServiceController.java index b1eaade..c79da89 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/NonTargetCatchServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/NonTargetCatchServiceController.java @@ -24,6 +24,7 @@ package fr.ird.observe.application.web.controller.v1.seine; import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; import fr.ird.observe.services.service.seine.NonTargetCatchService; @@ -42,12 +43,12 @@ public class NonTargetCatchServiceController extends ObserveAuthenticatedService } @Override - public FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId) { - return service.loadToEdit(setSeineId); + public FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId) { + return service.loadToEdit(setSeineId, tripSeineId); } @Override - public String save(FormDto<SetSeineNonTargetCatchDto> form) { - return service.save(form); + public SaveResultDto save(SetSeineNonTargetCatchDto dto) { + return service.save(dto); } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/NonTargetLenghts.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/NonTargetLenghts.java new file mode 100644 index 0000000..2ec9994 --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/NonTargetLenghts.java @@ -0,0 +1,20 @@ +package fr.ird.observe.entities.seine; + +import com.google.common.base.Function; +import fr.ird.observe.entities.referentiel.Species; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class NonTargetLenghts { + + public static Function<NonTargetLength, Species> getSpeciesFunction() { + return new Function<NonTargetLength, Species>() { + @Override + public Species apply(NonTargetLength input) { + return input.getSpecies(); + } + }; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchService.java index fd79793..2bbb108 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchService.java @@ -24,6 +24,7 @@ package fr.ird.observe.services.service.seine; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.FormDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadDataPermission; @@ -39,10 +40,10 @@ public interface NonTargetCatchService extends ObserveService { FormDto<SetSeineNonTargetCatchDto> loadToRead(String setSeineId); @WriteDataPermission - FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId); + FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId); @Write @WriteDataPermission @PostRequest - String save(FormDto<SetSeineNonTargetCatchDto> form); + SaveResultDto save(SetSeineNonTargetCatchDto dto); } diff --git a/observe-services-model/src/main/xmi/observe-services-dto-seine.properties b/observe-services-model/src/main/xmi/observe-services-dto-seine.properties index f1a1fda..cb3e6f8 100644 --- a/observe-services-model/src/main/xmi/observe-services-dto-seine.properties +++ b/observe-services-model/src/main/xmi/observe-services-dto-seine.properties @@ -58,6 +58,7 @@ fr.ird.observe.services.dto.seine.NonTargetLength.attribute.species.tagValue.sim fr.ird.observe.services.dto.seine.NonTargetCatch.attribute.reasonForDiscard.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto fr.ird.observe.services.dto.seine.NonTargetCatch.attribute.speciesFate.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.seine.SpeciesFateDto +fr.ird.observe.services.dto.seine.NonTargetCatch.attribute.species.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.SpeciesDto fr.ird.observe.services.dto.seine.FloatingObject.attribute.objectType.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.seine.ObjectTypeDto fr.ird.observe.services.dto.seine.FloatingObject.attribute.objectOperation.tagValue.simpleBeanWithNoInterfaceAttributeGeneric=fr.ird.observe.services.dto.referential.seine.ObjectOperationDto diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java index 40098fe..7a50a18 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/dto/ObserveDtosInitializer.java @@ -1450,6 +1450,7 @@ public class ObserveDtosInitializer implements ObserveModelInitializer { NonTargetCatchDto.PROPERTY_TOTAL_COUNT, NonTargetCatchDto.PROPERTY_TOTAL_COUNT_COMPUTED_SOURCE, NonTargetCatchDto.PROPERTY_SPECIES_FATE, + NonTargetCatchDto.PROPERTY_SPECIES, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD ); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSetFactory.java b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSetFactory.java index da14a86..7d19cc2 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSetFactory.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/entity/EntitiesSetFactory.java @@ -13,6 +13,7 @@ import fr.ird.observe.entities.referentiel.ReferenceEntity; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.referentiel.Vessel; import fr.ird.observe.entities.referentiel.Vessels; +import fr.ird.observe.entities.seine.NonTargetCatch; import fr.ird.observe.entities.seine.ObjectObservedSpecies; import fr.ird.observe.entities.seine.ObjectSchoolEstimate; import fr.ird.observe.entities.seine.SchoolEstimate; @@ -105,6 +106,14 @@ public class EntitiesSetFactory { TargetCatchImpl.PROPERTY_SPECIES, speciesListConfiguration.getSpeciesListSeineTargetCatchId()); + // NonTargetCatch + registerSpeciesListEntitiesSet(builder, + NonTargetCatch.class, + NonTargetCatch.PROPERTY_SPECIES, + speciesListConfiguration.getSpeciesListSeineNonTargetCatchId()); + + + this.cache = builder.build(); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java index 4aee275..74e5811 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/NonTargetCatchServiceTopia.java @@ -22,14 +22,32 @@ package fr.ird.observe.services.service.seine; * #L% */ +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; +import fr.ird.observe.entities.referentiel.Ocean; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.seine.NonTargetCatch; +import fr.ird.observe.entities.seine.NonTargetLenghts; +import fr.ird.observe.entities.seine.NonTargetLength; +import fr.ird.observe.entities.seine.NonTargetSample; import fr.ird.observe.entities.seine.SetSeine; +import fr.ird.observe.entities.seine.TargetCatchs; +import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.ReferenceTypeName; +import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.seine.ReasonForDiscardDto; import fr.ird.observe.services.dto.referential.seine.SpeciesFateDto; +import fr.ird.observe.services.dto.result.SaveResultDto; +import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.dto.seine.NonTargetCatchDto; import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; +import org.nuiton.topia.persistence.TopiaEntities; + +import java.util.Set; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com @@ -47,27 +65,101 @@ public class NonTargetCatchServiceTopia extends ObserveServiceTopia implements N } @Override - public FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId) { + public FormDto<SetSeineNonTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId) { SetSeine setSeine = loadEntity(SetSeineNonTargetCatchDto.class, SetSeine.class, setSeineId); + TripSeine tripSeine = loadEntity(TripSeineDto.class, TripSeine.class, tripSeineId); + + Ocean ocean = tripSeine.getOcean(); + FormDto<SetSeineNonTargetCatchDto> form = entityToEditFormDto( SetSeineNonTargetCatchDto.class, SetSeine.class, setSeine, + ImmutableMap.<String, Object>of(Species.PROPERTY_OCEAN, ocean), + new ReferenceTypeName(NonTargetCatchDto.class, SpeciesDto.class, NonTargetCatchDto.PROPERTY_SPECIES), new ReferenceTypeName(NonTargetCatchDto.class, SpeciesFateDto.class, NonTargetCatchDto.PROPERTY_SPECIES_FATE), new ReferenceTypeName(NonTargetCatchDto.class, ReasonForDiscardDto.class, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD)); + SetSeineNonTargetCatchDto setSeineNonTargetCatchDto = form.getForm(); + + // on cherche si il y a des échantillons sur les captures + if (setSeine.sizeNonTargetCatch() > 0) { + NonTargetSample nonTargetSample = Iterables.get(setSeine.getNonTargetSample(), 0); + + if (nonTargetSample != null) { + + Iterable<Species> speciesSamples = Iterables.transform( + nonTargetSample.getNonTargetLength(), + NonTargetLenghts.getSpeciesFunction()); + + Set<String> speciesSampleIds = Sets.newHashSet(Iterables.transform(speciesSamples, TopiaEntities.getTopiaIdFunction())); + + for (NonTargetCatchDto nonTargetCatchDto : setSeineNonTargetCatchDto.getNonTargetCatch()) { + + boolean hasSample = speciesSampleIds.contains(nonTargetCatchDto.getSpecies().getId()); + + nonTargetCatchDto.setHasSample(hasSample); + } + + } + } + + return form; } @Override - public String save(FormDto<SetSeineNonTargetCatchDto> form) { + public SaveResultDto save(SetSeineNonTargetCatchDto dto) { + + SetSeine setSeine = dtoToEntity(SetSeineNonTargetCatchDto.class, SetSeine.class, dto); + + // mise a jour de la propriete nonTargetDiscarded + + boolean hasRejet = false; + for (NonTargetCatch nonTargetCatch : setSeine.getNonTargetCatch()) { + if (nonTargetCatch.getReasonForDiscard() != null) { + // on a trouve un rejet de faune + hasRejet = true; + break; + } + } + setSeine.setNonTargetDiscarded(hasRejet); + + + // on supprime les échantillons qui ne correspondent plus a des capture + if (setSeine.sizeNonTargetCatch() > 0) { + NonTargetSample nonTargetSample = Iterables.get(setSeine.getNonTargetSample(), 0); + + Set<Species> speciesCatchs = Sets.newHashSet(Iterables.transform( + setSeine.getTargetCatch(), + TargetCatchs.getSpeciesFunction())); + + Set<NonTargetLength> nonTargetLengthToDelete = Sets.newHashSet(); + + if (nonTargetSample != null) { + + for (NonTargetLength nonTargetLength : nonTargetSample.getNonTargetLength()) { + + if (!speciesCatchs.contains(nonTargetLength.getSpecies())) { + + nonTargetLengthToDelete.add(nonTargetLength); + + } + } + + for (NonTargetLength NonTargetLength : nonTargetLengthToDelete) { + + nonTargetSample.removeNonTargetLength(NonTargetLength); + + } - SetSeine setSeine = dtoToEntity(SetSeineNonTargetCatchDto.class, SetSeine.class, form.getForm()); + } + } setSeine = saveEntity(SetSeine.class, setSeine); - return setSeine.getTopiaId(); + return SaveResultDtos.newSaveResult(setSeine.getTopiaId(), setSeine.getLastUpdate()); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.