This is an automated email from the git hooks/post-receive script. New commit to branch feature/7623 in repository observe. See http://git.codelutin.com/observe.git commit a9e38e34e39682420549e7787b6c6aa98167d7ab Author: Kevin Morin <morin@codelutin.com> Date: Tue Nov 17 18:16:16 2015 +0100 refactoring des menus contextuels de l'arbre + ajout des menus sur les activites seines (refs #7623) --- .../tree/ObserveNavigationTreeShowPopupAction.java | 153 ++++----------------- .../java/fr/ird/observe/ui/tree/ObserveNode.java | 12 +- .../actions/ChangeActivityRouteActionListener.java | 102 ++++++++++++++ .../ui/tree/menu/MoveActivitySeineNodeData.java | 65 +++++++++ 4 files changed, 206 insertions(+), 126 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNavigationTreeShowPopupAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNavigationTreeShowPopupAction.java index 90f6379..cd0dc65 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNavigationTreeShowPopupAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNavigationTreeShowPopupAction.java @@ -22,30 +22,20 @@ package fr.ird.observe.ui.tree; * #L% */ -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Lists; import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.ObserveSwingDataSource; -import fr.ird.observe.services.dto.IdDtos; -import fr.ird.observe.services.dto.ReferenceDto; -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.dto.seine.TripSeineDto; -import fr.ird.observe.services.service.ReferentialService; -import fr.ird.observe.services.service.seine.TripSeineService; import fr.ird.observe.ui.content.ContentUI; import fr.ird.observe.ui.content.open.ContentOpenableUI; -import fr.ird.observe.ui.tree.actions.ChangeRouteTripActionListener; -import fr.ird.observe.ui.tree.actions.ChangeTripProgramActionListener; -import fr.ird.observe.ui.tree.actions.NodeChangeActionListener; +import fr.ird.observe.ui.tree.menu.MoveActivitySeineNodeData; +import fr.ird.observe.ui.tree.menu.MoveNodeData; +import fr.ird.observe.ui.tree.menu.MoveRouteNodeData; +import fr.ird.observe.ui.tree.menu.MoveTripNodeData; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; import javax.swing.JButton; import javax.swing.JMenuItem; @@ -61,9 +51,7 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.lang.reflect.Constructor; -import java.util.LinkedHashSet; -import java.util.List; +import java.util.Map; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -81,10 +69,12 @@ public class ObserveNavigationTreeShowPopupAction { private static final String TRIP_MENU_ITEMS = "trip"; private static final String ROUTE_MENU_ITEMS = "route"; + private static final String ACTIVITY_SEINE_MENU_ITEMS = "activitySeine"; static { n("observe.navigationMenu.move.trip"); n("observe.navigationMenu.move.route"); + n("observe.navigationMenu.move.activity"); } private final ObserveTreeHelper treeHelper; @@ -101,9 +91,9 @@ public class ObserveNavigationTreeShowPopupAction { private final JMenuItem moveAction; private final JMenuItem deleteAction; - private final ImmutableMap<String, NavigationPopupMenuItems> menuItemsByNodeType; + private final ImmutableMap<String, MoveNodeData> moveNodeDataByNodeType; - public ObserveNavigationTreeShowPopupAction(ObserveTreeHelper treeHelper, JScrollPane pane, JPopupMenu popup) { + public ObserveNavigationTreeShowPopupAction(final ObserveTreeHelper treeHelper, JScrollPane pane, JPopupMenu popup) { this.treeHelper = treeHelper; this.pane = pane; @@ -142,46 +132,9 @@ public class ObserveNavigationTreeShowPopupAction { this.moveAction = moveComponent; this.deleteAction = deleteActionComponent; - Function<String, List<ReferenceDto>> getProgramsFunction = new Function<String, List<ReferenceDto>>() { - - @Override - public List<ReferenceDto> apply(String nodeId) { - GearType gearType = IdDtos.isLonglineId(nodeId) ? GearType.longline : GearType.seine; - - ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); - - LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) - .getReferentialReferenceSet(ProgramDto.class) - .getReference(); - - List<ReferenceDto> result = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); - - return result; - } - }; - NavigationPopupMenuItems tripItems = new NavigationPopupMenuItems(ProgramDto.class, - ChangeTripProgramActionListener.class, - getProgramsFunction); - - Function<String, List<ReferenceDto>> getTripSeinesFunction = new Function<String, List<ReferenceDto>>() { - - @Override - public List<ReferenceDto> apply(String nodeId) { - - ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); - - LinkedHashSet<ReferenceDto> allTripSeine = applicationContext.newService(TripSeineService.class) - .getAllTripSeine() - .getReference(); - - return Lists.newArrayList(allTripSeine); - } - }; - NavigationPopupMenuItems routeItems = new NavigationPopupMenuItems(TripSeineDto.class, - ChangeRouteTripActionListener.class, - getTripSeinesFunction); - - menuItemsByNodeType = ImmutableMap.of(TRIP_MENU_ITEMS, tripItems, ROUTE_MENU_ITEMS, routeItems); + moveNodeDataByNodeType = ImmutableMap.of(TRIP_MENU_ITEMS, new MoveTripNodeData(), + ROUTE_MENU_ITEMS, new MoveRouteNodeData(), + ACTIVITY_SEINE_MENU_ITEMS, new MoveActivitySeineNodeData()); KeyAdapter keyAdapter = new KeyAdapter() { @Override @@ -317,6 +270,13 @@ public class ObserveNavigationTreeShowPopupAction { openAction.setEnabled(!dataContext.isOpenRoute()); closeAction.setEnabled(closeActionEnabled); + } else if (selectedNode.isActivitySeineNode()) { + + beforeOpenMenu(selectedNode, ACTIVITY_SEINE_MENU_ITEMS); + + openAction.setEnabled(!dataContext.isOpenActivitySeine()); + closeAction.setEnabled(closeActionEnabled); + } else { popup.add(noAction); @@ -328,7 +288,7 @@ public class ObserveNavigationTreeShowPopupAction { log.info("Will load popup for " + nodeType + " node."); } - NavigationPopupMenuItems items = menuItemsByNodeType.get(nodeType); + MoveNodeData moveNodeData = moveNodeDataByNodeType.get(nodeType); ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); @@ -350,48 +310,20 @@ public class ObserveNavigationTreeShowPopupAction { ObserveSwingDataSource dataSource = treeHelper.getDataProvider().getDataSource(); - List<ReferenceDto> parents = items.getGetParentsFunction().apply(id); + Map<String, String> possibleParentNodes = moveNodeData.getPossibleParentNodes(selectedNode, treeHelper); + for (String possibleParentId : possibleParentNodes.keySet()) { - Class<?> parentClass = items.getParentClass(); - String[] openIds = applicationContext.getDataContext().getOpenIds(parentClass); - String openParentId = openIds[openIds.length - 1]; + JMenuItem item = new JMenuItem(possibleParentNodes.get(possibleParentId)); + item.setName(possibleParentId); - Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, - parentClass.getSimpleName()); - for (ReferenceDto parent : parents) { - - String parentId = parent.getId(); - - if (!parentId.equals(openParentId)) { - - JMenuItem item = new JMenuItem(decorator.toString(parent)); - item.setName(parentId); - - try { - Constructor<? extends NodeChangeActionListener> actionListenerConstructor = - items.getChangeActionListenerClass().getConstructor(ObserveTreeHelper.class, - ObserveSwingDataSource.class, - String.class, - String.class); - - item.addActionListener(actionListenerConstructor.newInstance(treeHelper, - dataSource, - id, - parentId)); - - moveAction.add(item); - - } catch (ReflectiveOperationException e) { - if (log.isErrorEnabled()) { - log.error("error while creating the item listener", e); - } - } - - - } + item.addActionListener(moveNodeData.createChangeActionListener(treeHelper, + dataSource, + id, + possibleParentId)); + moveAction.add(item); } } else { @@ -441,31 +373,4 @@ public class ObserveNavigationTreeShowPopupAction { } - private class NavigationPopupMenuItems { - - private final Class<?> parentClass; - private final Class<? extends NodeChangeActionListener> changeActionListenerClass; - private final Function<String, List<ReferenceDto>> getParentsFunction; - - public NavigationPopupMenuItems(Class<?> parentClass, - Class<? extends NodeChangeActionListener> changeActionListenerClass, - Function<String, List<ReferenceDto>> getParentsFunction) { - this.parentClass = parentClass; - this.changeActionListenerClass = changeActionListenerClass; - this.getParentsFunction = getParentsFunction; - } - - public Class<?> getParentClass() { - return parentClass; - } - - public Class<? extends NodeChangeActionListener> getChangeActionListenerClass() { - return changeActionListenerClass; - } - - public Function<String, List<ReferenceDto>> getGetParentsFunction() { - return getParentsFunction; - } - } - } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNode.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNode.java index 5bb8f23..ab547b7 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNode.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/ObserveNode.java @@ -22,7 +22,9 @@ package fr.ird.observe.ui.tree; import fr.ird.observe.services.dto.OpenableDto; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import jaxx.runtime.swing.nav.tree.NavTreeNode; @@ -104,8 +106,14 @@ public class ObserveNode extends NavTreeNode<ObserveNode> { } public boolean isRouteNode() { - return isDataNode() && - (RouteDto.class.isAssignableFrom(internalClass)); + return isDataNode() && RouteDto.class.isAssignableFrom(internalClass); + } + + public boolean isActivitySeineNode() { + return isDataNode() && ActivitySeineDto.class.isAssignableFrom(internalClass); } + public boolean isActivityLonglineNode() { + return isDataNode() && ActivityLonglineDto.class.isAssignableFrom(internalClass); + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeActivityRouteActionListener.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeActivityRouteActionListener.java new file mode 100644 index 0000000..75c13eb --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/actions/ChangeActivityRouteActionListener.java @@ -0,0 +1,102 @@ +package fr.ird.observe.ui.tree.actions; + +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2015 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% + */ + + +import fr.ird.observe.ObserveSwingApplicationContext; +import fr.ird.observe.db.ObserveSwingDataSource; +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.tree.ObserveNode; +import fr.ird.observe.ui.tree.ObserveTreeHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 1/9/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.11 + */ +public class ChangeActivityRouteActionListener extends NodeChangeActionListener { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ChangeActivityRouteActionListener.class); + + public ChangeActivityRouteActionListener(ObserveTreeHelper treeHelper, + ObserveSwingDataSource dataSource, + String activityId, + String routeId) { + super(treeHelper, dataSource, activityId, routeId); + } + + @Override + protected ObserveNode getParentNode(ObserveNode node) { + return node.getParent().getParent(); + } + + @Override + protected ObserveNode getNewParentNode(ObserveNode grandParentNode, String parentNodeId) { + ObserveNode routeNode = getTreeHelper().getChild(grandParentNode, parentNodeId); + String activitiesNodeId = DecoratorService.getPropertyLabel(ObserveTreeHelper.TREE_NODE_PREFIX, + RouteDto.PROPERTY_ACTIVITY_SEINE); + ObserveNode activities = getTreeHelper().getChild(routeNode, activitiesNodeId); + return activities; + } + + @Override + protected void closeParent(String oldParentId) { + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + applicationContext.getOpenDataManager().closeRoute(oldParentId); + } + + @Override + protected int moveNodeToParent(String nodeId, String parentNodeId) { + int position; + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + + ActivitySeineService service = applicationContext.newService(ActivitySeineService.class); + position = service.moveActivitySeineToRoute(nodeId, parentNodeId); + + return position; + } + + @Override + protected void openParent(ObserveNode activitiesNode) { + + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + + ObserveNode routeNode = activitiesNode.getParent(); + String routeId = routeNode.getId(); + + ObserveNode routesNode = routeNode.getParent(); + ObserveNode tripNode = routesNode.getParent(); + String tripId = tripNode.getId(); + + applicationContext.getOpenDataManager().openRoute(tripId, routeId); + + getTreeHelper().reloadNode(tripNode, true); + } +} diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/menu/MoveActivitySeineNodeData.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/menu/MoveActivitySeineNodeData.java new file mode 100644 index 0000000..bfc508b --- /dev/null +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/tree/menu/MoveActivitySeineNodeData.java @@ -0,0 +1,65 @@ +package fr.ird.observe.ui.tree.menu; + +import fr.ird.observe.db.ObserveSwingDataSource; +import fr.ird.observe.services.dto.IdDtos; +import fr.ird.observe.services.dto.ReferenceDto; +import fr.ird.observe.services.dto.seine.RouteDto; +import fr.ird.observe.ui.DecoratorService; +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.tree.actions.ChangeActivityRouteActionListener; +import fr.ird.observe.ui.tree.actions.NodeChangeActionListener; +import org.nuiton.decorator.Decorator; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class MoveActivitySeineNodeData extends MoveNodeData { + + @Override + public NodeChangeActionListener createChangeActionListener(ObserveTreeHelper treeHelper, + ObserveSwingDataSource dataSource, + String id, + String parentId) { + return new ChangeActivityRouteActionListener(treeHelper, dataSource, id, parentId); + } + + @Override + public Map<String, String> getPossibleParentNodes(ObserveNode activitySeineNode, ObserveTreeHelper treeHelper) { + + // noeud de route parent + ObserveNode parentNode = activitySeineNode.getParent().getParent(); + + // noeud de route de la marée sans le parent actuel + Map<String, String> possibleParents = new LinkedHashMap<>(); + + // noeud de la marée + ObserveNode routesNode = parentNode.getParent(); + + DecoratorService decoratorService = treeHelper.getTreeCellRenderer().getDecoratorService(); + Decorator<ReferenceDto> routeDecorator = + decoratorService.getDecoratorByType(ReferenceDto.class, RouteDto.class.getSimpleName()); + + for (int i = 0, n = routesNode.getChildCount() ; i < n ; i++) { + + ObserveNode routeNode = routesNode.getChildAt(i); + String routeId = routeNode.getId(); + + // si le noeud de marée n'est pas le même que le parent actuel + if (!parentNode.equals(routeNode) + // si le noeud est bien un noeud de marée seine + && IdDtos.isRouteId(routeId)) { + + String decoratedRoute = routeDecorator.toString(((DtoNodeSupport) routeNode).getEntity()); + possibleParents.put(routeId, decoratedRoute); + } + } + + return possibleParents; + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.