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 e11cad851e1a47bdb500dbb5b774f841b83e616e Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 9 17:06:25 2015 +0100 déplacement des marées longline sélectionnées dans un dossier aléatoire (refs #7621) --- .../observe/ObserveSwingApplicationContext.java | 2 + .../ui/actions/shared/MoveTripsUIAction.java | 223 +++++++++++++++++++++ .../content/list/impl/longline/TripLonglinesUI.css | 12 ++ .../list/impl/longline/TripLonglinesUI.jaxx | 20 ++ .../list/impl/longline/TripLonglinesUIModel.java | 33 +++ .../actions/ChangeTripProgramActionListener.java | 1 - .../observe-application-swing_en_GB.properties | 4 + .../observe-application-swing_es_ES.properties | 4 + .../observe-application-swing_fr_FR.properties | 4 + .../v1/longline/TripLonglineServiceController.java | 7 + .../service/longline/TripLonglineService.java | 7 + .../service/longline/TripLonglineServiceTopia.java | 22 ++ 12 files changed, 338 insertions(+), 1 deletion(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java index 7cdd000..ded603a 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java @@ -68,6 +68,7 @@ import fr.ird.observe.ui.actions.shared.DeleteDataUIAction; import fr.ird.observe.ui.actions.shared.DeleteReferenceUIAction; import fr.ird.observe.ui.actions.shared.GoDownUIAction; import fr.ird.observe.ui.actions.shared.GoUpUIAction; +import fr.ird.observe.ui.actions.shared.MoveTripsUIAction; import fr.ird.observe.ui.actions.shared.ReOpenUIAction; import fr.ird.observe.ui.actions.shared.ResetEditUIAction; import fr.ird.observe.ui.actions.shared.SaveEditUIAction; @@ -907,6 +908,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im registerMainAction(actionMap, new SaveEditUIAction(ui)); registerMainAction(actionMap, new DeleteDataUIAction(ui)); registerMainAction(actionMap, new DeleteReferenceUIAction(ui)); + registerMainAction(actionMap, new MoveTripsUIAction(ui)); } public void registerMainAction(ActionMap actionMap, AbstractUIAction action) { 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 new file mode 100644 index 0000000..1ade193 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveTripsUIAction.java @@ -0,0 +1,223 @@ +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +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.ReferenceDto; +import fr.ird.observe.services.dto.ReferenceDtos; +import fr.ird.observe.services.dto.constants.GearType; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; +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.services.service.longline.TripLonglineService; +import fr.ird.observe.ui.ObserveMainUI; +import fr.ird.observe.ui.content.ContentUI; +import fr.ird.observe.ui.content.list.impl.longline.ActivityLonglinesUI; +import fr.ird.observe.ui.content.list.impl.longline.TripLonglinesUI; +import fr.ird.observe.ui.content.list.impl.longline.TripLonglinesUIModel; +import fr.ird.observe.ui.content.open.impl.longline.ActivityLonglineUI; +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 javax.swing.JComponent; +import javax.swing.JTree; +import javax.swing.SwingUtilities; +import javax.swing.tree.TreePath; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Random; + +import static org.nuiton.i18n.I18n.n; + +/** + * Action pour fermer l'objet sous-jacent à l'écran. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 1.4 + */ +public class MoveTripsUIAction extends AbstractUIAction { + + private static final long serialVersionUID = 1L; + + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(MoveTripsUIAction.class); + + public static final String ACTION_NAME = "moveTrips"; + + public MoveTripsUIAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + n("observe.action.move.trips"), + n("observe.action.move.trips.tip"), + "close" + ); + } + + @Override + public void actionPerformed(final ActionEvent e) { + + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + JComponent c = (JComponent) e.getSource(); + ContentUI<?> ui = (ContentUI<?>) + c.getClientProperty("ui"); + if (ui == null) { + throw new IllegalStateException( + "could not find client property " + + "ui on component" + c); + } + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + + if (ui instanceof TripLonglinesUI) { + + // cas particulier pour l'écran des marées longline + + LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) + .getReferentialReferenceSet(ProgramDto.class) + .getReference(); + + List<ReferenceDto> programs = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, GearType.longline)); + +// int programIndex = JOptionPane.showOptionDialog(ui, "mesage", "test", +// JOptionPane.OK_CANCEL_OPTION, +// JOptionPane.QUESTION_MESSAGE, +// null, +// programs.toArray(new ReferenceDto[programs.size()]), +// null); + int programIndex = new Random().nextInt(programs.size()); + + ReferenceDto program = programs.get(programIndex); + String programId = program.getId(); + + TripLonglinesUI tripLonglinesUI = (TripLonglinesUI) ui; + TripLonglinesUIModel model = tripLonglinesUI.getModel(); + List<ReferenceDto> selectedDatas = model.getSelectedDatas(); + + ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + + ObserveNode oldProgramNode = treeHelper.getSelectedNode(); + String oldProgramId = oldProgramNode.getId(); + + ObserveNode rootNode = treeHelper.getRootNode(); + ObserveNode newProgramNode = treeHelper.getChild(rootNode, programId); + + List<String> tripIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); + TripLonglineService service = applicationContext.newService(TripLonglineService.class); + List<Integer> positions = service.moveTripLonglinesToProgram(tripIds, 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)); + } + } + + List<ReferenceDto> data = new ArrayList<>(model.getData()); + data.removeAll(model.getSelectedDatas()); + model.setData(data); + + treeHelper.reloadNode(oldProgramNode, true); + treeHelper.reloadNode(newProgramNode, true); + treeHelper.selectNode(newProgramNode); + + return; + } + + if (ui instanceof ActivityLonglinesUI) { + + // cas particulier pour l'écran des activités + + JTree tree = getMainUI().getNavigation(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + + // recuperation du noeud courant (activitys) + ObserveNode node = treeHelper.getSelectedNode(); + + boolean wasCollapsed = isOpenActivityNodeCollapsed( + tree, + treeHelper, + getMainUI().getDataContext() + ); + + // selection du noeud de l'activity ouverte + treeHelper.selectOpenNode(getMainUI(), ActivityLonglineDto.class); + + // on conserve le path de l'activity + TreePath path = tree.getSelectionPath(); + + // recuperation de l'écran associé + ActivityLonglineUI selectedUI = (ActivityLonglineUI) + ObserveSwingApplicationContext.get().getSelectedContentUI(); + + // fermeture de l'activity + selectedUI.closeData(); + + if (wasCollapsed) { + + // on ferme le noeud de l'activity (qui a ete ouvert + // lors de la selection de celle-ci) + tree.collapsePath(path); + } + + // retour sur le noeud des activitys + treeHelper.selectNode(node); + + return; + } + + throw new IllegalStateException("Can not come here!"); + } + }); + + } + +} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.css index 9403431..2856efb 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.css @@ -20,14 +20,20 @@ * #L% */ +#listSelectionModel { + selectionMode:{ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}; +} + #gotoSelectedChild { _text:{t("observe.action.goto.selected.maree")}; _toolTipText:{t("observe.action.goto.selected.maree.tip")}; + enabled:{model.getSelectedDatas() != null && model.getSelectedDatas().size() == 1}; } #reopenChild { _text:{t("observe.action.reopen.selected.maree")}; _toolTipText:{t("observe.action.reopen.selected.maree.tip")}; + enabled:{model.getSelectedDatas() != null && model.getSelectedDatas().size() == 1}; } #createChild { @@ -35,4 +41,10 @@ toolTipText:"observe.action.create.maree.tip"; } +#moveSelectedTrips { + text:"observe.action.move.trips"; + toolTipText:"observe.action.move.trips.tip"; + enabled:{model.getSelectedDatas() != null}; + _observeAction:{MoveTripsUIAction.ACTION_NAME}; +} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.jaxx index 5256c29..1f38e94 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUI.jaxx @@ -24,16 +24,30 @@ emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> + fr.ird.observe.services.dto.ReferenceDto fr.ird.observe.services.dto.longline.ActivityLonglineDto fr.ird.observe.services.dto.longline.TripLonglineDto fr.ird.observe.services.dto.referential.ProgramDto fr.ird.observe.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.ui.actions.shared.MoveTripsUIAction + + java.util.List + + javax.swing.ListSelectionModel static org.nuiton.i18n.I18n.n </import> <style source="CommonListUI.css"/> + <script><![CDATA[ + +public final List<ReferenceDto> getSelectedDatas() { + return (List<ReferenceDto>) list.getSelectedValuesList(); +} + +]]></script> + <!-- handler --> <TripLonglinesUIHandler id='handler' constructorParams='this'/> @@ -43,6 +57,9 @@ <!-- edit bean --> <ProgramDto id='bean'/> + <ListSelectionModel id='listSelectionModel' + onValueChanged='if (!event.getValueIsAdjusting()) getModel().setSelectedDatas(getSelectedDatas());'/> + <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> @@ -59,6 +76,9 @@ <cell> <JButton id='gotoOpenActivity2' styleClass='gotoOpenActivity2'/> </cell> + <cell> + <JButton id='moveSelectedTrips'/> + </cell> </row> </Table> diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUIModel.java index c704361..a3be385 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/TripLonglinesUIModel.java @@ -22,9 +22,14 @@ package fr.ird.observe.ui.content.list.impl.longline; * #L% */ +import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.ui.content.list.ContentListUIModel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.List; /** * Created on 9/26/14. @@ -36,8 +41,36 @@ public class TripLonglinesUIModel extends ContentListUIModel<ProgramDto, TripLon private static final long serialVersionUID = 1L; + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(TripLonglinesUIModel.class); + + public static final String PROPERTY_SELECTED_DATAS = "selectedDatas"; + + /** entité sélectionnée dans la liste */ + protected List<ReferenceDto> selectedDatas; + public TripLonglinesUIModel() { super(ProgramDto.class, TripLonglineDto.class); } + public List<ReferenceDto> getSelectedDatas() { + return selectedDatas; + } + + public void setSelectedDatas(List<ReferenceDto> selectedDatas) { + List<ReferenceDto> old = getSelectedDatas(); + this.selectedDatas = selectedDatas; + if (log.isDebugEnabled()) { + log.debug("New selected datas : " + selectedDatas); + } + firePropertyChange(PROPERTY_SELECTED_DATAS, old, selectedDatas); + } + + @Override + public void setData(List<ReferenceDto> data) { + super.setData(data); + setSelectedDatas(null); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeTripProgramActionListener.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeTripProgramActionListener.java index 02d2f6f..cdf5587 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeTripProgramActionListener.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeTripProgramActionListener.java @@ -80,7 +80,6 @@ public class ChangeTripProgramActionListener implements ActionListener { int position; - if (IdDtos.isTripLonglineId(tripId)) { TripLonglineService service = applicationContext.newService(TripLonglineService.class); position = service.moveTripLonglineToProgram(tripId, programId); diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties index 714463d..bf26992 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_en_GB.properties @@ -280,6 +280,10 @@ observe.action.mitigationType.detail.tip= observe.action.mitigationType.modify.tip= observe.action.mitigationType.save.tip= observe.action.modify=Modify +observe.action.move.maree= +observe.action.move.maree.tip= +observe.action.move.trips= +observe.action.move.trips.tip= observe.action.new.entry=Add observe.action.new.entry.tip= observe.action.objectFate.create.tip= diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties index b237af9..9faa438 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_es_ES.properties @@ -280,6 +280,10 @@ observe.action.mitigationType.detail.tip= observe.action.mitigationType.modify.tip= observe.action.mitigationType.save.tip= observe.action.modify=Modificar +observe.action.move.maree= +observe.action.move.maree.tip= +observe.action.move.trips= +observe.action.move.trips.tip= observe.action.new.entry=Nuevo observe.action.new.entry.tip=Crear una nueva entrada observe.action.objectFate.create.tip=Crear un nuevo devenir de objeto diff --git a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties index 83e1f91..6772b97 100644 --- a/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties +++ b/observe-application-swing/src/main/resources/i18n/observe-application-swing_fr_FR.properties @@ -280,6 +280,10 @@ observe.action.mitigationType.detail.tip=Voir les détails du type de mesure d'a observe.action.mitigationType.modify.tip=Modifier le type de mesure d'atténuation sélectionné observe.action.mitigationType.save.tip=Sauver les modifications du type de mesure d'atténuation observe.action.modify=Modifier +observe.action.move.maree= +observe.action.move.maree.tip= +observe.action.move.trips= +observe.action.move.trips.tip= observe.action.new.entry=Nouveau observe.action.new.entry.tip=Créer une nouvelle entrée observe.action.objectFate.create.tip=Créer un nouveau devenir objet diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java index 4f66c33..e837d57 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/longline/TripLonglineServiceController.java @@ -31,6 +31,8 @@ import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.longline.TripLonglineService; +import java.util.List; + /** * @author Sylvain Bavencoff - bavencoff@codelutin.com */ @@ -104,4 +106,9 @@ public class TripLonglineServiceController extends ObserveAuthenticatedServiceCo public int moveTripLonglineToProgram(String tripLonglineId, String programId) { return service.moveTripLonglineToProgram(tripLonglineId, programId); } + + @Override + public List<Integer> moveTripLonglinesToProgram(List<String> tripLonglineIds, String programId) { + return service.moveTripLonglinesToProgram(tripLonglineIds, programId); + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java index 45b37f5..3c5e492 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/longline/TripLonglineService.java @@ -35,6 +35,8 @@ import fr.ird.observe.services.spi.ReadDataPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteDataPermission; +import java.util.List; + /** * @author Sylvain Bavencoff - bavencoff@codelutin.com */ @@ -85,4 +87,9 @@ public interface TripLonglineService extends ObserveService { @PostRequest int moveTripLonglineToProgram(String tripLonglineId, String programId); + @Write + @WriteDataPermission + @PostRequest + List<Integer> moveTripLonglinesToProgram(List<String> tripLonglineIds, String programId); + } \ No newline at end of file diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java index 440325f..a7c7691 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/longline/TripLonglineServiceTopia.java @@ -42,6 +42,7 @@ import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.result.SaveResultDtos; import org.nuiton.util.DateUtil; +import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.LinkedHashSet; @@ -224,4 +225,25 @@ public class TripLonglineServiceTopia extends ObserveServiceTopia implements Tri return getTripLonglinePositionInProgram(programId, tripLonglineId); } + + @Override + public List<Integer> moveTripLonglinesToProgram(List<String> tripLonglineIds, String programId) { + Program program = loadEntity(ProgramDto.class, Program.class, programId); + + List<Integer> result = new ArrayList<>(); + ObserveTopiaPersistenceContext persistenceContext = serviceContext.getTopiaPersistenceContext(); + + for (String tripLonglineId : tripLonglineIds) { + + TripLongline tripLongline = loadEntity(TripLonglineDto.class, TripLongline.class, tripLonglineId); + tripLongline.setProgram(program); + + saveEntity(TripLongline.class, tripLongline); + persistenceContext.flush(); + + result.add(getTripLonglinePositionInProgram(programId, tripLonglineId)); + } + + return result; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.