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 96cb83ef101777745771071303820cab1d1b5a6b Author: Kevin Morin <morin@codelutin.com> Date: Wed Nov 18 12:44:01 2015 +0100 ajout de l'action pour déplacer plusieurs actvités seine (refs #7623) --- .../src/main/filters/observe-ui.properties | 2 + .../observe/ObserveSwingApplicationContext.java | 2 + .../actions/shared/MoveActivitySeinesUIAction.java | 225 +++++++++++++++++++++ .../content/list/impl/seine/ActivitySeinesUI.css | 6 + .../content/list/impl/seine/ActivitySeinesUI.jaxx | 2 + 5 files changed, 237 insertions(+) diff --git a/observe-application-swing/src/main/filters/observe-ui.properties b/observe-application-swing/src/main/filters/observe-ui.properties index 3f62e54..466ce03 100644 --- a/observe-application-swing/src/main/filters/observe-ui.properties +++ b/observe-application-swing/src/main/filters/observe-ui.properties @@ -152,6 +152,8 @@ icon.action.move-trip=action-move-trips.png icon.action.move-trips=action-move-trips.png icon.action.move-route=action-move-routes.png icon.action.move-routes=action-move-routes.png +icon.action.move-activitySeine=action-move-activities.png +icon.action.move-activities=action-move-activities.png icon.action.translate=action-translate.png icon.action.application-reload=action-application-reload.png icon.action.report=action-report.png 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 422b4c7..a566e67 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 @@ -25,6 +25,7 @@ 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; @@ -913,6 +914,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im registerMainAction(actionMap, new MoveTripLonglinesUIAction(ui)); registerMainAction(actionMap, new MoveTripSeinesUIAction(ui)); registerMainAction(actionMap, new MoveRoutesUIAction(ui)); + registerMainAction(actionMap, new MoveActivitySeinesUIAction(ui)); } public void registerMainAction(ActionMap actionMap, AbstractUIAction action) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivitySeinesUIAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivitySeinesUIAction.java new file mode 100644 index 0000000..d117a50 --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/actions/shared/MoveActivitySeinesUIAction.java @@ -0,0 +1,225 @@ +/* + * #%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.seine.RouteDto; +import fr.ird.observe.services.service.seine.ActivitySeineService; +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.seine.ActivitySeinesUI; +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; +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 MoveActivitySeinesUIAction extends AbstractUIAction { + + private static final long serialVersionUID = 1L; + + /** + * Logger. + */ + private static final Log log = LogFactory.getLog(MoveActivitySeinesUIAction.class); + + public static final String ACTION_NAME = "moveActivities"; + + public MoveActivitySeinesUIAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + n("observe.action.move.activities"), + n("observe.action.move.activities.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 ActivitySeinesUI)) { + throw new IllegalStateException("Can not come here!"); + } + + // get current route id + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + ObserveNode oldActivitiesNode = treeHelper.getSelectedNode(); + ObserveNode oldRouteNode = oldActivitiesNode.getParent(); + String oldRouteId = oldRouteNode.getId(); + + // choose the new route + String routeId = chooseNewRoute(ui, oldRouteNode); + + if (routeId != null) { + // change the route of the selected activities + List<ReferenceDto> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); + List<String> activityIds = Lists.transform(selectedDatas, ReferenceDtos.getIdFunction()); + ActivitySeineService service = ObserveSwingApplicationContext.get().newService(ActivitySeineService.class); + List<Integer> positions = service.moveActivitySeinesToRoute(activityIds, routeId); + + // update the tree + updateTree(oldActivitiesNode, oldRouteId, routeId, activityIds, positions); + } + + } + }); + + } + + protected String chooseNewRoute(ContentUI<?> ui, ObserveNode oldRouteNode) { + ObserveNode routesNode = oldRouteNode.getParent(); + String oldRouteId = oldRouteNode.getId(); + int routeNb = routesNode.getChildCount(); + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, + RouteDto.class.getSimpleName()); + + //on crée un tableau avec une route en moins car on ne propose pas la route actuel + DecoratedRoute[] decoratedRoutes = new DecoratedRoute[routeNb - 1]; + + int j = 0; + for (int i = 0 ; i < routeNb ; i++) { + + ObserveNode routeNode = routesNode.getChildAt(i); + + String routeId = routeNode.getId(); + + if (!oldRouteId.equals(routeId)) { + decoratedRoutes[j++] = new DecoratedRoute(routeId, decorator.toString(((DtoNodeSupport) routeNode).getEntity())); + } + } + + Object decoratedRoute = JOptionPane.showInputDialog(ui, + t("observe.action.choose.route.message"), + t("observe.action.choose.route.title"), + JOptionPane.QUESTION_MESSAGE, + null, + decoratedRoutes, + null); + + return decoratedRoute != null ? ((DecoratedRoute) decoratedRoute).getId() : null; + } + + protected void updateTree(ObserveNode oldActivitiesNode, + String oldRouteId, + String routeId, + List<String> activitiyIds, + List<Integer> positions) { + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + + ObserveNode oldRouteNode = oldActivitiesNode.getParent(); + ObserveNode routesNode = oldRouteNode.getParent(); + ObserveNode tripNode = routesNode.getParent(); + ObserveNode newRouteNode = treeHelper.getChild(routesNode, routeId); + String activitiesNodeId = DecoratorService.getPropertyLabel(ObserveTreeHelper.TREE_NODE_PREFIX, + RouteDto.PROPERTY_ACTIVITY_SEINE); + ObserveNode newActivitiesNode = treeHelper.getChild(newRouteNode, activitiesNodeId); + + treeHelper.selectNode(newActivitiesNode); + + for (int i = 0, s = positions.size(); i < s; i++) { + + String actvityId = activitiyIds.get(i); + ObserveNode activityNode = treeHelper.getChild(oldActivitiesNode, actvityId); + boolean wasOpen = activityNode.isOpen(); + treeHelper.removeNode(activityNode); + + if (wasOpen) { + openDataManager.closeRoute(oldRouteId); + String tripSeineId = tripNode.getId(); + openDataManager.openRoute(tripSeineId, routeId); + } + + ObserveNode newActivityNode = treeHelper.getChild(newActivitiesNode, actvityId); + + if (newActivityNode == null) { + + // create it + if (log.isInfoEnabled()) { + log.info("Insert activity node: "); + } + treeHelper.insertNode(newActivitiesNode, activityNode, positions.get(i)); + } + } + + treeHelper.reloadNode(tripNode, true); + } + + public static class DecoratedRoute { + + private final String id; + private final String label; + + public DecoratedRoute(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/ActivitySeinesUI.css b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.css index 2f02d05..43e4f44 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.css +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.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:{MoveActivitySeinesUIAction.ACTION_NAME}; +} \ No newline at end of file diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.jaxx b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.jaxx index 0604942..1d23fe9 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.jaxx +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/content/list/impl/seine/ActivitySeinesUI.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.MoveActivitySeinesUIAction 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'> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.