This is an automated email from the git hooks/post-receive script. New commit to branch feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit 38b5700dd45a62f7f04d121064d8d3ea053f2751 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 1 19:09:05 2016 +0100 - ajout de la suppression de zone - probleme de rechargement de l'arbre quand on cache la racine - sélection de la zone créée (refs #7929) --- .../content/protocol/EditProtocolUIHandler.java | 6 +++ .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 1 + .../swing/content/protocol/zones/ZoneEditorUI.jcss | 7 ++- .../protocol/zones/ZoneEditorUIHandler.java | 30 ++++++++---- .../protocol/zones/actions/CreateZoneAction.java | 15 ++++++ .../protocol/zones/actions/DeleteZoneAction.java | 54 ++++++++++++++++++++++ .../protocol/zones/tree/StratasTreeModel.java | 14 ++++-- .../protocol/zones/tree/ZonesTreeModel.java | 14 +++--- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 10 files changed, 120 insertions(+), 23 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index 7ccba13..970952d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -53,6 +53,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHe import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellEditor; import fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpCellRenderer; import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; @@ -639,6 +640,11 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI getModel().setZone(new HashSet<>(zoneEditorUIModel.getZones())); zoneEditorUIModel.addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, evt -> getModel().setZone(new HashSet<>((Collection<Zone>) evt.getNewValue()))); + zoneEditorUIModel.addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, + evt -> { + Collection<StrataUIModel> newValue = (Collection<StrataUIModel>) evt.getNewValue(); + getModel().setValid(getModel().isValid() && newValue.isEmpty()); + }); //FIXME kmorin ecouter toutes les modifs sur le model d'editeur de zone // listenModelModifiy(zoneEditorUIModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx index bd4b528..e886452 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx @@ -25,6 +25,7 @@ <cell> <JToolBar id="zonesTreeToolBar"> <JButton id="createZone"/> + <JButton id="deleteZone"/> <JButton id="expandZonesTree"/> <JButton id="collapseZonesTree"/> </JToolBar> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss index c322086..6cb7019 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss @@ -2,7 +2,7 @@ JTree { autoscrolls: true; expandsSelectedPaths: true; scrollsOnExpand: true; - rootVisible: false; + //rootVisible: false; showsRootHandles: true; cellRenderer: {new ZoneEditorTreeCellRenderer()}; } @@ -16,6 +16,11 @@ JToolBar { _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CreateZoneAction.class}; } +#deleteZone { + actionIcon: delete; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.DeleteZoneAction.class}; +} + #expandZonesTree { actionIcon: expand; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.ExpandZonesTreeAction.class}; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java index 7918284..b103d12 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java @@ -16,6 +16,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StratasTreeModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZonesTreeModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.JAXXWidgetUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -63,7 +64,7 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); zonesTreeModel.updateStratas(zone, stratasToAdd, stratasToRemove); - zonesTreeModel.reload(); +// zonesTreeModel.reload(); } }; @@ -85,7 +86,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); zonesTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); - zonesTreeModel.reload(); } }; @@ -112,7 +112,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode StratasTreeModel stratasTreeModel = (StratasTreeModel) getUI().getAvailableStratasTree().getModel(); stratasTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); - stratasTreeModel.reload(); } }; @@ -176,9 +175,13 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode // get data initModel(); + + JAXXWidgetUtil.expandTree(availableStratasTree); + JAXXWidgetUtil.expandTree(zonesTree); } - public static void collapseTree(final JTree tree) { + //FIXME move to jaxx + public void collapseTree(final JTree tree) { SwingUtilities.invokeLater(new Runnable() { public void run() { int i = 0; @@ -232,13 +235,14 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode Collection<Strata> protocolStratas = zones.stream() .map(zone -> zone.getStrata()) .flatMap(stratas -> stratas.stream()) - .collect(Collectors.toSet()); + .collect(Collectors.toList()); + + if (log.isInfoEnabled()) { + log.info("protocol strata " + protocolStratas); + } protocolStratas.forEach(strata -> { - if (log.isInfoEnabled()) { - log.info("protocol strata " + strata); - } TuttiLocation strataLocation = strata.getLocation(); Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() @@ -246,6 +250,11 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode .map(subStrata -> subStrata.getLocation()) .collect(Collectors.toSet()); + + if (log.isInfoEnabled()) { + log.info("protocol strata " + strata.getLocation() + " " + subStrataLocations); + } + if (subStrataLocations.isEmpty()) { programStratasAndSubstratas.removeAll(strataLocation); @@ -290,6 +299,9 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode JTree zonesTree = getUI().getZonesTree(); ZonesTreeModel zonesTreeModel = (ZonesTreeModel) zonesTree.getModel(); + if (log.isInfoEnabled()) { + log.info("zones to remove" + zonesToRemove); + } zonesTreeModel.removeZones(zonesToRemove); zonesTreeModel.addZones(zonesToAdd); @@ -299,7 +311,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode zonesToAdd.forEach(zone -> zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, stratasChangeListener)); - zonesTreeModel.reload(); } protected void updateAvailableStratasTreeModel(Collection<StrataUIModel> stratasToAdd, @@ -321,7 +332,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode stratasToAdd.forEach(strata -> strata.addPropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, availableSubStratasChangeListener)); - availableStratasTreeModel.reload(); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java index 9be290a..d5780b8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java @@ -2,9 +2,15 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZoneNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZonesTreeModel; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.swing.JOptionPane; +import javax.swing.JTree; +import javax.swing.tree.TreePath; import static org.nuiton.i18n.I18n.t; @@ -14,6 +20,9 @@ import static org.nuiton.i18n.I18n.t; */ public class CreateZoneAction extends SimpleActionSupport<ZoneEditorUI> { + /** Logger. */ + private static final Log log = LogFactory.getLog(CreateZoneAction.class); + public CreateZoneAction(ZoneEditorUI zoneEditorUI) { super(zoneEditorUI); } @@ -27,6 +36,12 @@ public class CreateZoneAction extends SimpleActionSupport<ZoneEditorUI> { ZoneUIModel zone = new ZoneUIModel(); zone.setLabel(zoneLabel); zoneEditorUI.getModel().addZone(zone); + + //select newly created node + JTree zonesTree = zoneEditorUI.getZonesTree(); + ZoneNode zoneNode = ((ZonesTreeModel) zonesTree.getModel()).findZoneNode(zone); + TreePath path = new TreePath(zoneNode.getPath()); + zonesTree.setSelectionPath(path); } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/DeleteZoneAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/DeleteZoneAction.java new file mode 100644 index 0000000..3ae5235 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/DeleteZoneAction.java @@ -0,0 +1,54 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; + +import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZoneNode; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JOptionPane; +import javax.swing.JTree; +import javax.swing.tree.TreePath; + +import java.util.stream.Collectors; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class DeleteZoneAction extends SimpleActionSupport<ZoneEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DeleteZoneAction.class); + + public DeleteZoneAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + + JTree zonesTree = zoneEditorUI.getZonesTree(); + + if (zonesTree.getSelectionCount() >= 1) { + + int confirmDeletion = JOptionPane.showConfirmDialog(zoneEditorUI, t("tutti.zoneEditor.deleteZone.message")); + + if (confirmDeletion == JOptionPane.YES_OPTION) { + + TreePath[] selectionPaths = zonesTree.getSelectionPaths(); + for (TreePath selectedPath : selectionPaths) { + ZoneUIModel zone = ((ZoneNode) selectedPath.getPathComponent(1)).getZone(); + zoneEditorUI.getModel().removeStratasFromZone(zone.getStrata().stream() + .map(strata -> (StrataUIModel) strata) + .collect(Collectors.toSet())); + } + + } + } + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java index dc89aed..2e7de3e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java @@ -43,6 +43,7 @@ public class StratasTreeModel extends DefaultTreeModel { nodesToRemove.forEach(strataNode ->removeNodeFromParent(strataNode)); + nodeChanged(root); } public void addStratas(Collection<StrataUIModel> stratasToAdd) { @@ -52,13 +53,13 @@ public class StratasTreeModel extends DefaultTreeModel { stratasToAdd.forEach(strata -> { StrataNode strataNode = new StrataNode(strata); - insertNodeInto(strataNode, root, root.getChildCount()); + insertNodeInto(strataNode, root, 0); strata.getSubstrata().forEach(substrata -> { if (substrata != null) { SubStrataNode subStrataNode = new SubStrataNode((SubStrataUIModel) substrata); - insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + insertNodeInto(subStrataNode, strataNode, 0); } }); @@ -67,6 +68,7 @@ public class StratasTreeModel extends DefaultTreeModel { root.sortChildren(); + nodeChanged(root); } public void updateSubStratas(StrataUIModel strata, @@ -103,14 +105,16 @@ public class StratasTreeModel extends DefaultTreeModel { log.info("add strata " + subStrata.getLabel()); } - insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + insertNodeInto(subStrataNode, strataNode, 0); } strataNode.sortChildren(); + + nodeChanged(root); } - protected StrataNode findStrataNode(StrataUIModel strata) { + public StrataNode findStrataNode(StrataUIModel strata) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); @@ -128,7 +132,7 @@ public class StratasTreeModel extends DefaultTreeModel { return strataNode; } - protected SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { + public SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { Enumeration strataChildren = strataNode.children(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java index 158a167..5bdd816 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java @@ -55,7 +55,7 @@ public class ZonesTreeModel extends DefaultTreeModel { zonesToAdd.forEach(zone -> { ZoneNode zoneNode = new ZoneNode(zone); - insertNodeInto(zoneNode, root, root.getChildCount()); + insertNodeInto(zoneNode, root, 0); Set<StrataUIModel> stratasToAdd = zone.getStrata() @@ -104,7 +104,7 @@ public class ZonesTreeModel extends DefaultTreeModel { log.info("add strata " + strata.getLabel()); } - insertNodeInto(strataNode, zoneNode, zoneNode.getChildCount()); + insertNodeInto(strataNode, zoneNode, 0); Set<SubStrataUIModel> subStratasToAdd = strata.getSubstrata() .stream() @@ -151,14 +151,14 @@ public class ZonesTreeModel extends DefaultTreeModel { log.info("add strata " + subStrata.getLabel()); } - insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + insertNodeInto(subStrataNode, strataNode, 0); } strataNode.sortChildren(); } - protected ZoneNode findZoneNode(ZoneUIModel zone) { + public ZoneNode findZoneNode(ZoneUIModel zone) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); @@ -176,14 +176,14 @@ public class ZonesTreeModel extends DefaultTreeModel { return zoneNode; } - protected StrataNode findStrataNode(StrataUIModel strata, ZoneUIModel zone) { + public StrataNode findStrataNode(StrataUIModel strata, ZoneUIModel zone) { ZoneNode zoneNode = findZoneNode(zone); return findStrataNode(strata, zoneNode); } - protected StrataNode findStrataNode(StrataUIModel strata, ZoneNode zoneNode) { + public StrataNode findStrataNode(StrataUIModel strata, ZoneNode zoneNode) { Enumeration zoneChildren = zoneNode.children(); @@ -199,7 +199,7 @@ public class ZonesTreeModel extends DefaultTreeModel { return strataNode; } - protected SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { + public SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { Enumeration strataChildren = strataNode.children(); diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 046f523..4354fd8 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -2347,3 +2347,4 @@ tutti.vesselUseFeatureTable.table.header.key= tutti.vesselUseFeatureTable.table.header.value= tutti.vesselUseFeatureTable.title= tutti.zoneEditor.createZone.message= +tutti.zoneEditor.deleteZone.message= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 5005fdc..4f7c100 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -2172,3 +2172,4 @@ tutti.vesselUseFeatureTable.table.header.key=Caractéristique tutti.vesselUseFeatureTable.table.header.value=Valeur tutti.vesselUseFeatureTable.title=Autres paramètres tutti.zoneEditor.createZone.message=Libellé de la nouvelle zone +tutti.zoneEditor.deleteZone.message= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.