This is an automated email from the git hooks/post-receive script. New commit to branch feature/7621 in repository observe. See http://git.codelutin.com/observe.git commit 0257b062bc61483ad6e24ee5592390d736fa5e44 Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 9 18:21:48 2015 +0100 sélection du programme dans lequel déplacer les marées (refs #7621) --- .../ui/actions/shared/MoveTripsUIAction.java | 143 +++++++++++++++------ .../ui/content/list/impl/seine/TripSeinesUI.jaxx | 1 + 2 files changed, 102 insertions(+), 42 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 ed31b84..5a97048 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 @@ -36,13 +36,14 @@ import fr.ird.observe.ui.tree.ObserveNode; import fr.ird.observe.ui.tree.ObserveTreeHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; import java.util.LinkedHashSet; import java.util.List; -import java.util.Random; import static org.nuiton.i18n.I18n.n; @@ -90,64 +91,103 @@ public abstract class MoveTripsUIAction extends AbstractUIAction { checkUIClass(ui); - ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); - - LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) - .getReferentialReferenceSet(ProgramDto.class) - .getReference(); - - GearType gearType = getGearType(ui); - - List<ReferenceDto> programs = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); - int programIndex = new Random().nextInt(programs.size()); - ReferenceDto program = programs.get(programIndex); - String programId = program.getId(); - + // get current program id ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - ObserveNode rootNode = treeHelper.getRootNode(); - ObserveNode newProgramNode = treeHelper.getChild(rootNode, programId); + ObserveNode oldProgramNode = treeHelper.getSelectedNode(); + String oldProgramId = oldProgramNode.getId(); + + // choose the new program + String programId = chooseNewProgram(ui, oldProgramId); + // change the program of the selected trips List<ReferenceDto> selectedDatas = getSelectedDatas(ui); List<String> tripIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); List<Integer> positions = getPositions(tripIds, programId); - ObserveNode oldProgramNode = treeHelper.getSelectedNode(); - String oldProgramId = oldProgramNode.getId(); - ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); + // update the tree + updateTree(ui, oldProgramNode, oldProgramId, programId, tripIds, positions); - for (int i = 0, s = positions.size(); i < s; i++) { + } + }); - String tripId = tripIds.get(i); - ObserveNode tripNode = treeHelper.getChild(oldProgramNode, tripId); - boolean wasOpen = tripNode.isOpen(); - treeHelper.removeNode(tripNode); + } - if (wasOpen) { - openDataManager.closeProgram(oldProgramId); - openDataManager.openProgram(programId); - } + protected String chooseNewProgram(ContentUI<?> ui, String oldProgramId) { + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); - ObserveNode newTripNode = treeHelper.getChild(newProgramNode, tripId); + LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) + .getReferentialReferenceSet(ProgramDto.class) + .getReference(); - if (newTripNode == null) { + GearType gearType = getGearType(ui); - // create it - if (log.isInfoEnabled()) { - log.info("Insert trip node: "); - } - treeHelper.insertNode(newProgramNode, tripNode, positions.get(i)); - } - } + List<ReferenceDto> programs = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); - updateModelData(ui); + Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, + ProgramDto.class.getSimpleName()); - treeHelper.reloadNode(oldProgramNode, true); - treeHelper.reloadNode(newProgramNode, true); - treeHelper.selectNode(newProgramNode); + //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)); } - }); + } + + Object decoratedProgram = JOptionPane.showInputDialog(ui, "message", "title", + JOptionPane.QUESTION_MESSAGE, + null, + decoratedPrograms, + null); + return ((DecoratedProgram) decoratedProgram).getId(); + } + + protected void updateTree(ContentUI<?> ui, + ObserveNode oldProgramNode, + String oldProgramId, + String programId, + List<String> tripIds, + List<Integer> positions) { + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + ObserveNode rootNode = treeHelper.getRootNode(); + ObserveNode newProgramNode = treeHelper.getChild(rootNode, programId); + + + for (int i = 0, s = positions.size(); i < s; i++) { + + String tripId = tripIds.get(i); + ObserveNode tripNode = treeHelper.getChild(oldProgramNode, tripId); + boolean wasOpen = tripNode.isOpen(); + treeHelper.removeNode(tripNode); + + if (wasOpen) { + openDataManager.closeProgram(oldProgramId); + openDataManager.openProgram(programId); + } + + ObserveNode newTripNode = treeHelper.getChild(newProgramNode, tripId); + + if (newTripNode == null) { + + // create it + if (log.isInfoEnabled()) { + log.info("Insert trip node: "); + } + treeHelper.insertNode(newProgramNode, tripNode, positions.get(i)); + } + } + + updateModelData(ui); + + treeHelper.reloadNode(oldProgramNode, true); + treeHelper.reloadNode(newProgramNode, true); + treeHelper.selectNode(newProgramNode); } protected abstract void checkUIClass(ContentUI<?> ui) throws IllegalStateException; @@ -160,4 +200,23 @@ public abstract class MoveTripsUIAction extends AbstractUIAction { protected abstract void updateModelData(ContentUI<?> ui); + public static class DecoratedProgram { + + private final String id; + private final String label; + + public DecoratedProgram(String id, String label) { + this.id = id; + this.label = label; + } + + public String getId() { + return id; + } + + @Override + public String toString() { + return label; + } + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/TripSeinesUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/TripSeinesUI.jaxx index fe7952b..4904580 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/TripSeinesUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/TripSeinesUI.jaxx @@ -25,6 +25,7 @@ emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> + fr.ird.observe.services.dto.ReferenceDto fr.ird.observe.services.dto.seine.ActivitySeineDto fr.ird.observe.services.dto.seine.TripSeineDto fr.ird.observe.services.dto.seine.RouteDto -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.