This is an automated email from the git hooks/post-receive script. New commit to branch feature/7624 in repository observe. See http://git.codelutin.com/observe.git commit c46d642f5cf9b4d2c467c33aeb0e479e0a7f6933 Author: Kevin Morin <morin@codelutin.com> Date: Wed Nov 18 16:20:28 2015 +0100 ajout de l'action de déplacement des activités dans la liste (fixes #7624) --- .../observe/ObserveSwingApplicationContext.java | 10 +- .../shared/MoveActivityLonglinesUIAction.java | 205 +++++++++++++++++++++ .../list/impl/longline/ActivityLonglinesUI.css | 6 + .../list/impl/longline/ActivityLonglinesUI.jaxx | 2 + .../observe-application-swing_en_GB.properties | 7 + .../observe-application-swing_es_ES.properties | 7 + .../observe-application-swing_fr_FR.properties | 13 +- 7 files changed, 243 insertions(+), 7 deletions(-) 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 a566e67..4d1bba6 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 @@ -24,11 +24,8 @@ package fr.ird.observe; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import fr.ird.observe.db.DataContext; -import fr.ird.observe.ui.actions.shared.MoveActivitySeinesUIAction; -import fr.ird.observe.ui.actions.shared.MoveRoutesUIAction; -import fr.ird.observe.util.gps.GPSService; import fr.ird.observe.configuration.ObserveSwingApplicationConfig; +import fr.ird.observe.db.DataContext; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.db.constants.DbMode; import fr.ird.observe.db.event.ObserveSwingDataSourceEvent; @@ -70,6 +67,9 @@ 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.MoveActivityLonglinesUIAction; +import fr.ird.observe.ui.actions.shared.MoveActivitySeinesUIAction; +import fr.ird.observe.ui.actions.shared.MoveRoutesUIAction; import fr.ird.observe.ui.actions.shared.MoveTripLonglinesUIAction; import fr.ird.observe.ui.actions.shared.MoveTripSeinesUIAction; import fr.ird.observe.ui.actions.shared.ReOpenUIAction; @@ -79,6 +79,7 @@ import fr.ird.observe.ui.actions.shared.SelectNodeUIAction; import fr.ird.observe.ui.actions.shared.SelectOpenNodeUIAction; import fr.ird.observe.ui.content.ContentUI; import fr.ird.observe.ui.tree.ObserveTreeHelper; +import fr.ird.observe.util.gps.GPSService; import fr.ird.observe.validation.ObserveSwingValidator; import fr.ird.observe.validation.ValidationContext; import jaxx.runtime.JAXXUtil; @@ -915,6 +916,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im registerMainAction(actionMap, new MoveTripSeinesUIAction(ui)); registerMainAction(actionMap, new MoveRoutesUIAction(ui)); registerMainAction(actionMap, new MoveActivitySeinesUIAction(ui)); + registerMainAction(actionMap, new MoveActivityLonglinesUIAction(ui)); } public void registerMainAction(ActionMap actionMap, AbstractUIAction action) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivityLonglinesUIAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivityLonglinesUIAction.java new file mode 100644 index 0000000..14bed07 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivityLonglinesUIAction.java @@ -0,0 +1,205 @@ +/* + * #%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.longline.TripLonglineDto; +import fr.ird.observe.services.service.longline.ActivityLonglineService; +import fr.ird.observe.ui.DecoratorService; +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.content.list.impl.longline.ActivityLonglinesUI; +import fr.ird.observe.ui.tree.DtoNodeSupport; +import fr.ird.observe.ui.tree.ObserveNode; +import fr.ird.observe.ui.tree.ObserveTreeHelper; +import fr.ird.observe.ui.util.DecoratedNodeEntity; +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.List; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Action pour changer le programme d'une ou plusieurs marée dans la liste. + * + * @author Kevin Morin (Code Lutin) + * @since 5.0 + */ +public class MoveActivityLonglinesUIAction extends AbstractUIAction { + + private static final long serialVersionUID = 1L; + + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(MoveActivityLonglinesUIAction.class); + + public static final String ACTION_NAME = "moveActivityLonglines"; + + public MoveActivityLonglinesUIAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + n("observe.action.move.activities.longline"), + n("observe.action.move.activities.longline.tip"), + "move-activities" + ); + } + + @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); + } + + if (!(ui instanceof ActivityLonglinesUI)) { + throw new IllegalStateException("Can not come here!"); + } + + // get current triplongline id + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + ObserveNode oldActivitiesNode = treeHelper.getSelectedNode(); + ObserveNode oldTripLonglineNode = oldActivitiesNode.getParent(); + String oldTripLonglineId = oldTripLonglineNode.getId(); + + // choose the new tripLongline + String tripLonglineId = chooseNewTripLongline(ui, oldTripLonglineNode); + + if (tripLonglineId != null) { + // change the tripLongline of the selected activities + List<ReferenceDto> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); + List<String> activityIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); + ActivityLonglineService service = ObserveSwingApplicationContext.get().newService(ActivityLonglineService.class); + List<Integer> positions = service.moveActivityLonglinesToTripLongline(activityIds, tripLonglineId); + + // update the tree + updateTree(oldActivitiesNode, oldTripLonglineId, tripLonglineId, activityIds, positions); + } + + } + }); + + } + + protected String chooseNewTripLongline(ContentUI<?> ui, ObserveNode oldTripLonglineNode) { + ObserveNode programNode = oldTripLonglineNode.getParent(); + String oldTripLonglineId = oldTripLonglineNode.getId(); + int tripLonglineNb = programNode.getChildCount(); + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, + TripLonglineDto.class.getSimpleName()); + + //on crée un tableau avec une marée en moins car on ne propose pas la marée actuelle + DecoratedNodeEntity[] decoratedTripLonglines = new DecoratedNodeEntity[tripLonglineNb - 1]; + + int j = 0; + for (int i = 0 ; i < tripLonglineNb ; i++) { + + ObserveNode tripLonglineNode = programNode.getChildAt(i); + + String tripLonglineId = tripLonglineNode.getId(); + + if (!oldTripLonglineId.equals(tripLonglineId)) { + decoratedTripLonglines[j++] = new DecoratedNodeEntity((DtoNodeSupport) tripLonglineNode, decorator); + } + } + + Object decoratedTripLongline = JOptionPane.showInputDialog(ui, + t("observe.action.choose.tripLongline.message"), + t("observe.action.choose.tripLongline.title"), + JOptionPane.QUESTION_MESSAGE, + null, + decoratedTripLonglines, + null); + return decoratedTripLongline != null ? ((DecoratedNodeEntity) decoratedTripLongline).getId() : null; + } + + protected void updateTree(ObserveNode oldActivitiesNode, + String oldTripLonglineId, + String tripLonglineId, + List<String> activityIds, + List<Integer> positions) { + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + + ObserveNode oldTripLonglineNode = oldActivitiesNode.getParent(); + ObserveNode programNode = oldTripLonglineNode.getParent(); + ObserveNode newTripLonglineNode = treeHelper.getChild(programNode, tripLonglineId); + String activitiesNodeId = DecoratorService.getPropertyLabel(ObserveTreeHelper.TREE_NODE_PREFIX, + TripLonglineDto.PROPERTY_ACTIVITY_LONGLINE); + ObserveNode newActivitiesNode = treeHelper.getChild(newTripLonglineNode, activitiesNodeId); + + treeHelper.selectNode(newActivitiesNode); + + for (int i = 0, s = positions.size(); i < s; i++) { + + String activityId = activityIds.get(i); + ObserveNode activityNode = treeHelper.getChild(oldActivitiesNode, activityId); + boolean wasOpen = activityNode.isOpen(); + treeHelper.removeNode(activityNode); + + if (wasOpen) { + openDataManager.closeTripLongline(oldTripLonglineId); + openDataManager.openTripLongline(programNode.getId(), tripLonglineId); + } + + ObserveNode newRouteNode = treeHelper.getChild(newActivitiesNode, activityId); + + if (newRouteNode == null) { + + // create it + if (log.isInfoEnabled()) { + log.info("Insert activity node: "); + } + treeHelper.insertNode(newActivitiesNode, activityNode, positions.get(i)); + } + } + + treeHelper.reloadNode(programNode, true); + + } + +} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.css index 92a1322..e658969 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.css @@ -49,3 +49,9 @@ _text:{t("observe.action.closeAndCreate.activity")}; _toolTipText:{t("observe.action.closeAndCreate.activity.tip")}; } + +#moveSelectedChildren { + text:"observe.action.move.activities"; + toolTipText:"observe.action.move.activities.tip"; + _observeAction:{MoveActivityLonglinesUIAction.ACTION_NAME}; +} \ No newline at end of file diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx index d3316bc..2bd0c38 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx @@ -30,6 +30,7 @@ fr.ird.observe.ui.actions.shared.CloseAndCreateUIAction fr.ird.observe.ui.actions.shared.CloseOpenUIAction fr.ird.observe.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.ui.actions.shared.MoveActivityLonglinesUIAction static org.nuiton.i18n.I18n.n </import> @@ -51,6 +52,7 @@ <JButton id='gotoOpenChild' styleClass='gotoOpenActivity'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenActivity2'/> <JButton id='createChild'/> + <JButton id='moveSelectedChildren'/> <!-- extra actions --> <Table id='extraActions' fill="both" weightx="1" insets='2'> 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 93f97b3..edc7187 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 @@ -61,6 +61,8 @@ observe.action.choose.sensorUsed.exportData= observe.action.choose.sensorUsed.importData= observe.action.choose.tdr.exportData= observe.action.choose.tdr.importData= +observe.action.choose.tripLongline.message= +observe.action.choose.tripLongline.title= observe.action.choose.tripSeine.message= observe.action.choose.tripSeine.title= observe.action.close=Close @@ -289,6 +291,10 @@ observe.action.mitigationType.modify.tip= observe.action.mitigationType.save.tip= observe.action.modify=Modify observe.action.move.activities= +observe.action.move.activities.longline= +observe.action.move.activities.longline.tip= +observe.action.move.activities.seine= +observe.action.move.activities.seine.tip= observe.action.move.activities.tip= observe.action.move.actvities= observe.action.move.actvities.tip= @@ -1569,6 +1575,7 @@ observe.navigationMenu.closeTripAction= observe.navigationMenu.deleteRouteAction= observe.navigationMenu.deleteTripAction= observe.navigationMenu.move.activity= +observe.navigationMenu.move.activityLongline= observe.navigationMenu.move.activitySeine= observe.navigationMenu.move.route= observe.navigationMenu.move.trip= 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 a92dbfb..da2e158 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 @@ -61,6 +61,8 @@ observe.action.choose.sensorUsed.exportData= observe.action.choose.sensorUsed.importData= observe.action.choose.tdr.exportData= observe.action.choose.tdr.importData= +observe.action.choose.tripLongline.message= +observe.action.choose.tripLongline.title= observe.action.choose.tripSeine.message= observe.action.choose.tripSeine.title= observe.action.close=Cerrar @@ -289,6 +291,10 @@ observe.action.mitigationType.modify.tip= observe.action.mitigationType.save.tip= observe.action.modify=Modificar observe.action.move.activities= +observe.action.move.activities.longline= +observe.action.move.activities.longline.tip= +observe.action.move.activities.seine= +observe.action.move.activities.seine.tip= observe.action.move.activities.tip= observe.action.move.actvities= observe.action.move.actvities.tip= @@ -1571,6 +1577,7 @@ observe.navigationMenu.closeTripAction= observe.navigationMenu.deleteRouteAction= observe.navigationMenu.deleteTripAction= observe.navigationMenu.move.activity= +observe.navigationMenu.move.activityLongline= observe.navigationMenu.move.activitySeine= observe.navigationMenu.move.route= observe.navigationMenu.move.trip= 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 cf4f7e9..514d226 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 @@ -59,6 +59,8 @@ observe.action.choose.sensorUsed.exportData=Exporter le fichier de données observe.action.choose.sensorUsed.importData=Importer le fichier de données observe.action.choose.tdr.exportData=Exporter le fichier de données observe.action.choose.tdr.importData=Importer le fichier de données +observe.action.choose.tripLongline.message=A quelle marée voulez-vous associer les activités sélectionnées ? +observe.action.choose.tripLongline.title=Changer la marée des activités observe.action.choose.tripSeine.message=A quelle marée voulez-vous associer les routes sélectionnées ? observe.action.choose.tripSeine.title=Changer la marée des routes observe.action.close=Fermer @@ -286,8 +288,12 @@ 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.activities=Changer de route -observe.action.move.activities.tip=Changer la route des activités sélectionnées +observe.action.move.activities= +observe.action.move.activities.longline=Changer de marée +observe.action.move.activities.longline.tip=Changer la marée des activités sélectionnées +observe.action.move.activities.seine=Changer de route +observe.action.move.activities.seine.tip=Changer la route des activités sélectionnées +observe.action.move.activities.tip= observe.action.move.routes=Changer de marée observe.action.move.routes.tip=Changer la marée des routes sélectionnées observe.action.move.trips=Changer de programme @@ -1558,7 +1564,8 @@ observe.navigationMenu.closeTripAction=Clôturer la marée observe.navigationMenu.deleteRouteAction=Supprimer la route observe.navigationMenu.deleteTripAction=Supprimer la marée observe.navigationMenu.move.activity=Changer de route -observe.navigationMenu.move.activitySeine= +observe.navigationMenu.move.activityLongline=Changer de marée +observe.navigationMenu.move.activitySeine=Changer de route observe.navigationMenu.move.route=Changer de marée observe.navigationMenu.move.trip=Réallocation du programme observe.navigationMenu.noAction=< Aucune action définie > -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.