This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 5763e70102e6218084f3192c26dac5927af67658 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 14:36:07 2016 +0100 tri des noeuds + i18n (refs #7929) --- .../content/protocol/EditProtocolUIHandler.java | 4 +++ .../content/protocol/zones/ZoneEditorUIModel.java | 19 ++++++++++++++ .../protocol/zones/actions/CreateZoneAction.java | 8 ++++-- .../protocol/zones/actions/DeleteZoneAction.java | 29 ++++++++++++--------- .../zones/tree/AbstractZoneEditorTreeModel.java | 25 ++++++++++++++++++ .../protocol/zones/tree/StratasTreeModel.java | 30 +++------------------- .../protocol/zones/tree/ZoneEditorNode.java | 19 ++++++++++++++ .../protocol/zones/tree/ZonesTreeModel.java | 30 +++------------------- .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 ++- 10 files changed, 103 insertions(+), 67 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 970952d..1082106 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 @@ -643,8 +643,12 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI zoneEditorUIModel.addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, evt -> { Collection<StrataUIModel> newValue = (Collection<StrataUIModel>) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("newValue " + newValue); + } getModel().setValid(getModel().isValid() && newValue.isEmpty()); }); + getModel().setValid(getModel().isValid() && zoneEditorUIModel.getAvailableStratas().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/ZoneEditorUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java index 17ca15a..a2069e4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -90,7 +91,25 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public void removeZone(ZoneUIModel zone) { Object oldValue = new ArrayList<>(getZones()); + + removeStratasFromZone(zone.getStrata().stream() + .map(strata -> (StrataUIModel) strata) + .collect(Collectors.toSet())); zones.remove(zone); + + firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); + } + + public void removeAllZones(Collection<ZoneUIModel> zones) { + Object oldValue = new ArrayList<>(getZones()); + + removeStratasFromZone(zones.stream() + .map(zone -> zone.getStrata()) + .flatMap(s -> s.stream()) + .map(strata -> (StrataUIModel) strata) + .collect(Collectors.toSet())); + this.zones.removeAll(zones); + firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); } 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 d5780b8..72a4e02 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 @@ -5,6 +5,7 @@ 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.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -30,9 +31,12 @@ public class CreateZoneAction extends SimpleActionSupport<ZoneEditorUI> { @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - String zoneLabel = JOptionPane.showInputDialog(t("tutti.zoneEditor.createZone.message")); + String zoneLabel = JOptionPane.showInputDialog(zoneEditorUI, + t("tutti.zoneEditor.createZone.message"), + t("tutti.zoneEditor.createZone.title"), + JOptionPane.QUESTION_MESSAGE); - if (zoneLabel != null) { + if (StringUtils.isNotEmpty(zoneLabel)) { ZoneUIModel zone = new ZoneUIModel(); zone.setLabel(zoneLabel); zoneEditorUI.getModel().addZone(zone); 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 index 3ae5235..68c6d03 100644 --- 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 @@ -1,18 +1,18 @@ 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.lang3.StringUtils; 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 java.util.HashSet; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -36,18 +36,23 @@ public class DeleteZoneAction extends SimpleActionSupport<ZoneEditorUI> { if (zonesTree.getSelectionCount() >= 1) { - int confirmDeletion = JOptionPane.showConfirmDialog(zoneEditorUI, t("tutti.zoneEditor.deleteZone.message")); + Set<ZoneUIModel> zonesToDelete = new HashSet<>(); + TreePath[] selectionPaths = zonesTree.getSelectionPaths(); + for (TreePath selectedPath : selectionPaths) { + ZoneUIModel zone = ((ZoneNode) selectedPath.getPathComponent(1)).getZone(); + zonesToDelete.add(zone); + } - if (confirmDeletion == JOptionPane.YES_OPTION) { + String zonesToDeleteListItems = "<li>" + StringUtils.join(zonesToDelete, "</li><li>") + "</li>"; - 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())); - } + int confirmDeletion = JOptionPane.showConfirmDialog(zoneEditorUI, + t("tutti.zoneEditor.deleteZone.message", zonesToDeleteListItems), + t("tutti.zoneEditor.deleteZone.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + if (confirmDeletion == JOptionPane.YES_OPTION) { + zoneEditorUI.getModel().removeAllZones(zonesToDelete); } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/AbstractZoneEditorTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/AbstractZoneEditorTreeModel.java new file mode 100644 index 0000000..b1617cd --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/AbstractZoneEditorTreeModel.java @@ -0,0 +1,25 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.tree.DefaultTreeModel; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public abstract class AbstractZoneEditorTreeModel extends DefaultTreeModel { + + /** Logger. */ + private static final Log log = LogFactory.getLog(AbstractZoneEditorTreeModel.class); + + public AbstractZoneEditorTreeModel() { + super(new ZoneEditorNode()); + } + + public void addNode(ZoneEditorNode newChild, ZoneEditorNode parent) { + int index = parent.getFutureNodePosition(newChild); + insertNodeInto(newChild, parent, index); + } +} 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 2e7de3e..1b9838c 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 @@ -7,7 +7,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; import java.util.Collection; import java.util.Enumeration; import java.util.HashSet; @@ -16,15 +15,11 @@ import java.util.HashSet; * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class StratasTreeModel extends DefaultTreeModel { +public class StratasTreeModel extends AbstractZoneEditorTreeModel { /** Logger. */ private static final Log log = LogFactory.getLog(StratasTreeModel.class); - public StratasTreeModel() { - super(new ZoneEditorNode()); - } - public void removeStratas(Collection<StrataUIModel> stratasToRemove) { ZoneEditorNode root = (ZoneEditorNode) getRoot(); @@ -42,8 +37,6 @@ public class StratasTreeModel extends DefaultTreeModel { } nodesToRemove.forEach(strataNode ->removeNodeFromParent(strataNode)); - - nodeChanged(root); } public void addStratas(Collection<StrataUIModel> stratasToAdd) { @@ -53,22 +46,19 @@ public class StratasTreeModel extends DefaultTreeModel { stratasToAdd.forEach(strata -> { StrataNode strataNode = new StrataNode(strata); - insertNodeInto(strataNode, root, 0); + addNode(strataNode, root); strata.getSubstrata().forEach(substrata -> { if (substrata != null) { SubStrataNode subStrataNode = new SubStrataNode((SubStrataUIModel) substrata); - insertNodeInto(subStrataNode, strataNode, 0); + addNode(subStrataNode, strataNode); } }); }); - root.sortChildren(); - - nodeChanged(root); } public void updateSubStratas(StrataUIModel strata, @@ -90,10 +80,6 @@ public class StratasTreeModel extends DefaultTreeModel { SubStrataNode subStrataNode = findSubStrataNode(subStrata, strataNode); - if (log.isInfoEnabled()) { - log.info("remove subStrata " + subStrata.getLabel()); - } - removeNodeFromParent(subStrataNode); } @@ -101,17 +87,9 @@ public class StratasTreeModel extends DefaultTreeModel { SubStrataNode subStrataNode = new SubStrataNode(subStrata); - if (log.isInfoEnabled()) { - log.info("add strata " + subStrata.getLabel()); - } - - insertNodeInto(subStrataNode, strataNode, 0); + addNode(subStrataNode, strataNode); } - - strataNode.sortChildren(); - - nodeChanged(root); } public StrataNode findStrataNode(StrataUIModel strata) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java index 519538a..43e113a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java @@ -1,7 +1,12 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import javax.swing.tree.DefaultMutableTreeNode; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -9,6 +14,9 @@ import java.util.Collections; */ public class ZoneEditorNode extends DefaultMutableTreeNode implements Comparable { + /** Logger. */ + private static final Log log = LogFactory.getLog(ZoneEditorNode.class); + public ZoneEditorNode() { super(); } @@ -23,6 +31,17 @@ public class ZoneEditorNode extends DefaultMutableTreeNode implements Comparable } } + public int getFutureNodePosition(ZoneEditorNode node) { + if (children == null) { + return 0; + } + + List<ZoneEditorNode> orderedChildren = new ArrayList<>(children); + orderedChildren.add(node); + Collections.sort(orderedChildren); + return orderedChildren.indexOf(node); + } + @Override public int compareTo(Object o) { if (o == null) { 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 5bdd816..2072ed3 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 @@ -8,7 +8,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; @@ -20,15 +19,11 @@ import java.util.stream.Collectors; * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class ZonesTreeModel extends DefaultTreeModel { +public class ZonesTreeModel extends AbstractZoneEditorTreeModel { /** Logger. */ private static final Log log = LogFactory.getLog(ZonesTreeModel.class); - public ZonesTreeModel() { - super(new ZoneEditorNode()); - } - public void removeZones(Collection<ZoneUIModel> zonesToRemove) { ZoneEditorNode root = (ZoneEditorNode) getRoot(); @@ -55,8 +50,7 @@ public class ZonesTreeModel extends DefaultTreeModel { zonesToAdd.forEach(zone -> { ZoneNode zoneNode = new ZoneNode(zone); - insertNodeInto(zoneNode, root, 0); - + addNode(zoneNode, root); Set<StrataUIModel> stratasToAdd = zone.getStrata() .stream() @@ -67,8 +61,6 @@ public class ZonesTreeModel extends DefaultTreeModel { }); - root.sortChildren(); - } public void updateStratas(ZoneUIModel zone, @@ -100,11 +92,7 @@ public class ZonesTreeModel extends DefaultTreeModel { StrataNode strataNode = new StrataNode(strata); - if (log.isInfoEnabled()) { - log.info("add strata " + strata.getLabel()); - } - - insertNodeInto(strataNode, zoneNode, 0); + addNode(strataNode, zoneNode); Set<SubStrataUIModel> subStratasToAdd = strata.getSubstrata() .stream() @@ -114,7 +102,6 @@ public class ZonesTreeModel extends DefaultTreeModel { updateSubStratas(strataNode, subStratasToAdd, Collections.emptySet()); } - zoneNode.sortChildren(); } public void updateSubStratas(StrataUIModel strata, @@ -136,10 +123,6 @@ public class ZonesTreeModel extends DefaultTreeModel { SubStrataNode subStrataNode = findSubStrataNode(subStrata, strataNode); - if (log.isInfoEnabled()) { - log.info("remove subStrata " + subStrata.getLabel()); - } - removeNodeFromParent(subStrataNode); } @@ -147,15 +130,10 @@ public class ZonesTreeModel extends DefaultTreeModel { SubStrataNode subStrataNode = new SubStrataNode(subStrata); - if (log.isInfoEnabled()) { - log.info("add strata " + subStrata.getLabel()); - } - - insertNodeInto(subStrataNode, strataNode, 0); + addNode(subStrataNode, strataNode); } - strataNode.sortChildren(); } public ZoneNode findZoneNode(ZoneUIModel zone) { 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 49fdf33..fbbfe97 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 @@ -2348,4 +2348,6 @@ tutti.vesselUseFeatureTable.table.header.key= tutti.vesselUseFeatureTable.table.header.value= tutti.vesselUseFeatureTable.title= tutti.zoneEditor.createZone.message= +tutti.zoneEditor.createZone.title= tutti.zoneEditor.deleteZone.message= +tutti.zoneEditor.deleteZone.title= 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 2b4d7db..1a9038a 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 @@ -2173,4 +2173,6 @@ 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= +tutti.zoneEditor.createZone.title=Nouvelle zone +tutti.zoneEditor.deleteZone.message=<html><div>Vous êtes sur le point de supprimer les zones suivantes \:</div><ul>%s</ul><div>Êtes-vous sûr de vouloir les supprimer ?</div></html> +tutti.zoneEditor.deleteZone.title=Suppression de zone -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.