This is an automated email from the git hooks/post-receive script. New commit to branch feature/7622 in repository observe. See http://git.codelutin.com/observe.git commit c622f514b8db26962a99a4e16a8a01c2d0bdb451 Author: Kevin Morin <morin@codelutin.com> Date: Mon Nov 16 16:36:05 2015 +0100 ajout des nouveaux menus sur les noeuds de route (refs #7622) --- .../tree/ObserveNavigationTreeShowPopupAction.java | 263 ++++++++++++++++----- 1 file changed, 210 insertions(+), 53 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 c4eb58c..04c80a3 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,7 +22,9 @@ 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.ObserveSwingDataSource; @@ -31,11 +33,17 @@ 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.tree.actions.ChangeRouteTripActionListener; import fr.ird.observe.ui.tree.actions.ChangeTripProgramActionListener; +import fr.ird.observe.ui.tree.actions.NodeChangeActionListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; +import org.nuiton.decorator.DecoratorUtil; +import org.nuiton.decorator.JXPathDecorator; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; @@ -50,6 +58,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; @@ -64,6 +73,9 @@ public class ObserveNavigationTreeShowPopupAction { /** Logger. */ private static final Log log = LogFactory.getLog(ObserveNavigationTreeShowPopupAction.class); + private static final String TRIP_MENU_ITEMS = "trip"; + private static final String ROUTE_MENU_ITEMS = "route"; + private final ObserveTreeHelper treeHelper; private final JScrollPane pane; @@ -72,13 +84,9 @@ public class ObserveNavigationTreeShowPopupAction { private final JTree tree; - private final JMenuItem moveTripPopup; - private final JMenuItem noAction; - private final JMenuItem openTripAction; - private final JMenuItem closeTripAction; - private final JMenuItem deleteTripAction; + private final ImmutableMap<String, NavigationPopupMenuItems> menuItemsByNodeType; public ObserveNavigationTreeShowPopupAction(ObserveTreeHelper treeHelper, JScrollPane pane, JPopupMenu popup) { @@ -87,20 +95,27 @@ public class ObserveNavigationTreeShowPopupAction { this.popup = popup; this.tree = treeHelper.getUI(); - JMenuItem moveTripComponent = null; JMenuItem noActionComponent = null; + // trip menus + JMenuItem moveTripComponent = null; JMenuItem openTripActionComponent = null; JMenuItem closeTripActionComponent = null; JMenuItem deleteTripActionComponent = null; + //route menus + JMenuItem moveRouteComponent = null; + JMenuItem openRouteActionComponent = null; + JMenuItem closeRouteActionComponent = null; + JMenuItem deleteRouteActionComponent = null; for (MenuElement menuElement : popup.getSubElements()) { - if (menuElement.getComponent().getName().equals("navigationMoveTripAction")) { - moveTripComponent = (JMenuItem) menuElement.getComponent(); - } if (menuElement.getComponent().getName().equals("navigationNoAction")) { noActionComponent = (JMenuItem) menuElement.getComponent(); } + // trip menus + if (menuElement.getComponent().getName().equals("navigationMoveTripAction")) { + moveTripComponent = (JMenuItem) menuElement.getComponent(); + } if (menuElement.getComponent().getName().equals("navigationOpenTripAction")) { openTripActionComponent = (JMenuItem) menuElement.getComponent(); } @@ -110,13 +125,69 @@ public class ObserveNavigationTreeShowPopupAction { if (menuElement.getComponent().getName().equals("navigationDeleteTripAction")) { deleteTripActionComponent = (JMenuItem) menuElement.getComponent(); } + // route menus + if (menuElement.getComponent().getName().equals("navigationMoveRouteAction")) { + moveRouteComponent = (JMenuItem) menuElement.getComponent(); + } + if (menuElement.getComponent().getName().equals("navigationOpenRouteAction")) { + openRouteActionComponent = (JMenuItem) menuElement.getComponent(); + } + if (menuElement.getComponent().getName().equals("navigationCloseRouteAction")) { + closeRouteActionComponent = (JMenuItem) menuElement.getComponent(); + } + if (menuElement.getComponent().getName().equals("navigationDeleteRouteAction")) { + deleteRouteActionComponent = (JMenuItem) menuElement.getComponent(); + } } - this.moveTripPopup = moveTripComponent; this.noAction = noActionComponent; - this.openTripAction = openTripActionComponent; - this.closeTripAction = closeTripActionComponent; - this.deleteTripAction = deleteTripActionComponent; + + 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(); + + return Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); + } + }; + NavigationPopupMenuItems tripItems = new NavigationPopupMenuItems(openTripActionComponent, + closeTripActionComponent, + moveTripComponent, + deleteTripActionComponent, + 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(openRouteActionComponent, + closeRouteActionComponent, + moveRouteComponent, + deleteRouteActionComponent, + TripSeineDto.class, + ChangeRouteTripActionListener.class, + getTripSeinesFunction); + + menuItemsByNodeType = ImmutableMap.of(TRIP_MENU_ITEMS, tripItems, ROUTE_MENU_ITEMS, routeItems); KeyAdapter keyAdapter = new KeyAdapter() { @Override @@ -229,71 +300,102 @@ public class ObserveNavigationTreeShowPopupAction { if (selectedNode.isTripNode()) { - if (log.isInfoEnabled()) { - log.info("Will load popup for trip node."); - } + beforeOpenMenu(selectedNode, TRIP_MENU_ITEMS); + + } else if (selectedNode.isRouteNode()) { + + beforeOpenMenu(selectedNode, ROUTE_MENU_ITEMS); + + } else { - ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + popup.add(noAction); + } + } - if (selectedNode.isOpen()) { + protected void beforeOpenMenu(ObserveNode selectedNode, String nodeType) { + if (log.isInfoEnabled()) { + log.info("Will load popup for " + nodeType + " node."); + } - closeTripAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); - popup.add(closeTripAction); + NavigationPopupMenuItems items = menuItemsByNodeType.get(nodeType); + JMenuItem openAction = items.getOpenAction(); + JMenuItem closeAction = items.getCloseAction(); + JMenuItem movePopup = items.getMovePopup(); + JMenuItem deleteAction = items.getDeleteAction(); - popup.add(moveTripPopup); + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); - moveTripPopup.removeAll(); + if (selectedNode.isOpen()) { - // get the available program for the trip + closeAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); + popup.add(closeAction); - String tripId = selectedNode.getId(); - GearType gearType = IdDtos.isLonglineId(tripId) ? GearType.longline : GearType.seine; + popup.add(movePopup); - ObserveSwingDataSource dataSource = treeHelper.getDataProvider().getDataSource(); + movePopup.removeAll(); - LinkedHashSet<ReferenceDto> allPrograms = applicationContext.newService(ReferentialService.class) - .getReferentialReferenceSet(ProgramDto.class) - .getReference(); - List<ReferenceDto> programs = Lists.newArrayList(ProgramDtos.filterReferencesByGearType(allPrograms, gearType)); + // get the available program for the trip - String openProgramId = applicationContext.getDataContext().getOpenProgramId(); + String id = selectedNode.getId(); - Decorator<ReferenceDto> programDecorator = applicationContext.getDecorator(ReferenceDto.class, - ProgramDto.class.getSimpleName()); - for (ReferenceDto program : programs) { + ObserveSwingDataSource dataSource = treeHelper.getDataProvider().getDataSource(); - String programId = program.getId(); + List<ReferenceDto> parents = items.getGetParentsFunction().apply(id); - if (!programId.equals(openProgramId)) { - JMenuItem item = new JMenuItem(programDecorator.toString(program)); - item.setName(programId); - item.addActionListener(new ChangeTripProgramActionListener(treeHelper, - dataSource, - tripId, - programId)); + Class<?> parentClass = items.getParentClass(); + String[] openIds = applicationContext.getDataContext().getOpenIds(parentClass); + String openParentId = openIds[openIds.length - 1]; - moveTripPopup.add(item); + Decorator<ReferenceDto> decorator = applicationContext.getDecorator(ReferenceDto.class, + parentClass.getSimpleName()); - } + DecoratorUtil.sort((JXPathDecorator<ReferenceDto>) decorator, parents, 0); - } + for (ReferenceDto parent : parents) { - } else { + String parentId = parent.getId(); - openTripAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); - popup.add(openTripAction); + 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)); + + movePopup.add(item); + + } catch (ReflectiveOperationException e) { + if (log.isErrorEnabled()) { + log.error("error while creating the item listener", e); + } + } - } - deleteTripAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); - deleteTripAction.setEnabled(selectedNode.isOpen()); - popup.add(deleteTripAction); + } + + } } else { - popup.add(noAction); + openAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); + popup.add(openAction); + } + + deleteAction.putClientProperty("ui", applicationContext.getSelectedContentUI()); + deleteAction.setEnabled(selectedNode.isOpen()); + popup.add(deleteAction); } protected boolean isRowSelected(int requiredRow) { @@ -331,4 +433,59 @@ public class ObserveNavigationTreeShowPopupAction { } + private class NavigationPopupMenuItems { + + private final JMenuItem openAction; + private final JMenuItem closeAction; + private final JMenuItem movePopup; + private final JMenuItem deleteAction; + private final Class<?> parentClass; + private final Class<? extends NodeChangeActionListener> changeActionListenerClass; + private final Function<String, List<ReferenceDto>> getParentsFunction; + + public NavigationPopupMenuItems(JMenuItem openAction, + JMenuItem closeAction, + JMenuItem movePopup, + JMenuItem deleteAction, + Class<?> parentClass, + Class<? extends NodeChangeActionListener> changeActionListenerClass, + Function<String, List<ReferenceDto>> getParentsFunction) { + this.openAction = openAction; + this.closeAction = closeAction; + this.movePopup = movePopup; + this.deleteAction = deleteAction; + this.parentClass = parentClass; + this.changeActionListenerClass = changeActionListenerClass; + this.getParentsFunction = getParentsFunction; + } + + public JMenuItem getCloseAction() { + return closeAction; + } + + public JMenuItem getDeleteAction() { + return deleteAction; + } + + public JMenuItem getMovePopup() { + return movePopup; + } + + public JMenuItem getOpenAction() { + return openAction; + } + + public Class<?> getParentClass() { + return parentClass; + } + + public Class<? extends NodeChangeActionListener> getChangeActionListenerClass() { + return changeActionListenerClass; + } + + public Function<String, List<ReferenceDto>> getGetParentsFunction() { + return getParentsFunction; + } + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.