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 2f86084d3917f753b6f2f3453228af6b1a88318d Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 11:34:43 2016 +0100 suprpession des sous strates d'une zone (refs #7929) --- .../content/protocol/zones/ZoneEditorUIModel.java | 79 ++++++++++------------ .../protocol/zones/actions/AddStratasAction.java | 2 +- .../zones/actions/RemoveStratasAction.java | 6 +- .../protocol/zones/models/StrataUIModel.java | 15 ++++ .../protocol/zones/models/SubStrataUIModel.java | 14 ++++ .../content/protocol/zones/models/ZoneUIModel.java | 32 +++++++-- 6 files changed, 93 insertions(+), 55 deletions(-) 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 dc98b25..0053939 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 @@ -1,7 +1,6 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; import fr.ifremer.tutti.persistence.entities.protocol.Strata; -import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; @@ -11,9 +10,7 @@ import org.jdesktop.beans.AbstractSerializableBean; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @author Kevin Morin (Code Lutin) @@ -28,8 +25,6 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public static final String PROPERTY_ZONES = "zones"; - protected final Map<SubStrata, StrataUIModel> strataBySubstrata = new HashMap<>(); - protected final List<StrataUIModel> availableStratas = new ArrayList<>(); protected final List<ZoneUIModel> zones = new ArrayList<>(); @@ -41,19 +36,21 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public void setAvailableStratas(Collection<StrataUIModel> availableStratas) { this.availableStratas.clear(); addAllAvailableStratas(availableStratas); - - strataBySubstrata.clear(); - updateStrataBySubStrata(availableStratas); } public void addAllAvailableStratas(Collection<StrataUIModel> availableStratas) { Object oldValue = copyAvailableStratas(); this.availableStratas.addAll(availableStratas); - updateStrataBySubStrata(availableStratas); firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); } - public void removeAvailableStratas(Collection<StrataUIModel> stratas) { + public void addAvailableStrata(StrataUIModel availableStrata) { + Object oldValue = copyAvailableStratas(); + this.availableStratas.add(availableStrata); + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); + } + + public void removeAllAvailableStratas(Collection<StrataUIModel> stratas) { Object oldValue = copyAvailableStratas(); @@ -63,22 +60,11 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { } - public void removeAvailableSubStratas(Collection<SubStrataUIModel> subStratas) { - Object oldValue = copyAvailableStratas(); - - subStratas.forEach(subStrata -> { - - StrataUIModel strata = strataBySubstrata.get(subStrata); - if (log.isInfoEnabled()) { - log.info("remove " + subStrata); - } - strata.removeSubstrata(subStrata); + public void removeAvailableStrata(StrataUIModel strata) { - if (strata.isSubstrataEmpty()) { - availableStratas.remove(strata); - } + Object oldValue = copyAvailableStratas(); - }); + availableStratas.remove(strata); firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); @@ -113,7 +99,7 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { } zone.addAllStrata(new ArrayList<>(stratas)); - removeAvailableStratas(stratas); + removeAllAvailableStratas(stratas); } public void removeStratasFromZone(Collection<StrataUIModel> stratas) { @@ -131,21 +117,21 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { } subStratas.forEach(subStrata -> { - StrataUIModel strata = strataBySubstrata.get(subStrata); + StrataUIModel strata = subStrata.getStrata(); + strata.removeSubstrata(subStrata); Strata zoneStrata = zone.getStrata(strata); - if (zoneStrata == null) { zoneStrata = new StrataUIModel(strata.getLocation()); zone.addStrata(zoneStrata); } - zoneStrata.addSubstrata(subStrata); + if (strata.isSubstrataEmpty()) { + removeAvailableStrata(strata); + } }); - removeAvailableSubStratas(subStratas); - } public void removeSubStratasFromZone(Collection<SubStrataUIModel> subStratas) { @@ -154,26 +140,33 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { } subStratas.forEach(subStrata -> { - StrataUIModel strata = strataBySubstrata.get(subStrata); + StrataUIModel strata = subStrata.getStrata(); + strata.removeSubstrata(subStrata); - //TODO remove substrata from zone -// StrataUIModel zoneStrata = -// strata.removeSubstrata(subStrata); -// strata.getZone().removeStrata(strata) + StrataUIModel availableStrata = getStrata(strata); + if (availableStrata == null) { + availableStrata = new StrataUIModel(strata.getLocation()); + addAvailableStrata(availableStrata); + } + availableStrata.addSubstrata(subStrata); + + if (strata.isSubstrataEmpty()) { + strata.getZone().removeStrata(strata); + } - strata.addSubstrata(subStrata); }); } + /** + * @param strata + * @return the strata from the available stratas which equals the strata in parameters + */ + protected StrataUIModel getStrata(StrataUIModel strata) { + return availableStratas.stream().filter(s -> s != null && s.equals(strata)).findFirst().orElse(null); + } + protected List<StrataUIModel> copyAvailableStratas() { return new ArrayList<>(availableStratas); } - protected void updateStrataBySubStrata(Collection<StrataUIModel> availableStratas) { - for (StrataUIModel strata : availableStratas) { - for (SubStrata substrata : strata.getSubstrata()) { - strataBySubstrata.put(substrata, strata); - } - } - } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java index b7930e7..4782588 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java @@ -40,7 +40,7 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { JTree zonesTree = zoneEditorUI.getZonesTree(); TreePath selectedZonePath = zonesTree.getSelectionPath(); - ZoneNode zoneNode = (ZoneNode) selectedZonePath.getLastPathComponent(); + ZoneNode zoneNode = (ZoneNode) selectedZonePath.getPathComponent(1); ZoneUIModel selectedZone = zoneNode.getZone(); Set<StrataUIModel> stratasToAdd = new HashSet<>(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java index 582d278..1b2dcbd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java @@ -33,8 +33,6 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - JTree availableStratasTree = zoneEditorUI.getAvailableStratasTree(); - JTree zonesTree = zoneEditorUI.getZonesTree(); TreePath[] selectedStratas = zonesTree.getSelectionPaths(); @@ -49,14 +47,14 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { StrataUIModel strata = ((StrataNode) node).getStrata(); if (log.isInfoEnabled()) { - log.info("add strata " + strata.getLabel()); + log.info("remove strata " + strata.getLabel()); } stratasToRemove.add(strata); } else if (node instanceof SubStrataNode) { SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); if (log.isInfoEnabled()) { - log.info("add subtrata " + subStrata.getLabel()); + log.info("remove subtrata " + subStrata.getLabel() + " from " + subStrata.getStrata()); } subStratasToRemove.add(subStrata); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java index e7a09f8..d833a93 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java @@ -41,6 +41,7 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode public void addAllSubstrata(Collection<SubStrata> substrata) { Object oldValue = new HashSet<>(getSubstrata()); delegate.addAllSubstrata(substrata); + updateSubStrataStrata(substrata, this); firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); } @@ -48,6 +49,7 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode public void addSubstrata(SubStrata substrata) { Object oldValue = new HashSet<>(getSubstrata()); delegate.addSubstrata(substrata); + updateSubStrataStrata(substrata, this); firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); } @@ -85,6 +87,7 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode public boolean removeAllSubstrata(Collection<SubStrata> substrata) { Object oldValue = new HashSet<>(getSubstrata()); boolean result = delegate.removeAllSubstrata(substrata); + updateSubStrataStrata(substrata, null); firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); return result; } @@ -93,6 +96,7 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode public boolean removeSubstrata(SubStrata substrata) { Object oldValue = new HashSet<>(getSubstrata()); boolean result = delegate.removeSubstrata(substrata); + updateSubStrataStrata(substrata, null); firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); return result; } @@ -107,7 +111,9 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode @Override public void setSubstrata(Collection<SubStrata> substrata) { Object oldValue = new HashSet<>(getSubstrata()); + updateSubStrataStrata(getSubstrata(), null); delegate.setSubstrata(substrata); + updateSubStrataStrata(getSubstrata(), this); firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); } @@ -189,4 +195,13 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode return Stratas.newStrata(); } + protected void updateSubStrataStrata(Collection<SubStrata> subStratas, StrataUIModel strata) { + subStratas.forEach(subStrata -> updateSubStrataStrata(subStrata, strata)); + } + + protected void updateSubStrataStrata(SubStrata subStrata, StrataUIModel strata) { + if (subStrata instanceof SubStrataUIModel) { + ((SubStrataUIModel) subStrata).setStrata(strata); + } + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java index a57aa4c..8dcbd8a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java @@ -15,8 +15,12 @@ import java.util.Objects; */ public class SubStrataUIModel extends AbstractTuttiBeanUIModel<SubStrata, SubStrataUIModel> implements SubStrata { + public static final String PROPERTY_STRATA = "strata"; + protected final SubStrata delegate = SubStratas.newSubStrata(); + protected StrataUIModel strata; + protected static Binder<SubStrataUIModel, SubStrata> toBeanBinder = BinderFactory.newBinder(SubStrataUIModel.class, SubStrata.class); protected static Binder<SubStrata, SubStrataUIModel> fromBeanBinder = BinderFactory.newBinder(SubStrata.class, SubStrataUIModel.class); @@ -70,6 +74,16 @@ public class SubStrataUIModel extends AbstractTuttiBeanUIModel<SubStrata, SubStr return getLocation() == null ? null : getLocation().getLabel(); } + public StrataUIModel getStrata() { + return strata; + } + + public void setStrata(StrataUIModel strata) { + Object oldValue = getStrata(); + this.strata = strata; + firePropertyChange(PROPERTY_STRATA, oldValue, strata); + } + @Override public boolean equals(Object obj) { if (obj == null) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java index 6ff1188..433bb49 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java @@ -27,18 +27,38 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp } @Override - public void addAllStrata(Collection<Strata> strata) { + public void addAllStrata(Collection<Strata> stratas) { Object oldValue = new HashSet<>(getStrata()); - delegate.addAllStrata(strata); - updateStrataZone(strata, this); + + stratas.forEach(strata -> { + Strata existingStrata = getStrata(strata); + if (existingStrata != null) { + existingStrata.addAllSubstrata(strata.getSubstrata()); + + } else { + delegate.addStrata(strata); + } + }); + + updateStrataZone(stratas, this); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); } @Override public void addStrata(Strata strata) { Object oldValue = new HashSet<>(getStrata()); - delegate.addStrata(strata); + + Strata existingStrata = getStrata(strata); + if (existingStrata != null) { + existingStrata.addAllSubstrata(strata.getSubstrata()); + + } else { + delegate.addStrata(strata); + } + updateStrataZone(strata, this); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); } @@ -154,9 +174,7 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp } protected void updateStrataZone(Collection<Strata> stratas, ZoneUIModel zone) { - stratas.stream() - .filter(strata -> strata instanceof StrataUIModel) - .forEach(strata -> ((StrataUIModel) strata).setZone(zone)); + stratas.forEach(strata -> updateStrataZone(strata, zone)); } protected void updateStrataZone(Strata strata, ZoneUIModel zone) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.