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 1aaea37fb04971f4469d679359fe72d96dfe6a3a Author: Kevin Morin <morin@codelutin.com> Date: Wed Nov 18 12:47:24 2015 +0100 correction dans le déplacement des marées (récupération des programmes via les noeuds de l'arbre, fix npe quand on clique sur annuler pendant le choix de la marée) (refs #7621) --- .../ui/actions/shared/MoveTripsUIAction.java | 84 ++++++++++++++++------ 1 file changed, 62 insertions(+), 22 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveTripsUIAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveTripsUIAction.java index 181b41a..1538fb2 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveTripsUIAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveTripsUIAction.java @@ -24,15 +24,15 @@ package fr.ird.observe.ui.actions.shared; import com.google.common.collect.Lists; import fr.ird.observe.ObserveOpenDataManager; import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.services.dto.IdDtos; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceDtos; import fr.ird.observe.services.dto.constants.GearType; import fr.ird.observe.services.dto.referential.ProgramDto; -import fr.ird.observe.services.dto.referential.ProgramDtos; -import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.ui.ObserveMainUI; import fr.ird.observe.ui.content.ContentUI; import fr.ird.observe.ui.content.list.ContentListUIModel; +import fr.ird.observe.ui.tree.DtoNodeSupport; import fr.ird.observe.ui.tree.ObserveNode; import fr.ird.observe.ui.tree.ObserveTreeHelper; import org.apache.commons.logging.Log; @@ -44,7 +44,6 @@ import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; import java.util.ArrayList; -import java.util.LinkedHashSet; import java.util.List; import static org.nuiton.i18n.I18n.n; @@ -102,13 +101,16 @@ public abstract class MoveTripsUIAction extends AbstractUIAction { // choose the new program String programId = chooseNewProgram(ui, oldProgramId); - // change the program of the selected trips - List<ReferenceDto> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); - List<String> tripIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); - List<Integer> positions = getPositions(tripIds, programId); + if (programId != null) { - // update the tree - updateTree(ui, oldProgramNode, oldProgramId, programId, tripIds, positions); + // change the program of the selected trips + List<ReferenceDto> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); + List<String> tripIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); + List<Integer> positions = getPositions(tripIds, programId); + + // update the tree + updateTree(ui, oldProgramNode, oldProgramId, programId, tripIds, positions); + } } }); @@ -116,31 +118,68 @@ public abstract class MoveTripsUIAction extends AbstractUIAction { } protected String chooseNewProgram(ContentUI<?> ui, String oldProgramId) { + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); +// +// LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) +// .getReferentialReferenceSet(ProgramDto.class) +// .getReference(); +// +// GearType gearType = getGearType(ui); +// +// List<ReferenceDto> filteredPrograms = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); +// List<ReferenceDto<ProgramDto>> programs = new ArrayList<>(ReferenceDtos.castToCollectionOfReferenceDto(filteredPrograms)); +// ObserveTreeHelper.sortPrograms(programs); +// +// Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, +// ProgramDto.class.getSimpleName()); +// +// //on crée un tableau avec un programme en moins car on ne propose pas le programme actuel +// DecoratedProgram[] decoratedPrograms = new DecoratedProgram[programs.size() - 1]; +// +// int j = 0; +// for (ReferenceDto program : programs) { +// if (!oldProgramId.equals(program.getId())) { +// decoratedPrograms[j++] = new DecoratedProgram(program.getId(), decorator.toString(program)); +// } +// } - LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) - .getReferentialReferenceSet(ProgramDto.class) - .getReference(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - GearType gearType = getGearType(ui); + GearType geartype = getGearType(ui); - List<ReferenceDto> filteredPrograms = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); - List<ReferenceDto<ProgramDto>> programs = new ArrayList<>(ReferenceDtos.castToCollectionOfReferenceDto(filteredPrograms)); - ObserveTreeHelper.sortPrograms(programs); + // racine + ObserveNode rootNode = treeHelper.getRootNode(); Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, ProgramDto.class.getSimpleName()); //on crée un tableau avec un programme en moins car on ne propose pas le programme actuel - DecoratedProgram[] decoratedPrograms = new DecoratedProgram[programs.size() - 1]; + List<DecoratedProgram> decoratedProgramList = new ArrayList<>(); + + for (int i = 0, n = rootNode.getChildCount() ; i < n ; i++) { + + ObserveNode programNode = rootNode.getChildAt(i); + String programId = programNode.getId(); - int j = 0; - for (ReferenceDto program : programs) { - if (!oldProgramId.equals(program.getId())) { - decoratedPrograms[j++] = new DecoratedProgram(program.getId(), decorator.toString(program)); + // si le noeud programme n'est pas le même que le parent actuel + if (!oldProgramId.equals(programId) + // si le noeud est bien un noeud de programme + && IdDtos.isProgramId(programId)) { + + ReferenceDto<ProgramDto> program = ((DtoNodeSupport) programNode).getEntity(); + + // si le type de marée et le type de prgramme sont les même + if (geartype.equals(program.getPropertyValue(ProgramDto.PROPERTY_GEAR_TYPE))) { + + String decoratedProgram = decorator.toString(program); + decoratedProgramList.add(new DecoratedProgram(programId, decoratedProgram)); + } } } + DecoratedProgram[] decoratedPrograms = decoratedProgramList.toArray(new DecoratedProgram[decoratedProgramList.size()]); + Object decoratedProgram = JOptionPane.showInputDialog(ui, t("observe.action.choose.program.message"), t("observe.action.choose.program.title"), @@ -148,7 +187,8 @@ public abstract class MoveTripsUIAction extends AbstractUIAction { null, decoratedPrograms, null); - return ((DecoratedProgram) decoratedProgram).getId(); + + return decoratedProgram != null ? ((DecoratedProgram) decoratedProgram).getId() : null; } protected void updateTree(ContentUI<?> ui, -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.