This is an automated email from the git hooks/post-receive script. New commit to branch feature/7605 in repository observe. See http://git.codelutin.com/observe.git commit 1e614877585a081efd2f01ac16df714ad860f2ba Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Oct 20 15:41:00 2015 +0200 Migration de l'écran des rejet de thon + generalisation des services sur les captures pour gérer les rejéts.(refs #7605) --- .../table/impl/seine/TargetCatchUIHandler.java | 6 +- .../table/impl/seine/TargetCatchUIModel.java | 1 + .../table/impl/seine/TargetDiscardCatchUI.jaxx | 15 +- .../impl/seine/TargetDiscardCatchUIHandler.java | 426 +++++++-------------- .../impl/seine/TargetDiscardCatchUIModel.java | 38 +- .../v1/seine/TargetCatchServiceController.java | 8 +- .../ird/observe/entities/seine/TargetCatchs.java | 10 + .../services/service/seine/TargetCatchService.java | 4 +- .../src/main/xmi/observe-services-dto-seine.zargo | Bin 61190 -> 61271 bytes .../service/seine/TargetCatchServiceTopia.java | 66 +++- 10 files changed, 244 insertions(+), 330 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java index 55fe43e..d633ed4 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java @@ -33,6 +33,7 @@ import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDtos; import fr.ird.observe.services.dto.seine.TargetCatchDto; @@ -300,7 +301,8 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCa @Override protected void doPersist(SetSeineTargetCatchDto bean) { - getTargetCatchService().save(bean); + SaveResultDto save = getTargetCatchService().save(bean); + bean.setLastUpdate(save.getLastUpdate()); } @Override @@ -308,7 +310,7 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCa String tripSeineId = getDataContext().getSelectedTripSeineId(); - FormDto<SetSeineTargetCatchDto> formDto = getTargetCatchService().loadToEdit(beanId, tripSeineId); + FormDto<SetSeineTargetCatchDto> formDto = getTargetCatchService().loadToEdit(beanId, false, tripSeineId); getModel().setFormDto(formDto); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIModel.java index b4930cc..e5c3262 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIModel.java @@ -50,6 +50,7 @@ public class TargetCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchD super(SetSeineTargetCatchDto.class, TargetCatchDto.class, new String[]{ + SetSeineTargetCatchDto.PROPERTY_DISCARDED, SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH }, new String[]{ diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx index 7c2729e..8ea3383 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx @@ -21,19 +21,17 @@ --> <fr.ird.observe.ui.content.table.ContentTableUI - superGenericType='SetSeineDto, TargetCatchDto' + superGenericType='SetSeineTargetCatchDto, TargetCatchDto' contentTitle='{n("observe.common.targetDiscarded")}' saveNewEntryText='{n("observe.action.create.targetDiscarded")}' - saveNewEntryTip='{n("observe.action.create.targetDiscarded.tip")}' - - > + saveNewEntryTip='{n("observe.action.create.targetDiscarded.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.SetSeineTargetCatchDto fr.ird.observe.services.dto.seine.TargetCatchDto fr.ird.observe.services.dto.referential.seine.WeightCategoryDto fr.ird.observe.services.dto.referential.SpeciesDto @@ -57,7 +55,7 @@ <TargetDiscardCatchUIModel id='model' constructorParams='this'/> <!-- edit bean --> - <SetSeineDto id='bean'/> + <SetSeineTargetCatchDto id='bean'/> <!-- table edit bean --> <TargetCatchDto id='tableEditBean'/> @@ -67,12 +65,11 @@ <!-- le validateur de l'écran --> <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineDto' + beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' errorTableModel='{getErrorTableModel()}' context='n1-update-targetDiscarded'> <!-- clef unique --> - <!--FIXME--> - <!--<field name="targetCatch" component="editorPanel"/>--> + <field name="targetCatch" 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/TargetDiscardCatchUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java index dd5146a..2493a40 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java @@ -21,38 +21,44 @@ */ 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.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.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineDto; -import fr.ird.observe.services.dto.seine.SetSeineDtos; +import fr.ird.observe.services.dto.result.SaveResultDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDtos; import fr.ird.observe.services.dto.seine.TargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetLengthDto; -import fr.ird.observe.services.service.seine.SetSeineService; +import fr.ird.observe.services.dto.seine.TargetCatchDtos; +import fr.ird.observe.services.service.seine.TargetCatchService; 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.JAXXContext; -import jaxx.runtime.context.JAXXContextEntryDef; import jaxx.runtime.swing.editor.bean.BeanComboBox; 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.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -61,53 +67,36 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineDto, TargetCatchDto> { +public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto> { /** Logger */ static private Log log = LogFactory.getLog(TargetDiscardCatchUIHandler.class); - JAXXContextEntryDef<List<ReferenceDto<WeightCategoryDto>>> ALL_CATEGORIES_ENTRY = - UIHelper.newListContextEntryDef("RejetThonUI-all-categories"); - - JAXXContextEntryDef<List<ReferenceDto<ReasonForDiscardDto>>> ALL_RAISONS_REJET_ENTRY = - UIHelper.newListContextEntryDef("RejetThonUI-all-reasonForDiscards"); - - JAXXContextEntryDef<List<ReferenceDto<TargetLengthDto>>> ALL_TAILLES_TO_DELETE_ENTRY = - UIHelper.newListContextEntryDef("RejetThonUI-all-taille-to-delete"); - - //FIXME -// TopiaExecutor<WeightCategoryDto> weightCategoryTopiaExecutor = new TopiaExecutor<WeightCategoryDto>() { -// @Override -// public void execute(TopiaContext tx, WeightCategory bean) { -// getDecoratorService().decorate(bean.getSpecies()); -// } -// }; - public TargetDiscardCatchUIHandler(TargetDiscardCatchUI ui) { super(ui, DataContextType.SetSeine); } - protected static Collection<WeightCategoryDto> getWeightCategoryUsed( - ContentTableModel<SetSeineDto, TargetCatchDto> model) { - List<WeightCategoryDto> list = model.getColumnValues(1); - Collection<WeightCategoryDto> set = new HashSet<WeightCategoryDto>(list); + protected static Collection<ReferenceDto<WeightCategoryDto>> getWeightCategoryUsed( + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model) { + + List<ReferenceDto<WeightCategoryDto>> list = model.getColumnValues(1); + Collection<ReferenceDto<WeightCategoryDto>> set = Sets.newHashSet(list); list.clear(); return set; } - protected static Collection<ReasonForDiscardDto> getReasonForDiscardUsed( - ContentTableModel<SetSeineDto, TargetCatchDto> model, - WeightCategoryDto weightCategory) { + protected static Collection<ReferenceDto<ReasonForDiscardDto>> getReasonForDiscardUsed( + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model, + ReferenceDto<WeightCategoryDto> weightCategory) { - Collection<ReasonForDiscardDto> set = new HashSet<ReasonForDiscardDto>(); + Collection<ReferenceDto<ReasonForDiscardDto>> set = Sets.newHashSet(); if (weightCategory != null) { for (int i = 0; i < model.getRowCount(); i++) { TargetCatchDto c = model.getValueAt(i); if (c != null && weightCategory.equals(c.getWeightCategory()) && c.getReasonForDiscard() != null) { - //FIXME -// set.add(c.getReasonForDiscard()); + set.add(c.getReasonForDiscard()); } } } @@ -137,7 +126,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD @Override public void propertyChange(PropertyChangeEvent evt) { - ContentTableModel<SetSeineDto, TargetCatchDto> model = + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model = getTableModel(); TargetCatchDto bean = model.getRowBean(); @@ -145,7 +134,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD // en mode creation , on doit recalculer la liste // des categories - SpeciesDto species = (SpeciesDto) evt.getNewValue(); + ReferenceDto<SpeciesDto> species = (ReferenceDto<SpeciesDto>) evt.getNewValue(); onEspeceChanged(bean, species); } } @@ -163,14 +152,14 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD @Override public void propertyChange(PropertyChangeEvent evt) { - ContentTableModel<SetSeineDto, TargetCatchDto> model = + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model = getTableModel(); TargetCatchDto bean = model.getRowBean(); if (bean.getId() == null) { // en mode creation , on doit recalculer la liste // des raison rejet - WeightCategoryDto weightCategory = - (WeightCategoryDto) evt.getNewValue(); + ReferenceDto<WeightCategoryDto> weightCategory = + (ReferenceDto<WeightCategoryDto>) evt.getNewValue(); onCategorieChanged(bean, weightCategory); } @@ -185,163 +174,45 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD return getDataContext().getSelectedSetId(); } - //FIXME -// @Override -// protected SetSeine loadEditBean(ContentMode mode, -// DataContext dataContext, -// DataService dataService, -// DataSource dataSource) { -// -// List<WeightCategory> categorieList; -// List<ReasonForDiscard> reasonForDiscardList; -// -// if (mode == ContentMode.UPDATE) { -// -// // on charge le formulaire uniquement si en mode édition -// -// categorieList = new ArrayList<WeightCategory>( -// dataService.loadDecoratedEntities( -// dataSource, -// WeightCategory.class, -// weightCategoryTopiaExecutor) -// ); -// -// // filtre sur la liste d'espèce configuree -// ObserveSwingApplicationConfig config = getUi().getContextValue(ObserveSwingApplicationConfig.class); -// String speciesListId = config.getSpeciesListSeineTargetCatchId(); -// java.util.Set<String> speciesIds = loadSpeciesList(speciesListId, n("observe.error.speciesList.seine.targetCatch.notFound")); -// -// categorieList = Species2.filterWeightCategoryBySpeciesIds( -// categorieList, speciesIds); -// -// // filtre par status actif -// ReferenceEntities.filterReferentielListByStatus(categorieList); -// -// // get current ocean -// Ocean ocean = dataService.getTripOcean(dataSource, dataContext.getSelectedTripId()); -// -// // filtre par ocean -// categorieList = Species2.filterWeightCategoryByOcean(categorieList, ocean); -// -// reasonForDiscardList = new ArrayList<ReasonForDiscard>( -// dataService.loadDecoratedEntities(dataSource, ReasonForDiscard.class)); -// -// // filtre par status actif -// ReferenceEntities.filterReferentielListByStatus(reasonForDiscardList); -// -// } else { -// -// categorieList = new ArrayList<WeightCategory>(); -// reasonForDiscardList = new ArrayList<ReasonForDiscard>(); -// } -// -// TargetDiscardCatchUI ui = getUi(); -// -// ALL_CATEGORIES_ENTRY.setContextValue(ui, categorieList); -// ALL_RAISONS_REJET_ENTRY.setContextValue(ui, reasonForDiscardList); -// -// return super.loadEditBean(mode, dataContext, dataService, dataSource); -// } - - //FIXME -// @Override -// protected Collection<TargetCatch> loadChilds(TopiaContext tx, SetSeine bean) throws TopiaException { -// Collection<TargetCatch> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<TargetCatch> data = new ArrayList<TargetCatch>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// TopiaDAO<TargetCatch> dao = -// getDataSource().getDAO(tx, getTableEditBean()); -// TopiaEntityBinder<TargetCatch> childLoador = getModel().getChildLoador(); -// DecoratorService decoratorService = getDecoratorService(); -// for (TargetCatch c : childs) { -// if (!c.isDiscarded()) { -// // ce n'est pas un rejet, on ne le retient pas dans cette -// // liste -// if (log.isDebugEnabled()) { -// log.debug("targetCatch " + c.getSpecies().getLabel2() + " non retenu."); -// } -// continue; -// } -// try { -// TargetCatch c2 = getModel().newTableEditBean(); -// TargetCatch safeC = dao.findByTopiaId(c.getTopiaId()); -// WeightCategory weightCategory = safeC.getWeightCategory(); -// if (weightCategory != null) { -// Species species = weightCategory.getSpecies(); -// decoratorService.decorate(species); -// } -// childLoador.load(safeC, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } - - //FIXME @Override - protected boolean doSave(SetSeineDto bean) throws Exception { + protected boolean prepareSave(SetSeineTargetCatchDto bean, List<TargetCatchDto> objets) { - try { - return super.doSave(bean); + //on cherche si parmis les captures supprimer certaines ont des échantillon + SetSeineTargetCatchDto originalSetSeineTargetCatchDto = getModel().getFormDto().getForm(); + SetSeineTargetCatchDto currentSetSeineTargetCatch = getModel().getBean(); - } finally { + Set<ReferentialReferenceDto<SpeciesDto>> speciesToDelete = Sets.newHashSet(); - // toujours supprimer la référence du context, quoiqu'il arrive - ALL_TAILLES_TO_DELETE_ENTRY.removeContextValue(getUi()); - } - } + for (TargetCatchDto targetCatchDto : originalSetSeineTargetCatchDto.getTargetCatch()) { - @Override - protected boolean prepareSave(SetSeineDto bean, List<TargetCatchDto> objets) { + if (targetCatchDto.isHasSample()) { - // on recupere les speciess acceptables pour des echantillonnages - // i.e une species d'un targetDiscarded montee sur le pont + ReferentialReferenceDto<SpeciesDto> species = targetCatchDto.getSpecies(); - java.util.Set<SpeciesDto> speciessUsed = new HashSet<SpeciesDto>(); - for (TargetCatchDto c : objets) { - if (c.getBroughtOnDeck() != null && c.getBroughtOnDeck()) { - //FIXME -// speciessUsed.add(c.getSpecies()); - } - } + Iterable<TargetCatchDto> currentTargetCatchSpecies = TargetCatchDtos.filterBySpecies(currentSetSeineTargetCatch.getTargetCatch(), species); - // il faut supprimer les echantillon thons sur des speciess qui ne - // sont plus sur un rejet + if (Iterables.isEmpty(currentTargetCatchSpecies)) { - List<ReferenceDto<TargetLengthDto>> tailleToDelete = new ArrayList<>(); - java.util.Set<SpeciesDto> speciessToDelete = new HashSet<SpeciesDto>(); + speciesToDelete.add(species); - //FIXME -// getDataService().getObsoleteEspeceForTargetSample(getDataSource(), -// bean.getTopiaId(), -// speciessUsed, -// speciessToDelete, -// tailleToDelete, -// true); + } + } - if (!tailleToDelete.isEmpty()) { + } + if (!speciesToDelete.isEmpty()) { // il existe des echantillon thon a supprimer on demande une // confirmation StringBuilder sb = new StringBuilder(512); - StringBuilder sb2 = new StringBuilder(512); - Decorator<SpeciesDto> decorator = - getDecoratorService().getDecoratorByType(SpeciesDto.class); - Decorator<TargetLengthDto> decorator2 = - getDecoratorService().getDecoratorByType(TargetLengthDto.class); - - for (SpeciesDto e : speciessToDelete) { - sb.append(" - ").append(decorator.toString(e)).append('\n'); - } - for (ReferenceDto<TargetLengthDto> t : tailleToDelete) { - sb2.append(" - ").append(decorator2.toString(t)).append('\n'); + 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.targetDiscarded.message.table.will.delete.targetLength", sb.toString(), sb2.toString()), + t("observe.targetDiscarded.message.table.will.delete.targetLength", sb.toString()), JOptionPane.ERROR_MESSAGE, new Object[]{ t("observe.choice.continue"), @@ -363,79 +234,33 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD // 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 targetDiscarded - bean.setTargetDiscarded(!objets.isEmpty()); - - for (TargetCatchDto discarded : objets) { - - // FIXME : on devrait pas a avoir a repositionner la propriete discarded - discarded.setDiscarded(true); - - // on attache la set - //FIXME -// discarded.setSetSeine(bean); } return true; } - //FIXME -// @Override -// protected void onUpdateFinalize(TopiaContext tx, SetSeine bean, Collection<TargetCatch> oldChilds) { -// -// if (oldChilds != null && !oldChilds.isEmpty()) { -// -// // on reinjecte les discarded thon precedemment saisies dans la set -// // et qui ne sont pas des rejets -// -// for (TargetCatch targetCatch : oldChilds) { -// if (!targetCatch.isDiscarded()) { -// bean.addTargetCatch(targetCatch); -// } -// } -// } -// -// List<TargetLength> 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 targetLength(s)."); -// } -// -// TargetSample echantillon = bean.getTargetSample(true); -// -// // on supprime les echantillons obsoletes -// echantillon.getTargetLength().removeAll(tailleToDelete); -// } -// } - @Override protected void onSelectedRowChanged(int editingRow, TargetCatchDto bean, boolean create) { TargetDiscardCatchUI ui = getUi(); - //FIXME -// WeightCategoryDto beanWeightCategory = bean.getWeightCategory(); -// SpeciesDto beanEspece = beanWeightCategory == null ? null : -// beanWeightCategory.getSpecies(); -// ReasonForDiscardDto beanReasonForDiscard = bean.getReasonForDiscard(); -// if (log.isDebugEnabled()) { -// log.debug("selected categoriePoid " + beanWeightCategory); -// log.debug("selected species " + beanEspece); -// log.debug("selected reasonForDiscard " + beanReasonForDiscard); -// } + ReferenceDto<WeightCategoryDto> beanWeightCategory = bean.getWeightCategory(); + + ReferenceDto<SpeciesDto> beanSpecies = null; + if (beanWeightCategory != null) { + beanSpecies = (ReferenceDto<SpeciesDto>) beanWeightCategory.getPropertyValue(WeightCategoryDto.PROPERTY_SPECIES); + } + + ReferenceDto<ReasonForDiscardDto> beanReasonForDiscard = bean.getReasonForDiscard(); + if (log.isDebugEnabled()) { + log.debug("selected categoriePoid " + beanWeightCategory); + log.debug("selected species " + beanSpecies); + log.debug("selected reasonForDiscard " + beanReasonForDiscard); + } JComponent requestFocus; if (create) { - ContentTableModel<SetSeineDto, TargetCatchDto> model = getTableModel(); + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model = getTableModel(); + if (model.isCreate()) { // par défaut, on considère que l'espèce a été monté sur le pont // c'est le cas le plus fréquent. @@ -443,24 +268,20 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD } // on recalcule la liste des speciess disponibles - //FIXME -// List<SpeciesDto> availableEspeces = buildEspeceList( -// beanEspece, beanWeightCategory); - //FIXME -// ui.getSpecies().setData(availableEspeces); + List<ReferenceDto<SpeciesDto>> availableSpecies = buildEspeceList(beanSpecies, beanWeightCategory); + ui.getSpecies().setData(availableSpecies); // on reinitilise toujours l'species (pour reinitialiser la liste // des categories) ui.getSpecies().setSelectedItem(null); if (!model.isCreate()) { - //FIXME -// // on repositionne l'species (cela reconstruira la liste -// // des categories) -// ui.getSpecies().setSelectedItem(beanEspece); -// // on repositionne la categorie -// ui.getWeightCategory().setSelectedItem(beanWeightCategory); -// ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); + // on repositionne l'species (cela reconstruira la liste + // des categories) + ui.getSpecies().setSelectedItem(beanSpecies); + // on repositionne la categorie + ui.getWeightCategory().setSelectedItem(beanWeightCategory); + ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); } requestFocus = ui.getSpecies(); @@ -469,12 +290,11 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD // au singleton de sa valeur correspondante dans le bean // puisque dans ce mode, pas possibilite de modifier de cette // valeur (clef metier) - //FIXME -// ui.getSpecies().setSelectedItem(beanEspece); -// ui.getWeightCategory().setData(Arrays.asList(beanWeightCategory)); -// ui.getWeightCategory().setSelectedItem(beanWeightCategory); -// ui.getReasonForDiscard().setData(Arrays.asList(beanReasonForDiscard)); -// ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); + ui.getSpecies().setSelectedItem(beanSpecies); + ui.getWeightCategory().setData(Arrays.asList(beanWeightCategory)); + ui.getWeightCategory().setSelectedItem(beanWeightCategory); + ui.getReasonForDiscard().setData(Arrays.asList(beanReasonForDiscard)); + ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); requestFocus = ui.getCatchWeight(); } @@ -504,15 +324,15 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD n("observe.targetDiscarded.table.comment"), n("observe.targetDiscarded.table.comment.tip")); - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesDto.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, WeightCategoryDto.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, WeightCategoryDto.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.newStringTableCellRenderer(renderer, 20, false)); UIHelper.setTableColumnRenderer(table, 5, UIHelper.newStringTableCellRenderer(renderer, 10, true)); } - protected void onEspeceChanged(TargetCatchDto bean, SpeciesDto species) { + protected void onEspeceChanged(TargetCatchDto bean, ReferenceDto<SpeciesDto> species) { ReferenceDto<WeightCategoryDto> weightCategory = null; @@ -551,7 +371,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD combo.setSelectedItem(weightCategory); } - protected void onCategorieChanged(TargetCatchDto bean, WeightCategoryDto weightCategory) { + protected void onCategorieChanged(TargetCatchDto bean, ReferenceDto<WeightCategoryDto> weightCategory) { TargetDiscardCatchUI ui = getUi(); ReferenceDto<ReasonForDiscardDto> reasonForDiscard = null; @@ -568,7 +388,9 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD // un categorie est selectionne, on met a jour la liste des raisons // rejet disponible pour cette categorie - List<ReferenceDto<ReasonForDiscardDto>> reasonForDiscardList = buildReasonFordiscardList(weightCategory); + reasonForDiscard = bean.getReasonForDiscard(); + + List<ReferenceDto<ReasonForDiscardDto>> reasonForDiscardList = buildReasonFordiscardList(weightCategory, reasonForDiscard); if (log.isDebugEnabled()) { log.debug("new reasonForDiscard list " + reasonForDiscardList); @@ -576,7 +398,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD data = reasonForDiscardList; - reasonForDiscard = bean.getReasonForDiscard(); + if (reasonForDiscard != null && !reasonForDiscardList.contains(reasonForDiscard)) { @@ -594,9 +416,9 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD combo.setSelectedItem(reasonForDiscard); } - protected List<SpeciesDto> buildEspeceList(SpeciesDto species, ReferenceDto<WeightCategoryDto> weightCategory) { + protected List<ReferenceDto<SpeciesDto>> buildEspeceList(ReferenceDto<SpeciesDto> species, ReferenceDto<WeightCategoryDto> weightCategory) { - List<ReferenceDto<WeightCategoryDto>> weightCategoryList = getAllCategories(getUi()); + List<ReferenceDto<WeightCategoryDto>> weightCategoryList = getAllCategories(); removeFullyUsedCategories(weightCategoryList); @@ -604,21 +426,20 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD weightCategoryList.add(weightCategory); } - Collection<SpeciesDto> usedEspeces = new HashSet<SpeciesDto>(); + Collection<ReferenceDto<SpeciesDto>> usedEspeces = Sets.newHashSet(); for (ReferenceDto<WeightCategoryDto> cat : weightCategoryList) { - //FIXME -// usedEspeces.add(cat.getSpecies()); + usedEspeces.add((ReferenceDto<SpeciesDto>) cat.getPropertyValue(WeightCategoryDto.PROPERTY_SPECIES)); } - List<SpeciesDto> result = new ArrayList<SpeciesDto>(usedEspeces); + List<ReferenceDto<SpeciesDto>> result = Lists.newArrayList(usedEspeces); weightCategoryList.clear(); usedEspeces.clear(); return result; } - protected List<ReferenceDto<WeightCategoryDto>> buildWeightCategoryList(SpeciesDto species) { + protected List<ReferenceDto<WeightCategoryDto>> buildWeightCategoryList(ReferenceDto<SpeciesDto> species) { - List<ReferenceDto<WeightCategoryDto>> weightCategoryList = getAllCategories(getUi()); + List<ReferenceDto<WeightCategoryDto>> weightCategoryList = getAllCategories(); // on filtre les categories sur l'espèce donnée for (Iterator<ReferenceDto<WeightCategoryDto>> it = weightCategoryList.iterator(); @@ -637,17 +458,20 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD } @SuppressWarnings("unchecked") - protected List<ReferenceDto<ReasonForDiscardDto>> buildReasonFordiscardList(WeightCategoryDto weightCategory) { + protected List<ReferenceDto<ReasonForDiscardDto>> buildReasonFordiscardList(ReferenceDto<WeightCategoryDto> weightCategory, ReferenceDto<ReasonForDiscardDto> currentReason) { - ContentTableModel<SetSeineDto, TargetCatchDto> model = getTableModel(); - List<ReferenceDto<ReasonForDiscardDto>> reasonForDiscardList = - new ArrayList<>(ALL_RAISONS_REJET_ENTRY.getContextValue(getUi())); + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model = getTableModel(); + ReferenceSetDto<ReasonForDiscardDto> reasonForDiscardSetDto = getModel().getFormDto().getReferenceSetDto(ReasonForDiscardDto.class); + + List<ReferenceDto<ReasonForDiscardDto>> reasonForDiscardList = Lists.newArrayList((Set) reasonForDiscardSetDto.getReference()); // on filtre les raison rejet sur la categorie for (int i = 0; i < model.getRowCount(); i++) { TargetCatchDto c = model.getValueAt(i); - if (c != null && c.getReasonForDiscard() != null && - weightCategory.equals(c.getWeightCategory())) { + if (c != null + && c.getReasonForDiscard() != null + && (currentReason == null || ! currentReason.equals(c.getReasonForDiscard())) + && weightCategory.equals(c.getWeightCategory())) { reasonForDiscardList.remove(c.getReasonForDiscard()); } } @@ -655,24 +479,27 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD return reasonForDiscardList; } - protected List<ReferenceDto<WeightCategoryDto>> getAllCategories(JAXXContext context) { - List<ReferenceDto<WeightCategoryDto>> list = new ArrayList<>( - ALL_CATEGORIES_ENTRY.getContextValue(context)); - return list; + protected List<ReferenceDto<WeightCategoryDto>> getAllCategories() { + ReferenceSetDto<WeightCategoryDto> weightCategorySetDto = getModel().getFormDto().getReferenceSetDto(WeightCategoryDto.class); + + List<ReferenceDto<WeightCategoryDto>> weightCategoryList = Lists.newArrayList((Set) weightCategorySetDto.getReference()); + + return weightCategoryList; } protected void removeFullyUsedCategories( List<ReferenceDto<WeightCategoryDto>> weightCategoryAvaillable) { - ContentTableModel<SetSeineDto, TargetCatchDto> model = getTableModel(); + ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> model = getTableModel(); + + ReferenceSetDto<ReasonForDiscardDto> reasonForDiscardSetDto = getModel().getFormDto().getReferenceSetDto(ReasonForDiscardDto.class); - int nbReasonForDiscard = - ALL_RAISONS_REJET_ENTRY.getContextValue(getUi()).size(); + int nbReasonForDiscard = reasonForDiscardSetDto.sizeReference(); // on filtre toutes les weightCategory qui ont deja references toutes // les raisons rejets - for (WeightCategoryDto c : getWeightCategoryUsed(model)) { - Collection<ReasonForDiscardDto> raisonUsed = getReasonForDiscardUsed(model, c); + for (ReferenceDto<WeightCategoryDto> c : getWeightCategoryUsed(model)) { + Collection<ReferenceDto<ReasonForDiscardDto>> raisonUsed = getReasonForDiscardUsed(model, c); if (raisonUsed.size() == nbReasonForDiscard) { // toutes les raison de rejet epuisé pour cette categorie weightCategoryAvaillable.remove(c); @@ -681,18 +508,25 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineD } @Override - protected void doPersist(SetSeineDto bean) { - getSetSeineService().save(getSelectedParentId(), bean); + protected void doPersist(SetSeineTargetCatchDto bean) { + SaveResultDto save = getTargetCatchService().save(bean); + bean.setLastUpdate(save.getLastUpdate()); } + @Override protected void loadEditBean(String beanId) { - FormDto<SetSeineDto> formDto = getSetSeineService().loadToEdit(beanId); + + String tripSeineId = getDataContext().getSelectedTripSeineId(); + + FormDto<SetSeineTargetCatchDto> formDto = getTargetCatchService().loadToEdit(beanId, true, tripSeineId); + getModel().setFormDto(formDto); - SetSeineDtos.copySetSeineDto(formDto.getForm(), getBean()); + + SetSeineTargetCatchDtos.copySetSeineTargetCatchDto(formDto.getForm(), getBean()); } - protected SetSeineService getSetSeineService() { - return ObserveSwingApplicationContext.get().newService(SetSeineService.class); + protected TargetCatchService getTargetCatchService() { + return ObserveSwingApplicationContext.get().newService(TargetCatchService.class); } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java index f64b986..7115cb9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java @@ -24,13 +24,15 @@ package fr.ird.observe.ui.content.table.impl.seine; import com.google.common.collect.Lists; import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDtos; 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; /** @@ -39,21 +41,18 @@ import java.util.List; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineDto, TargetCatchDto> { +public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchDto, TargetCatchDto> { private static final long serialVersionUID = 1L; public TargetDiscardCatchUIModel(TargetDiscardCatchUI ui) { - super(SetSeineDto.class, + super(SetSeineTargetCatchDto.class, TargetCatchDto.class, new String[]{ - //FIXME -// SetSeineDto.PROPERTY_TARGET_CATCH, - SetSeineDto.PROPERTY_TARGET_DISCARDED}, + SetSeineTargetCatchDto.PROPERTY_DISCARDED, + SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH}, new String[]{ - //FIXME -// TargetCatchDto.PROPERTY_SET_SEINE, TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, TargetCatchDto.PROPERTY_CATCH_WEIGHT, TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, @@ -74,8 +73,25 @@ public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineDto, } @Override - protected ContentTableModel<SetSeineDto, TargetCatchDto> createTableModel(ObserveContentTableUI<SetSeineDto, TargetCatchDto> ui, List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { - // FIXME - return null; + protected ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> createTableModel( + ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto> ui, + List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { + + return new ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto>(ui, contentTableMetas) { + @Override + protected Collection<TargetCatchDto> getChilds(SetSeineTargetCatchDto bean) { + return bean.getTargetCatch(); + } + + @Override + protected void load(TargetCatchDto source, TargetCatchDto target) { + TargetCatchDtos.copyTargetCatchDto(source, target); + } + + @Override + protected void setChilds(SetSeineTargetCatchDto parent, List<TargetCatchDto> childs) { + bean.setTargetCatch(childs); + } + }; } } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TargetCatchServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TargetCatchServiceController.java index 56634d4..7a270ef 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TargetCatchServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/seine/TargetCatchServiceController.java @@ -38,13 +38,13 @@ public class TargetCatchServiceController extends ObserveAuthenticatedServiceCon } @Override - public FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId) { - return service.loadToRead(setSeineId); + public FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId, boolean discarded) { + return service.loadToRead(setSeineId, discarded); } @Override - public FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId) { - return service.loadToEdit(setSeineId, tripSeineId); + public FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, boolean discarded, String tripSeineId) { + return service.loadToEdit(setSeineId, discarded, tripSeineId); } @Override diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatchs.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatchs.java index df3882f..5c53e07 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatchs.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatchs.java @@ -1,6 +1,7 @@ package fr.ird.observe.entities.seine; import com.google.common.base.Function; +import com.google.common.base.Predicate; import fr.ird.observe.entities.referentiel.Species; /** @@ -17,4 +18,13 @@ public class TargetCatchs { }; } + public static Predicate<TargetCatch> newDiscardedPredicate(final boolean discarded) { + return new Predicate<TargetCatch>() { + @Override + public boolean apply(TargetCatch input) { + return discarded == input.isDiscarded(); + } + }; + } + } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TargetCatchService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TargetCatchService.java index 8cbe090..850339a 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TargetCatchService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/seine/TargetCatchService.java @@ -37,10 +37,10 @@ import fr.ird.observe.services.spi.WriteDataPermission; public interface TargetCatchService extends ObserveService { @ReadDataPermission - FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId); + FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId, boolean discarded); @WriteDataPermission - FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId); + FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, boolean discarded, String tripSeineId); @Write @WriteDataPermission diff --git a/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo b/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo index 7e29c36..3e11620 100644 Binary files a/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo and b/observe-services-model/src/main/xmi/observe-services-dto-seine.zargo differ diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetCatchServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetCatchServiceTopia.java index 2613c8b..254b91a 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetCatchServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/seine/TargetCatchServiceTopia.java @@ -1,7 +1,9 @@ package fr.ird.observe.services.service.seine; +import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.Species; @@ -22,27 +24,43 @@ import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDtos; import fr.ird.observe.services.dto.seine.TripSeineDto; import org.nuiton.topia.persistence.TopiaEntities; +import java.util.Collection; +import java.util.List; import java.util.Set; /** * @author Sylvain Bavencoff - bavencoff@codelutin.com */ public class TargetCatchServiceTopia extends ObserveServiceTopia implements TargetCatchService { + @Override - public FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId) { + public FormDto<SetSeineTargetCatchDto> loadToRead(String setSeineId, boolean discarded) { SetSeine setSeine = loadEntity(SetSeineTargetCatchDto.class, SetSeine.class, setSeineId); FormDto<SetSeineTargetCatchDto> form = entityToReadFormDto(SetSeineTargetCatchDto.class, SetSeine.class, setSeine); + SetSeineTargetCatchDto setSeineTargetCatchDto = form.getForm(); + + setSeineTargetCatchDto.setDiscarded(discarded); + + // on filtre les captures pour ne garder que les conservées ou les rejetées + Collection<TargetCatchDto> allTargetCatchDtos = setSeineTargetCatchDto.getTargetCatch(); + + List<TargetCatchDto> targetCatchDtos = Lists.newArrayList(Iterables.filter(allTargetCatchDtos, TargetCatchDtos.newDiscardedPredicate(discarded))); + + setSeineTargetCatchDto.setTargetCatch(targetCatchDtos); + + return form; } @Override - public FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, String tripSeineId) { + public FormDto<SetSeineTargetCatchDto> loadToEdit(String setSeineId, boolean discarded, String tripSeineId) { SetSeine setSeine = loadEntity(SetSeineTargetCatchDto.class, SetSeine.class, setSeineId); @@ -61,8 +79,18 @@ public class TargetCatchServiceTopia extends ObserveServiceTopia implements Targ SetSeineTargetCatchDto setSeineTargetCatchDto = form.getForm(); + setSeineTargetCatchDto.setDiscarded(discarded); + + // on filtre les captures pour ne garder que les conservées ou les rejetées + Collection<TargetCatchDto> allTargetCatchDtos = setSeineTargetCatchDto.getTargetCatch(); + + List<TargetCatchDto> targetCatchDtos = Lists.newArrayList(Iterables.filter(allTargetCatchDtos, TargetCatchDtos.newDiscardedPredicate(discarded))); + + setSeineTargetCatchDto.setTargetCatch(targetCatchDtos); + + // on cherche si il y a des échantillons sur les captures - TargetSample targetSample = setSeine.getTargetSample(false); + TargetSample targetSample = setSeine.getTargetSample(discarded); if (targetSample != null) { @@ -87,13 +115,35 @@ public class TargetCatchServiceTopia extends ObserveServiceTopia implements Targ @Override public SaveResultDto save(SetSeineTargetCatchDto dto) { - SetSeine setSeine = dtoToEntity(SetSeineTargetCatchDto.class, SetSeine.class, dto); + // on affect le discarded a toute les capture reçus. + for (TargetCatchDto targetCatchDto : dto.getTargetCatch()) { + targetCatchDto.setDiscarded(dto.isDiscarded()); + } + + // on conserve la liste des captures rejetées ou conservées + SetSeine setSeine = loadEntity(SetSeineTargetCatchDto.class, SetSeine.class, dto.getId()); + + SetSeineTargetCatchDto oldDto = entityToDto(SetSeineTargetCatchDto.class, SetSeine.class, setSeine); + + Collection<TargetCatchDto> allTargetCatchDtos = oldDto.getTargetCatch(); + + List<TargetCatchDto> otherTargetCatchDtos = Lists.newArrayList(Iterables.filter( + allTargetCatchDtos, + TargetCatchDtos.newDiscardedPredicate( ! dto.isDiscarded()))); + + dto.addAllTargetCatch(otherTargetCatchDtos); + + setSeine = dtoToEntity(SetSeineTargetCatchDto.class, SetSeine.class, dto); // on supprime les échantillons qui ne correspondent plus a des capture - TargetSample targetSample = setSeine.getTargetSample(false); + TargetSample targetSample = setSeine.getTargetSample(dto.isDiscarded()); - Set<Species> speciesCatchs = Sets.newHashSet(Iterables.transform( + Iterable<TargetCatch> targetCatches = Iterables.filter( setSeine.getTargetCatch(), + TargetCatchs.newDiscardedPredicate(dto.isDiscarded())); + + Set<Species> speciesCatchs = Sets.newHashSet(Iterables.transform( + targetCatches, TargetCatchs.getSpeciesFunction())); Set<TargetLength> targetLengthToDelete = Sets.newHashSet(); @@ -121,8 +171,12 @@ public class TargetCatchServiceTopia extends ObserveServiceTopia implements Targ targetCatch.setSetSeine(setSeine); } + Optional<TargetCatch> targetCatchDiscardedOptional = Iterables.tryFind(setSeine.getTargetCatch(), TargetCatchs.newDiscardedPredicate(true)); + setSeine.setTargetDiscarded(targetCatchDiscardedOptional.isPresent()); + setSeine = saveEntity(SetSeine.class, setSeine); 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>.