This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See http://git.codelutin.com/tutti.git from 17b3ba9 Finalisation spécifications 0.7 new 9e12ae7 use java 1.8 new f9805f5 ajout des zones au protocole (refs #7929) new db167a0 ajout de l'onglet d'édition des zone (refs #7929) new d2472af mise a jour suite aux modifs du modele + appel des oncloseui des sous-ui (refs #7929) new faa68be noeuds + renderer + modeles d'arbre + modele de zone (refs #7929) new 4bc97c5 creation de zones + déplacement des noeuds (refs #7929) new 4bfd27e création des modeles de strates et sous strates (refs #7929) new 44cb2a5 ajout des listeners sur les strates et sous strates (refs #7929) new a72750c suprpession des sous strates d'une zone (refs #7929) new 43a38d2 ajout des icones + tri des noeuds dans les arbres (refs #7929) new 4d395fa sauvegarde du protocol (refs #7929) new 35f03ac on pousse les zones dans le modele de protocole (peut etre faire l'inverse...) (refs #7929) new 7c0bfbe - 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) new 5763e70 tri des noeuds + i18n (refs #7929) new b42e6c6 utilisation de fromEntity et toEntity au lieu de fromBean et toBean new 8c086d3 - utilisation directement du modele du protocol - ajout d'une popup de menu pour surrpimer et renommer les zones (refs #7929) new 48df60e activation ou non des boutons d'ajout et de suppresion des strates (refs #7929) new 0d628cb desactivation des boutons d'ajout et de suppression des strates à l'ouverture de l'écran (refs #7929) new 5927e49 Merge de modèle new a219dd7 ajout des libellé sur les racines des arbres (refs #7929) new ccbed17 inversion des 2 arbres (refs #7929) new 132e60c expand nodes when children are inserted (refs #7929) new 793f199 Pouvoir ajouter/supprimer en utilisant un double click ou la touche entrée (See #7929) new 2ab86d0 Fixes #7929 Merge branch 'feature/7929_editeur_de_zone' into develop The 24 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 2ab86d0de8299a0ec2b199f6c7a8ddb134c8bd03 Merge: 17b3ba9 793f199 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Feb 6 09:21:08 2016 +0100 Fixes #7929 Merge branch 'feature/7929_editeur_de_zone' into develop commit 793f199fe5247dcdd4cbb6e7f2674dfbfe56c176 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Feb 6 09:19:36 2016 +0100 Pouvoir ajouter/supprimer en utilisant un double click ou la touche entrée (See #7929) commit 132e60cb42f2db6b6cb4086a5340fe9f9c48fc83 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 15:43:20 2016 +0100 expand nodes when children are inserted (refs #7929) commit ccbed1721184adc51202de636a038a823df880bb Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 15:33:23 2016 +0100 inversion des 2 arbres (refs #7929) commit a219dd72a675aec4a3f88437d25dd3ef875edfb1 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 4 11:34:16 2016 +0100 ajout des libellé sur les racines des arbres (refs #7929) commit 5927e497326c185f33840031d9ea4e133a1d4b3b Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 4 09:08:18 2016 +0100 Merge de modèle commit 0d628cb994d0557176f1065caa038a9b4171c499 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 11:05:50 2016 +0100 desactivation des boutons d'ajout et de suppression des strates à l'ouverture de l'écran (refs #7929) commit 48df60ecb8d5f66c6f4912bf424243e3835b211c Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 10:46:33 2016 +0100 activation ou non des boutons d'ajout et de suppresion des strates (refs #7929) commit 8c086d37c8320d5eb03fd5d0d36555b0fccba8f1 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 19:10:52 2016 +0100 - utilisation directement du modele du protocol - ajout d'une popup de menu pour surrpimer et renommer les zones (refs #7929) commit b42e6c6d2f29046d3eb20d6736cda10a6c946cf6 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 15:54:09 2016 +0100 utilisation de fromEntity et toEntity au lieu de fromBean et toBean commit 5763e70102e6218084f3192c26dac5927af67658 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 14:36:07 2016 +0100 tri des noeuds + i18n (refs #7929) commit 7c0bfbe6fbb8d94cf3cdb4592b06808db75549f5 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) commit 35f03ac9ed0dcb37cf155396ffc41c49764a061c Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 17:35:38 2016 +0100 on pousse les zones dans le modele de protocole (peut etre faire l'inverse...) (refs #7929) commit 4d395fa2c6a50cea4b95e5eea6cf2fd583c3ef7c Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 17:12:06 2016 +0100 sauvegarde du protocol (refs #7929) commit 43a38d26a59759d313d85f6cba8202d9b74c89fd Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 14:49:39 2016 +0100 ajout des icones + tri des noeuds dans les arbres (refs #7929) commit a72750ccea2dcc1da9e79a35a0e636592728c70d Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 11:34:43 2016 +0100 suprpession des sous strates d'une zone (refs #7929) commit 44cb2a5ea518820c395cc232250c12a12810022c Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 28 19:22:03 2016 +0100 ajout des listeners sur les strates et sous strates (refs #7929) commit 4bfd27e712ea4d7c72f54fb63843a6c26f0586fd Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 28 19:21:56 2016 +0100 création des modeles de strates et sous strates (refs #7929) commit 4bc97c5f99e3e0678b11c0b455b4d76b31d525cd Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:39:17 2016 +0100 creation de zones + déplacement des noeuds (refs #7929) commit faa68bee7b8fb9c037eaad079911c16e373c3a47 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:38:05 2016 +0100 noeuds + renderer + modeles d'arbre + modele de zone (refs #7929) commit d2472af25bcbbb4fd6bd2a7f04ae6b2e66830d13 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:37:01 2016 +0100 mise a jour suite aux modifs du modele + appel des oncloseui des sous-ui (refs #7929) commit db167a01f090815ae1a8ac537ec4e756955ef0ea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:23:25 2016 +0100 ajout de l'onglet d'édition des zone (refs #7929) commit f9805f5ea351bc39c1684c58d2624d77a4ceab7b Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:22:53 2016 +0100 ajout des zones au protocole (refs #7929) commit 9e12ae72edb675ee012be8afc5727fbeb42f32ea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:22:00 2016 +0100 use java 1.8 Summary of changes: pom.xml | 2 + .../tutti/persistence/TuttiPersistenceImpl.java | 5 + .../persistence/TuttiPersistenceNoDbImpl.java | 5 + .../entities/protocol/TuttiProtocols.java | 3 + .../service/ProtocolPersistenceServiceImpl.java | 47 +++ .../referential/LocationPersistenceService.java | 10 + .../LocationPersistenceServiceImpl.java | 38 ++ .../src/main/xmi/tutti-persistence.zargo | Bin 59366 -> 60851 bytes .../ifremer/tutti/service/PersistenceService.java | 5 + .../swing/content/cruise/EditCruiseUIHandler.java | 2 +- .../content/cruise/actions/SaveCruiseAction.java | 4 +- .../accidental/AccidentalBatchUIHandler.java | 2 +- .../catches/benthos/BenthosBatchUIHandler.java | 4 +- .../IndividualObservationBatchUIHandler.java | 2 +- .../marinelitter/MarineLitterBatchUIHandler.java | 2 +- .../catches/species/SpeciesBatchUIHandler.java | 4 +- .../actions/EditFishingOperationAction.java | 4 +- .../actions/SaveFishingOperationAction.java | 2 +- .../content/program/EditProgramUIHandler.java | 2 +- .../content/program/actions/SaveProgramAction.java | 2 +- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 5 + .../content/protocol/EditProtocolUIHandler.java | 15 +- .../content/protocol/EditProtocolUIModel.java | 232 +++++++++++ .../actions/ExportProtocolBenthosAction.java | 2 +- .../actions/ExportProtocolCaracteristicAction.java | 2 +- .../actions/ExportProtocolSpeciesAction.java | 2 +- .../actions/ImportProtocolBenthosAction.java | 2 +- .../actions/ImportProtocolCaracteristicAction.java | 4 +- .../actions/ImportProtocolSpeciesAction.java | 2 +- .../protocol/actions/SaveProtocolAction.java | 15 +- .../content/protocol/rtp/RtpEditorUIModel.java | 4 +- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 87 +++++ .../swing/content/protocol/zones/ZoneEditorUI.jcss | 65 ++++ .../protocol/zones/ZoneEditorUIHandler.java | 427 +++++++++++++++++++++ .../protocol/zones/actions/AddStratasAction.java | 84 ++++ .../CollapseAvailableStratasTreeAction.java | 21 + .../zones/actions/CollapseZonesTreeAction.java | 21 + .../protocol/zones/actions/CreateZoneAction.java | 51 +++ .../protocol/zones/actions/DeleteZoneAction.java | 50 +++ .../actions/ExpandAvailableStratasTreeAction.java | 21 + .../zones/actions/ExpandZonesTreeAction.java | 21 + .../zones/actions/RemoveStratasAction.java | 91 +++++ .../protocol/zones/actions/RenameZoneAction.java | 54 +++ .../protocol/zones/models/StrataUIModel.java | 225 +++++++++++ .../protocol/zones/models/SubStrataUIModel.java | 122 ++++++ .../content/protocol/zones/models/ZoneUIModel.java | 204 ++++++++++ .../zones/tree/AbstractZoneEditorTreeModel.java | 25 ++ .../content/protocol/zones/tree/StrataNode.java | 19 + .../protocol/zones/tree/StratasTreeModel.java | 134 +++++++ .../content/protocol/zones/tree/SubStrataNode.java | 18 + .../protocol/zones/tree/ZoneEditorNode.java | 52 +++ .../zones/tree/ZoneEditorTreeCellRenderer.java | 30 ++ .../content/protocol/zones/tree/ZoneNode.java | 19 + .../protocol/zones/tree/ZonesTreeModel.java | 206 ++++++++++ .../report/actions/GenerateReportAction.java | 2 +- .../actions/EditCruiseInValidationUIAction.java | 2 +- .../EditFishingOperationInValidationUIAction.java | 4 +- .../ifremer/tutti/ui/swing/util/TuttiUIUtil.java | 15 + .../EditProtocolUIModel-error-validation.xml} | 13 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 21 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 18 +- .../src/main/resources/icons/action-left.png | Bin 0 -> 345 bytes .../src/main/resources/icons/action-right.png | Bin 0 -> 349 bytes 63 files changed, 2508 insertions(+), 44 deletions(-) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/DeleteZoneAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandAvailableStratasTreeAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandZonesTreeAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RenameZoneAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/AbstractZoneEditorTreeModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java copy tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/{home/SelectCruiseUIModel-error-validation.xml => protocol/EditProtocolUIModel-error-validation.xml} (85%) create mode 100644 tutti-ui-swing/src/main/resources/icons/action-left.png create mode 100644 tutti-ui-swing/src/main/resources/icons/action-right.png -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 9e12ae72edb675ee012be8afc5727fbeb42f32ea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:22:00 2016 +0100 use java 1.8 --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index fb1ca02..5a85e14 100644 --- a/pom.xml +++ b/pom.xml @@ -158,6 +158,8 @@ <!-- Where are deployed software components --> <distroUrl>https://nexus.nuiton.org/nexus/content/repositories/other-releases</distroUrl> + <javaVersion>1.8</javaVersion> + </properties> <repositories> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 f9805f5ea351bc39c1684c58d2624d77a4ceab7b Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:22:53 2016 +0100 ajout des zones au protocole (refs #7929) --- .../tutti/persistence/TuttiPersistenceImpl.java | 5 +++ .../persistence/TuttiPersistenceNoDbImpl.java | 5 +++ .../referential/LocationPersistenceService.java | 10 ++++++ .../LocationPersistenceServiceImpl.java | 38 ++++++++++++++++++++++ .../ifremer/tutti/service/PersistenceService.java | 5 +++ 5 files changed, 63 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index bf8f9ee..a072045 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -498,6 +498,11 @@ public class TuttiPersistenceImpl implements TuttiPersistence { } @Override + public Multimap<TuttiLocation, TuttiLocation> getAllFishingOperationStratasAndSubstratas(String zoneId) { + return getLocationService().getAllFishingOperationStratasAndSubstratas(zoneId); + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { return getLocationService().getAllFishingOperationStrata(zoneId); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 3f5d7c8..e3de04e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -154,6 +154,11 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override + public Multimap<TuttiLocation, TuttiLocation> getAllFishingOperationStratasAndSubstratas(String zoneId) { + throw notImplemented(); + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java index 89d532b..945eeee 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceService.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service.referential; * #L% */ +import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; @@ -73,6 +74,15 @@ public interface LocationPersistenceService extends TuttiPersistenceServiceImple List<TuttiLocation> getAllHarbourWithObsoletes(); /** + * Get a multimap of location of type substrata by location of type strata that match the given zone id. + * + * @param zoneId id of the parent zone (can not be null) + * @return the stratas and substratas with given zone id as location parent + * @since 1.0 + */ + Multimap<TuttiLocation, TuttiLocation> getAllFishingOperationStratasAndSubstratas(String zoneId); + + /** * Get the list of location of type strata that match the given zone id. * * @param zoneId id of the parent zone (can not be null) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java index 8ae68c5..02f5e34 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/referential/LocationPersistenceServiceImpl.java @@ -25,13 +25,17 @@ package fr.ifremer.tutti.persistence.service.referential; */ import com.google.common.base.Preconditions; +import com.google.common.collect.HashMultimap; import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; import fr.ifremer.adagio.core.dao.referential.location.LocationClassificationId; import fr.ifremer.adagio.core.dao.referential.location.LocationExtendDao; import fr.ifremer.adagio.core.dao.referential.location.LocationLevelId; import fr.ifremer.adagio.core.service.referential.location.LocationService; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hibernate.type.IntegerType; import org.springframework.stereotype.Service; @@ -39,6 +43,7 @@ import javax.annotation.Resource; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; /** * Created on 11/3/14. @@ -49,6 +54,9 @@ import java.util.List; @Service("locationPersistenceService") public class LocationPersistenceServiceImpl extends ReferentialPersistenceServiceSupport implements LocationPersistenceService { + /** Logger. */ + private static final Log log = LogFactory.getLog(LocationPersistenceServiceImpl.class); + @Resource(name = "locationDao") protected LocationExtendDao locationDao; @@ -104,6 +112,36 @@ public class LocationPersistenceServiceImpl extends ReferentialPersistenceServic } @Override + public Multimap<TuttiLocation, TuttiLocation> getAllFishingOperationStratasAndSubstratas(final String zoneId) { + Preconditions.checkNotNull(zoneId); + + Multimap<TuttiLocation, TuttiLocation> result = HashMultimap.create(); + + List<TuttiLocation> stratas = getAllFishingOperationStrata(zoneId); + + if (log.isInfoEnabled()) { + log.info("stratas : " + stratas.stream().map(TuttiLocation::getLabel).collect(Collectors.toSet())); + } + + stratas.forEach(strata -> { + List<TuttiLocation> allFishingOperationSubStrata = getAllFishingOperationSubStrata(zoneId, strata.getId()); + + if (allFishingOperationSubStrata.isEmpty()) { + result.put(strata, null); + + } else { + result.putAll(strata, allFishingOperationSubStrata); + } + }); + + if (log.isInfoEnabled()) { + log.info("stratas in result : " + result.keySet().stream().map(TuttiLocation::getLabel).collect(Collectors.toSet())); + } + + return result; + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { Preconditions.checkNotNull(zoneId); List<TuttiLocation> result = getFishingOperationLocationsByParent( diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index d5543f8..d092b27 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -766,6 +766,11 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override + public Multimap<TuttiLocation, TuttiLocation> getAllFishingOperationStratasAndSubstratas(String zoneId) { + return driver.getAllFishingOperationStratasAndSubstratas(zoneId); + } + + @Override public List<TuttiLocation> getAllFishingOperationStrata(String zoneId) { return driver.getAllFishingOperationStrata(zoneId); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 db167a01f090815ae1a8ac537ec4e756955ef0ea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:23:25 2016 +0100 ajout de l'onglet d'édition des zone (refs #7929) --- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 5 + .../content/protocol/EditProtocolUIModel.java | 56 ++++++++ .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 50 +++++++ .../swing/content/protocol/zones/ZoneEditorUI.jcss | 17 +++ .../protocol/zones/ZoneEditorUIHandler.java | 155 +++++++++++++++++++++ .../content/protocol/zones/ZoneEditorUIModel.java | 129 +++++++++++++++++ .../protocol/zones/actions/AddStratasAction.java | 48 +++++++ .../zones/actions/RemoveStratasAction.java | 22 +++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 10 files changed, 488 insertions(+) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index 5dd2e0d..a8687d4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -28,6 +28,7 @@ fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.content.protocol.rtp.RtpEditorUI + fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil @@ -237,6 +238,10 @@ </Table> </JPanel> </tab> + <tab title='tutti.editProtocol.tab.zone'> + <ZoneEditorUI id="zoneEditor" + constructorParams='this'/> + </tab> </JTabbedPane> <JPanel id='saveWarningContainer' layout='{new BorderLayout(10, 10)}' diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 84b1f81..73391ad 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; @@ -779,6 +780,61 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, } @Override + public Collection<Zone> getZones() { + return editObject.getZones(); + } + + @Override + public void setZones(Collection<Zone> zones) { + editObject.setZones(zones); + } + + @Override + public Zone getZones(int index) { + return editObject.getZones(index); + } + + @Override + public boolean isZonesEmpty() { + return editObject.isZonesEmpty(); + } + + @Override + public int sizeZones() { + return editObject.sizeZones(); + } + + @Override + public void addZones(Zone zone) { + editObject.addZones(zone); + } + + @Override + public void addAllZones(Collection<Zone> zones) { + editObject.addAllZones(zones); + } + + @Override + public boolean removeZones(Zone zone) { + return editObject.removeZones(zone); + } + + @Override + public boolean removeAllZones(Collection<Zone> zones) { + return editObject.removeAllZones(zones); + } + + @Override + public boolean containsZones(Zone zone) { + return editObject.containsZones(zone); + } + + @Override + public boolean containsAllZones(Collection<Zone> zones) { + return editObject.containsAllZones(zones); + } + + @Override public Collection<OperationFieldMappingRow> getOperationFieldMapping() { return editObject.getOperationFieldMapping(); } 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 new file mode 100644 index 0000000..ae21d09 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jaxx @@ -0,0 +1,50 @@ + +<Table id='editProtocolTopPanel' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ZoneEditorUIModel, ZoneEditorUIHandler>'> + + <import> + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + </import> + + <script><![CDATA[ + + public ZoneEditorUI(TuttiUI parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); + } + ]]> + </script> + + <!-- model --> + <ZoneEditorUIModel id='model' javaBean='new ZoneEditorUIModel()'/> + + <row> + <cell weightx='0.5' weighty='1' fill='both'> + <JScrollPane onFocusGained='zoneTree.requestFocus()'> + <!-- List of the zones --> + <JTree id='zoneTree'/> + <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> + <!--onMouseClicked='handler.onUniverseListClicked(event)'--> + <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> + </JScrollPane> + </cell> + + <cell anchor='north'> + <JPanel layout='{new GridLayout(0,1)}'> + <JButton id='addButton' /> + <JButton id='removeButton' /> + </JPanel> + </cell> + + <cell weightx='0.5' weighty='1' fill='both'> + <JScrollPane onFocusGained='availableStratas.requestFocus()'> + <!-- List of the available stratas and substratas --> + <JTree id='availableStratas' onValueChanged="availableStratas.expandPath(event.getNewLeadSelectionPath())"/> + <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> + <!--onMouseClicked='handler.onSelectedListClicked(event)'--> + <!--onKeyPressed='handler.onKeyPressedOnSelectedList(event)'/>--> + </JScrollPane> + </cell> + </row> + +</Table> \ No newline at end of file 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 new file mode 100644 index 0000000..f6b30e7 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss @@ -0,0 +1,17 @@ +JTree { + autoscrolls: true; + expandsSelectedPaths: true; + scrollsOnExpand: true; + rootVisible: false; + showsRootHandles: false; +} + +#addButton { + text: "<<"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; +} + +#removeButton { + text: ">>"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; +} \ No newline at end of file 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 new file mode 100644 index 0000000..f46342a --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIHandler.java @@ -0,0 +1,155 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones; + +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JComponent; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import java.awt.Component; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashSet; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIModel, ZoneEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ZoneEditorUIHandler.class); + + @Override + public void afterInit(ZoneEditorUI zoneEditorUI) { + + initUI(zoneEditorUI); + + getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, + evt -> { + + Multimap<TuttiLocation, TuttiLocation> oldAvailableStratas = + (Multimap<TuttiLocation, TuttiLocation>) evt.getOldValue(); + + Multimap<TuttiLocation, TuttiLocation> newAvailableStratas = + (Multimap<TuttiLocation, TuttiLocation>) evt.getNewValue(); + + Collection<TuttiLocation> stratasToAdd = new ArrayList<>(newAvailableStratas.keySet()); + stratasToAdd.removeAll(oldAvailableStratas.keySet()); + + Collection<TuttiLocation> stratasToRemove = new ArrayList<>(oldAvailableStratas.keySet()); + stratasToRemove.removeAll(newAvailableStratas.keySet()); + + updateTreeModel(newAvailableStratas, oldAvailableStratas, stratasToAdd, stratasToRemove); + }); + + DefaultMutableTreeNode root = new DefaultMutableTreeNode(); + + TreeModel availableStratasTreeModel = new DefaultTreeModel(root); + + JTree availableStratasTree = ui.getAvailableStratas(); + availableStratasTree.setCellRenderer(new DefaultTreeCellRenderer() { + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + String text = "test"; + if (value instanceof DefaultMutableTreeNode) { + Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); + if (userObject instanceof TuttiLocation) { + text = ((TuttiLocation) userObject).getLabel(); + } + } + setText(text); + return this; + } + }); + availableStratasTree.setModel(availableStratasTreeModel); + + PersistenceService persistenceService = getPersistenceService(); + + TuttiLocation programZone = getDataContext().getProgram().getZone(); + + Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = + persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId()); + + getModel().setAvailableStratas(programStratasAndSubstratas); + } + + protected void updateTreeModel(Multimap<TuttiLocation, TuttiLocation> newAvailableStratas, + Multimap<TuttiLocation, TuttiLocation> oldAvailableStratas, + Collection<TuttiLocation> stratasToAdd, + Collection<TuttiLocation> stratasToRemove) { + + if (log.isInfoEnabled()) { + log.info("updateTrremodle"); + } + + JTree availableStratas = getUI().getAvailableStratas(); + DefaultTreeModel availableStratasTreeModel = (DefaultTreeModel) availableStratas.getModel(); + DefaultMutableTreeNode root = (DefaultMutableTreeNode) availableStratasTreeModel.getRoot(); + + Enumeration rootChildren = root.children(); + Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); + while (rootChildren.hasMoreElements()) { + DefaultMutableTreeNode strataNode = (DefaultMutableTreeNode) rootChildren.nextElement(); + if (log.isInfoEnabled()) { + log.info("root child " + ((TuttiLocation) strataNode.getUserObject()).getLabel()); + } + if (stratasToRemove.contains(strataNode.getUserObject())) { + if (log.isInfoEnabled()) { + log.info("remove " + ((TuttiLocation) strataNode.getUserObject()).getLabel()); + } + nodesToRemove.add(strataNode); + } + } + nodesToRemove.forEach(strataNode -> root.remove(strataNode)); + + stratasToAdd.forEach(strata -> { + + DefaultMutableTreeNode strataNode = new DefaultMutableTreeNode(strata, true); + root.add(strataNode); + + if (log.isInfoEnabled()) { + log.info("add strata node " + strata.getLabel()); + } + + newAvailableStratas.get(strata).forEach(substrata -> { + + if (substrata != null) { + DefaultMutableTreeNode subStrataNode = new DefaultMutableTreeNode(substrata, false); + strataNode.add(subStrataNode); + log.info("add substrata node " + substrata.getLabel()); + } + + }); + + }); + + availableStratasTreeModel.reload(); + } + + @Override + public SwingValidator<ZoneEditorUIModel> getValidator() { + return null; + } + + @Override + protected JComponent getComponentToFocus() { + return ui.getZoneTree(); + } + + @Override + public void onCloseUI() { + + } +} 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 new file mode 100644 index 0000000..9645011 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java @@ -0,0 +1,129 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneEditorUIModel extends AbstractSerializableBean { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ZoneEditorUIModel.class); + + public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; + + public static final String PROPERTY_ZONES = "zones"; + + protected Map<TuttiLocation, TuttiLocation> strataBySubstrata; + + protected final Multimap<TuttiLocation, TuttiLocation> availableStratas = HashMultimap.create(); + + protected final List<Zone> zones = new ArrayList<>(); + + public Multimap<TuttiLocation, TuttiLocation> getAvailableStratas() { + return availableStratas; + } + + public void setAvailableStratas(Multimap<TuttiLocation, TuttiLocation> availableStratas) { + this.availableStratas.clear(); + addAllAvailableStratas(availableStratas); + + strataBySubstrata = new HashMap<>(); + for (TuttiLocation stratas : availableStratas.keySet()) { + for (TuttiLocation substratas : availableStratas.get(stratas)) { + strataBySubstrata.put(substratas, stratas); + } + } + } + + public void addAllAvailableStratas(Multimap<TuttiLocation, TuttiLocation> availableStratas) { + Object oldValue = copyAvailableStratas(); + this.availableStratas.putAll(availableStratas); + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); + } + + public void addAvailableStratas(Collection<TuttiLocation> stratasAndSubStratas) { + + Object oldValue = copyAvailableStratas(); + + Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() + .filter(location -> strataBySubstrata.containsKey(location)) + .collect(Collectors.toSet()); + + Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); + stratas.removeAll(substratas); + + stratas.forEach(strata -> { + + Collection<TuttiLocation> strataSubstratas = + strataBySubstrata.entrySet() + .stream() + .filter(entry->entry.getValue().equals(strata)) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); + + substratas.removeAll(strataSubstratas); + availableStratas.putAll(strata, strataSubstratas); + + }); + + substratas.forEach(substrata -> { + availableStratas.put(strataBySubstrata.get(substrata), substrata); + }); + + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); + } + + public void removeAvailableStratas(Collection<TuttiLocation> stratasAndSubStratas) { + + Object oldValue = copyAvailableStratas(); + + Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() + .filter(location -> strataBySubstrata.containsKey(location)) + .collect(Collectors.toSet()); + + Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); + stratas.removeAll(substratas); + + stratas.forEach(strata -> { + availableStratas.removeAll(strata); + }); + + substratas.forEach(substrata -> { + availableStratas.remove(strataBySubstrata.get(substrata), substrata); + }); + + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); + + } + + public List<Zone> getZones() { + return zones; + } + + public void setZones(List<Zone> zones) { + Object oldValue = getZones(); + this.zones.clear(); + this.zones.addAll(zones); + firePropertyChange(PROPERTY_ZONES, oldValue, zones); + } + + protected Multimap<TuttiLocation, TuttiLocation> copyAvailableStratas() { + return HashMultimap.create(availableStratas); + } +} 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 new file mode 100644 index 0000000..75ddcb5 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/AddStratasAction.java @@ -0,0 +1,48 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; + +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreePath; +import java.util.HashSet; +import java.util.Set; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(AddStratasAction.class); + + public AddStratasAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + + JTree availableStratasTree = zoneEditorUI.getAvailableStratas(); + TreePath[] selectionPaths = availableStratasTree.getSelectionPaths(); + + Set<TuttiLocation> locationsToAdd = new HashSet<>(); + + for (TreePath treePath : selectionPaths) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent(); + TuttiLocation location = (TuttiLocation) node.getUserObject(); + if (log.isInfoEnabled()) { + log.info("add location " + location.getLabel()); + } + locationsToAdd.add(location); + } + + zoneEditorUI.getModel().removeAvailableStratas(locationsToAdd); + + } +} 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 new file mode 100644 index 0000000..4c7390f --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java @@ -0,0 +1,22 @@ +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.util.actions.SimpleActionSupport; + +import javax.swing.tree.DefaultTreeModel; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { + + public RemoveStratasAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + ((DefaultTreeModel) zoneEditorUI.getAvailableStratas().getModel()).reload(); + } +} 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 e998df3..34b64e4 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 @@ -1,3 +1,5 @@ +<<= +>>= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1094,6 +1096,7 @@ tutti.editProtocol.tab.caracteristic.mapping= tutti.editProtocol.tab.caracteristic.vesselUseFeature= tutti.editProtocol.tab.info= tutti.editProtocol.tab.species= +tutti.editProtocol.tab.zone= tutti.editProtocol.table.header.calcifySample= tutti.editProtocol.table.header.calcifySample.tip= tutti.editProtocol.table.header.caracteristics.importFileColumn= 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 6b35ea6..e040c77 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 @@ -1,3 +1,5 @@ +<<= +>>= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1050,6 +1052,7 @@ tutti.editProtocol.tab.caracteristic.lengthClasses=Classes de taille tutti.editProtocol.tab.caracteristic.mapping=Caractéristiques du trait tutti.editProtocol.tab.info=Informations générales tutti.editProtocol.tab.species=Espèces +tutti.editProtocol.tab.zone=Zones tutti.editProtocol.table.header.calcifySample=Prélèvement de pièces calcifiées tutti.editProtocol.table.header.calcifySample.tip=Prélèvement de pièces calcifiées (pour les données individuelles) tutti.editProtocol.table.header.caracteristics.importFileColumn=Colonne du fichier d'import -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 d2472af25bcbbb4fd6bd2a7f04ae6b2e66830d13 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:37:01 2016 +0100 mise a jour suite aux modifs du modele + appel des oncloseui des sous-ui (refs #7929) --- .../content/protocol/EditProtocolUIHandler.java | 3 ++ .../content/protocol/EditProtocolUIModel.java | 44 +++++++++++----------- .../content/protocol/rtp/RtpEditorUIModel.java | 4 +- 3 files changed, 28 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 c92afd3..f6c14e6 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 @@ -810,6 +810,9 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI clearValidators(); ui.getTabPanel().setSelectedIndex(0); + closeUI(ui.getRtpEditorUI()); + closeUI(ui.getZoneEditor()); + } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 73391ad..04d6188 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -780,58 +780,58 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, } @Override - public Collection<Zone> getZones() { - return editObject.getZones(); + public Collection<Zone> getZone() { + return editObject.getZone(); } @Override - public void setZones(Collection<Zone> zones) { - editObject.setZones(zones); + public void setZone(Collection<Zone> zones) { + editObject.setZone(zones); } @Override - public Zone getZones(int index) { - return editObject.getZones(index); + public Zone getZone(int index) { + return editObject.getZone(index); } @Override - public boolean isZonesEmpty() { - return editObject.isZonesEmpty(); + public boolean isZoneEmpty() { + return editObject.isZoneEmpty(); } @Override - public int sizeZones() { - return editObject.sizeZones(); + public int sizeZone() { + return editObject.sizeZone(); } @Override - public void addZones(Zone zone) { - editObject.addZones(zone); + public void addZone(Zone zone) { + editObject.addZone(zone); } @Override - public void addAllZones(Collection<Zone> zones) { - editObject.addAllZones(zones); + public void addAllZone(Collection<Zone> zones) { + editObject.addAllZone(zones); } @Override - public boolean removeZones(Zone zone) { - return editObject.removeZones(zone); + public boolean removeZone(Zone zone) { + return editObject.removeZone(zone); } @Override - public boolean removeAllZones(Collection<Zone> zones) { - return editObject.removeAllZones(zones); + public boolean removeAllZone(Collection<Zone> zones) { + return editObject.removeAllZone(zones); } @Override - public boolean containsZones(Zone zone) { - return editObject.containsZones(zone); + public boolean containsZone(Zone zone) { + return editObject.containsZone(zone); } @Override - public boolean containsAllZones(Collection<Zone> zones) { - return editObject.containsAllZones(zones); + public boolean containsAllZone(Collection<Zone> zones) { + return editObject.containsAllZone(zones); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java index d50e615..cfc6a42 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java @@ -240,7 +240,9 @@ public class RtpEditorUIModel extends AbstractTuttiBeanUIModel<EditProtocolSpeci } public void reset() { - setRowModel(row); + if (row >= 0 && row < rows.size()) { + setRowModel(row); + } } public void updateRowRtp() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 faa68bee7b8fb9c037eaad079911c16e373c3a47 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:38:05 2016 +0100 noeuds + renderer + modeles d'arbre + modele de zone (refs #7929) --- .../content/protocol/zones/StratasTreeModel.java | 123 +++++++++++++++++++ .../protocol/zones/ZoneEditorTreeCellRenderer.java | 45 +++++++ .../swing/content/protocol/zones/ZoneUIModel.java | 136 +++++++++++++++++++++ .../content/protocol/zones/ZonesTreeModel.java | 98 +++++++++++++++ .../content/protocol/zones/nodes/StrataNode.java | 20 +++ .../protocol/zones/nodes/SubStrataNode.java | 20 +++ .../content/protocol/zones/nodes/ZoneNode.java | 20 +++ 7 files changed, 462 insertions(+) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java new file mode 100644 index 0000000..4a17b0f --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java @@ -0,0 +1,123 @@ +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.nodes.StrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.SubStrataNode; +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; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class StratasTreeModel extends DefaultTreeModel { + + /** Logger. */ + private static final Log log = LogFactory.getLog(StratasTreeModel.class); + + public StratasTreeModel() { + super(new DefaultMutableTreeNode()); + } + + public void removeStratas(Collection<Strata> stratasToRemove) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); + + while (rootChildren.hasMoreElements()) { + + StrataNode strataNode = (StrataNode) rootChildren.nextElement(); + + if (stratasToRemove.contains(strataNode.getStrata())) { + nodesToRemove.add(strataNode); + } + } + + nodesToRemove.forEach(strataNode ->removeNodeFromParent(strataNode)); + + } + +// public void removeSubStratas(Collection<Strata> subStratasToRemove) { +// +// DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); +// +// Enumeration rootChildren = root.children(); +// Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); +// +// while (rootChildren.hasMoreElements()) { +// +// StrataNode strataNode = (StrataNode) rootChildren.nextElement(); +// +// if (stratasToRemove.contains(strataNode.getStrata())) { +// nodesToRemove.add(strataNode); +// } +// } +// +// nodesToRemove.forEach(strataNode ->removeNodeFromParent(strataNode)); +// +// } + + public void addStratas(Collection<Strata> stratasToAdd) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + stratasToAdd.forEach(strata -> { + + StrataNode strataNode = new StrataNode(strata); + insertNodeInto(strataNode, root, root.getChildCount()); + + strata.getSubstrata().forEach(substrata -> { + + if (substrata != null) { + SubStrataNode subStrataNode = new SubStrataNode(substrata); + insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + } + + }); + + }); + + } + + public void addSubStratas(Collection<SubStrata> subStratas, Strata strata) { + + StrataNode strataNode = findStrataNode(strata); + + subStratas.forEach(substrata -> { + + if (substrata != null) { + SubStrataNode subStrataNode = new SubStrataNode(substrata); + insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + } + + }); + + } + + protected StrataNode findStrataNode(Strata strata) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + + StrataNode strataNode = null; + + while (strataNode == null && rootChildren.hasMoreElements()) { + StrataNode nextNode = (StrataNode) rootChildren.nextElement(); + if (strata.equals(nextNode.getStrata())) { + strataNode = nextNode; + } + } + + return strataNode; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java new file mode 100644 index 0000000..a319e9e --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java @@ -0,0 +1,45 @@ +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.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.StrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.SubStrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.Component; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneEditorTreeCellRenderer extends DefaultTreeCellRenderer { + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { + + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + + String text = ""; + + if (value instanceof StrataNode) { + Strata strata = ((StrataNode) value).getStrata(); + text = strata.getLocation().getLabel(); + + } else if (value instanceof SubStrataNode) { + SubStrata substrata = ((SubStrataNode) value).getSubstrata(); + text = substrata.getLocation().getLabel(); + + } else if (value instanceof ZoneNode) { + Zone zone = ((ZoneNode) value).getZone(); + text = zone.getLabel(); + } + + setText(text); + + return this; + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java new file mode 100644 index 0000000..e01af7e --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java @@ -0,0 +1,136 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones; + +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.persistence.entities.protocol.Zones; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Collection; +import java.util.HashSet; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> implements Zone { + + protected final Zone delegate = Zones.newZone(); + + protected static Binder<ZoneUIModel, Zone> toBeanBinder = BinderFactory.newBinder(ZoneUIModel.class, Zone.class); + + protected static Binder<Zone, ZoneUIModel> fromBeanBinder = BinderFactory.newBinder(Zone.class, ZoneUIModel.class); + + public ZoneUIModel() { + super(fromBeanBinder, toBeanBinder); + } + + @Override + public void addAllStrata(Collection<Strata> strata) { + Object oldValue = new HashSet<>(getStrata()); + delegate.addAllStrata(strata); + firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + } + + @Override + public void addStrata(Strata strata) { + Object oldValue = new HashSet<>(getStrata()); + delegate.addStrata(strata); + firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + } + + @Override + public boolean containsAllStrata(Collection<Strata> strata) { + return delegate.containsAllStrata(strata); + } + + @Override + public boolean containsStrata(Strata strata) { + return delegate.containsStrata(strata); + } + + @Override + public String getLabel() { + return delegate.getLabel(); + } + + @Override + public Collection<Strata> getStrata() { + return delegate.getStrata(); + } + + @Override + public Strata getStrata(int index) { + return delegate.getStrata(index); + } + + @Override + public boolean isStrataEmpty() { + return delegate.isStrataEmpty(); + } + + @Override + public boolean removeAllStrata(Collection<Strata> strata) { + Object oldValue = new HashSet<>(getStrata()); + boolean result = delegate.removeAllStrata(strata); + firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + return result; + } + + @Override + public boolean removeStrata(Strata strata) { + Object oldValue = new HashSet<>(getStrata()); + boolean result = delegate.removeStrata(strata); + firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + return result; + } + + @Override + public void setLabel(String label) { + Object oldValue = getLabel(); + delegate.setLabel(label); + firePropertyChanged(PROPERTY_LABEL, oldValue, label); + } + + @Override + public void setStrata(Collection<Strata> strata) { + Object oldValue = new HashSet<>(getStrata()); + delegate.setStrata(strata); + firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + } + + @Override + public int sizeStrata() { + return delegate.sizeStrata(); + } + + @Override + public void setId(String id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, id); + } + + @Override + public void setId(Integer id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, id); + } + + @Override + public Integer getIdAsInt() { + return delegate.getIdAsInt(); + } + + @Override + public String getId() { + return delegate.getId(); + } + + @Override + protected Zone newEntity() { + return Zones.newZone(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java new file mode 100644 index 0000000..b2d3e19 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java @@ -0,0 +1,98 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.StrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; +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; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZonesTreeModel extends DefaultTreeModel { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ZonesTreeModel.class); + + public ZonesTreeModel() { + super(new DefaultMutableTreeNode()); + } + + public void removeZones(Collection<ZoneUIModel> zonesToRemove) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); + + while (rootChildren.hasMoreElements()) { + + ZoneNode zoneNode = (ZoneNode) rootChildren.nextElement(); + + if (zonesToRemove.contains(zoneNode.getZone())) { + nodesToRemove.add(zoneNode); + } + } + + nodesToRemove.forEach(zoneNode ->removeNodeFromParent(zoneNode)); + } + + public void addZones(Collection<ZoneUIModel> zonesToAdd) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + zonesToAdd.forEach(zone -> { + + ZoneNode zoneNode = new ZoneNode(zone); + insertNodeInto(zoneNode, root, root.getChildCount()); + + }); + } + + public void setStratas(ZoneUIModel zone, Collection<Strata> stratas) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + + ZoneNode zoneNode = null; + + while (zoneNode == null && rootChildren.hasMoreElements()) { + ZoneNode nextNode = (ZoneNode) rootChildren.nextElement(); + if (zone.equals(nextNode.getZone())) { + zoneNode = nextNode; + } + } + + Preconditions.checkNotNull(zoneNode); + + for (Strata strata : stratas) { + + StrataNode strataNode = new StrataNode(strata); + + if (log.isInfoEnabled()) { + log.info("add strata " + strata.getLocation().getLabel()); + } + + insertNodeInto(strataNode, zoneNode, zoneNode.getChildCount()); + +// newAvailableStratas.get(strata).forEach(substrata -> { +// +// if (substrata != null) { +// SubStrataNode subStrataNode = new SubStrataNode(substrata); +// insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); +// } +// +// }); + + } + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java new file mode 100644 index 0000000..87255bc --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; + +import fr.ifremer.tutti.persistence.entities.protocol.Strata; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class StrataNode extends DefaultMutableTreeNode { + + public StrataNode(Strata strata) { + super(strata, true); + } + + public Strata getStrata() { + return (Strata) userObject; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java new file mode 100644 index 0000000..0cc705d --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; + +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class SubStrataNode extends DefaultMutableTreeNode { + + public SubStrataNode(SubStrata substrata) { + super(substrata, false); + } + + public SubStrata getSubstrata() { + return (SubStrata) userObject; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java new file mode 100644 index 0000000..8406978 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; + +import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneUIModel; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneNode extends DefaultMutableTreeNode { + + public ZoneNode(ZoneUIModel zone) { + super(zone, true); + } + + public ZoneUIModel getZone() { + return (ZoneUIModel) userObject; + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 4bc97c5f99e3e0678b11c0b455b4d76b31d525cd Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:39:17 2016 +0100 creation de zones + déplacement des noeuds (refs #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 22 +- .../swing/content/protocol/zones/ZoneEditorUI.jcss | 8 + .../protocol/zones/ZoneEditorUIHandler.java | 238 +++++++++++++-------- .../content/protocol/zones/ZoneEditorUIModel.java | 157 ++++++++------ .../protocol/zones/actions/AddStratasAction.java | 29 ++- .../protocol/zones/actions/CreateZoneAction.java | 30 +++ .../zones/actions/RemoveStratasAction.java | 2 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 9 files changed, 323 insertions(+), 165 deletions(-) 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 ae21d09..29fdd33 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 @@ -19,10 +19,24 @@ <ZoneEditorUIModel id='model' javaBean='new ZoneEditorUIModel()'/> <row> + <cell> + <JToolBar id="zonesTreeToolBar"> + <JButton id="createZone"/> + </JToolBar> + </cell> + <cell> + <JLabel/> + </cell> + <cell> + <JToolBar id="availableStratasTreeToolBar"> + </JToolBar> + </cell> + </row> + <row> <cell weightx='0.5' weighty='1' fill='both'> - <JScrollPane onFocusGained='zoneTree.requestFocus()'> + <JScrollPane onFocusGained='zonesTree.requestFocus()'> <!-- List of the zones --> - <JTree id='zoneTree'/> + <JTree id='zonesTree'/> <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> <!--onMouseClicked='handler.onUniverseListClicked(event)'--> <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> @@ -37,9 +51,9 @@ </cell> <cell weightx='0.5' weighty='1' fill='both'> - <JScrollPane onFocusGained='availableStratas.requestFocus()'> + <JScrollPane onFocusGained='availableStratasTree.requestFocus()'> <!-- List of the available stratas and substratas --> - <JTree id='availableStratas' onValueChanged="availableStratas.expandPath(event.getNewLeadSelectionPath())"/> + <JTree id='availableStratasTree' onValueChanged="availableStratasTree.expandPath(event.getNewLeadSelectionPath())"/> <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> <!--onMouseClicked='handler.onSelectedListClicked(event)'--> <!--onKeyPressed='handler.onKeyPressedOnSelectedList(event)'/>--> 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 f6b30e7..8c336fa 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 @@ -4,14 +4,22 @@ JTree { scrollsOnExpand: true; rootVisible: false; showsRootHandles: false; + cellRenderer: {new ZoneEditorTreeCellRenderer()}; +} + +#createZone { + actionIcon: add; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CreateZoneAction.class}; } #addButton { text: "<<"; + enabled: {zonesTree.getSelectionCount() == 1}; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; } #removeButton { text: ">>"; + enabled: {zonesTree.getSelectionCount() >= 1}; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; } \ No newline at end of file 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 f46342a..31147ea 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 @@ -1,7 +1,14 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; +import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.Stratas; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; +import fr.ifremer.tutti.persistence.entities.protocol.SubStratas; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import jaxx.runtime.validator.swing.SwingValidator; @@ -10,15 +17,13 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; -import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; -import java.util.Enumeration; -import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -29,127 +34,184 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode /** Logger. */ private static final Log log = LogFactory.getLog(ZoneEditorUIHandler.class); + protected final PropertyChangeListener stratasChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + ZoneUIModel zone = (ZoneUIModel) evt.getSource(); + Collection<Strata> stratas = (Collection<Strata>) evt.getNewValue(); + + if (log.isInfoEnabled()) { + log.info("stratas " + stratas); + } + + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); + zonesTreeModel.setStratas(zone, stratas); + zonesTreeModel.reload(); + } + }; + @Override public void afterInit(ZoneEditorUI zoneEditorUI) { initUI(zoneEditorUI); - getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, + // init models + + getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, evt -> { - Multimap<TuttiLocation, TuttiLocation> oldAvailableStratas = - (Multimap<TuttiLocation, TuttiLocation>) evt.getOldValue(); + List<ZoneUIModel> newZones = (List<ZoneUIModel>) evt.getNewValue(); + List<ZoneUIModel> oldZones = (List<ZoneUIModel>) evt.getOldValue(); - Multimap<TuttiLocation, TuttiLocation> newAvailableStratas = - (Multimap<TuttiLocation, TuttiLocation>) evt.getNewValue(); + Collection<ZoneUIModel> zonesToAdd = new ArrayList<>(newZones); + zonesToAdd.removeAll(oldZones); - Collection<TuttiLocation> stratasToAdd = new ArrayList<>(newAvailableStratas.keySet()); - stratasToAdd.removeAll(oldAvailableStratas.keySet()); + Collection<ZoneUIModel> zonesToRemove = new ArrayList<>(oldZones); + zonesToRemove.removeAll(newZones); - Collection<TuttiLocation> stratasToRemove = new ArrayList<>(oldAvailableStratas.keySet()); - stratasToRemove.removeAll(newAvailableStratas.keySet()); + updateZonesTreeModel(zonesToAdd, zonesToRemove); - updateTreeModel(newAvailableStratas, oldAvailableStratas, stratasToAdd, stratasToRemove); + zonesToRemove.forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + stratasChangeListener)); + zonesToAdd.forEach(zone -> zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + stratasChangeListener)); }); - DefaultMutableTreeNode root = new DefaultMutableTreeNode(); - - TreeModel availableStratasTreeModel = new DefaultTreeModel(root); - - JTree availableStratasTree = ui.getAvailableStratas(); - availableStratasTree.setCellRenderer(new DefaultTreeCellRenderer() { - - @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { - super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - String text = "test"; - if (value instanceof DefaultMutableTreeNode) { - Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); - if (userObject instanceof TuttiLocation) { - text = ((TuttiLocation) userObject).getLabel(); - } - } - setText(text); - return this; - } + getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, + evt -> { + + List<Strata> oldAvailableStratas = (List<Strata>) evt.getOldValue(); + + List<Strata> newAvailableStratas = (List<Strata> ) evt.getNewValue(); + + Collection<Strata> stratasToAdd = new ArrayList<>(newAvailableStratas); + stratasToAdd.removeAll(oldAvailableStratas); + + Collection<Strata> stratasToRemove = new ArrayList<>(oldAvailableStratas); + stratasToRemove.removeAll(newAvailableStratas); + + updateAvailableStratasTreeModel(stratasToAdd, stratasToRemove); }); + + // init trees + + TreeModel availableStratasTreeModel = new StratasTreeModel(); + JTree availableStratasTree = ui.getAvailableStratasTree(); availableStratasTree.setModel(availableStratasTreeModel); - PersistenceService persistenceService = getPersistenceService(); + TreeModel zonesTreeModel = new ZonesTreeModel(); + JTree zonesTree = ui.getZonesTree(); + zonesTree.setModel(zonesTreeModel); - TuttiLocation programZone = getDataContext().getProgram().getZone(); + // get data - Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = - persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId()); + initModel(); + } - getModel().setAvailableStratas(programStratasAndSubstratas); + @Override + public SwingValidator<ZoneEditorUIModel> getValidator() { + return null; } - protected void updateTreeModel(Multimap<TuttiLocation, TuttiLocation> newAvailableStratas, - Multimap<TuttiLocation, TuttiLocation> oldAvailableStratas, - Collection<TuttiLocation> stratasToAdd, - Collection<TuttiLocation> stratasToRemove) { + @Override + protected JComponent getComponentToFocus() { + return ui.getZonesTree(); + } - if (log.isInfoEnabled()) { - log.info("updateTrremodle"); - } + @Override + public void onCloseUI() { + getModel().getZones().forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + stratasChangeListener)); + } - JTree availableStratas = getUI().getAvailableStratas(); - DefaultTreeModel availableStratasTreeModel = (DefaultTreeModel) availableStratas.getModel(); - DefaultMutableTreeNode root = (DefaultMutableTreeNode) availableStratasTreeModel.getRoot(); + protected void initModel() { + PersistenceService persistenceService = getPersistenceService(); - Enumeration rootChildren = root.children(); - Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); - while (rootChildren.hasMoreElements()) { - DefaultMutableTreeNode strataNode = (DefaultMutableTreeNode) rootChildren.nextElement(); - if (log.isInfoEnabled()) { - log.info("root child " + ((TuttiLocation) strataNode.getUserObject()).getLabel()); - } - if (stratasToRemove.contains(strataNode.getUserObject())) { - if (log.isInfoEnabled()) { - log.info("remove " + ((TuttiLocation) strataNode.getUserObject()).getLabel()); - } - nodesToRemove.add(strataNode); - } + TuttiLocation programZone = getDataContext().getProgram().getZone(); + + Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = + HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); + //FIXME only for tests + TuttiLocation test = programStratasAndSubstratas.keySet().iterator().next(); + for (int i = 0 ; i < 5 ; i++) { + TuttiLocation location = TuttiLocations.newTuttiLocation(); + location.setId(i); + location.setLabel("substrata" + i); + programStratasAndSubstratas.put(test, location); } - nodesToRemove.forEach(strataNode -> root.remove(strataNode)); - stratasToAdd.forEach(strata -> { + Collection<Zone> zones = getDataContext().getProtocol().getZone(); + Collection<Strata> protocolStratas = zones.stream() + .map(zone -> zone.getStrata()) + .flatMap(stratas -> stratas.stream()) + .collect(Collectors.toSet()); - DefaultMutableTreeNode strataNode = new DefaultMutableTreeNode(strata, true); - root.add(strataNode); + protocolStratas.forEach(strata -> { - if (log.isInfoEnabled()) { - log.info("add strata node " + strata.getLabel()); - } + TuttiLocation strataLocation = strata.getLocation(); + + Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() + .stream() + .map(subStrata -> subStrata.getLocation()) + .collect(Collectors.toSet()); - newAvailableStratas.get(strata).forEach(substrata -> { + subStrataLocations.forEach(subStrataLocation -> + programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); + }); + + List<Strata> availableStratas = new ArrayList<>(); + programStratasAndSubstratas.keySet().forEach(strataLocation -> { - if (substrata != null) { - DefaultMutableTreeNode subStrataNode = new DefaultMutableTreeNode(substrata, false); - strataNode.add(subStrataNode); - log.info("add substrata node " + substrata.getLabel()); - } + Strata strata = Stratas.newStrata(); + strata.setLocation(strataLocation); - }); + List<SubStrata> subStratas = programStratasAndSubstratas.get(strataLocation) + .stream() + .map(subStrataLocation -> { + SubStrata subStrata = SubStratas.newSubStrata(); + subStrata.setLocation(subStrataLocation); + return subStrata; + }) + .collect(Collectors.toList()); + strata.setSubstrata(subStratas); }); - availableStratasTreeModel.reload(); - } + getModel().setAvailableStratas(availableStratas); - @Override - public SwingValidator<ZoneEditorUIModel> getValidator() { - return null; + List<ZoneUIModel> zoneModels = zones.stream() + .map(zone -> { + ZoneUIModel zoneUIModel = new ZoneUIModel(); + zoneUIModel.fromEntity(zone); + return zoneUIModel; + }) + .collect(Collectors.toList()); + getModel().setZones(zoneModels); } - @Override - protected JComponent getComponentToFocus() { - return ui.getZoneTree(); + protected void updateZonesTreeModel(Collection<ZoneUIModel> zonesToAdd, Collection<ZoneUIModel> zonesToRemove) { + JTree zonesTree = getUI().getZonesTree(); + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) zonesTree.getModel(); + + zonesTreeModel.removeZones(zonesToRemove); + + zonesTreeModel.addZones(zonesToAdd); + + zonesTreeModel.reload(); } - @Override - public void onCloseUI() { + protected void updateAvailableStratasTreeModel(Collection<Strata> stratasToAdd, + Collection<Strata> stratasToRemove) { + + JTree availableStratasTree = getUI().getAvailableStratasTree(); + StratasTreeModel availableStratasTreeModel = (StratasTreeModel) availableStratasTree.getModel(); + + availableStratasTreeModel.removeStratas(stratasToRemove); + availableStratasTreeModel.addStratas(stratasToAdd); + + availableStratasTreeModel.reload(); } + } 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 9645011..c212888 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,8 +1,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -11,10 +10,8 @@ import org.jdesktop.beans.AbstractSerializableBean; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -29,101 +26,137 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public static final String PROPERTY_ZONES = "zones"; - protected Map<TuttiLocation, TuttiLocation> strataBySubstrata; + protected Map<SubStrata, Strata> strataBySubstrata; - protected final Multimap<TuttiLocation, TuttiLocation> availableStratas = HashMultimap.create(); + protected final List<Strata> availableStratas = new ArrayList<>(); - protected final List<Zone> zones = new ArrayList<>(); + protected final List<ZoneUIModel> zones = new ArrayList<>(); - public Multimap<TuttiLocation, TuttiLocation> getAvailableStratas() { + public List<Strata> getAvailableStratas() { return availableStratas; } - public void setAvailableStratas(Multimap<TuttiLocation, TuttiLocation> availableStratas) { + public void setAvailableStratas(List<Strata> availableStratas) { this.availableStratas.clear(); addAllAvailableStratas(availableStratas); strataBySubstrata = new HashMap<>(); - for (TuttiLocation stratas : availableStratas.keySet()) { - for (TuttiLocation substratas : availableStratas.get(stratas)) { - strataBySubstrata.put(substratas, stratas); + for (Strata strata : availableStratas) { + for (SubStrata substrata : strata.getSubstrata()) { + strataBySubstrata.put(substrata, strata); } } } - public void addAllAvailableStratas(Multimap<TuttiLocation, TuttiLocation> availableStratas) { + public void addAllAvailableStratas(List<Strata> availableStratas) { Object oldValue = copyAvailableStratas(); - this.availableStratas.putAll(availableStratas); + this.availableStratas.addAll(availableStratas); firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); } public void addAvailableStratas(Collection<TuttiLocation> stratasAndSubStratas) { - Object oldValue = copyAvailableStratas(); - - Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() - .filter(location -> strataBySubstrata.containsKey(location)) - .collect(Collectors.toSet()); - - Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); - stratas.removeAll(substratas); - - stratas.forEach(strata -> { - - Collection<TuttiLocation> strataSubstratas = - strataBySubstrata.entrySet() - .stream() - .filter(entry->entry.getValue().equals(strata)) - .map(Map.Entry::getKey) - .collect(Collectors.toSet()); - - substratas.removeAll(strataSubstratas); - availableStratas.putAll(strata, strataSubstratas); - - }); - - substratas.forEach(substrata -> { - availableStratas.put(strataBySubstrata.get(substrata), substrata); - }); - - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); +// Object oldValue = copyAvailableStratas(); +// +// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() +// .filter(location -> strataBySubstrata.containsKey(location)) +// .collect(Collectors.toSet()); +// +// Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); +// stratas.removeAll(substratas); +// +// stratas.forEach(strata -> { +// +// Collection<TuttiLocation> strataSubstratas = +// strataBySubstrata.entrySet() +// .stream() +// .filter(entry->entry.getValue().equals(strata)) +// .map(Map.Entry::getKey) +// .collect(Collectors.toSet()); +// +// substratas.removeAll(strataSubstratas); +// availableStratas.putAll(strata, strataSubstratas); +// +// }); +// +// substratas.forEach(substrata -> { +// availableStratas.put(strataBySubstrata.get(substrata), substrata); +// }); +// +// firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); } - public void removeAvailableStratas(Collection<TuttiLocation> stratasAndSubStratas) { + public void removeAvailableStratas(Collection<Strata> stratas) { Object oldValue = copyAvailableStratas(); - Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() - .filter(location -> strataBySubstrata.containsKey(location)) - .collect(Collectors.toSet()); - - Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); - stratas.removeAll(substratas); - - stratas.forEach(strata -> { - availableStratas.removeAll(strata); - }); - - substratas.forEach(substrata -> { - availableStratas.remove(strataBySubstrata.get(substrata), substrata); - }); + availableStratas.removeAll(stratas); firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); } - public List<Zone> getZones() { + public void removeAvailableSubStratas(Collection<SubStrata> subStratas, Strata strata) { +// +// Object oldValue = copyAvailableStratas(); +// +// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() +// .filter(location -> strataBySubstrata.containsKey(location)) +// .collect(Collectors.toSet()); +// +// Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); +// stratas.removeAll(substratas); +// +// stratas.forEach(strata -> { +// availableStratas.removeAll(strata); +// }); +// +// substratas.forEach(substrata -> { +// availableStratas.remove(strataBySubstrata.get(substrata), substrata); +// }); +// +// firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); +// + } + + public List<ZoneUIModel> getZones() { return zones; } - public void setZones(List<Zone> zones) { + public void setZones(List<ZoneUIModel> zones) { Object oldValue = getZones(); this.zones.clear(); this.zones.addAll(zones); firePropertyChange(PROPERTY_ZONES, oldValue, zones); } - protected Multimap<TuttiLocation, TuttiLocation> copyAvailableStratas() { - return HashMultimap.create(availableStratas); + public void addZone(ZoneUIModel zone) { + Object oldValue = new ArrayList<>(getZones()); + zones.add(zone); + firePropertyChange(PROPERTY_ZONES, oldValue, zones); + } + + public void removeZone(ZoneUIModel zone) { + Object oldValue = new ArrayList<>(getZones()); + zones.remove(zone); + firePropertyChange(PROPERTY_ZONES, oldValue, zones); + } + + public void moveStratasToZone(Collection<Strata> stratas, ZoneUIModel zone) { + removeAvailableStratas(stratas); + + if (log.isInfoEnabled()) { + log.info("stratas " + stratas); + } + +// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() +// .filter(location -> strataBySubstrata.containsKey(location)) +// .collect(Collectors.toSet()); + + zone.addAllStrata(stratas); + } + + protected List<Strata> copyAvailableStratas() { + return new ArrayList<>(availableStratas); } } 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 75ddcb5..1392528 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 @@ -1,7 +1,9 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; -import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -28,21 +30,28 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - JTree availableStratasTree = zoneEditorUI.getAvailableStratas(); - TreePath[] selectionPaths = availableStratasTree.getSelectionPaths(); + JTree availableStratasTree = zoneEditorUI.getAvailableStratasTree(); + TreePath[] selectedStratas = availableStratasTree.getSelectionPaths(); - Set<TuttiLocation> locationsToAdd = new HashSet<>(); + JTree zonesTree = zoneEditorUI.getZonesTree(); + TreePath selectedZonePath = zonesTree.getSelectionPath(); + ZoneNode zoneNode = (ZoneNode) selectedZonePath.getLastPathComponent(); + ZoneUIModel selectedZone = zoneNode.getZone(); - for (TreePath treePath : selectionPaths) { + Set<Strata> locationsToAdd = new HashSet<>(); + + for (TreePath treePath : selectedStratas) { +//FIXME DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent(); - TuttiLocation location = (TuttiLocation) node.getUserObject(); - if (log.isInfoEnabled()) { - log.info("add location " + location.getLabel()); - } + Strata location = (Strata) node.getUserObject(); +// if (log.isInfoEnabled()) { +// log.info("add location " + location.getLabel()); +// } locationsToAdd.add(location); + } - zoneEditorUI.getModel().removeAvailableStratas(locationsToAdd); + zoneEditorUI.getModel().moveStratasToZone(locationsToAdd, selectedZone); } } 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 new file mode 100644 index 0000000..af2c00b --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CreateZoneAction.java @@ -0,0 +1,30 @@ +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.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; + +import javax.swing.JOptionPane; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CreateZoneAction extends SimpleActionSupport<ZoneEditorUI> { + + public CreateZoneAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + + String zoneLabel = JOptionPane.showInputDialog(t("tutti.zoneEditor.createZone.message")); + + 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/RemoveStratasAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java index 4c7390f..041c64b 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 @@ -17,6 +17,6 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - ((DefaultTreeModel) zoneEditorUI.getAvailableStratas().getModel()).reload(); + ((DefaultTreeModel) zoneEditorUI.getAvailableStratasTree().getModel()).reload(); } } 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 34b64e4..ffd5466 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 @@ -2345,3 +2345,4 @@ tutti.vesselUseFeatureTable.action.removeCaracteristic.tip= tutti.vesselUseFeatureTable.table.header.key= tutti.vesselUseFeatureTable.table.header.value= tutti.vesselUseFeatureTable.title= +tutti.zoneEditor.createZone.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 e040c77..6bd00bc 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 @@ -2175,3 +2175,4 @@ tutti.vesselUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caracté tutti.vesselUseFeatureTable.table.header.key=Caractéristique tutti.vesselUseFeatureTable.table.header.value=Valeur tutti.vesselUseFeatureTable.title=Autres paramètres +tutti.zoneEditor.createZone.message= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 4bfd27e712ea4d7c72f54fb63843a6c26f0586fd Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 28 19:21:56 2016 +0100 création des modeles de strates et sous strates (refs #7929) --- .../content/protocol/zones/ZonesTreeModel.java | 98 ---------- .../protocol/zones/models/StrataUIModel.java | 192 ++++++++++++++++++++ .../protocol/zones/models/SubStrataUIModel.java | 108 +++++++++++ .../protocol/zones/{ => models}/ZoneUIModel.java | 44 ++++- .../content/protocol/zones/nodes/StrataNode.java | 20 -- .../protocol/zones/nodes/SubStrataNode.java | 20 -- .../content/protocol/zones/tree/StrataNode.java | 20 ++ .../zones/{ => tree}/StratasTreeModel.java | 75 +++++++- .../content/protocol/zones/tree/SubStrataNode.java | 20 ++ .../{ => tree}/ZoneEditorTreeCellRenderer.java | 16 +- .../protocol/zones/{nodes => tree}/ZoneNode.java | 4 +- .../protocol/zones/tree/ZonesTreeModel.java | 202 +++++++++++++++++++++ 12 files changed, 656 insertions(+), 163 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java deleted file mode 100644 index b2d3e19..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.java +++ /dev/null @@ -1,98 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones; - -import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.entities.protocol.Strata; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.StrataNode; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; -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; - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public class ZonesTreeModel extends DefaultTreeModel { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ZonesTreeModel.class); - - public ZonesTreeModel() { - super(new DefaultMutableTreeNode()); - } - - public void removeZones(Collection<ZoneUIModel> zonesToRemove) { - - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); - - Enumeration rootChildren = root.children(); - Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); - - while (rootChildren.hasMoreElements()) { - - ZoneNode zoneNode = (ZoneNode) rootChildren.nextElement(); - - if (zonesToRemove.contains(zoneNode.getZone())) { - nodesToRemove.add(zoneNode); - } - } - - nodesToRemove.forEach(zoneNode ->removeNodeFromParent(zoneNode)); - } - - public void addZones(Collection<ZoneUIModel> zonesToAdd) { - - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); - - zonesToAdd.forEach(zone -> { - - ZoneNode zoneNode = new ZoneNode(zone); - insertNodeInto(zoneNode, root, root.getChildCount()); - - }); - } - - public void setStratas(ZoneUIModel zone, Collection<Strata> stratas) { - - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); - - Enumeration rootChildren = root.children(); - - ZoneNode zoneNode = null; - - while (zoneNode == null && rootChildren.hasMoreElements()) { - ZoneNode nextNode = (ZoneNode) rootChildren.nextElement(); - if (zone.equals(nextNode.getZone())) { - zoneNode = nextNode; - } - } - - Preconditions.checkNotNull(zoneNode); - - for (Strata strata : stratas) { - - StrataNode strataNode = new StrataNode(strata); - - if (log.isInfoEnabled()) { - log.info("add strata " + strata.getLocation().getLabel()); - } - - insertNodeInto(strataNode, zoneNode, zoneNode.getChildCount()); - -// newAvailableStratas.get(strata).forEach(substrata -> { -// -// if (substrata != null) { -// SubStrataNode subStrataNode = new SubStrataNode(substrata); -// insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); -// } -// -// }); - - } - } -} 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 new file mode 100644 index 0000000..e7a09f8 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/StrataUIModel.java @@ -0,0 +1,192 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.models; + +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.Stratas; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Objects; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIModel> implements Strata { + + public static final String PROPERTY_ZONE = "zone"; + + protected final Strata delegate = Stratas.newStrata(); + + protected ZoneUIModel zone; + + protected static Binder<StrataUIModel, Strata> toBeanBinder = BinderFactory.newBinder(StrataUIModel.class, Strata.class); + + protected static Binder<Strata, StrataUIModel> fromBeanBinder = BinderFactory.newBinder(Strata.class, StrataUIModel.class); + + public StrataUIModel() { + super(fromBeanBinder, toBeanBinder); + } + + public StrataUIModel(TuttiLocation location) { + this(); + setLocation(location); + } + + @Override + public void addAllSubstrata(Collection<SubStrata> substrata) { + Object oldValue = new HashSet<>(getSubstrata()); + delegate.addAllSubstrata(substrata); + firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); + } + + @Override + public void addSubstrata(SubStrata substrata) { + Object oldValue = new HashSet<>(getSubstrata()); + delegate.addSubstrata(substrata); + firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); + } + + @Override + public boolean containsAllSubstrata(Collection<SubStrata> substrata) { + return delegate.containsAllSubstrata(substrata); + } + + @Override + public boolean containsSubstrata(SubStrata substrata) { + return delegate.containsSubstrata(substrata); + } + + @Override + public TuttiLocation getLocation() { + return delegate.getLocation(); + } + + @Override + public Collection<SubStrata> getSubstrata() { + return delegate.getSubstrata(); + } + + @Override + public SubStrata getSubstrata(int index) { + return delegate.getSubstrata(index); + } + + @Override + public boolean isSubstrataEmpty() { + return delegate.isSubstrataEmpty(); + } + + @Override + public boolean removeAllSubstrata(Collection<SubStrata> substrata) { + Object oldValue = new HashSet<>(getSubstrata()); + boolean result = delegate.removeAllSubstrata(substrata); + firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); + return result; + } + + @Override + public boolean removeSubstrata(SubStrata substrata) { + Object oldValue = new HashSet<>(getSubstrata()); + boolean result = delegate.removeSubstrata(substrata); + firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); + return result; + } + + @Override + public void setLocation(TuttiLocation location) { + Object oldValue = getLocation(); + delegate.setLocation(location); + firePropertyChanged(PROPERTY_LOCATION, oldValue, getLocation()); + } + + @Override + public void setSubstrata(Collection<SubStrata> substrata) { + Object oldValue = new HashSet<>(getSubstrata()); + delegate.setSubstrata(substrata); + firePropertyChanged(PROPERTY_SUBSTRATA, oldValue, getSubstrata()); + } + + @Override + public int sizeSubstrata() { + return delegate.sizeSubstrata(); + } + + @Override + public String getId() { + return delegate.getId(); + } + + @Override + public Integer getIdAsInt() { + return delegate.getIdAsInt(); + } + + @Override + public void setId(Integer id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, getId()); + } + + @Override + public void setId(String id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, getId()); + } + + public String getLabel() { + return getLocation() == null ? null : getLocation().getLabel(); + } + + public ZoneUIModel getZone() { + return zone; + } + + public void setZone(ZoneUIModel zone) { + Object oldValue = getZone(); + this.zone = zone; + firePropertyChange(PROPERTY_ZONE, oldValue, zone); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } + if (!StrataUIModel.class.equals(obj.getClass())) { + return false; + } + if (getId() != null) { + return getId().equals(((StrataUIModel) obj).getId()); + } + if (getLocation() != null) { + return getLocation().equals(((StrataUIModel) obj).getLocation()); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getLocation()); + } + + @Override + public String toString() { + return getLabel(); + } + + @Override + protected Strata newEntity() { + return Stratas.newStrata(); + } + +} 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 new file mode 100644 index 0000000..a57aa4c --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/SubStrataUIModel.java @@ -0,0 +1,108 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.models; + +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; +import fr.ifremer.tutti.persistence.entities.protocol.SubStratas; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Objects; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class SubStrataUIModel extends AbstractTuttiBeanUIModel<SubStrata, SubStrataUIModel> implements SubStrata { + + protected final SubStrata delegate = SubStratas.newSubStrata(); + + protected static Binder<SubStrataUIModel, SubStrata> toBeanBinder = BinderFactory.newBinder(SubStrataUIModel.class, SubStrata.class); + + protected static Binder<SubStrata, SubStrataUIModel> fromBeanBinder = BinderFactory.newBinder(SubStrata.class, SubStrataUIModel.class); + + public SubStrataUIModel() { + super(fromBeanBinder, toBeanBinder); + } + + public SubStrataUIModel(TuttiLocation location) { + this(); + setLocation(location); + } + + @Override + public TuttiLocation getLocation() { + return delegate.getLocation(); + } + + @Override + public void setLocation(TuttiLocation location) { + Object oldValue = getLocation(); + delegate.setLocation(location); + firePropertyChanged(PROPERTY_LOCATION, oldValue, getLocation()); + } + + @Override + public String getId() { + return delegate.getId(); + } + + @Override + public void setId(Integer id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, getId()); + } + + @Override + public void setId(String id) { + Object oldValue = getId(); + delegate.setId(id); + firePropertyChanged(PROPERTY_ID, oldValue, getId()); + } + + @Override + public Integer getIdAsInt() { + return delegate.getIdAsInt(); + } + + public String getLabel() { + return getLocation() == null ? null : getLocation().getLabel(); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } + if (!StrataUIModel.class.equals(obj.getClass())) { + return false; + } + if (getId() != null) { + return getId().equals(((StrataUIModel) obj).getId()); + } + if (getLocation() != null) { + return getLocation().equals(((StrataUIModel) obj).getLocation()); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(getId(), getLocation()); + } + + @Override + public String toString() { + return getLabel(); + } + + @Override + protected SubStrata newEntity() { + return SubStratas.newSubStrata(); + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java similarity index 69% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java index e01af7e..6ff1188 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/models/ZoneUIModel.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones; +package fr.ifremer.tutti.ui.swing.content.protocol.zones.models; import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.persistence.entities.protocol.Zone; @@ -30,14 +30,16 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp public void addAllStrata(Collection<Strata> strata) { Object oldValue = new HashSet<>(getStrata()); delegate.addAllStrata(strata); - firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + updateStrataZone(strata, this); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); } @Override public void addStrata(Strata strata) { Object oldValue = new HashSet<>(getStrata()); delegate.addStrata(strata); - firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + updateStrataZone(strata, this); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); } @Override @@ -65,6 +67,14 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp return delegate.getStrata(index); } + /** + * @param strata + * @return the strata from the stratas of the zone which equals the strata in parameters + */ + public Strata getStrata(Strata strata) { + return getStrata().stream().filter(s -> s != null && s.equals(strata)).findFirst().orElse(null); + } + @Override public boolean isStrataEmpty() { return delegate.isStrataEmpty(); @@ -74,7 +84,8 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp public boolean removeAllStrata(Collection<Strata> strata) { Object oldValue = new HashSet<>(getStrata()); boolean result = delegate.removeAllStrata(strata); - firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + updateStrataZone(strata, null); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); return result; } @@ -82,7 +93,8 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp public boolean removeStrata(Strata strata) { Object oldValue = new HashSet<>(getStrata()); boolean result = delegate.removeStrata(strata); - firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + updateStrataZone(strata, null); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); return result; } @@ -96,8 +108,10 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp @Override public void setStrata(Collection<Strata> strata) { Object oldValue = new HashSet<>(getStrata()); + updateStrataZone(getStrata(), null); delegate.setStrata(strata); - firePropertyChanged(PROPERTY_STRATA, oldValue, strata); + updateStrataZone(strata, this); + firePropertyChanged(PROPERTY_STRATA, oldValue, getStrata()); } @Override @@ -130,7 +144,25 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp } @Override + public String toString() { + return getLabel(); + } + + @Override protected Zone newEntity() { return Zones.newZone(); } + + protected void updateStrataZone(Collection<Strata> stratas, ZoneUIModel zone) { + stratas.stream() + .filter(strata -> strata instanceof StrataUIModel) + .forEach(strata -> ((StrataUIModel) strata).setZone(zone)); + } + + protected void updateStrataZone(Strata strata, ZoneUIModel zone) { + if (strata instanceof StrataUIModel) { + ((StrataUIModel) strata).setZone(zone); + } + } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java deleted file mode 100644 index 87255bc..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/StrataNode.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; - -import fr.ifremer.tutti.persistence.entities.protocol.Strata; - -import javax.swing.tree.DefaultMutableTreeNode; - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public class StrataNode extends DefaultMutableTreeNode { - - public StrataNode(Strata strata) { - super(strata, true); - } - - public Strata getStrata() { - return (Strata) userObject; - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java deleted file mode 100644 index 0cc705d..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; - -import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; - -import javax.swing.tree.DefaultMutableTreeNode; - -/** - * @author Kevin Morin (Code Lutin) - * @since 4.5 - */ -public class SubStrataNode extends DefaultMutableTreeNode { - - public SubStrataNode(SubStrata substrata) { - super(substrata, false); - } - - public SubStrata getSubstrata() { - return (SubStrata) userObject; - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java new file mode 100644 index 0000000..c4a4f03 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; + +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class StrataNode extends DefaultMutableTreeNode { + + public StrataNode(StrataUIModel strata) { + super(strata, true); + } + + public StrataUIModel getStrata() { + return (StrataUIModel) userObject; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java similarity index 57% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java index 4a17b0f..b75dd47 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StratasTreeModel.java @@ -1,9 +1,9 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones; +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; -import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.StrataNode; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.SubStrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -26,7 +26,7 @@ public class StratasTreeModel extends DefaultTreeModel { super(new DefaultMutableTreeNode()); } - public void removeStratas(Collection<Strata> stratasToRemove) { + public void removeStratas(Collection<StrataUIModel> stratasToRemove) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); @@ -66,7 +66,7 @@ public class StratasTreeModel extends DefaultTreeModel { // // } - public void addStratas(Collection<Strata> stratasToAdd) { + public void addStratas(Collection<StrataUIModel> stratasToAdd) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); @@ -78,7 +78,7 @@ public class StratasTreeModel extends DefaultTreeModel { strata.getSubstrata().forEach(substrata -> { if (substrata != null) { - SubStrataNode subStrataNode = new SubStrataNode(substrata); + SubStrataNode subStrataNode = new SubStrataNode((SubStrataUIModel) substrata); insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); } @@ -88,14 +88,14 @@ public class StratasTreeModel extends DefaultTreeModel { } - public void addSubStratas(Collection<SubStrata> subStratas, Strata strata) { + public void addSubStratas(Collection<SubStrata> subStratas, StrataUIModel strata) { StrataNode strataNode = findStrataNode(strata); subStratas.forEach(substrata -> { if (substrata != null) { - SubStrataNode subStrataNode = new SubStrataNode(substrata); + SubStrataNode subStrataNode = new SubStrataNode((SubStrataUIModel) substrata); insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); } @@ -103,7 +103,46 @@ public class StratasTreeModel extends DefaultTreeModel { } - protected StrataNode findStrataNode(Strata strata) { + public void updateSubStratas(StrataUIModel strata, + Collection<SubStrataUIModel> subStratasToAdd, + Collection<SubStrataUIModel> subStratasToRemove) { + + StrataNode strataNode = findStrataNode(strata); + updateSubStratas(strataNode, subStratasToAdd, subStratasToRemove); + + } + + public void updateSubStratas(StrataNode strataNode, + Collection<SubStrataUIModel> subStratasToAdd, + Collection<SubStrataUIModel> subStratasToRemove) { + + Preconditions.checkNotNull(strataNode); + + for (SubStrataUIModel subStrata : subStratasToRemove) { + + SubStrataNode subStrataNode = findSubStrataNode(subStrata, strataNode); + + if (log.isInfoEnabled()) { + log.info("remove subStrata " + subStrata.getLabel()); + } + + removeNodeFromParent(subStrataNode); + } + + for (SubStrataUIModel subStrata : subStratasToAdd) { + + SubStrataNode subStrataNode = new SubStrataNode(subStrata); + + if (log.isInfoEnabled()) { + log.info("add strata " + subStrata.getLabel()); + } + + insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + + } + } + + protected StrataNode findStrataNode(StrataUIModel strata) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); @@ -120,4 +159,20 @@ public class StratasTreeModel extends DefaultTreeModel { return strataNode; } + + protected SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { + + Enumeration strataChildren = strataNode.children(); + + SubStrataNode subStrataNode = null; + + while (subStrataNode == null && strataChildren.hasMoreElements()) { + SubStrataNode nextNode = (SubStrataNode) strataChildren.nextElement(); + if (subStrata.equals(nextNode.getSubstrata())) { + subStrataNode = nextNode; + } + } + + return subStrataNode; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java new file mode 100644 index 0000000..0ce5a2f --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; + +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class SubStrataNode extends DefaultMutableTreeNode { + + public SubStrataNode(SubStrataUIModel substrata) { + super(substrata, false); + } + + public SubStrataUIModel getSubstrata() { + return (SubStrataUIModel) userObject; + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java similarity index 70% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java index a319e9e..97aad64 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java @@ -1,11 +1,10 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones; +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; -import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.persistence.entities.protocol.Zone; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.StrataNode; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.SubStrataNode; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; @@ -17,6 +16,9 @@ import java.awt.Component; */ public class ZoneEditorTreeCellRenderer extends DefaultTreeCellRenderer { + /** Logger. */ + private static final Log log = LogFactory.getLog(ZoneEditorTreeCellRenderer.class); + @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { @@ -25,8 +27,8 @@ public class ZoneEditorTreeCellRenderer extends DefaultTreeCellRenderer { String text = ""; if (value instanceof StrataNode) { - Strata strata = ((StrataNode) value).getStrata(); - text = strata.getLocation().getLabel(); + StrataUIModel strata = ((StrataNode) value).getStrata(); + text = strata.getLabel(); } else if (value instanceof SubStrataNode) { SubStrata substrata = ((SubStrataNode) value).getSubstrata(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java similarity index 69% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java index 8406978..924fa07 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java @@ -1,6 +1,6 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes; +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; import javax.swing.tree.DefaultMutableTreeNode; 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 new file mode 100644 index 0000000..3ee80fe --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZonesTreeModel.java @@ -0,0 +1,202 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; + +import com.google.common.base.Preconditions; +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; +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; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZonesTreeModel extends DefaultTreeModel { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ZonesTreeModel.class); + + public ZonesTreeModel() { + super(new DefaultMutableTreeNode()); + } + + public void removeZones(Collection<ZoneUIModel> zonesToRemove) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); + + while (rootChildren.hasMoreElements()) { + + ZoneNode zoneNode = (ZoneNode) rootChildren.nextElement(); + + if (zonesToRemove.contains(zoneNode.getZone())) { + nodesToRemove.add(zoneNode); + } + } + + nodesToRemove.forEach(zoneNode ->removeNodeFromParent(zoneNode)); + } + + public void addZones(Collection<ZoneUIModel> zonesToAdd) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + zonesToAdd.forEach(zone -> { + + ZoneNode zoneNode = new ZoneNode(zone); + insertNodeInto(zoneNode, root, root.getChildCount()); + + }); + } + + public void updateStratas(ZoneUIModel zone, + Collection<StrataUIModel> stratasToAdd, + Collection<StrataUIModel> stratasToRemove) { + + ZoneNode zoneNode = findZoneNode(zone); + updateStratas(zoneNode, stratasToAdd, stratasToRemove); + } + + public void updateStratas(ZoneNode zoneNode, + Collection<StrataUIModel> stratasToAdd, + Collection<StrataUIModel> stratasToRemove) { + + Preconditions.checkNotNull(zoneNode); + + for (StrataUIModel strata : stratasToRemove) { + + StrataNode strataNode = findStrataNode(strata, zoneNode); + + if (log.isInfoEnabled()) { + log.info("remove strata " + strata.getLabel()); + } + + removeNodeFromParent(strataNode); + } + + for (StrataUIModel strata : stratasToAdd) { + + StrataNode strataNode = new StrataNode(strata); + + if (log.isInfoEnabled()) { + log.info("add strata " + strata.getLabel()); + } + + insertNodeInto(strataNode, zoneNode, zoneNode.getChildCount()); + + Set<SubStrataUIModel> subStratasToAdd = strata.getSubstrata() + .stream() + .map(subStrata -> (SubStrataUIModel) subStrata) + .collect(Collectors.toSet()); + + updateSubStratas(strataNode, subStratasToAdd, Collections.emptySet()); + } + } + + public void updateSubStratas(StrataUIModel strata, + Collection<SubStrataUIModel> subStratasToAdd, + Collection<SubStrataUIModel> subStratasToRemove) { + + StrataNode strataNode = findStrataNode(strata, strata.getZone()); + updateSubStratas(strataNode, subStratasToAdd, subStratasToRemove); + + } + + public void updateSubStratas(StrataNode strataNode, + Collection<SubStrataUIModel> subStratasToAdd, + Collection<SubStrataUIModel> subStratasToRemove) { + + Preconditions.checkNotNull(strataNode); + + for (SubStrataUIModel subStrata : subStratasToRemove) { + + SubStrataNode subStrataNode = findSubStrataNode(subStrata, strataNode); + + if (log.isInfoEnabled()) { + log.info("remove subStrata " + subStrata.getLabel()); + } + + removeNodeFromParent(subStrataNode); + } + + for (SubStrataUIModel subStrata : subStratasToAdd) { + + SubStrataNode subStrataNode = new SubStrataNode(subStrata); + + if (log.isInfoEnabled()) { + log.info("add strata " + subStrata.getLabel()); + } + + insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); + + } + } + + protected ZoneNode findZoneNode(ZoneUIModel zone) { + + DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + + Enumeration rootChildren = root.children(); + + ZoneNode zoneNode = null; + + while (zoneNode == null && rootChildren.hasMoreElements()) { + ZoneNode nextNode = (ZoneNode) rootChildren.nextElement(); + if (zone.equals(nextNode.getZone())) { + zoneNode = nextNode; + } + } + + return zoneNode; + } + + protected StrataNode findStrataNode(StrataUIModel strata, ZoneUIModel zone) { + + ZoneNode zoneNode = findZoneNode(zone); + + return findStrataNode(strata, zoneNode); + } + + protected StrataNode findStrataNode(StrataUIModel strata, ZoneNode zoneNode) { + + Enumeration zoneChildren = zoneNode.children(); + + StrataNode strataNode = null; + + while (strataNode == null && zoneChildren.hasMoreElements()) { + StrataNode nextNode = (StrataNode) zoneChildren.nextElement(); + if (strata.equals(nextNode.getStrata())) { + strataNode = nextNode; + } + } + + return strataNode; + } + + protected SubStrataNode findSubStrataNode(SubStrataUIModel subStrata, StrataNode strataNode) { + + Enumeration strataChildren = strataNode.children(); + + SubStrataNode subStrataNode = null; + + while (subStrataNode == null && strataChildren.hasMoreElements()) { + SubStrataNode nextNode = (SubStrataNode) strataChildren.nextElement(); + if (subStrata.equals(nextNode.getSubstrata())) { + subStrataNode = nextNode; + } + } + + return subStrataNode; + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 44cb2a5ea518820c395cc232250c12a12810022c Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 28 19:22:03 2016 +0100 ajout des listeners sur les strates et sous strates (refs #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 1 + .../protocol/zones/ZoneEditorUIHandler.java | 136 +++++++++++++---- .../content/protocol/zones/ZoneEditorUIModel.java | 165 ++++++++++++--------- .../protocol/zones/actions/AddStratasAction.java | 51 +++++-- .../protocol/zones/actions/CreateZoneAction.java | 10 +- .../zones/actions/RemoveStratasAction.java | 58 +++++++- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 7 files changed, 299 insertions(+), 124 deletions(-) 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 29fdd33..18129bb 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 @@ -3,6 +3,7 @@ implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ZoneEditorUIModel, ZoneEditorUIHandler>'> <import> + fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZoneEditorTreeCellRenderer fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil </import> 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 31147ea..80a630c 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 @@ -3,13 +3,16 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.protocol.Strata; -import fr.ifremer.tutti.persistence.entities.protocol.Stratas; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; -import fr.ifremer.tutti.persistence.entities.protocol.SubStratas; import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; import fr.ifremer.tutti.service.PersistenceService; +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; +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.validator.swing.SwingValidator; import org.apache.commons.logging.Log; @@ -22,6 +25,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; @@ -38,16 +42,76 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode @Override public void propertyChange(PropertyChangeEvent evt) { + ZoneUIModel zone = (ZoneUIModel) evt.getSource(); - Collection<Strata> stratas = (Collection<Strata>) evt.getNewValue(); - if (log.isInfoEnabled()) { - log.info("stratas " + stratas); - } + Collection<StrataUIModel> newStratas = (Collection<StrataUIModel>) evt.getNewValue(); + Collection<StrataUIModel> oldStratas = (Collection<StrataUIModel>) evt.getOldValue(); + + Collection<StrataUIModel> stratasToAdd = new ArrayList<>(newStratas); + stratasToAdd.removeAll(oldStratas); + + Collection<StrataUIModel> stratasToRemove = new ArrayList<>(oldStratas); + stratasToRemove.removeAll(newStratas); + + stratasToRemove.forEach(strata -> strata.removePropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, + zoneSubStratasChangeListener)); + stratasToAdd.forEach(strata -> strata.addPropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, + zoneSubStratasChangeListener)); + + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); + zonesTreeModel.updateStratas(zone, stratasToAdd, stratasToRemove); + zonesTreeModel.reload(); + } + }; + + protected final PropertyChangeListener zoneSubStratasChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + StrataUIModel strata = (StrataUIModel) evt.getSource(); + + Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); + Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); + + Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); + subStratasToAdd.removeAll(oldSubStratas); + + Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); + subStratasToRemove.removeAll(newSubStratas); ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); - zonesTreeModel.setStratas(zone, stratas); + zonesTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); zonesTreeModel.reload(); + + } + }; + + protected final PropertyChangeListener availableSubStratasChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + StrataUIModel strata = (StrataUIModel) evt.getSource(); + + Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); + Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); + + Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); + subStratasToAdd.removeAll(oldSubStratas); + + Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); + subStratasToRemove.removeAll(newSubStratas); + + if (log.isInfoEnabled()) { + log.info("substrata to remove : " + subStratasToRemove); + } + + StratasTreeModel stratasTreeModel = (StratasTreeModel) getUI().getAvailableStratasTree().getModel(); + stratasTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); + stratasTreeModel.reload(); + } }; @@ -72,23 +136,24 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode updateZonesTreeModel(zonesToAdd, zonesToRemove); - zonesToRemove.forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, - stratasChangeListener)); - zonesToAdd.forEach(zone -> zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, - stratasChangeListener)); }); - getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, - evt -> { + getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, evt -> { - List<Strata> oldAvailableStratas = (List<Strata>) evt.getOldValue(); + Collection<StrataUIModel> oldAvailableStratas = (Collection<StrataUIModel>) evt.getOldValue(); + if (log.isInfoEnabled()) { + log.info("oldAvailableStratas " + oldAvailableStratas); + } - List<Strata> newAvailableStratas = (List<Strata> ) evt.getNewValue(); + Collection<StrataUIModel> newAvailableStratas = (Collection<StrataUIModel> ) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("newAvailableStratas " + newAvailableStratas); + } - Collection<Strata> stratasToAdd = new ArrayList<>(newAvailableStratas); + Collection<StrataUIModel> stratasToAdd = new ArrayList<>(newAvailableStratas); stratasToAdd.removeAll(oldAvailableStratas); - Collection<Strata> stratasToRemove = new ArrayList<>(oldAvailableStratas); + Collection<StrataUIModel> stratasToRemove = new ArrayList<>(oldAvailableStratas); stratasToRemove.removeAll(newAvailableStratas); updateAvailableStratasTreeModel(stratasToAdd, stratasToRemove); @@ -160,22 +225,19 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); }); - List<Strata> availableStratas = new ArrayList<>(); + Collection<StrataUIModel> availableStratas = new ArrayList<>(); programStratasAndSubstratas.keySet().forEach(strataLocation -> { - Strata strata = Stratas.newStrata(); - strata.setLocation(strataLocation); + StrataUIModel strata = new StrataUIModel(strataLocation); - List<SubStrata> subStratas = programStratasAndSubstratas.get(strataLocation) - .stream() - .map(subStrataLocation -> { - SubStrata subStrata = SubStratas.newSubStrata(); - subStrata.setLocation(subStrataLocation); - return subStrata; - }) - .collect(Collectors.toList()); + Collection<TuttiLocation> subStrataLocations = new HashSet<>(programStratasAndSubstratas.get(strataLocation)); + subStrataLocations.remove(null); + List<SubStrata> subStratas = subStrataLocations.stream() + .map(subStrataLocation -> new SubStrataUIModel(subStrataLocation)) + .collect(Collectors.toList()); strata.setSubstrata(subStratas); + availableStratas.add(strata); }); getModel().setAvailableStratas(availableStratas); @@ -198,11 +260,16 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode zonesTreeModel.addZones(zonesToAdd); + zonesToRemove.forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + stratasChangeListener)); + zonesToAdd.forEach(zone -> zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + stratasChangeListener)); + zonesTreeModel.reload(); } - protected void updateAvailableStratasTreeModel(Collection<Strata> stratasToAdd, - Collection<Strata> stratasToRemove) { + protected void updateAvailableStratasTreeModel(Collection<StrataUIModel> stratasToAdd, + Collection<StrataUIModel> stratasToRemove) { JTree availableStratasTree = getUI().getAvailableStratasTree(); StratasTreeModel availableStratasTreeModel = (StratasTreeModel) availableStratasTree.getModel(); @@ -211,6 +278,15 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode availableStratasTreeModel.addStratas(stratasToAdd); + if (log.isInfoEnabled()) { + log.info("add ppcl to " + stratasToAdd); + } + + stratasToRemove.forEach(strata -> strata.removePropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, + availableSubStratasChangeListener)); + 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/ZoneEditorUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java index c212888..dc98b25 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 @@ -2,7 +2,9 @@ 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.persistence.entities.referential.TuttiLocation; +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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; @@ -26,97 +28,60 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public static final String PROPERTY_ZONES = "zones"; - protected Map<SubStrata, Strata> strataBySubstrata; + protected final Map<SubStrata, StrataUIModel> strataBySubstrata = new HashMap<>(); - protected final List<Strata> availableStratas = new ArrayList<>(); + protected final List<StrataUIModel> availableStratas = new ArrayList<>(); protected final List<ZoneUIModel> zones = new ArrayList<>(); - public List<Strata> getAvailableStratas() { + public List<StrataUIModel> getAvailableStratas() { return availableStratas; } - public void setAvailableStratas(List<Strata> availableStratas) { + public void setAvailableStratas(Collection<StrataUIModel> availableStratas) { this.availableStratas.clear(); addAllAvailableStratas(availableStratas); - strataBySubstrata = new HashMap<>(); - for (Strata strata : availableStratas) { - for (SubStrata substrata : strata.getSubstrata()) { - strataBySubstrata.put(substrata, strata); - } - } + strataBySubstrata.clear(); + updateStrataBySubStrata(availableStratas); } - public void addAllAvailableStratas(List<Strata> availableStratas) { + public void addAllAvailableStratas(Collection<StrataUIModel> availableStratas) { Object oldValue = copyAvailableStratas(); this.availableStratas.addAll(availableStratas); - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); - } - - public void addAvailableStratas(Collection<TuttiLocation> stratasAndSubStratas) { - -// Object oldValue = copyAvailableStratas(); -// -// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() -// .filter(location -> strataBySubstrata.containsKey(location)) -// .collect(Collectors.toSet()); -// -// Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); -// stratas.removeAll(substratas); -// -// stratas.forEach(strata -> { -// -// Collection<TuttiLocation> strataSubstratas = -// strataBySubstrata.entrySet() -// .stream() -// .filter(entry->entry.getValue().equals(strata)) -// .map(Map.Entry::getKey) -// .collect(Collectors.toSet()); -// -// substratas.removeAll(strataSubstratas); -// availableStratas.putAll(strata, strataSubstratas); -// -// }); -// -// substratas.forEach(substrata -> { -// availableStratas.put(strataBySubstrata.get(substrata), substrata); -// }); -// -// firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); + updateStrataBySubStrata(availableStratas); + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); } - public void removeAvailableStratas(Collection<Strata> stratas) { + public void removeAvailableStratas(Collection<StrataUIModel> stratas) { Object oldValue = copyAvailableStratas(); availableStratas.removeAll(stratas); - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); } - public void removeAvailableSubStratas(Collection<SubStrata> subStratas, Strata strata) { -// -// Object oldValue = copyAvailableStratas(); -// -// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() -// .filter(location -> strataBySubstrata.containsKey(location)) -// .collect(Collectors.toSet()); -// -// Collection<TuttiLocation> stratas = new HashSet<>(stratasAndSubStratas); -// stratas.removeAll(substratas); -// -// stratas.forEach(strata -> { -// availableStratas.removeAll(strata); -// }); -// -// substratas.forEach(substrata -> { -// availableStratas.remove(strataBySubstrata.get(substrata), substrata); -// }); -// -// firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, availableStratas); -// + 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); + + if (strata.isSubstrataEmpty()) { + availableStratas.remove(strata); + } + + }); + + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); + } public List<ZoneUIModel> getZones() { @@ -142,21 +107,73 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { firePropertyChange(PROPERTY_ZONES, oldValue, zones); } - public void moveStratasToZone(Collection<Strata> stratas, ZoneUIModel zone) { + public void moveStratasToZone(Collection<StrataUIModel> stratas, ZoneUIModel zone) { + if (log.isInfoEnabled()) { + log.info("stratas " + stratas); + } + + zone.addAllStrata(new ArrayList<>(stratas)); removeAvailableStratas(stratas); + } + public void removeStratasFromZone(Collection<StrataUIModel> stratas) { if (log.isInfoEnabled()) { log.info("stratas " + stratas); } -// Collection<TuttiLocation> substratas = stratasAndSubStratas.stream() -// .filter(location -> strataBySubstrata.containsKey(location)) -// .collect(Collectors.toSet()); + stratas.forEach(strata -> strata.getZone().removeStrata(strata)); + addAllAvailableStratas(stratas); + } + + public void moveSubStratasToZone(Collection<SubStrataUIModel> subStratas, ZoneUIModel zone) { + if (log.isInfoEnabled()) { + log.info("substrats " + subStratas); + } + + subStratas.forEach(subStrata -> { + StrataUIModel strata = strataBySubstrata.get(subStrata); + + Strata zoneStrata = zone.getStrata(strata); + + if (zoneStrata == null) { + zoneStrata = new StrataUIModel(strata.getLocation()); + zone.addStrata(zoneStrata); + } + + zoneStrata.addSubstrata(subStrata); + + }); + + removeAvailableSubStratas(subStratas); + + } + + public void removeSubStratasFromZone(Collection<SubStrataUIModel> subStratas) { + if (log.isInfoEnabled()) { + log.info("subStratas " + subStratas); + } + + subStratas.forEach(subStrata -> { + StrataUIModel strata = strataBySubstrata.get(subStrata); + + //TODO remove substrata from zone +// StrataUIModel zoneStrata = +// strata.removeSubstrata(subStrata); +// strata.getZone().removeStrata(strata) - zone.addAllStrata(stratas); + strata.addSubstrata(subStrata); + }); } - protected List<Strata> copyAvailableStratas() { + 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 1392528..b7930e7 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 @@ -1,18 +1,23 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; -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.ZoneEditorUI; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneUIModel; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.nodes.ZoneNode; +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; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.SubStrataNode; +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.JTree; -import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; +import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -38,20 +43,40 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { ZoneNode zoneNode = (ZoneNode) selectedZonePath.getLastPathComponent(); ZoneUIModel selectedZone = zoneNode.getZone(); - Set<Strata> locationsToAdd = new HashSet<>(); + Set<StrataUIModel> stratasToAdd = new HashSet<>(); + Set<SubStrataUIModel> subStratasToAdd = new HashSet<>(); for (TreePath treePath : selectedStratas) { -//FIXME - DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent(); - Strata location = (Strata) node.getUserObject(); -// if (log.isInfoEnabled()) { -// log.info("add location " + location.getLabel()); -// } - locationsToAdd.add(location); + + Object node = treePath.getLastPathComponent(); + + if (node instanceof StrataNode) { + + StrataUIModel strata = ((StrataNode) node).getStrata(); + if (log.isInfoEnabled()) { + log.info("add strata " + strata.getLabel()); + } + stratasToAdd.add(strata); + + } else if (node instanceof SubStrataNode) { + SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); + if (log.isInfoEnabled()) { + log.info("add subtrata " + subStrata.getLabel()); + } + subStratasToAdd.add(subStrata); + } } - zoneEditorUI.getModel().moveStratasToZone(locationsToAdd, selectedZone); + Collection<SubStrata> alreadyAddedSubStratas = stratasToAdd.stream() + .map(strata->strata.getSubstrata()) + .flatMap(c -> c.stream()) + .collect(Collectors.toSet()); + + subStratasToAdd.removeAll(alreadyAddedSubStratas); + + zoneEditorUI.getModel().moveStratasToZone(stratasToAdd, selectedZone); + zoneEditorUI.getModel().moveSubStratasToZone(subStratasToAdd, selectedZone); } } 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 af2c00b..9be290a 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 @@ -1,7 +1,7 @@ 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.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import javax.swing.JOptionPane; @@ -23,8 +23,10 @@ public class CreateZoneAction extends SimpleActionSupport<ZoneEditorUI> { String zoneLabel = JOptionPane.showInputDialog(t("tutti.zoneEditor.createZone.message")); - ZoneUIModel zone = new ZoneUIModel(); - zone.setLabel(zoneLabel); - zoneEditorUI.getModel().addZone(zone); + if (zoneLabel != null) { + 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/RemoveStratasAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RemoveStratasAction.java index 041c64b..582d278 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 @@ -1,9 +1,21 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; 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.SubStrataUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StrataNode; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.SubStrataNode; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; -import javax.swing.tree.DefaultTreeModel; +import javax.swing.JTree; +import javax.swing.tree.TreePath; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) @@ -11,12 +23,54 @@ import javax.swing.tree.DefaultTreeModel; */ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { + /** Logger. */ + private static final Log log = LogFactory.getLog(RemoveStratasAction.class); + public RemoveStratasAction(ZoneEditorUI zoneEditorUI) { super(zoneEditorUI); } @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - ((DefaultTreeModel) zoneEditorUI.getAvailableStratasTree().getModel()).reload(); + + JTree availableStratasTree = zoneEditorUI.getAvailableStratasTree(); + + JTree zonesTree = zoneEditorUI.getZonesTree(); + TreePath[] selectedStratas = zonesTree.getSelectionPaths(); + + Set<StrataUIModel> stratasToRemove = new HashSet<>(); + Set<SubStrataUIModel> subStratasToRemove = new HashSet<>(); + + for (TreePath treePath : selectedStratas) { + + Object node = treePath.getLastPathComponent(); + + if (node instanceof StrataNode) { + + StrataUIModel strata = ((StrataNode) node).getStrata(); + if (log.isInfoEnabled()) { + log.info("add 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()); + } + subStratasToRemove.add(subStrata); + } + + } + + Collection<SubStrata> alreadyRemovedSubStratas = stratasToRemove.stream() + .map(strata->strata.getSubstrata()) + .flatMap(c -> c.stream()) + .collect(Collectors.toSet()); + + subStratasToRemove.removeAll(alreadyRemovedSubStratas); + + zoneEditorUI.getModel().removeStratasFromZone(stratasToRemove); + zoneEditorUI.getModel().removeSubStratasFromZone(subStratasToRemove); } } 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 6bd00bc..8556174 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 @@ -2175,4 +2175,4 @@ tutti.vesselUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caracté tutti.vesselUseFeatureTable.table.header.key=Caractéristique tutti.vesselUseFeatureTable.table.header.value=Valeur tutti.vesselUseFeatureTable.title=Autres paramètres -tutti.zoneEditor.createZone.message= +tutti.zoneEditor.createZone.message=Libellé de la nouvelle zone -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 a72750ccea2dcc1da9e79a35a0e636592728c70d 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>.
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 43a38d26a59759d313d85f6cba8202d9b74c89fd Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 14:49:39 2016 +0100 ajout des icones + tri des noeuds dans les arbres (refs #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 6 +++ .../swing/content/protocol/zones/ZoneEditorUI.jcss | 30 ++++++++++++-- .../protocol/zones/ZoneEditorUIHandler.java | 17 ++++++++ .../CollapseAvailableStratasTreeAction.java | 20 ++++++++++ .../zones/actions/CollapseZonesTreeAction.java | 20 ++++++++++ .../actions/ExpandAvailableStratasTreeAction.java | 21 ++++++++++ .../zones/actions/ExpandZonesTreeAction.java | 21 ++++++++++ .../content/protocol/zones/tree/StrataNode.java | 5 +-- .../protocol/zones/tree/StratasTreeModel.java | 44 +++------------------ .../content/protocol/zones/tree/SubStrataNode.java | 4 +- .../protocol/zones/tree/ZoneEditorNode.java | 33 ++++++++++++++++ .../zones/tree/ZoneEditorTreeCellRenderer.java | 37 +++++++++-------- .../content/protocol/zones/tree/ZoneNode.java | 5 +-- .../protocol/zones/tree/ZonesTreeModel.java | 13 ++++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 -- .../src/main/resources/icons/action-left.png | Bin 0 -> 345 bytes .../src/main/resources/icons/action-right.png | Bin 0 -> 349 bytes 18 files changed, 206 insertions(+), 75 deletions(-) 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 18129bb..bd4b528 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 @@ -1,11 +1,13 @@ <Table id='editProtocolTopPanel' + fill="both" implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ZoneEditorUIModel, ZoneEditorUIHandler>'> <import> fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZoneEditorTreeCellRenderer fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + jaxx.runtime.SwingUtil </import> <script><![CDATA[ @@ -23,6 +25,8 @@ <cell> <JToolBar id="zonesTreeToolBar"> <JButton id="createZone"/> + <JButton id="expandZonesTree"/> + <JButton id="collapseZonesTree"/> </JToolBar> </cell> <cell> @@ -30,6 +34,8 @@ </cell> <cell> <JToolBar id="availableStratasTreeToolBar"> + <JButton id="expandAvailableStratasTree"/> + <JButton id="collapseAvailableStratasTree"/> </JToolBar> </cell> </row> 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 8c336fa..c322086 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 @@ -3,23 +3,47 @@ JTree { expandsSelectedPaths: true; scrollsOnExpand: true; rootVisible: false; - showsRootHandles: false; + showsRootHandles: true; cellRenderer: {new ZoneEditorTreeCellRenderer()}; } +JToolBar { + floatable: false; +} + #createZone { actionIcon: add; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CreateZoneAction.class}; } +#expandZonesTree { + actionIcon: expand; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.ExpandZonesTreeAction.class}; +} + +#collapseZonesTree { + actionIcon: collapse; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CollapseZonesTreeAction.class}; +} + +#expandAvailableStratasTree { + actionIcon: expand; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.ExpandAvailableStratasTreeAction.class}; +} + +#collapseAvailableStratasTree { + actionIcon: collapse; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CollapseAvailableStratasTreeAction.class}; +} + #addButton { - text: "<<"; + actionIcon: left; enabled: {zonesTree.getSelectionCount() == 1}; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; } #removeButton { - text: ">>"; + actionIcon: right; enabled: {zonesTree.getSelectionCount() >= 1}; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; } \ No newline at end of file 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 80a630c..1e08f5a 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 @@ -14,12 +14,14 @@ import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; 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.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JTree; +import javax.swing.SwingUtilities; import javax.swing.tree.TreeModel; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -164,16 +166,31 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode TreeModel availableStratasTreeModel = new StratasTreeModel(); JTree availableStratasTree = ui.getAvailableStratasTree(); availableStratasTree.setModel(availableStratasTreeModel); + SwingUtil.addExpandOnClickListener(availableStratasTree); TreeModel zonesTreeModel = new ZonesTreeModel(); JTree zonesTree = ui.getZonesTree(); zonesTree.setModel(zonesTreeModel); + SwingUtil.addExpandOnClickListener(zonesTree); // get data initModel(); } + public static void collapseTree(final JTree tree) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + int i = 0; + + while(i < tree.getRowCount()) { + tree.collapseRow(i++); + } + + } + }); + } + @Override public SwingValidator<ZoneEditorUIModel> getValidator() { return null; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java new file mode 100644 index 0000000..940f29f --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java @@ -0,0 +1,20 @@ +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.util.actions.SimpleActionSupport; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CollapseAvailableStratasTreeAction extends SimpleActionSupport<ZoneEditorUI> { + + public CollapseAvailableStratasTreeAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + zoneEditorUI.getHandler().collapseTree(zoneEditorUI.getAvailableStratasTree()); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java new file mode 100644 index 0000000..8d2823e --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java @@ -0,0 +1,20 @@ +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.util.actions.SimpleActionSupport; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CollapseZonesTreeAction extends SimpleActionSupport<ZoneEditorUI> { + + public CollapseZonesTreeAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + zoneEditorUI.getHandler().collapseTree(zoneEditorUI.getZonesTree()); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandAvailableStratasTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandAvailableStratasTreeAction.java new file mode 100644 index 0000000..77d7977 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandAvailableStratasTreeAction.java @@ -0,0 +1,21 @@ +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.util.actions.SimpleActionSupport; +import jaxx.runtime.SwingUtil; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ExpandAvailableStratasTreeAction extends SimpleActionSupport<ZoneEditorUI> { + + public ExpandAvailableStratasTreeAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + SwingUtil.expandTree(zoneEditorUI.getAvailableStratasTree()); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandZonesTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandZonesTreeAction.java new file mode 100644 index 0000000..d7541db --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/ExpandZonesTreeAction.java @@ -0,0 +1,21 @@ +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.util.actions.SimpleActionSupport; +import jaxx.runtime.SwingUtil; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ExpandZonesTreeAction extends SimpleActionSupport<ZoneEditorUI> { + + public ExpandZonesTreeAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + SwingUtil.expandTree(zoneEditorUI.getZonesTree()); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java index c4a4f03..0b33420 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/StrataNode.java @@ -2,13 +2,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; -import javax.swing.tree.DefaultMutableTreeNode; - /** * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class StrataNode extends DefaultMutableTreeNode { +public class StrataNode extends ZoneEditorNode { public StrataNode(StrataUIModel strata) { super(strata, true); @@ -17,4 +15,5 @@ public class StrataNode extends DefaultMutableTreeNode { public StrataUIModel getStrata() { return (StrataUIModel) userObject; } + } 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 b75dd47..dc89aed 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 @@ -1,7 +1,6 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; import com.google.common.base.Preconditions; -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 org.apache.commons.logging.Log; @@ -23,12 +22,12 @@ public class StratasTreeModel extends DefaultTreeModel { private static final Log log = LogFactory.getLog(StratasTreeModel.class); public StratasTreeModel() { - super(new DefaultMutableTreeNode()); + super(new ZoneEditorNode()); } public void removeStratas(Collection<StrataUIModel> stratasToRemove) { - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + ZoneEditorNode root = (ZoneEditorNode) getRoot(); Enumeration rootChildren = root.children(); Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); @@ -46,29 +45,9 @@ public class StratasTreeModel extends DefaultTreeModel { } -// public void removeSubStratas(Collection<Strata> subStratasToRemove) { -// -// DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); -// -// Enumeration rootChildren = root.children(); -// Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); -// -// while (rootChildren.hasMoreElements()) { -// -// StrataNode strataNode = (StrataNode) rootChildren.nextElement(); -// -// if (stratasToRemove.contains(strataNode.getStrata())) { -// nodesToRemove.add(strataNode); -// } -// } -// -// nodesToRemove.forEach(strataNode ->removeNodeFromParent(strataNode)); -// -// } - public void addStratas(Collection<StrataUIModel> stratasToAdd) { - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + ZoneEditorNode root = (ZoneEditorNode) getRoot(); stratasToAdd.forEach(strata -> { @@ -86,20 +65,7 @@ public class StratasTreeModel extends DefaultTreeModel { }); - } - - public void addSubStratas(Collection<SubStrata> subStratas, StrataUIModel strata) { - - StrataNode strataNode = findStrataNode(strata); - - subStratas.forEach(substrata -> { - - if (substrata != null) { - SubStrataNode subStrataNode = new SubStrataNode((SubStrataUIModel) substrata); - insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); - } - - }); + root.sortChildren(); } @@ -140,6 +106,8 @@ public class StratasTreeModel extends DefaultTreeModel { insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); } + + strataNode.sortChildren(); } protected StrataNode findStrataNode(StrataUIModel strata) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java index 0ce5a2f..2c73aa9 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/SubStrataNode.java @@ -2,13 +2,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.SubStrataUIModel; -import javax.swing.tree.DefaultMutableTreeNode; - /** * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class SubStrataNode extends DefaultMutableTreeNode { +public class SubStrataNode extends ZoneEditorNode { public SubStrataNode(SubStrataUIModel substrata) { super(substrata, false); 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 new file mode 100644 index 0000000..519538a --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorNode.java @@ -0,0 +1,33 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; + +import javax.swing.tree.DefaultMutableTreeNode; +import java.util.Collections; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class ZoneEditorNode extends DefaultMutableTreeNode implements Comparable { + + public ZoneEditorNode() { + super(); + } + + public ZoneEditorNode(Object userObject, boolean allowchildren) { + super(userObject, allowchildren); + } + + public void sortChildren() { + if (children != null) { + Collections.sort(children); + } + } + + @Override + public int compareTo(Object o) { + if (o == null) { + return 1; + } + return toString().compareTo(o.toString()); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java index 97aad64..f81d71d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java @@ -1,8 +1,6 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; -import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; -import fr.ifremer.tutti.persistence.entities.protocol.Zone; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; +import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -24,22 +22,23 @@ public class ZoneEditorTreeCellRenderer extends DefaultTreeCellRenderer { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - String text = ""; - - if (value instanceof StrataNode) { - StrataUIModel strata = ((StrataNode) value).getStrata(); - text = strata.getLabel(); - - } else if (value instanceof SubStrataNode) { - SubStrata substrata = ((SubStrataNode) value).getSubstrata(); - text = substrata.getLocation().getLabel(); - - } else if (value instanceof ZoneNode) { - Zone zone = ((ZoneNode) value).getZone(); - text = zone.getLabel(); - } - - setText(text); +// String text = ""; +// +// if (value instanceof StrataNode) { +// StrataUIModel strata = ((StrataNode) value).getStrata(); +// text = strata.getLabel(); +// +// } else if (value instanceof SubStrataNode) { +// SubStrataUIModel substrata = ((SubStrataNode) value).getSubstrata(); +// text = substrata.getLabel(); +// +// } else if (value instanceof ZoneNode) { +// Zone zone = ((ZoneNode) value).getZone(); +// text = zone.getLabel(); +// } + +// setText(text); + setIcon(SwingUtil.createActionIcon("location")); return this; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java index 924fa07..84bf1ad 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneNode.java @@ -2,13 +2,11 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.tree; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; -import javax.swing.tree.DefaultMutableTreeNode; - /** * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class ZoneNode extends DefaultMutableTreeNode { +public class ZoneNode extends ZoneEditorNode { public ZoneNode(ZoneUIModel zone) { super(zone, true); @@ -17,4 +15,5 @@ public class ZoneNode extends DefaultMutableTreeNode { public ZoneUIModel getZone() { return (ZoneUIModel) userObject; } + } 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 3ee80fe..a7e9f23 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 @@ -26,12 +26,12 @@ public class ZonesTreeModel extends DefaultTreeModel { private static final Log log = LogFactory.getLog(ZonesTreeModel.class); public ZonesTreeModel() { - super(new DefaultMutableTreeNode()); + super(new ZoneEditorNode()); } public void removeZones(Collection<ZoneUIModel> zonesToRemove) { - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + ZoneEditorNode root = (ZoneEditorNode) getRoot(); Enumeration rootChildren = root.children(); Collection<DefaultMutableTreeNode> nodesToRemove = new HashSet<>(); @@ -50,7 +50,7 @@ public class ZonesTreeModel extends DefaultTreeModel { public void addZones(Collection<ZoneUIModel> zonesToAdd) { - DefaultMutableTreeNode root = (DefaultMutableTreeNode) getRoot(); + ZoneEditorNode root = (ZoneEditorNode) getRoot(); zonesToAdd.forEach(zone -> { @@ -58,6 +58,9 @@ public class ZonesTreeModel extends DefaultTreeModel { insertNodeInto(zoneNode, root, root.getChildCount()); }); + + root.sortChildren(); + } public void updateStratas(ZoneUIModel zone, @@ -102,6 +105,8 @@ public class ZonesTreeModel extends DefaultTreeModel { updateSubStratas(strataNode, subStratasToAdd, Collections.emptySet()); } + + zoneNode.sortChildren(); } public void updateSubStratas(StrataUIModel strata, @@ -141,6 +146,8 @@ public class ZonesTreeModel extends DefaultTreeModel { insertNodeInto(subStrataNode, strataNode, strataNode.getChildCount()); } + + strataNode.sortChildren(); } protected 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 ffd5466..6cc9563 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 @@ -3,7 +3,9 @@ application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= +left= next= +right= rtpEditor.femalePanel= rtpEditor.malePanel= rtpEditor.undefinedPanel= 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 8556174..057731f 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 @@ -1,9 +1,6 @@ -<<= ->>= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= -next= swing.error.cannot.open.file=Aucun programme n'est défini pour ouvrir ce type de fichier. Enregistrez le fichier et ouvrez le en dehors de l'application tutti.about.bottomText=Copyright %s - %s - version %s tutti.about.message=<h3>Allegro Campagne</h3><p><strong>Outil de saisie de données d'opérations et de captures au cours des campagnes halieutiques.</strong></p><br/><p>Ce logiciel permettra la saisie en mer des données d'opération de pêche (positions, environnement, engin, etc) et des captures associées (composition de la capture en espèces scientifiques avec poids, nombres, tailles etc) pour l'ensemble des campagnes halieutiques réalisées par l'Ifremer.</p><p>Ce projet a été initiée en [...] diff --git a/tutti-ui-swing/src/main/resources/icons/action-left.png b/tutti-ui-swing/src/main/resources/icons/action-left.png new file mode 100644 index 0000000..5dc6967 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/icons/action-left.png differ diff --git a/tutti-ui-swing/src/main/resources/icons/action-right.png b/tutti-ui-swing/src/main/resources/icons/action-right.png new file mode 100644 index 0000000..b1a1819 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/icons/action-right.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 4d395fa2c6a50cea4b95e5eea6cf2fd583c3ef7c Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 17:12:06 2016 +0100 sauvegarde du protocol (refs #7929) --- .../entities/protocol/TuttiProtocols.java | 3 ++ .../service/ProtocolPersistenceServiceImpl.java | 47 +++++++++++++++++++ .../content/protocol/EditProtocolUIHandler.java | 10 +++- .../content/protocol/EditProtocolUIModel.java | 11 ++++- .../protocol/actions/SaveProtocolAction.java | 12 ++++- .../protocol/zones/ZoneEditorUIHandler.java | 53 +++++++++++++--------- .../content/protocol/zones/ZoneEditorUIModel.java | 23 ++++++---- .../zones/actions/RemoveStratasAction.java | 11 ++++- .../protocol/zones/models/StrataUIModel.java | 18 ++++++++ .../content/protocol/zones/models/ZoneUIModel.java | 18 ++++++++ .../protocol/zones/tree/ZonesTreeModel.java | 8 ++++ 11 files changed, 176 insertions(+), 38 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 7f158bd..ed13f53 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -375,6 +375,9 @@ public class TuttiProtocols extends AbstractTuttiProtocols { SpeciesProtocols.typeOfSpeciesProtocol()); result.setClassTag(CaracteristicMappingRow.class.getSimpleName(), CaracteristicMappingRows.typeOfCaracteristicMappingRow()); + result.setClassTag(Zone.class.getSimpleName(), Zones.typeOfZone()); + result.setClassTag(Strata.class.getSimpleName(), Stratas.typeOfStrata()); + result.setClassTag(SubStrata.class.getSimpleName(), SubStratas.typeOfSubStrata()); result.writeConfig.setAlwaysWriteClassname(false); result.writeConfig.setWriteRootTags(false); return result; diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java index b08a0bd..5cfff98 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ProtocolPersistenceServiceImpl.java @@ -26,8 +26,14 @@ import com.google.common.collect.Lists; import fr.ifremer.adagio.core.service.technical.CacheService; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; +import fr.ifremer.tutti.persistence.entities.protocol.Stratas; +import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; +import fr.ifremer.tutti.persistence.entities.protocol.SubStratas; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.persistence.entities.protocol.Zones; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -186,8 +192,10 @@ public class ProtocolPersistenceServiceImpl extends AbstractPersistenceService i // result.setGearUseFeaturePmfmId(TuttiEntities.getList(bean.getGearUseFeaturePmfmId())); result.setLengthClassesPmfmId(bean.getLengthClassesPmfmId()); result.setCaracteristicMapping(bean.getCaracteristicMapping()); + Binder<SpeciesProtocol, SpeciesProtocol> speciesProtocolBinder = BinderFactory.newBinder(SpeciesProtocol.class); + List<SpeciesProtocol> species = Lists.newArrayList(); if (!bean.isSpeciesEmpty()) { for (SpeciesProtocol speciesProtocol : bean.getSpecies()) { @@ -210,6 +218,45 @@ public class ProtocolPersistenceServiceImpl extends AbstractPersistenceService i } result.setBenthos(benthos); + Binder<Zone, Zone> zoneBinder = BinderFactory.newBinder(Zone.class); + Binder<Strata, Strata> strataBinder = BinderFactory.newBinder(Strata.class); + Binder<SubStrata, SubStrata> subStrataBinder = BinderFactory.newBinder(SubStrata.class); + + List<Zone> zones = Lists.newArrayList(); + if (!bean.isZoneEmpty()) { + for (Zone zone : bean.getZone()) { + Zone z = Zones.newZone(); + zoneBinder.copy(zone, z); + z.setId(UUID.randomUUID().toString()); + zones.add(z); + + List<Strata> stratas = Lists.newArrayList(); + if (!zone.isStrataEmpty()) { + for (Strata strata : zone.getStrata()) { + Strata s = Stratas.newStrata(); + strataBinder.copy(strata, s); + s.setId(UUID.randomUUID().toString()); + stratas.add(s); + + List<SubStrata> subStratas = Lists.newArrayList(); + if (!strata.isSubstrataEmpty()) { + for (SubStrata subStrata : strata.getSubstrata()) { + SubStrata ss = SubStratas.newSubStrata(); + subStrataBinder.copy(subStrata, ss); + ss.setId(UUID.randomUUID().toString()); + subStratas.add(ss); + } + } + + s.setSubstrata(subStratas); + } + } + + z.setStrata(stratas); + } + } + result.setZone(zones); + String id = result.getId(); File file = getProtocolFile(id); 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 f6c14e6..6ae0b2e 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 @@ -40,6 +40,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; @@ -51,6 +52,7 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; 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.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; @@ -630,9 +632,13 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } }); - model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); + ZoneEditorUIModel zoneEditorUIModel = this.ui.getZoneEditor().getModel(); + zoneEditorUIModel.addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, + evt -> getModel().setZone((Collection<Zone>) evt.getNewValue())); + +// listenModelModifiy(zoneEditorUIModel); -// dialog = new SelectSpeciesUI(false, this.ui); + model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 04d6188..2873164 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -787,6 +787,7 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, @Override public void setZone(Collection<Zone> zones) { editObject.setZone(zones); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); } @Override @@ -807,21 +808,27 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, @Override public void addZone(Zone zone) { editObject.addZone(zone); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); } @Override public void addAllZone(Collection<Zone> zones) { editObject.addAllZone(zones); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); } @Override public boolean removeZone(Zone zone) { - return editObject.removeZone(zone); + boolean result = editObject.removeZone(zone); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + return result; } @Override public boolean removeAllZone(Collection<Zone> zones) { - return editObject.removeAllZone(zones); + boolean result = editObject.removeAllZone(zones); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + return result; } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java index 9615448..a4cb330 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java @@ -28,15 +28,17 @@ import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolOperationFieldsRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -115,6 +117,14 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setBenthos(benthosProtocols); + List<Zone> zones = Lists.newArrayList(); + + for (Zone zone : model.getZone()) { + Zone z = ((ZoneUIModel) zone).toEntity(); + zones.add(z); + } + bean.setZone(zones); + if (log.isDebugEnabled()) { log.debug("protocol id to save: " + bean.getId()); } 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 1e08f5a..e26c8fb 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 @@ -4,6 +4,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; @@ -28,7 +29,6 @@ import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.stream.Collectors; /** @@ -127,8 +127,8 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, evt -> { - List<ZoneUIModel> newZones = (List<ZoneUIModel>) evt.getNewValue(); - List<ZoneUIModel> oldZones = (List<ZoneUIModel>) evt.getOldValue(); + Collection<ZoneUIModel> newZones = (Collection<ZoneUIModel>) evt.getNewValue(); + Collection<ZoneUIModel> oldZones = (Collection<ZoneUIModel>) evt.getOldValue(); Collection<ZoneUIModel> zonesToAdd = new ArrayList<>(newZones); zonesToAdd.removeAll(oldZones); @@ -223,35 +223,44 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode programStratasAndSubstratas.put(test, location); } - Collection<Zone> zones = getDataContext().getProtocol().getZone(); - Collection<Strata> protocolStratas = zones.stream() - .map(zone -> zone.getStrata()) - .flatMap(stratas -> stratas.stream()) - .collect(Collectors.toSet()); + Collection<Zone> zones; - protocolStratas.forEach(strata -> { + TuttiProtocol protocol = getDataContext().getProtocol(); + if (protocol != null) { - TuttiLocation strataLocation = strata.getLocation(); + zones = protocol.getZone(); + Collection<Strata> protocolStratas = zones.stream() + .map(zone -> zone.getStrata()) + .flatMap(stratas -> stratas.stream()) + .collect(Collectors.toSet()); - Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() - .stream() - .map(subStrata -> subStrata.getLocation()) - .collect(Collectors.toSet()); + protocolStratas.forEach(strata -> { - subStrataLocations.forEach(subStrataLocation -> - programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); - }); + TuttiLocation strataLocation = strata.getLocation(); + + Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() + .stream() + .map(subStrata -> subStrata.getLocation()) + .collect(Collectors.toSet()); + + subStrataLocations.forEach(subStrataLocation -> + programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); + }); + + } else { + zones = new HashSet<>(); + } - Collection<StrataUIModel> availableStratas = new ArrayList<>(); + Collection<StrataUIModel> availableStratas = new HashSet<>(); programStratasAndSubstratas.keySet().forEach(strataLocation -> { StrataUIModel strata = new StrataUIModel(strataLocation); Collection<TuttiLocation> subStrataLocations = new HashSet<>(programStratasAndSubstratas.get(strataLocation)); subStrataLocations.remove(null); - List<SubStrata> subStratas = subStrataLocations.stream() + Collection<SubStrata> subStratas = subStrataLocations.stream() .map(subStrataLocation -> new SubStrataUIModel(subStrataLocation)) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); strata.setSubstrata(subStratas); availableStratas.add(strata); @@ -259,13 +268,13 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode getModel().setAvailableStratas(availableStratas); - List<ZoneUIModel> zoneModels = zones.stream() + Collection<ZoneUIModel> zoneModels = zones.stream() .map(zone -> { ZoneUIModel zoneUIModel = new ZoneUIModel(); zoneUIModel.fromEntity(zone); return zoneUIModel; }) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); getModel().setZones(zoneModels); } 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 0053939..17ca15a 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 @@ -10,6 +10,7 @@ import org.jdesktop.beans.AbstractSerializableBean; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; /** @@ -25,11 +26,11 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { public static final String PROPERTY_ZONES = "zones"; - protected final List<StrataUIModel> availableStratas = new ArrayList<>(); + protected final Collection<StrataUIModel> availableStratas = new HashSet<>(); - protected final List<ZoneUIModel> zones = new ArrayList<>(); + protected final Collection<ZoneUIModel> zones = new HashSet<>(); - public List<StrataUIModel> getAvailableStratas() { + public Collection<StrataUIModel> getAvailableStratas() { return availableStratas; } @@ -70,27 +71,27 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { } - public List<ZoneUIModel> getZones() { + public Collection<ZoneUIModel> getZones() { return zones; } - public void setZones(List<ZoneUIModel> zones) { - Object oldValue = getZones(); + public void setZones(Collection<ZoneUIModel> zones) { + Object oldValue = new HashSet<>(getZones()); this.zones.clear(); this.zones.addAll(zones); - firePropertyChange(PROPERTY_ZONES, oldValue, zones); + firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); } public void addZone(ZoneUIModel zone) { - Object oldValue = new ArrayList<>(getZones()); + Object oldValue = new HashSet<>(getZones()); zones.add(zone); - firePropertyChange(PROPERTY_ZONES, oldValue, zones); + firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); } public void removeZone(ZoneUIModel zone) { Object oldValue = new ArrayList<>(getZones()); zones.remove(zone); - firePropertyChange(PROPERTY_ZONES, oldValue, zones); + firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); } public void moveStratasToZone(Collection<StrataUIModel> stratas, ZoneUIModel zone) { @@ -121,10 +122,12 @@ public class ZoneEditorUIModel extends AbstractSerializableBean { 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()) { 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 1b2dcbd..07448a2 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 @@ -6,6 +6,7 @@ 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.tree.StrataNode; import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.SubStrataNode; +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; @@ -43,7 +44,15 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { Object node = treePath.getLastPathComponent(); - if (node instanceof StrataNode) { + if (node instanceof ZoneNode) { + +// ZoneUIModel zone = ((ZoneNode) node).getZone(); +// if (log.isInfoEnabled()) { +// log.info("remove zone stratas " + zone.getLabel()); +// } +// stratasToRemove.addAll(zone.getStrata()); + + } else if (node instanceof StrataNode) { StrataUIModel strata = ((StrataNode) node).getStrata(); if (log.isInfoEnabled()) { 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 d833a93..122d049 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 @@ -38,6 +38,24 @@ public class StrataUIModel extends AbstractTuttiBeanUIModel<Strata, StrataUIMode } @Override + public void fromEntity(Strata entity) { + fromBeanBinder.copyExcluding(entity, this, PROPERTY_SUBSTRATA); + entity.getSubstrata().forEach(subStrata -> { + SubStrataUIModel copy = new SubStrataUIModel(); + copy.fromEntity(subStrata); + addSubstrata(copy); + }); + } + + @Override + public Strata toEntity() { + Strata result = newEntity(); + toBeanBinder.copyExcluding(this, result, PROPERTY_SUBSTRATA); + getSubstrata().forEach(subStrata -> result.addSubstrata(((SubStrataUIModel) subStrata).toEntity())); + return result; + } + + @Override public void addAllSubstrata(Collection<SubStrata> substrata) { Object oldValue = new HashSet<>(getSubstrata()); delegate.addAllSubstrata(substrata); 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 433bb49..e898b0a 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,6 +27,24 @@ public class ZoneUIModel extends AbstractTuttiBeanUIModel<Zone, ZoneUIModel> imp } @Override + public void fromEntity(Zone entity) { + fromBeanBinder.copyExcluding(entity, this, PROPERTY_STRATA); + entity.getStrata().forEach(strata -> { + StrataUIModel copy = new StrataUIModel(); + copy.fromEntity(strata); + addStrata(copy); + }); + } + + @Override + public Zone toEntity() { + Zone result = newEntity(); + toBeanBinder.copyExcluding(this, result, PROPERTY_STRATA); + getStrata().forEach(strata -> result.addStrata(((StrataUIModel) strata).toEntity())); + return result; + } + + @Override public void addAllStrata(Collection<Strata> stratas) { Object oldValue = new HashSet<>(getStrata()); 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 a7e9f23..158a167 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 @@ -57,6 +57,14 @@ public class ZonesTreeModel extends DefaultTreeModel { ZoneNode zoneNode = new ZoneNode(zone); insertNodeInto(zoneNode, root, root.getChildCount()); + + Set<StrataUIModel> stratasToAdd = zone.getStrata() + .stream() + .map(strata -> (StrataUIModel) strata) + .collect(Collectors.toSet()); + + updateStratas(zoneNode, stratasToAdd, Collections.emptySet()); + }); root.sortChildren(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 35f03ac9ed0dcb37cf155396ffc41c49764a061c Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 29 17:35:38 2016 +0100 on pousse les zones dans le modele de protocole (peut etre faire l'inverse...) (refs #7929) --- .../ui/swing/content/protocol/EditProtocolUIHandler.java | 10 ++++++---- .../ui/swing/content/protocol/zones/ZoneEditorUIHandler.java | 12 ++++++++++-- 2 files changed, 16 insertions(+), 6 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 6ae0b2e..7ccba13 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 @@ -96,6 +96,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -632,14 +633,15 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } }); + model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); + ZoneEditorUIModel zoneEditorUIModel = this.ui.getZoneEditor().getModel(); + getModel().setZone(new HashSet<>(zoneEditorUIModel.getZones())); zoneEditorUIModel.addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, - evt -> getModel().setZone((Collection<Zone>) evt.getNewValue())); + evt -> getModel().setZone(new HashSet<>((Collection<Zone>) evt.getNewValue()))); + //FIXME kmorin ecouter toutes les modifs sur le model d'editeur de zone // listenModelModifiy(zoneEditorUIModel); - - model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); - } @Override 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 e26c8fb..7918284 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 @@ -236,6 +236,9 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode protocolStratas.forEach(strata -> { + if (log.isInfoEnabled()) { + log.info("protocol strata " + strata); + } TuttiLocation strataLocation = strata.getLocation(); Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() @@ -243,8 +246,13 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode .map(subStrata -> subStrata.getLocation()) .collect(Collectors.toSet()); - subStrataLocations.forEach(subStrataLocation -> - programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); + if (subStrataLocations.isEmpty()) { + programStratasAndSubstratas.removeAll(strataLocation); + + } else { + subStrataLocations.forEach(subStrataLocation -> + programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); + } }); } else { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 7c0bfbe6fbb8d94cf3cdb4592b06808db75549f5 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 6cc9563..49fdf33 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,3 +2348,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 057731f..2b4d7db 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,3 +2173,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>.
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>.
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 b42e6c6d2f29046d3eb20d6736cda10a6c946cf6 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 15:54:09 2016 +0100 utilisation de fromEntity et toEntity au lieu de fromBean et toBean --- .../ui/swing/content/cruise/EditCruiseUIHandler.java | 2 +- .../swing/content/cruise/actions/SaveCruiseAction.java | 4 ++-- .../catches/accidental/AccidentalBatchUIHandler.java | 2 +- .../operation/catches/benthos/BenthosBatchUIHandler.java | 4 ++-- .../IndividualObservationBatchUIHandler.java | 2 +- .../catches/marinelitter/MarineLitterBatchUIHandler.java | 2 +- .../operation/catches/species/SpeciesBatchUIHandler.java | 4 ++-- .../fishing/actions/EditFishingOperationAction.java | 4 ++-- .../fishing/actions/SaveFishingOperationAction.java | 2 +- .../ui/swing/content/program/EditProgramUIHandler.java | 2 +- .../swing/content/program/actions/SaveProgramAction.java | 2 +- .../protocol/actions/ExportProtocolBenthosAction.java | 2 +- .../actions/ExportProtocolCaracteristicAction.java | 2 +- .../protocol/actions/ExportProtocolSpeciesAction.java | 2 +- .../protocol/actions/ImportProtocolBenthosAction.java | 2 +- .../actions/ImportProtocolCaracteristicAction.java | 4 ++-- .../protocol/actions/ImportProtocolSpeciesAction.java | 2 +- .../content/protocol/actions/SaveProtocolAction.java | 16 +++------------- .../content/report/actions/GenerateReportAction.java | 2 +- .../actions/EditCruiseInValidationUIAction.java | 2 +- .../EditFishingOperationInValidationUIAction.java | 4 ++-- 21 files changed, 29 insertions(+), 39 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java index 96d9bfa..4a50ced 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java @@ -111,7 +111,7 @@ public class EditCruiseUIHandler extends AbstractTuttiUIHandler<EditCruiseUIMode // load existing cruise Cruise cruise = getDataContext().getCruise(); - model.fromBean(cruise); + model.fromEntity(cruise); if (!model.isGearEmpty()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/actions/SaveCruiseAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/actions/SaveCruiseAction.java index 0ae2a53..96aab10 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/actions/SaveCruiseAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/actions/SaveCruiseAction.java @@ -68,7 +68,7 @@ public class SaveCruiseAction extends LongActionSupport<EditCruiseUIModel, EditC public boolean prepareAction() throws Exception { boolean result = super.prepareAction(); - Cruise bean = getModel().toBean(); + Cruise bean = getModel().toEntity(); if (!TuttiEntities.isNew(bean)) { Cruise oldCruise = persistenceService.getCruise(bean.getId()); @@ -150,7 +150,7 @@ public class SaveCruiseAction extends LongActionSupport<EditCruiseUIModel, EditC TuttiUIContext context = getContext(); EditCruiseUIModel model = getModel(); - Cruise bean = model.toBean(); + Cruise bean = model.toEntity(); Cruise saved; boolean createCruise = TuttiEntities.isNew(bean); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java index 266016f..feebb58 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java @@ -172,7 +172,7 @@ public class AccidentalBatchUIHandler @Override protected boolean isRowValid(AccidentalBatchRowModel row) { - AccidentalBatch batch = row.toBean(); + AccidentalBatch batch = row.toEntity(); NuitonValidatorResult validator = getValidationService().validateEditAccidentalBatch(batch); boolean result = !validator.hasErrorMessagess(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java index 76ec945..c0fa132 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java @@ -1263,7 +1263,7 @@ public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Bent BenthosBatchRowModel parent = row.getParentBatch(); if (parent != null) { //FIXME Check no need to convert parent weight ? :( - entityToSave.setParentBatch(parent.toBean()); + entityToSave.setParentBatch(parent.toEntity()); } if (TuttiEntities.isNew(entityToSave)) { @@ -1431,7 +1431,7 @@ public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Bent Preconditions.checkNotNull(sampleCategory.getCategoryId()); Preconditions.checkNotNull(sampleCategory.getCategoryValue()); - BenthosBatch catchBean = row.toBean(); + BenthosBatch catchBean = row.toEntity(); // convert weight Float weight = catchBean.getWeight(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java index e692476..7b7a96b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java @@ -193,7 +193,7 @@ public class IndividualObservationBatchUIHandler @Override protected boolean isRowValid(IndividualObservationBatchRowModel row) { - IndividualObservationBatch batch = row.toBean(); + IndividualObservationBatch batch = row.toEntity(); NuitonValidatorResult validator = getValidationService().validateEditIndividualObservationBatch(batch); boolean result = !validator.hasErrorMessagess(); return result; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java index 954c6b4..c825ed0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java @@ -142,7 +142,7 @@ public class MarineLitterBatchUIHandler extends AbstractTuttiBatchTableUIHandler @Override protected boolean isRowValid(MarineLitterBatchRowModel row) { - MarineLitterBatch batch = row.toBean(); + MarineLitterBatch batch = row.toEntity(); NuitonValidatorResult validator = getValidationService().validateEditMarineLitterBatch(batch); boolean result = !validator.hasErrorMessagess(); return result; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java index 01475e0..17d0779 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java @@ -1267,7 +1267,7 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec Preconditions.checkNotNull(sampleCategory.getCategoryId()); Preconditions.checkNotNull(sampleCategory.getCategoryValue()); - SpeciesBatch catchBean = row.toBean(); + SpeciesBatch catchBean = row.toEntity(); // convert weight Float weight = catchBean.getWeight(); @@ -1278,7 +1278,7 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec SpeciesBatchRowModel parent = row.getParentBatch(); if (parent != null) { //FIXME Check no need to convert parent weight ? :( - catchBean.setParentBatch(parent.toBean()); + catchBean.setParentBatch(parent.toEntity()); } // apply sample category diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java index bc0190d..0d9fb66 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/EditFishingOperationAction.java @@ -475,7 +475,7 @@ public class EditFishingOperationAction extends LongActionSupport<FishingOperati if (bean == null) { - editFishingOperationUIModel.fromBean( + editFishingOperationUIModel.fromEntity( FishingOperations.newFishingOperation()); editFishingOperationUIModel.setFishingOperation(bean); @@ -519,7 +519,7 @@ public class EditFishingOperationAction extends LongActionSupport<FishingOperati ui.getGearComboBox().setData(gears); } - editFishingOperationUIModel.fromBean(bean); + editFishingOperationUIModel.fromEntity(bean); // to be sure combo list will be reloaded editFishingOperationUIModel.setStrata(null); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/SaveFishingOperationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/SaveFishingOperationAction.java index 2029d9e..e5c4d87 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/SaveFishingOperationAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/actions/SaveFishingOperationAction.java @@ -95,7 +95,7 @@ public class SaveFishingOperationAction extends LongActionSupport<EditFishingOpe beanToSave.convertGearShootingCoordinatesToDD(); // save modified fishing operation - FishingOperation toSave = beanToSave.toBean(); + FishingOperation toSave = beanToSave.toEntity(); AbstractCaracteristicTabUIModel[] subModels = handler.getSubModels(); for (AbstractCaracteristicTabUIModel subModel : subModels) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java index 83d9a80..7f8c0ec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUIHandler.java @@ -80,7 +80,7 @@ public class EditProgramUIHandler extends AbstractTuttiUIHandler<EditProgramUIMo // load existing program Program program = getPersistenceService().getProgram(programId); - model.fromBean(program); + model.fromEntity(program); } listModelIsModify(model); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/actions/SaveProgramAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/actions/SaveProgramAction.java index ee4df00..139765b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/actions/SaveProgramAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/actions/SaveProgramAction.java @@ -52,7 +52,7 @@ public class SaveProgramAction extends LongActionSupport<EditProgramUIModel, Edi EditProgramUIModel model = getModel(); - Program bean = model.toBean(); + Program bean = model.toEntity(); Program saved; if (TuttiEntities.isNew(bean)) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolBenthosAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolBenthosAction.java index 3a21cca..37af49c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolBenthosAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolBenthosAction.java @@ -97,7 +97,7 @@ public class ExportProtocolBenthosAction extends LongActionSupport<EditProtocolU List<SpeciesProtocol> protocols = Lists.newArrayList(); for (EditProtocolSpeciesRowModel row : model.getBenthosRow()) { if (row.isValid()) { - protocols.add(row.toBean()); + protocols.add(row.toEntity()); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java index bae4cab..cc77055 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolCaracteristicAction.java @@ -88,7 +88,7 @@ public class ExportProtocolCaracteristicAction extends LongActionSupport<EditPro } // bind to a protocol - TuttiProtocol protocol = getModel().toBean(); + TuttiProtocol protocol = getModel().toEntity(); // export protocol caracteristics ProtocolImportExportService service = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolSpeciesAction.java index d1ecea2..09050c3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ExportProtocolSpeciesAction.java @@ -97,7 +97,7 @@ public class ExportProtocolSpeciesAction extends LongActionSupport<EditProtocolU List<SpeciesProtocol> protocols = Lists.newArrayList(); for (EditProtocolSpeciesRowModel row : model.getSpeciesRow()) { if (row.isValid()) { - protocols.add(row.toBean()); + protocols.add(row.toEntity()); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolBenthosAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolBenthosAction.java index 8755f90..082fa96 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolBenthosAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolBenthosAction.java @@ -94,7 +94,7 @@ public class ImportProtocolBenthosAction extends LongActionSupport<EditProtocolU EditProtocolUIModel model = getModel(); // bind to a protocol - TuttiProtocol protocol = model.toBean(); + TuttiProtocol protocol = model.toEntity(); // import ProtocolImportExportService service = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java index 7e46c87..1282984 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolCaracteristicAction.java @@ -89,7 +89,7 @@ public class ImportProtocolCaracteristicAction extends LongActionSupport<EditPro EditProtocolUIModel model = getModel(); // bind to a protocol - TuttiProtocol protocol = model.toBean(); + TuttiProtocol protocol = model.toEntity(); ProtocolImportExportService service = getContext().getTuttiProtocolImportExportService(); @@ -102,7 +102,7 @@ public class ImportProtocolCaracteristicAction extends LongActionSupport<EditPro try { // rebind to model - model.fromBean(protocol); + model.fromEntity(protocol); } finally { handler.removeDoubleListListeners(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolSpeciesAction.java index 516633f..63f914e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/ImportProtocolSpeciesAction.java @@ -94,7 +94,7 @@ public class ImportProtocolSpeciesAction extends LongActionSupport<EditProtocolU EditProtocolUIModel model = getModel(); // bind to a protocol - TuttiProtocol protocol = model.toBean(); + TuttiProtocol protocol = model.toEntity(); // import ProtocolImportExportService service = diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java index a4cb330..6f45997 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java @@ -28,7 +28,6 @@ import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; @@ -37,7 +36,6 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; -import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.ZoneUIModel; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -75,7 +73,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E PersistenceService persistenceService = context.getPersistenceService(); - TuttiProtocol bean = model.toBean(); + TuttiProtocol bean = model.toEntity(); Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = getUI().getModel().getCaracteristicMappingRows(); List<CaracteristicMappingRow> caracteristicMappingRows = new ArrayList<CaracteristicMappingRow>(); @@ -101,7 +99,7 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E for (EditProtocolSpeciesRowModel row : model.getSpeciesRow()) { if (row.isValid()) { - SpeciesProtocol protocol = row.toBean(); + SpeciesProtocol protocol = row.toEntity(); speciesProtocols.add(protocol); } } @@ -111,20 +109,12 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E for (EditProtocolSpeciesRowModel row : model.getBenthosRow()) { if (row.isValid()) { - SpeciesProtocol protocol = row.toBean(); + SpeciesProtocol protocol = row.toEntity(); benthosProtocols.add(protocol); } } bean.setBenthos(benthosProtocols); - List<Zone> zones = Lists.newArrayList(); - - for (Zone zone : model.getZone()) { - Zone z = ((ZoneUIModel) zone).toEntity(); - zones.add(z); - } - bean.setZone(zones); - if (log.isDebugEnabled()) { log.debug("protocol id to save: " + bean.getId()); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java index 53f4b21..e5e0b8a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java @@ -71,7 +71,7 @@ public class GenerateReportAction extends LongActionSupport<ReportUIModel, Repor progressionModel.increments(t("tutti.generateReport.action.computeNbSteps")); - ReportGenerationRequest reportGenerationRequest = getModel().toBean(); + ReportGenerationRequest reportGenerationRequest = getModel().toEntity(); ReportGenerationService reportGenerationService = getContext().getReportGenerationService(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditCruiseInValidationUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditCruiseInValidationUIAction.java index 08ba57f..edfa12a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditCruiseInValidationUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditCruiseInValidationUIAction.java @@ -83,7 +83,7 @@ public class EditCruiseInValidationUIAction extends LongActionSupport<ValidateCr } else if (!propertiesToIgnore.contains(evt.getPropertyName())) { - Cruise cruise = model.toBean(); + Cruise cruise = model.toEntity(); NuitonValidatorResult validationResult = validationService.validateCruiseCruise(cruise); ValidateCruiseUIModel uiModel = getModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java index 3ed5596..473d689 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/validation/actions/EditFishingOperationInValidationUIAction.java @@ -88,7 +88,7 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< } else if (!propertiesToIgnore.contains(evt.getPropertyName())) { model.convertGearShootingCoordinatesToDD(); - FishingOperation operation = model.toBean(); + FishingOperation operation = model.toEntity(); NuitonValidatorResult validationResult = validationService.validateCruiseOperation(operation); ValidateCruiseUIModel uiModel = getModel(); @@ -138,7 +138,7 @@ public class EditFishingOperationInValidationUIAction extends LongActionSupport< } } else if (!propertiesToIgnore.contains(evt.getPropertyName())) { - CatchBatch catchBatch = model.toBean(); + CatchBatch catchBatch = model.toEntity(); NuitonValidatorResult validationResult = validationService.validateCruiseOperation(catchBatch); ValidateCruiseUIModel uiModel = getModel(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 8c086d37c8320d5eb03fd5d0d36555b0fccba8f1 Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 2 19:10:52 2016 +0100 - utilisation directement du modele du protocol - ajout d'une popup de menu pour surrpimer et renommer les zones (refs #7929) --- .../content/protocol/EditProtocolUIHandler.java | 30 +-- .../content/protocol/EditProtocolUIModel.java | 179 +++++++++++++++++- .../protocol/actions/SaveProtocolAction.java | 7 + .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 18 +- .../swing/content/protocol/zones/ZoneEditorUI.jcss | 16 +- .../protocol/zones/ZoneEditorUIHandler.java | 207 +++++++++++---------- .../content/protocol/zones/ZoneEditorUIModel.java | 194 ------------------- .../protocol/zones/actions/AddStratasAction.java | 55 +++--- .../CollapseAvailableStratasTreeAction.java | 3 +- .../zones/actions/CollapseZonesTreeAction.java | 3 +- .../protocol/zones/actions/DeleteZoneAction.java | 21 +-- .../protocol/zones/actions/RenameZoneAction.java | 54 ++++++ .../protocol/zones/models/SubStrataUIModel.java | 6 +- .../protocol/zones/tree/ZonesTreeModel.java | 4 + .../ifremer/tutti/ui/swing/util/TuttiUIUtil.java | 15 ++ .../EditProtocolUIModel-error-validation.xml | 40 ++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 9 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 11 +- 18 files changed, 502 insertions(+), 370 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 1082106..0b0f601 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 @@ -40,7 +40,6 @@ import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; -import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; @@ -52,8 +51,6 @@ import fr.ifremer.tutti.ui.swing.content.home.actions.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; 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; @@ -97,7 +94,6 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -246,7 +242,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI model.setCleaned(true); this.ui.getSaveWarning().setText(t("tutti.editProtocol.warn.clean")); } - model.fromBean(protocol); + model.fromEntity(protocol); } else if ((protocol = ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.getContextValue(this.ui)) != null) { @@ -256,7 +252,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI ImportProtocolAction.IMPORT_PROTOCOL_ENTRY.removeContextValue(this.ui); - model.fromBean(protocol); + model.fromEntity(protocol); model.setImported(true); this.ui.getSaveWarning().setText(t("tutti.editProtocol.warn.import")); @@ -268,7 +264,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI CloneProtocolAction.CLONE_PROTOCOL_ENTRY.removeContextValue(this.ui); - model.fromBean(protocol); + model.fromEntity(protocol); model.setCloned(true); this.ui.getSaveWarning().setText(t("tutti.editProtocol.warn.clone")); @@ -636,22 +632,6 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); - ZoneEditorUIModel zoneEditorUIModel = this.ui.getZoneEditor().getModel(); - 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(); - 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); } @Override @@ -709,7 +689,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI lengthClassesPmfmId.add(lengthStepPmfm); } row.setLengthStepPmfm(lengthStepPmfm); - row.fromBean(speciesProtocol); + row.fromEntity(speciesProtocol); // make sure to get a clean copy of the list row.setMandatorySampleCategoryId(Lists.newArrayList(speciesProtocol.getMandatorySampleCategoryId())); @@ -755,7 +735,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI caracteristicSet.add(model.getAllCaracteristic().get(pmfmId)); EditProtocolCaracteristicsRowModel row = createEditProtocolCaracteristicsRowModel(); - row.fromBean(caracteristicMappingRow); + row.fromEntity(caracteristicMappingRow); row.setValid(row.getType() != null); result.add(row); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 2873164..fea45e0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -31,21 +31,29 @@ import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +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; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import org.apache.commons.lang3.mutable.MutableInt; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author Tony Chemit - chemit@codelutin.com @@ -53,6 +61,9 @@ import java.util.Map; */ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, EditProtocolUIModel> implements TuttiProtocol { + /** Logger. */ + private static final Log log = LogFactory.getLog(EditProtocolUIModel.class); + private static final long serialVersionUID = 1L; public static final String PROPERTY_CARACTERISTIC_MAPPING_ROWS = "caracteristicMappingRows"; @@ -79,6 +90,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public static final String PROPERTY_CLEANED = "cleaned"; + public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; + /** * Delegate edit object. * @@ -156,6 +169,8 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected List<EditProtocolSpeciesRowModel> benthosRow; + protected final Collection<StrataUIModel> availableStratas = new HashSet<>(); + protected static Binder<EditProtocolUIModel, TuttiProtocol> toBeanBinder = BinderFactory.newBinder(EditProtocolUIModel.class, TuttiProtocol.class); @@ -172,6 +187,37 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, return TuttiProtocols.newTuttiProtocol(); } + @Override + public void fromEntity(TuttiProtocol entity) { + fromBeanBinder.copyExcluding(entity, this, PROPERTY_ZONE); + + Collection<Zone> zoneModels = entity.getZone() + .stream() + .map(zone -> { + ZoneUIModel zoneUIModel = new ZoneUIModel(); + zoneUIModel.fromEntity(zone); + return zoneUIModel; + }) + .collect(Collectors.toList()); + + setZone(zoneModels); + } + + @Override + public TuttiProtocol toEntity() { + TuttiProtocol result = newEntity(); + toBeanBinder.copyExcluding(this, result, PROPERTY_ZONE); + Collection<Zone> zoneModels = getZone().stream() + .map(zone -> { + ZoneUIModel zoneUIModel = (ZoneUIModel) zone; + return zoneUIModel.toEntity(); + }) + .collect(Collectors.toList()); + + result.setZone(zoneModels); + return result; + } + public void setLengthClassesPmfm(List<Caracteristic> lengthClassesPmfm) { List<String> ids = Lists.newArrayList(TuttiEntities.collecIds(lengthClassesPmfm)); setLengthClassesPmfmId(ids); @@ -786,8 +832,9 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, @Override public void setZone(Collection<Zone> zones) { + Object oldZones = new ArrayList<>(getZone()); editObject.setZone(zones); - firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, oldZones, getZone()); } @Override @@ -807,27 +854,31 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, @Override public void addZone(Zone zone) { + Object oldZones = new ArrayList<>(getZone()); editObject.addZone(zone); - firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, oldZones, getZone()); } @Override public void addAllZone(Collection<Zone> zones) { + Object oldZones = new ArrayList<>(getZone()); editObject.addAllZone(zones); - firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, oldZones, getZone()); } @Override public boolean removeZone(Zone zone) { + Object oldZones = new ArrayList<>(getZone()); boolean result = editObject.removeZone(zone); - firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, oldZones, getZone()); return result; } @Override public boolean removeAllZone(Collection<Zone> zones) { + Object oldZones = new ArrayList<>(getZone()); boolean result = editObject.removeAllZone(zones); - firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, null, getZone()); + firePropertyChanged(TuttiProtocol.PROPERTY_ZONE, oldZones, getZone()); return result; } @@ -930,4 +981,122 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, return mutableInt.intValue(); } + public Collection<StrataUIModel> getAvailableStratas() { + return availableStratas; + } + + public void setAvailableStratas(Collection<StrataUIModel> availableStratas) { + this.availableStratas.clear(); + addAllAvailableStratas(availableStratas); + } + + public void addAllAvailableStratas(Collection<StrataUIModel> availableStratas) { + Object oldValue = copyAvailableStratas(); + this.availableStratas.addAll(availableStratas); + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); + } + + 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(); + + availableStratas.removeAll(stratas); + + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); + + } + + public void removeAvailableStrata(StrataUIModel strata) { + + Object oldValue = copyAvailableStratas(); + + availableStratas.remove(strata); + + firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); + + } + + public void moveStratasToZone(Collection<StrataUIModel> stratas, ZoneUIModel zone) { + if (log.isInfoEnabled()) { + log.info("stratas " + stratas); + } + + zone.addAllStrata(new ArrayList<>(stratas)); + removeAllAvailableStratas(stratas); + } + + public void removeStratasFromZone(Collection<StrataUIModel> stratas) { + if (log.isInfoEnabled()) { + log.info("stratas " + stratas); + } + + stratas.forEach(strata -> strata.getZone().removeStrata(strata)); + addAllAvailableStratas(stratas); + } + + public void moveSubStratasToZone(Collection<SubStrataUIModel> subStratas, ZoneUIModel zone) { + if (log.isInfoEnabled()) { + log.info("substrats " + subStratas); + } + + subStratas.forEach(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); + } + }); + + } + + public void removeSubStratasFromZone(Collection<SubStrataUIModel> subStratas) { + if (log.isInfoEnabled()) { + log.info("subStratas " + subStratas); + } + + subStratas.forEach(subStrata -> { + StrataUIModel strata = subStrata.getStrata(); + strata.removeSubstrata(subStrata); + + StrataUIModel availableStrata = getStrata(strata); + if (availableStrata == null) { + availableStrata = new StrataUIModel(strata.getLocation()); + addAvailableStrata(availableStrata); + } + availableStrata.addSubstrata(subStrata); + + if (strata.isSubstrataEmpty()) { + strata.getZone().removeStrata(strata); + } + + }); + } + + /** + * @param strata + * @return the strata from the available stratas which equals the strata in parameters + */ + public 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); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java index 6f45997..70c9409 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/actions/SaveProtocolAction.java @@ -115,6 +115,13 @@ public class SaveProtocolAction extends LongActionSupport<EditProtocolUIModel, E } bean.setBenthos(benthosProtocols); + + + if (log.isInfoEnabled()) { + log.info("bean zones " + bean.getZone()); + log.info("bean zones " + bean.getZone()); + } + if (log.isDebugEnabled()) { log.debug("protocol id to save: " + bean.getId()); } 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 e886452..e4b989c 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 @@ -1,10 +1,11 @@ <Table id='editProtocolTopPanel' fill="both" - implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ZoneEditorUIModel, ZoneEditorUIHandler>'> + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProtocolUIModel, ZoneEditorUIHandler>'> <import> fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.ZoneEditorTreeCellRenderer + fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil jaxx.runtime.SwingUtil @@ -19,13 +20,22 @@ </script> <!-- model --> - <ZoneEditorUIModel id='model' javaBean='new ZoneEditorUIModel()'/> + <EditProtocolUIModel id='model' javaBean='getContextValue(EditProtocolUIModel.class)'/> + + <BeanValidator id='validator' bean='model' + uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='availableStratas' component='editProtocolTopPanel'/> + </BeanValidator> + + <JPopupMenu id='zonePopupMenu'> + <JMenuItem id='deleteZoneMenuItem'/> + <JMenuItem id='renameZoneMenuItem'/> + </JPopupMenu> <row> <cell> <JToolBar id="zonesTreeToolBar"> <JButton id="createZone"/> - <JButton id="deleteZone"/> <JButton id="expandZonesTree"/> <JButton id="collapseZonesTree"/> </JToolBar> @@ -44,7 +54,7 @@ <cell weightx='0.5' weighty='1' fill='both'> <JScrollPane onFocusGained='zonesTree.requestFocus()'> <!-- List of the zones --> - <JTree id='zonesTree'/> + <JTree id='zonesTree' onMouseClicked="handler.autoSelectNodeInTree(event, zonePopupMenu)"/> <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> <!--onMouseClicked='handler.onUniverseListClicked(event)'--> <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> 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 6cb7019..6a83608 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 @@ -16,11 +16,25 @@ JToolBar { _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.CreateZoneAction.class}; } -#deleteZone { +#deleteZoneMenuItem { actionIcon: delete; + text: "tutti.zoneEditor.action.delete"; + toolTipText: "tutti.zoneEditor.action.delete.tip"; + i18nMnemonic: "tutti.zoneEditor.action.delete.mnemonic"; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.DeleteZoneAction.class}; + _help: {"tutti.zoneEditor.action.delete.help"}; } +#renameZoneMenuItem { + actionIcon: edit; + text: "tutti.zoneEditor.action.rename"; + toolTipText: "tutti.zoneEditor.action.rename.tip"; + i18nMnemonic: "tutti.zoneEditor.action.rename.mnemonic"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RenameZoneAction.class}; + _help: {"tutti.zoneEditor.action.rename.help"}; +} + + #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 b103d12..f541124 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 @@ -2,17 +2,16 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import fr.ifremer.tutti.persistence.entities.protocol.Strata; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; -import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; 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; import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StratasTreeModel; +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.AbstractTuttiUIHandler; import jaxx.runtime.SwingUtil; @@ -22,9 +21,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; +import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import java.awt.Point; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; @@ -36,11 +39,22 @@ import java.util.stream.Collectors; * @author Kevin Morin (Code Lutin) * @since 4.5 */ -public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIModel, ZoneEditorUI> { +public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIModel, ZoneEditorUI> { /** Logger. */ private static final Log log = LogFactory.getLog(ZoneEditorUIHandler.class); + protected final PropertyChangeListener labelChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + ZoneUIModel zone = (ZoneUIModel) evt.getSource(); + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); + zonesTreeModel.zoneLabelChanged(zone); + } + }; + protected final PropertyChangeListener stratasChangeListener = new PropertyChangeListener() { @Override @@ -64,7 +78,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); zonesTreeModel.updateStratas(zone, stratasToAdd, stratasToRemove); -// zonesTreeModel.reload(); } }; @@ -100,6 +113,11 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); + if (log.isInfoEnabled()) { + log.info(oldSubStratas); + log.info(newSubStratas); + } + Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); subStratasToAdd.removeAll(oldSubStratas); @@ -123,7 +141,7 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode // init models - getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_ZONES, + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_ZONE, evt -> { Collection<ZoneUIModel> newZones = (Collection<ZoneUIModel>) evt.getNewValue(); @@ -137,19 +155,17 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode updateZonesTreeModel(zonesToAdd, zonesToRemove); + // si pas de zones avant, c'est soit que le modele etait vide, soit qu'on a initialisé l'arbre + if (oldZones.isEmpty()) { + SwingUtil.expandTree(zoneEditorUI.getZonesTree()); + } + }); - getModel().addPropertyChangeListener(ZoneEditorUIModel.PROPERTY_AVAILABLE_STRATAS, evt -> { + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_AVAILABLE_STRATAS, evt -> { Collection<StrataUIModel> oldAvailableStratas = (Collection<StrataUIModel>) evt.getOldValue(); - if (log.isInfoEnabled()) { - log.info("oldAvailableStratas " + oldAvailableStratas); - } - Collection<StrataUIModel> newAvailableStratas = (Collection<StrataUIModel> ) evt.getNewValue(); - if (log.isInfoEnabled()) { - log.info("newAvailableStratas " + newAvailableStratas); - } Collection<StrataUIModel> stratasToAdd = new ArrayList<>(newAvailableStratas); stratasToAdd.removeAll(oldAvailableStratas); @@ -168,10 +184,16 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode SwingUtil.addExpandOnClickListener(availableStratasTree); TreeModel zonesTreeModel = new ZonesTreeModel(); - JTree zonesTree = ui.getZonesTree(); + final JTree zonesTree = ui.getZonesTree(); zonesTree.setModel(zonesTreeModel); SwingUtil.addExpandOnClickListener(zonesTree); + zonesTree.addTreeSelectionListener(event -> { + boolean zoneSelected = event.getPath().getLastPathComponent() instanceof ZoneNode; + getUI().getDeleteZoneMenuItem().setEnabled(zoneSelected); + getUI().getRenameZoneMenuItem().setEnabled(zoneSelected); + }); + // get data initModel(); @@ -180,22 +202,8 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode JAXXWidgetUtil.expandTree(zonesTree); } - //FIXME move to jaxx - public void collapseTree(final JTree tree) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - int i = 0; - - while(i < tree.getRowCount()) { - tree.collapseRow(i++); - } - - } - }); - } - @Override - public SwingValidator<ZoneEditorUIModel> getValidator() { + public SwingValidator<EditProtocolUIModel> getValidator() { return null; } @@ -206,68 +214,64 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode @Override public void onCloseUI() { - getModel().getZones().forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, + getModel().getZone().forEach(zone -> ((ZoneUIModel) zone).removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, stratasChangeListener)); } - protected void initModel() { - PersistenceService persistenceService = getPersistenceService(); + public void autoSelectNodeInTree(MouseEvent e, JPopupMenu popup) { - TuttiLocation programZone = getDataContext().getProgram().getZone(); + boolean rightClick = SwingUtilities.isRightMouseButton(e); - Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = - HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); - //FIXME only for tests - TuttiLocation test = programStratasAndSubstratas.keySet().iterator().next(); - for (int i = 0 ; i < 5 ; i++) { - TuttiLocation location = TuttiLocations.newTuttiLocation(); - location.setId(i); - location.setLabel("substrata" + i); - programStratasAndSubstratas.put(test, location); - } + if (rightClick || SwingUtilities.isLeftMouseButton(e)) { - Collection<Zone> zones; + // get the coordinates of the mouse click + Point p = e.getPoint(); - TuttiProtocol protocol = getDataContext().getProtocol(); - if (protocol != null) { + JTree source = (JTree) e.getSource(); - zones = protocol.getZone(); - Collection<Strata> protocolStratas = zones.stream() - .map(zone -> zone.getStrata()) - .flatMap(stratas -> stratas.stream()) - .collect(Collectors.toList()); + // get the row index at this point + int rowIndex = source.getRowForLocation(p.x, p.y); - if (log.isInfoEnabled()) { - log.info("protocol strata " + protocolStratas); + if (log.isDebugEnabled()) { + log.debug("At point [" + p + "] found Row " + rowIndex); } - protocolStratas.forEach(strata -> { + // select row (could empty selection) + if (rowIndex == -1) { + source.clearSelection(); - TuttiLocation strataLocation = strata.getLocation(); + } else { + // set selection + source.setSelectionRow(rowIndex); + } - Collection<TuttiLocation> subStrataLocations = strata.getSubstrata() - .stream() - .map(subStrata -> subStrata.getLocation()) - .collect(Collectors.toSet()); + if (rightClick) { + TreePath path = source.getPathForRow(rowIndex); - if (log.isInfoEnabled()) { - log.info("protocol strata " + strata.getLocation() + " " + subStrataLocations); - } + // on right click show popup + popup.show(source, e.getX(), e.getY()); + } + } + } - if (subStrataLocations.isEmpty()) { - programStratasAndSubstratas.removeAll(strataLocation); + protected void initModel() { + PersistenceService persistenceService = getPersistenceService(); - } else { - subStrataLocations.forEach(subStrataLocation -> - programStratasAndSubstratas.remove(strataLocation, subStrataLocation)); - } - }); + TuttiLocation programZone = getDataContext().getProgram().getZone(); - } else { - zones = new HashSet<>(); + Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = + HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); + //FIXME only for tests + TuttiLocation test = programStratasAndSubstratas.keySet().iterator().next(); + for (int i = 0 ; i < 5 ; i++) { + TuttiLocation location = TuttiLocations.newTuttiLocation(); + location.setId(i); + location.setLabel("substrata" + i); + programStratasAndSubstratas.put(test, location); } + // on transforme les données du service en modele d'ui Collection<StrataUIModel> availableStratas = new HashSet<>(); programStratasAndSubstratas.keySet().forEach(strataLocation -> { @@ -276,40 +280,59 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode Collection<TuttiLocation> subStrataLocations = new HashSet<>(programStratasAndSubstratas.get(strataLocation)); subStrataLocations.remove(null); Collection<SubStrata> subStratas = subStrataLocations.stream() - .map(subStrataLocation -> new SubStrataUIModel(subStrataLocation)) - .collect(Collectors.toSet()); + .map(subStrataLocation -> new SubStrataUIModel(subStrataLocation)) + .collect(Collectors.toList()); strata.setSubstrata(subStratas); availableStratas.add(strata); }); getModel().setAvailableStratas(availableStratas); - - Collection<ZoneUIModel> zoneModels = zones.stream() - .map(zone -> { - ZoneUIModel zoneUIModel = new ZoneUIModel(); - zoneUIModel.fromEntity(zone); - return zoneUIModel; - }) - .collect(Collectors.toSet()); - getModel().setZones(zoneModels); } protected void updateZonesTreeModel(Collection<ZoneUIModel> zonesToAdd, Collection<ZoneUIModel> zonesToRemove) { JTree zonesTree = getUI().getZonesTree(); ZonesTreeModel zonesTreeModel = (ZonesTreeModel) zonesTree.getModel(); - if (log.isInfoEnabled()) { - log.info("zones to remove" + zonesToRemove); - } + getModel().removeStratasFromZone(zonesToRemove.stream() + .map(zone -> zone.getStrata()) + .flatMap(s -> s.stream()) + .map(strata -> (StrataUIModel) strata) + .collect(Collectors.toSet())); + + zonesToAdd.stream() + .map(zone -> zone.getStrata()) + .flatMap(s -> s.stream()) + .map(strata -> (StrataUIModel) strata) + .forEach(strata -> { + if (strata.getSubstrata().isEmpty()) { + getModel().removeAvailableStrata(strata); + + } else { + StrataUIModel availableStrata = getModel().getStrata(strata); + availableStrata.removeAllSubstrata(strata.getSubstrata() + .stream() + .map(subStrata -> (SubStrataUIModel) subStrata) + .collect(Collectors.toSet())); + + if (availableStrata.isSubstrataEmpty()) { + getModel().removeAvailableStrata(availableStrata); + } + } + }); + zonesTreeModel.removeZones(zonesToRemove); zonesTreeModel.addZones(zonesToAdd); - zonesToRemove.forEach(zone -> zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, - stratasChangeListener)); - zonesToAdd.forEach(zone -> zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, - stratasChangeListener)); + zonesToRemove.forEach(zone -> { + zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, stratasChangeListener); + zone.removePropertyChangeListener(ZoneUIModel.PROPERTY_LABEL, labelChangeListener); + }); + zonesToAdd.forEach(zone -> { + zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_STRATA, stratasChangeListener); + zone.addPropertyChangeListener(ZoneUIModel.PROPERTY_LABEL, labelChangeListener); + }); } @@ -323,10 +346,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<ZoneEditorUIMode availableStratasTreeModel.addStratas(stratasToAdd); - if (log.isInfoEnabled()) { - log.info("add ppcl to " + stratasToAdd); - } - stratasToRemove.forEach(strata -> strata.removePropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, availableSubStratasChangeListener)); stratasToAdd.forEach(strata -> strata.addPropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, 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 deleted file mode 100644 index a2069e4..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorUIModel.java +++ /dev/null @@ -1,194 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol.zones; - -import fr.ifremer.tutti.persistence.entities.protocol.Strata; -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; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.beans.AbstractSerializableBean; - -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) - * @since 4.5 - */ -public class ZoneEditorUIModel extends AbstractSerializableBean { - - /** Logger. */ - private static final Log log = LogFactory.getLog(ZoneEditorUIModel.class); - - public static final String PROPERTY_AVAILABLE_STRATAS = "availableStratas"; - - public static final String PROPERTY_ZONES = "zones"; - - protected final Collection<StrataUIModel> availableStratas = new HashSet<>(); - - protected final Collection<ZoneUIModel> zones = new HashSet<>(); - - public Collection<StrataUIModel> getAvailableStratas() { - return availableStratas; - } - - public void setAvailableStratas(Collection<StrataUIModel> availableStratas) { - this.availableStratas.clear(); - addAllAvailableStratas(availableStratas); - } - - public void addAllAvailableStratas(Collection<StrataUIModel> availableStratas) { - Object oldValue = copyAvailableStratas(); - this.availableStratas.addAll(availableStratas); - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); - } - - 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(); - - availableStratas.removeAll(stratas); - - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); - - } - - public void removeAvailableStrata(StrataUIModel strata) { - - Object oldValue = copyAvailableStratas(); - - availableStratas.remove(strata); - - firePropertyChange(PROPERTY_AVAILABLE_STRATAS, oldValue, getAvailableStratas()); - - } - - public Collection<ZoneUIModel> getZones() { - return zones; - } - - public void setZones(Collection<ZoneUIModel> zones) { - Object oldValue = new HashSet<>(getZones()); - this.zones.clear(); - this.zones.addAll(zones); - firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); - } - - public void addZone(ZoneUIModel zone) { - Object oldValue = new HashSet<>(getZones()); - zones.add(zone); - firePropertyChange(PROPERTY_ZONES, oldValue, getZones()); - } - - 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()); - } - - public void moveStratasToZone(Collection<StrataUIModel> stratas, ZoneUIModel zone) { - if (log.isInfoEnabled()) { - log.info("stratas " + stratas); - } - - zone.addAllStrata(new ArrayList<>(stratas)); - removeAllAvailableStratas(stratas); - } - - public void removeStratasFromZone(Collection<StrataUIModel> stratas) { - if (log.isInfoEnabled()) { - log.info("stratas " + stratas); - } - - stratas.forEach(strata -> strata.getZone().removeStrata(strata)); - addAllAvailableStratas(stratas); - } - - public void moveSubStratasToZone(Collection<SubStrataUIModel> subStratas, ZoneUIModel zone) { - if (log.isInfoEnabled()) { - log.info("substrats " + subStratas); - } - - subStratas.forEach(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); - } - }); - - } - - public void removeSubStratasFromZone(Collection<SubStrataUIModel> subStratas) { - if (log.isInfoEnabled()) { - log.info("subStratas " + subStratas); - } - - subStratas.forEach(subStrata -> { - StrataUIModel strata = subStrata.getStrata(); - strata.removeSubstrata(subStrata); - - StrataUIModel availableStrata = getStrata(strata); - if (availableStrata == null) { - availableStrata = new StrataUIModel(strata.getLocation()); - addAvailableStrata(availableStrata); - } - availableStrata.addSubstrata(subStrata); - - if (strata.isSubstrataEmpty()) { - strata.getZone().removeStrata(strata); - } - - }); - } - - /** - * @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); - } - -} 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 4782588..615562d 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,43 +40,46 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { JTree zonesTree = zoneEditorUI.getZonesTree(); TreePath selectedZonePath = zonesTree.getSelectionPath(); - ZoneNode zoneNode = (ZoneNode) selectedZonePath.getPathComponent(1); - ZoneUIModel selectedZone = zoneNode.getZone(); - Set<StrataUIModel> stratasToAdd = new HashSet<>(); - Set<SubStrataUIModel> subStratasToAdd = new HashSet<>(); + if (selectedZonePath != null) { + ZoneNode zoneNode = (ZoneNode) selectedZonePath.getPathComponent(1); + ZoneUIModel selectedZone = zoneNode.getZone(); - for (TreePath treePath : selectedStratas) { + Set<StrataUIModel> stratasToAdd = new HashSet<>(); + Set<SubStrataUIModel> subStratasToAdd = new HashSet<>(); - Object node = treePath.getLastPathComponent(); + for (TreePath treePath : selectedStratas) { - if (node instanceof StrataNode) { + Object node = treePath.getLastPathComponent(); - StrataUIModel strata = ((StrataNode) node).getStrata(); - if (log.isInfoEnabled()) { - log.info("add strata " + strata.getLabel()); - } - stratasToAdd.add(strata); + if (node instanceof StrataNode) { + + StrataUIModel strata = ((StrataNode) node).getStrata(); + if (log.isInfoEnabled()) { + log.info("add strata " + strata.getLabel()); + } + stratasToAdd.add(strata); - } else if (node instanceof SubStrataNode) { - SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); - if (log.isInfoEnabled()) { - log.info("add subtrata " + subStrata.getLabel()); + } else if (node instanceof SubStrataNode) { + SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); + if (log.isInfoEnabled()) { + log.info("add subtrata " + subStrata.getLabel()); + } + subStratasToAdd.add(subStrata); } - subStratasToAdd.add(subStrata); - } - } + } - Collection<SubStrata> alreadyAddedSubStratas = stratasToAdd.stream() - .map(strata->strata.getSubstrata()) - .flatMap(c -> c.stream()) - .collect(Collectors.toSet()); + Collection<SubStrata> alreadyAddedSubStratas = stratasToAdd.stream() + .map(strata -> strata.getSubstrata()) + .flatMap(c -> c.stream()) + .collect(Collectors.toSet()); - subStratasToAdd.removeAll(alreadyAddedSubStratas); + subStratasToAdd.removeAll(alreadyAddedSubStratas); - zoneEditorUI.getModel().moveStratasToZone(stratasToAdd, selectedZone); - zoneEditorUI.getModel().moveSubStratasToZone(subStratasToAdd, selectedZone); + zoneEditorUI.getModel().moveStratasToZone(stratasToAdd, selectedZone); + zoneEditorUI.getModel().moveSubStratasToZone(subStratasToAdd, selectedZone); + } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java index 940f29f..ab905e5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseAvailableStratasTreeAction.java @@ -1,6 +1,7 @@ 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.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; /** @@ -15,6 +16,6 @@ public class CollapseAvailableStratasTreeAction extends SimpleActionSupport<Zone @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - zoneEditorUI.getHandler().collapseTree(zoneEditorUI.getAvailableStratasTree()); + TuttiUIUtil.collapseTree(zoneEditorUI.getAvailableStratasTree()); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java index 8d2823e..b933796 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/CollapseZonesTreeAction.java @@ -1,6 +1,7 @@ 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.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; /** @@ -15,6 +16,6 @@ public class CollapseZonesTreeAction extends SimpleActionSupport<ZoneEditorUI> { @Override protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { - zoneEditorUI.getHandler().collapseTree(zoneEditorUI.getZonesTree()); + TuttiUIUtil.collapseTree(zoneEditorUI.getZonesTree()); } } 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 68c6d03..66acabd 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,15 @@ package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; 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.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.HashSet; -import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -34,25 +31,19 @@ public class DeleteZoneAction extends SimpleActionSupport<ZoneEditorUI> { JTree zonesTree = zoneEditorUI.getZonesTree(); - if (zonesTree.getSelectionCount() >= 1) { + if (zonesTree.getSelectionCount() == 1) { - Set<ZoneUIModel> zonesToDelete = new HashSet<>(); - TreePath[] selectionPaths = zonesTree.getSelectionPaths(); - for (TreePath selectedPath : selectionPaths) { - ZoneUIModel zone = ((ZoneNode) selectedPath.getPathComponent(1)).getZone(); - zonesToDelete.add(zone); - } - - String zonesToDeleteListItems = "<li>" + StringUtils.join(zonesToDelete, "</li><li>") + "</li>"; + TreePath selectedPath = zonesTree.getSelectionPath(); + Zone zone = ((ZoneNode) selectedPath.getPathComponent(1)).getZone(); int confirmDeletion = JOptionPane.showConfirmDialog(zoneEditorUI, - t("tutti.zoneEditor.deleteZone.message", zonesToDeleteListItems), + t("tutti.zoneEditor.deleteZone.message", zone), t("tutti.zoneEditor.deleteZone.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirmDeletion == JOptionPane.YES_OPTION) { - zoneEditorUI.getModel().removeAllZones(zonesToDelete); + zoneEditorUI.getModel().removeZone(zone); } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RenameZoneAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RenameZoneAction.java new file mode 100644 index 0000000..ae67260 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/actions/RenameZoneAction.java @@ -0,0 +1,54 @@ +package fr.ifremer.tutti.ui.swing.content.protocol.zones.actions; + +import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.ZoneEditorUI; +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 static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class RenameZoneAction extends SimpleActionSupport<ZoneEditorUI> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(RenameZoneAction.class); + + public RenameZoneAction(ZoneEditorUI zoneEditorUI) { + super(zoneEditorUI); + } + + @Override + protected void onActionPerformed(ZoneEditorUI zoneEditorUI) { + + JTree zonesTree = zoneEditorUI.getZonesTree(); + + if (zonesTree.getSelectionCount() == 1) { + + TreePath selectedPath = zonesTree.getSelectionPath(); + ZoneNode zoneNode = (ZoneNode) selectedPath.getPathComponent(1); + Zone zone = zoneNode.getZone(); + + String zoneLabel = (String) JOptionPane.showInputDialog(zoneEditorUI, + t("tutti.zoneEditor.renameZone.message", zone.getLabel()), + t("tutti.zoneEditor.renameZone.title", zone.getLabel()), + JOptionPane.QUESTION_MESSAGE, + null, + null, + zone.getLabel()); + + if (StringUtils.isNotEmpty(zoneLabel)) { + zone.setLabel(zoneLabel); + } + } + } +} 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 8dcbd8a..cdf6487 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 @@ -92,14 +92,14 @@ public class SubStrataUIModel extends AbstractTuttiBeanUIModel<SubStrata, SubStr if (obj == this) { return true; } - if (!StrataUIModel.class.equals(obj.getClass())) { + if (!SubStrataUIModel.class.equals(obj.getClass())) { return false; } if (getId() != null) { - return getId().equals(((StrataUIModel) obj).getId()); + return getId().equals(((SubStrataUIModel) obj).getId()); } if (getLocation() != null) { - return getLocation().equals(((StrataUIModel) obj).getLocation()); + return getLocation().equals(((SubStrataUIModel) obj).getLocation()); } return false; } 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 2072ed3..047e183 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 @@ -192,4 +192,8 @@ public class ZonesTreeModel extends AbstractZoneEditorTreeModel { return subStrataNode; } + + public void zoneLabelChanged(ZoneUIModel zone) { + nodeChanged(findZoneNode(zone)); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java index 701137b..d8df4f1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java @@ -42,7 +42,9 @@ import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JRadioButton; +import javax.swing.JTree; import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; import java.awt.Color; import java.awt.Desktop; import java.awt.event.KeyEvent; @@ -229,5 +231,18 @@ public final class TuttiUIUtil extends ApplicationUIUtil { } } + //FIXME move to jaxx + public static void collapseTree(final JTree tree) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + int i = 0; + + while(i < tree.getRowCount()) { + tree.collapseRow(i++); + } + + } + }); + } } diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml new file mode 100644 index 0000000..62a6e21 --- /dev/null +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel-error-validation.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + Tutti :: UI + %% + Copyright (C) 2012 - 2014 Ifremer + %% + 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% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="availableStratas"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ availableStratas.isEmpty() ]]> + </param> + <message> + tutti.validator.error.zoneEditor.availableStratas.remaining + </message> + </field-validator> + </field> + +</validators> 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 fbbfe97..c5f1ff2 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 @@ -2337,6 +2337,7 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatch tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleWeightGreaterThanBatchSampleWeight= tutti.validator.error.splitSpeciesBatch.selectedCategory.required= tutti.validator.error.splitSpeciesBatch.weight.weightGreaterThanBatchSampleWeight= +tutti.validator.error.zoneEditor.availableStratas.remaining= tutti.validator.info.cruise.noError= tutti.validator.info.operation.noError= tutti.validator.warning.benthosFrequency.redundantTotalWeight= @@ -2347,7 +2348,15 @@ tutti.vesselUseFeatureTable.action.removeCaracteristic.tip= tutti.vesselUseFeatureTable.table.header.key= tutti.vesselUseFeatureTable.table.header.value= tutti.vesselUseFeatureTable.title= +tutti.zoneEditor.action.delete= +tutti.zoneEditor.action.delete.mnemonic= +tutti.zoneEditor.action.delete.tip= +tutti.zoneEditor.action.rename= +tutti.zoneEditor.action.rename.mnemonic= +tutti.zoneEditor.action.rename.tip= tutti.zoneEditor.createZone.message= tutti.zoneEditor.createZone.title= tutti.zoneEditor.deleteZone.message= tutti.zoneEditor.deleteZone.title= +tutti.zoneEditor.renameZone.message= +tutti.zoneEditor.renameZone.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 1a9038a..e05c253 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 @@ -2162,6 +2162,7 @@ tutti.validator.error.speciesFrequency.step.positiveValue=Le pas de la classe de tutti.validator.error.splitSpeciesBatch.sampleWeight.invalidValue=La somme des poids ventilés doit être strictement positive tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight=La somme des poids ventilés doit être inférieur ou égale à celle du poids du lot tutti.validator.error.splitSpeciesBatch.selectedCategory.required=La catégorie est obligatoire +tutti.validator.error.zoneEditor.availableStratas.remaining= tutti.validator.info.cruise.noError=Campagne sans erreur tutti.validator.info.operation.noError=Trait sans erreur tutti.validator.warning.benthosFrequency.redundantTotalWeight=Le poids total est redondant (égal au poids calculé à partir des poids observés) @@ -2172,7 +2173,15 @@ tutti.vesselUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caracté tutti.vesselUseFeatureTable.table.header.key=Caractéristique tutti.vesselUseFeatureTable.table.header.value=Valeur tutti.vesselUseFeatureTable.title=Autres paramètres +tutti.zoneEditor.action.delete=Supprimer la zone +tutti.zoneEditor.action.delete.mnemonic=Supprimer la zone sélectionnée +tutti.zoneEditor.action.delete.tip=S +tutti.zoneEditor.action.rename=Renommer la zone +tutti.zoneEditor.action.rename.mnemonic=Renommer la zone sélectionnée +tutti.zoneEditor.action.rename.tip=R tutti.zoneEditor.createZone.message=Libellé de la nouvelle zone 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.message=Vous êtes sur le point de supprimer la zone %s. Êtes-vous sûr de vouloir la supprimer ? tutti.zoneEditor.deleteZone.title=Suppression de zone +tutti.zoneEditor.renameZone.message=Nouveau libellé de la zone +tutti.zoneEditor.renameZone.title=Renommer la zone %s -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 48df60ecb8d5f66c6f4912bf424243e3835b211c Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 10:46:33 2016 +0100 activation ou non des boutons d'ajout et de suppresion des strates (refs #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jcss | 5 +- .../protocol/zones/ZoneEditorUIHandler.java | 56 ++++++++++++++++------ .../protocol/zones/actions/AddStratasAction.java | 4 ++ 3 files changed, 48 insertions(+), 17 deletions(-) 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 6a83608..115da48 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 @@ -34,7 +34,6 @@ JToolBar { _help: {"tutti.zoneEditor.action.rename.help"}; } - #expandZonesTree { actionIcon: expand; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.ExpandZonesTreeAction.class}; @@ -57,12 +56,12 @@ JToolBar { #addButton { actionIcon: left; - enabled: {zonesTree.getSelectionCount() == 1}; + enabled: false; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; } #removeButton { actionIcon: right; - enabled: {zonesTree.getSelectionCount() >= 1}; + enabled: false; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; } \ No newline at end of file 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 f541124..239922d 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 @@ -10,7 +10,9 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; 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; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StrataNode; import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.StratasTreeModel; +import fr.ifremer.tutti.ui.swing.content.protocol.zones.tree.SubStrataNode; 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.AbstractTuttiUIHandler; @@ -24,6 +26,8 @@ import javax.swing.JComponent; import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.SwingUtilities; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import java.awt.Point; @@ -179,7 +183,7 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo // init trees TreeModel availableStratasTreeModel = new StratasTreeModel(); - JTree availableStratasTree = ui.getAvailableStratasTree(); + final JTree availableStratasTree = ui.getAvailableStratasTree(); availableStratasTree.setModel(availableStratasTreeModel); SwingUtil.addExpandOnClickListener(availableStratasTree); @@ -189,11 +193,44 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo SwingUtil.addExpandOnClickListener(zonesTree); zonesTree.addTreeSelectionListener(event -> { - boolean zoneSelected = event.getPath().getLastPathComponent() instanceof ZoneNode; - getUI().getDeleteZoneMenuItem().setEnabled(zoneSelected); - getUI().getRenameZoneMenuItem().setEnabled(zoneSelected); + + TreePath[] selectedPaths = zonesTree.getSelectionPaths(); + boolean allStrataNode = selectedPaths != null; + + if (selectedPaths != null) { + + if (selectedPaths.length == 1) { + boolean zoneSelected = event.getPath().getLastPathComponent() instanceof ZoneNode; + getUI().getDeleteZoneMenuItem().setEnabled(zoneSelected); + getUI().getRenameZoneMenuItem().setEnabled(zoneSelected); + } + + for (TreePath selectedPath : selectedPaths) { + Object lastPathComponent = selectedPath.getLastPathComponent(); + if (!(lastPathComponent instanceof StrataNode + || lastPathComponent instanceof SubStrataNode)) { + allStrataNode = false; + break; + } + } + } + + getUI().getRemoveButton().setEnabled(allStrataNode); + }); + TreeSelectionListener enableAddStrataListener = new TreeSelectionListener() { + + @Override + public void valueChanged(TreeSelectionEvent e) { + getUI().getAddButton().setEnabled(zonesTree.getSelectionCount() == 1 + && zonesTree.getSelectionPath().getLastPathComponent() instanceof ZoneNode + && availableStratasTree.getSelectionCount() >= 1); + } + }; + zonesTree.addTreeSelectionListener(enableAddStrataListener); + availableStratasTree.addTreeSelectionListener(enableAddStrataListener); + // get data initModel(); @@ -236,18 +273,9 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo log.debug("At point [" + p + "] found Row " + rowIndex); } - // select row (could empty selection) - if (rowIndex == -1) { - source.clearSelection(); - - } else { - // set selection - source.setSelectionRow(rowIndex); - } - if (rightClick) { - TreePath path = source.getPathForRow(rowIndex); + source.setSelectionRow(rowIndex); // on right click show popup popup.show(source, e.getX(), e.getY()); 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 615562d..4094e4c 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 @@ -66,6 +66,10 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { log.info("add subtrata " + subStrata.getLabel()); } subStratasToAdd.add(subStrata); + + } else { + // the root node is selected, add all + stratasToAdd.addAll(zoneEditorUI.getModel().getAvailableStratas()); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 0d628cb994d0557176f1065caa038a9b4171c499 Author: Kevin Morin <morin@codelutin.com> Date: Wed Feb 3 11:05:50 2016 +0100 desactivation des boutons d'ajout et de suppression des strates à l'ouverture de l'écran (refs #7929) --- .../tutti/ui/swing/content/protocol/zones/ZoneEditorUI.jcss | 2 -- .../ui/swing/content/protocol/zones/ZoneEditorUIHandler.java | 12 +++++++----- .../content/protocol/zones/actions/AddStratasAction.java | 1 + .../content/protocol/zones/actions/RemoveStratasAction.java | 1 + 4 files changed, 9 insertions(+), 7 deletions(-) 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 115da48..f4c227e 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 @@ -56,12 +56,10 @@ JToolBar { #addButton { actionIcon: left; - enabled: false; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; } #removeButton { actionIcon: right; - enabled: false; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; } \ No newline at end of file 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 239922d..e201889 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 @@ -195,7 +195,7 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo zonesTree.addTreeSelectionListener(event -> { TreePath[] selectedPaths = zonesTree.getSelectionPaths(); - boolean allStrataNode = selectedPaths != null; + boolean allStrataNode = true; if (selectedPaths != null) { @@ -213,9 +213,10 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo break; } } + } - getUI().getRemoveButton().setEnabled(allStrataNode); + getUI().getRemoveButton().setEnabled(selectedPaths != null && allStrataNode); }); @@ -223,9 +224,10 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo @Override public void valueChanged(TreeSelectionEvent e) { - getUI().getAddButton().setEnabled(zonesTree.getSelectionCount() == 1 - && zonesTree.getSelectionPath().getLastPathComponent() instanceof ZoneNode - && availableStratasTree.getSelectionCount() >= 1); + boolean addButtonEnabled = zonesTree.getSelectionCount() == 1 + && zonesTree.getSelectionPath().getLastPathComponent() instanceof ZoneNode + && availableStratasTree.getSelectionCount() >= 1; + getUI().getAddButton().setEnabled(addButtonEnabled); } }; zonesTree.addTreeSelectionListener(enableAddStrataListener); 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 4094e4c..aa0511f 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 @@ -30,6 +30,7 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { public AddStratasAction(ZoneEditorUI zoneEditorUI) { super(zoneEditorUI); + setEnabled(false); } @Override 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 07448a2..93a8cdf 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 @@ -29,6 +29,7 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { public RemoveStratasAction(ZoneEditorUI zoneEditorUI) { super(zoneEditorUI); + setEnabled(false); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 5927e497326c185f33840031d9ea4e133a1d4b3b Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 4 09:08:18 2016 +0100 Merge de modèle --- .../src/main/xmi/tutti-persistence.zargo | Bin 59366 -> 60851 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index a6e2a4d..f298eca 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 a219dd72a675aec4a3f88437d25dd3ef875edfb1 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 4 11:34:16 2016 +0100 ajout des libellé sur les racines des arbres (refs #7929) --- .../content/protocol/zones/ZoneEditorUIHandler.java | 18 ------------------ .../zones/tree/AbstractZoneEditorTreeModel.java | 4 ++-- .../content/protocol/zones/tree/StratasTreeModel.java | 6 ++++++ .../content/protocol/zones/tree/ZoneEditorNode.java | 4 ++-- .../zones/tree/ZoneEditorTreeCellRenderer.java | 16 ---------------- .../content/protocol/zones/tree/ZonesTreeModel.java | 7 +++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 ++ 8 files changed, 22 insertions(+), 38 deletions(-) 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 e201889..aba0d05 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 @@ -4,7 +4,6 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; -import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import fr.ifremer.tutti.ui.swing.content.protocol.zones.models.StrataUIModel; @@ -117,21 +116,12 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); - if (log.isInfoEnabled()) { - log.info(oldSubStratas); - log.info(newSubStratas); - } - Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); subStratasToAdd.removeAll(oldSubStratas); Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); subStratasToRemove.removeAll(newSubStratas); - if (log.isInfoEnabled()) { - log.info("substrata to remove : " + subStratasToRemove); - } - StratasTreeModel stratasTreeModel = (StratasTreeModel) getUI().getAvailableStratasTree().getModel(); stratasTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); @@ -292,14 +282,6 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo Multimap<TuttiLocation, TuttiLocation> programStratasAndSubstratas = HashMultimap.create(persistenceService.getAllFishingOperationStratasAndSubstratas(programZone.getId())); - //FIXME only for tests - TuttiLocation test = programStratasAndSubstratas.keySet().iterator().next(); - for (int i = 0 ; i < 5 ; i++) { - TuttiLocation location = TuttiLocations.newTuttiLocation(); - location.setId(i); - location.setLabel("substrata" + i); - programStratasAndSubstratas.put(test, location); - } // on transforme les données du service en modele d'ui Collection<StrataUIModel> availableStratas = new HashSet<>(); 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 index b1617cd..1862a76 100644 --- 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 @@ -14,8 +14,8 @@ public abstract class AbstractZoneEditorTreeModel extends DefaultTreeModel { /** Logger. */ private static final Log log = LogFactory.getLog(AbstractZoneEditorTreeModel.class); - public AbstractZoneEditorTreeModel() { - super(new ZoneEditorNode()); + public AbstractZoneEditorTreeModel(String rootLabel) { + super(new ZoneEditorNode(rootLabel)); } public void addNode(ZoneEditorNode newChild, ZoneEditorNode parent) { 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 1b9838c..86b6c9b 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 @@ -11,6 +11,8 @@ import java.util.Collection; import java.util.Enumeration; import java.util.HashSet; +import static org.nuiton.i18n.I18n.t; + /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -20,6 +22,10 @@ public class StratasTreeModel extends AbstractZoneEditorTreeModel { /** Logger. */ private static final Log log = LogFactory.getLog(StratasTreeModel.class); + public StratasTreeModel() { + super(t("tutti.zoneEditor.availableStratas.root.label")); + } + public void removeStratas(Collection<StrataUIModel> stratasToRemove) { ZoneEditorNode root = (ZoneEditorNode) getRoot(); 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 43e113a..36fb577 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 @@ -17,8 +17,8 @@ public class ZoneEditorNode extends DefaultMutableTreeNode implements Comparable /** Logger. */ private static final Log log = LogFactory.getLog(ZoneEditorNode.class); - public ZoneEditorNode() { - super(); + public ZoneEditorNode(String label) { + super(label); } public ZoneEditorNode(Object userObject, boolean allowchildren) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java index f81d71d..4de547f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/tree/ZoneEditorTreeCellRenderer.java @@ -22,22 +22,6 @@ public class ZoneEditorTreeCellRenderer extends DefaultTreeCellRenderer { super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); -// String text = ""; -// -// if (value instanceof StrataNode) { -// StrataUIModel strata = ((StrataNode) value).getStrata(); -// text = strata.getLabel(); -// -// } else if (value instanceof SubStrataNode) { -// SubStrataUIModel substrata = ((SubStrataNode) value).getSubstrata(); -// text = substrata.getLabel(); -// -// } else if (value instanceof ZoneNode) { -// Zone zone = ((ZoneNode) value).getZone(); -// text = zone.getLabel(); -// } - -// setText(text); setIcon(SwingUtil.createActionIcon("location")); return this; 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 047e183..2b88ddb 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 @@ -15,6 +15,8 @@ import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; +import static org.nuiton.i18n.I18n.t; + /** * @author Kevin Morin (Code Lutin) * @since 4.5 @@ -24,6 +26,11 @@ public class ZonesTreeModel extends AbstractZoneEditorTreeModel { /** Logger. */ private static final Log log = LogFactory.getLog(ZonesTreeModel.class); + public ZonesTreeModel() { + super(t("tutti.zoneEditor.zones.root.label")); + log.info(t("tutti.test", "test1", "test2", 1.0d)); + } + public void removeZones(Collection<ZoneUIModel> zonesToRemove) { ZoneEditorNode root = (ZoneEditorNode) getRoot(); 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 c5f1ff2..56bde07 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 @@ -2221,6 +2221,7 @@ tutti.splitSpeciesBatch.table.header.category= tutti.splitSpeciesBatch.table.header.selected= tutti.splitSpeciesBatch.table.header.weight= tutti.splitSpeciesBatch.title= +tutti.test= tutti.title.openReplaceTemporaryGearUI.noSource= tutti.title.openReplaceTemporaryGearUI.noTarget= tutti.title.openReplaceTemporaryPersonUI.noSource= @@ -2354,9 +2355,11 @@ tutti.zoneEditor.action.delete.tip= tutti.zoneEditor.action.rename= tutti.zoneEditor.action.rename.mnemonic= tutti.zoneEditor.action.rename.tip= +tutti.zoneEditor.availableStratas.root.label= tutti.zoneEditor.createZone.message= tutti.zoneEditor.createZone.title= tutti.zoneEditor.deleteZone.message= tutti.zoneEditor.deleteZone.title= tutti.zoneEditor.renameZone.message= tutti.zoneEditor.renameZone.title= +tutti.zoneEditor.zones.root.label= 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 e05c253..9a9bad0 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 @@ -2179,9 +2179,11 @@ tutti.zoneEditor.action.delete.tip=S tutti.zoneEditor.action.rename=Renommer la zone tutti.zoneEditor.action.rename.mnemonic=Renommer la zone sélectionnée tutti.zoneEditor.action.rename.tip=R +tutti.zoneEditor.availableStratas.root.label=Strates à attribuer à une zone tutti.zoneEditor.createZone.message=Libellé de la nouvelle zone tutti.zoneEditor.createZone.title=Nouvelle zone tutti.zoneEditor.deleteZone.message=Vous êtes sur le point de supprimer la zone %s. Êtes-vous sûr de vouloir la supprimer ? tutti.zoneEditor.deleteZone.title=Suppression de zone tutti.zoneEditor.renameZone.message=Nouveau libellé de la zone tutti.zoneEditor.renameZone.title=Renommer la zone %s +tutti.zoneEditor.zones.root.label=Zones -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 ccbed1721184adc51202de636a038a823df880bb Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 15:33:23 2016 +0100 inversion des 2 arbres (refs #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 40 ++++++++++++---------- .../swing/content/protocol/zones/ZoneEditorUI.jcss | 4 +-- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 3 files changed, 24 insertions(+), 21 deletions(-) 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 e4b989c..bffbf34 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 @@ -34,30 +34,31 @@ <row> <cell> - <JToolBar id="zonesTreeToolBar"> - <JButton id="createZone"/> - <JButton id="expandZonesTree"/> - <JButton id="collapseZonesTree"/> + <JToolBar id="availableStratasTreeToolBar"> + <JButton id="expandAvailableStratasTree"/> + <JButton id="collapseAvailableStratasTree"/> </JToolBar> </cell> <cell> <JLabel/> </cell> <cell> - <JToolBar id="availableStratasTreeToolBar"> - <JButton id="expandAvailableStratasTree"/> - <JButton id="collapseAvailableStratasTree"/> + <JToolBar id="zonesTreeToolBar"> + <JButton id="createZone"/> + <JButton id="expandZonesTree"/> + <JButton id="collapseZonesTree"/> </JToolBar> </cell> </row> <row> + <cell weightx='0.5' weighty='1' fill='both'> - <JScrollPane onFocusGained='zonesTree.requestFocus()'> - <!-- List of the zones --> - <JTree id='zonesTree' onMouseClicked="handler.autoSelectNodeInTree(event, zonePopupMenu)"/> - <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> - <!--onMouseClicked='handler.onUniverseListClicked(event)'--> - <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> + <JScrollPane onFocusGained='availableStratasTree.requestFocus()'> + <!-- List of the available stratas and substratas --> + <JTree id='availableStratasTree' onValueChanged="availableStratasTree.expandPath(event.getNewLeadSelectionPath())"/> + <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> + <!--onMouseClicked='handler.onSelectedListClicked(event)'--> + <!--onKeyPressed='handler.onKeyPressedOnSelectedList(event)'/>--> </JScrollPane> </cell> @@ -69,14 +70,15 @@ </cell> <cell weightx='0.5' weighty='1' fill='both'> - <JScrollPane onFocusGained='availableStratasTree.requestFocus()'> - <!-- List of the available stratas and substratas --> - <JTree id='availableStratasTree' onValueChanged="availableStratasTree.expandPath(event.getNewLeadSelectionPath())"/> - <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> - <!--onMouseClicked='handler.onSelectedListClicked(event)'--> - <!--onKeyPressed='handler.onKeyPressedOnSelectedList(event)'/>--> + <JScrollPane onFocusGained='zonesTree.requestFocus()'> + <!-- List of the zones --> + <JTree id='zonesTree' onMouseClicked="handler.autoSelectNodeInTree(event, zonePopupMenu)"/> + <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> + <!--onMouseClicked='handler.onUniverseListClicked(event)'--> + <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> </JScrollPane> </cell> + </row> </Table> \ No newline at end of file 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 f4c227e..cce689c 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 @@ -55,11 +55,11 @@ JToolBar { } #addButton { - actionIcon: left; + actionIcon: right; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.AddStratasAction.class}; } #removeButton { - actionIcon: right; + actionIcon: left; _simpleAction: {fr.ifremer.tutti.ui.swing.content.protocol.zones.actions.RemoveStratasAction.class}; } \ No newline at end of file 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 9a9bad0..dd9b112 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 @@ -2056,6 +2056,7 @@ tutti.splitSpeciesBatch.table.header.category=Catégorie tutti.splitSpeciesBatch.table.header.selected=Sélection tutti.splitSpeciesBatch.table.header.weight=Poids tutti.splitSpeciesBatch.title=Catégorisation du lot +tutti.test= tutti.title.openReplaceTemporaryUI.noSource=Pas de référentiel temporaire de type %s dans la base tutti.title.openReplaceTemporaryUI.noTarget=Pas de référentiel officiel de type %s dans la base tutti.todo= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 132e60cb42f2db6b6cb4086a5340fe9f9c48fc83 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 5 15:43:20 2016 +0100 expand nodes when children are inserted (refs #7929) --- .../protocol/zones/ZoneEditorUIHandler.java | 52 ++++++++++++++++++---- .../protocol/zones/actions/AddStratasAction.java | 6 --- 2 files changed, 43 insertions(+), 15 deletions(-) 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 aba0d05..aacdb84 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 @@ -25,7 +25,8 @@ import javax.swing.JComponent; import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.SwingUtilities; -import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeModelEvent; +import javax.swing.event.TreeModelListener; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; @@ -210,19 +211,52 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo }); - TreeSelectionListener enableAddStrataListener = new TreeSelectionListener() { + TreeSelectionListener enableAddStrataListener = evt -> { - @Override - public void valueChanged(TreeSelectionEvent e) { - boolean addButtonEnabled = zonesTree.getSelectionCount() == 1 - && zonesTree.getSelectionPath().getLastPathComponent() instanceof ZoneNode - && availableStratasTree.getSelectionCount() >= 1; - getUI().getAddButton().setEnabled(addButtonEnabled); - } + boolean addButtonEnabled = zonesTree.getSelectionCount() == 1 + && zonesTree.getSelectionPath().getLastPathComponent() instanceof ZoneNode + && availableStratasTree.getSelectionCount() >= 1; + getUI().getAddButton().setEnabled(addButtonEnabled); + }; zonesTree.addTreeSelectionListener(enableAddStrataListener); availableStratasTree.addTreeSelectionListener(enableAddStrataListener); + // expand nodes when children are added + zonesTreeModel.addTreeModelListener(new TreeModelListener() { + + @Override + public void treeNodesChanged(TreeModelEvent e) { } + + @Override + public void treeNodesInserted(TreeModelEvent e) { + zonesTree.expandPath(e.getTreePath()); + } + + @Override + public void treeNodesRemoved(TreeModelEvent e) { } + + @Override + public void treeStructureChanged(TreeModelEvent e) { } + }); + + availableStratasTreeModel.addTreeModelListener(new TreeModelListener() { + + @Override + public void treeNodesChanged(TreeModelEvent e) { } + + @Override + public void treeNodesInserted(TreeModelEvent e) { + availableStratasTree.expandPath(e.getTreePath()); + } + + @Override + public void treeNodesRemoved(TreeModelEvent e) { } + + @Override + public void treeStructureChanged(TreeModelEvent e) { } + }); + // get data initModel(); 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 aa0511f..e6e689b 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 @@ -56,16 +56,10 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { if (node instanceof StrataNode) { StrataUIModel strata = ((StrataNode) node).getStrata(); - if (log.isInfoEnabled()) { - log.info("add strata " + strata.getLabel()); - } stratasToAdd.add(strata); } else if (node instanceof SubStrataNode) { SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); - if (log.isInfoEnabled()) { - log.info("add subtrata " + subStrata.getLabel()); - } subStratasToAdd.add(subStrata); } else { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 793f199fe5247dcdd4cbb6e7f2674dfbfe56c176 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Feb 6 09:19:36 2016 +0100 Pouvoir ajouter/supprimer en utilisant un double click ou la touche entrée (See #7929) --- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 7 +- .../protocol/zones/ZoneEditorUIHandler.java | 153 ++++++++++++--------- .../protocol/zones/actions/AddStratasAction.java | 4 +- .../zones/actions/RemoveStratasAction.java | 51 ++++--- 4 files changed, 125 insertions(+), 90 deletions(-) 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 bffbf34..8b881b2 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 @@ -55,7 +55,9 @@ <cell weightx='0.5' weighty='1' fill='both'> <JScrollPane onFocusGained='availableStratasTree.requestFocus()'> <!-- List of the available stratas and substratas --> - <JTree id='availableStratasTree' onValueChanged="availableStratasTree.expandPath(event.getNewLeadSelectionPath())"/> + <JTree id='availableStratasTree' onValueChanged="availableStratasTree.expandPath(event.getNewLeadSelectionPath())" + onMouseClicked="handler.onMouseClickedOnAvailableStratas(event)" + onKeyPressed="handler.onKeyPressedOnAvailableStratas(event)"/> <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> <!--onMouseClicked='handler.onSelectedListClicked(event)'--> <!--onKeyPressed='handler.onKeyPressedOnSelectedList(event)'/>--> @@ -72,7 +74,8 @@ <cell weightx='0.5' weighty='1' fill='both'> <JScrollPane onFocusGained='zonesTree.requestFocus()'> <!-- List of the zones --> - <JTree id='zonesTree' onMouseClicked="handler.autoSelectNodeInTree(event, zonePopupMenu)"/> + <JTree id='zonesTree' onMouseClicked="handler.onMouseClickedPressedOnZones(event, zonePopupMenu)" + onKeyPressed="handler.onKeyPressedOnZones(event)"/> <!--onFocusGained='handler.selectFirstRowIfNoSelection(event)'--> <!--onMouseClicked='handler.onUniverseListClicked(event)'--> <!--onKeyPressed='handler.onKeyPressedOnUniverseList(event)'--> 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 aacdb84..62aa35c 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 @@ -31,6 +31,7 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import java.awt.Point; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -48,86 +49,90 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo /** Logger. */ private static final Log log = LogFactory.getLog(ZoneEditorUIHandler.class); - protected final PropertyChangeListener labelChangeListener = new PropertyChangeListener() { + protected final PropertyChangeListener labelChangeListener; - @Override - public void propertyChange(PropertyChangeEvent evt) { + protected final PropertyChangeListener stratasChangeListener; - ZoneUIModel zone = (ZoneUIModel) evt.getSource(); - ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); - zonesTreeModel.zoneLabelChanged(zone); - } - }; - - protected final PropertyChangeListener stratasChangeListener = new PropertyChangeListener() { + protected final PropertyChangeListener zoneSubStratasChangeListener; - @Override - public void propertyChange(PropertyChangeEvent evt) { + protected final PropertyChangeListener availableSubStratasChangeListener; - ZoneUIModel zone = (ZoneUIModel) evt.getSource(); + public ZoneEditorUIHandler() { - Collection<StrataUIModel> newStratas = (Collection<StrataUIModel>) evt.getNewValue(); - Collection<StrataUIModel> oldStratas = (Collection<StrataUIModel>) evt.getOldValue(); - - Collection<StrataUIModel> stratasToAdd = new ArrayList<>(newStratas); - stratasToAdd.removeAll(oldStratas); + availableSubStratasChangeListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - Collection<StrataUIModel> stratasToRemove = new ArrayList<>(oldStratas); - stratasToRemove.removeAll(newStratas); + StrataUIModel strata = (StrataUIModel) evt.getSource(); - stratasToRemove.forEach(strata -> strata.removePropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, - zoneSubStratasChangeListener)); - stratasToAdd.forEach(strata -> strata.addPropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, - zoneSubStratasChangeListener)); + Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); + Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); - ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); - zonesTreeModel.updateStratas(zone, stratasToAdd, stratasToRemove); - } - }; + Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); + subStratasToAdd.removeAll(oldSubStratas); - protected final PropertyChangeListener zoneSubStratasChangeListener = new PropertyChangeListener() { + Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); + subStratasToRemove.removeAll(newSubStratas); - @Override - public void propertyChange(PropertyChangeEvent evt) { + StratasTreeModel stratasTreeModel = (StratasTreeModel) ZoneEditorUIHandler.this.getUI().getAvailableStratasTree().getModel(); + stratasTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); - StrataUIModel strata = (StrataUIModel) evt.getSource(); + } + }; + zoneSubStratasChangeListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); - Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); + StrataUIModel strata = (StrataUIModel) evt.getSource(); - Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); - subStratasToAdd.removeAll(oldSubStratas); + Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); + Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); - Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); - subStratasToRemove.removeAll(newSubStratas); + Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); + subStratasToAdd.removeAll(oldSubStratas); - ZonesTreeModel zonesTreeModel = (ZonesTreeModel) getUI().getZonesTree().getModel(); - zonesTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); + Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); + subStratasToRemove.removeAll(newSubStratas); - } - }; + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) ZoneEditorUIHandler.this.getUI().getZonesTree().getModel(); + zonesTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); - protected final PropertyChangeListener availableSubStratasChangeListener = new PropertyChangeListener() { + } + }; + labelChangeListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - @Override - public void propertyChange(PropertyChangeEvent evt) { + ZoneUIModel zone = (ZoneUIModel) evt.getSource(); + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) ZoneEditorUIHandler.this.getUI().getZonesTree().getModel(); + zonesTreeModel.zoneLabelChanged(zone); + } + }; + stratasChangeListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { - StrataUIModel strata = (StrataUIModel) evt.getSource(); + ZoneUIModel zone = (ZoneUIModel) evt.getSource(); - Collection<SubStrataUIModel> newSubStratas = (Collection<SubStrataUIModel>) evt.getNewValue(); - Collection<SubStrataUIModel> oldSubStratas = (Collection<SubStrataUIModel>) evt.getOldValue(); + Collection<StrataUIModel> newStratas = (Collection<StrataUIModel>) evt.getNewValue(); + Collection<StrataUIModel> oldStratas = (Collection<StrataUIModel>) evt.getOldValue(); - Collection<SubStrataUIModel> subStratasToAdd = new ArrayList<>(newSubStratas); - subStratasToAdd.removeAll(oldSubStratas); + Collection<StrataUIModel> stratasToAdd = new ArrayList<>(newStratas); + stratasToAdd.removeAll(oldStratas); - Collection<SubStrataUIModel> subStratasToRemove = new ArrayList<>(oldSubStratas); - subStratasToRemove.removeAll(newSubStratas); + Collection<StrataUIModel> stratasToRemove = new ArrayList<>(oldStratas); + stratasToRemove.removeAll(newStratas); - StratasTreeModel stratasTreeModel = (StratasTreeModel) getUI().getAvailableStratasTree().getModel(); - stratasTreeModel.updateSubStratas(strata, subStratasToAdd, subStratasToRemove); + stratasToRemove.forEach(strata -> strata.removePropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, + zoneSubStratasChangeListener)); + stratasToAdd.forEach(strata -> strata.addPropertyChangeListener(StrataUIModel.PROPERTY_SUBSTRATA, + zoneSubStratasChangeListener)); - } - }; + ZonesTreeModel zonesTreeModel = (ZonesTreeModel) ZoneEditorUIHandler.this.getUI().getZonesTree().getModel(); + zonesTreeModel.updateStratas(zone, stratasToAdd, stratasToRemove); + } + }; + } @Override public void afterInit(ZoneEditorUI zoneEditorUI) { @@ -281,11 +286,24 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo stratasChangeListener)); } - public void autoSelectNodeInTree(MouseEvent e, JPopupMenu popup) { + public void onKeyPressedOnZones(KeyEvent e) { + + if (e.getKeyCode()== KeyEvent.VK_ENTER && getUI().getRemoveButton().isEnabled()) { + getContext().getActionEngine().runAction(getUI().getRemoveButton()); + } + } + + public void onKeyPressedOnAvailableStratas(KeyEvent e) { + + if (e.getKeyCode()== KeyEvent.VK_ENTER && getUI().getAddButton().isEnabled()) { + getContext().getActionEngine().runAction(getUI().getAddButton()); + } + } + - boolean rightClick = SwingUtilities.isRightMouseButton(e); + public void onMouseClickedPressedOnZones(MouseEvent e, JPopupMenu popup) { - if (rightClick || SwingUtilities.isLeftMouseButton(e)) { + if (SwingUtilities.isRightMouseButton(e)) { // get the coordinates of the mouse click Point p = e.getPoint(); @@ -299,13 +317,20 @@ public class ZoneEditorUIHandler extends AbstractTuttiUIHandler<EditProtocolUIMo log.debug("At point [" + p + "] found Row " + rowIndex); } - if (rightClick) { + source.setSelectionRow(rowIndex); - source.setSelectionRow(rowIndex); + // on right click show popup + popup.show(source, e.getX(), e.getY()); - // on right click show popup - popup.show(source, e.getX(), e.getY()); - } + } else if (e.getClickCount() == 2 && getUI().getRemoveButton().isEnabled()) { + getContext().getActionEngine().runAction(getUI().getRemoveButton()); + } + } + + public void onMouseClickedOnAvailableStratas(MouseEvent mouseEvent) { + + if (mouseEvent.getClickCount() == 2 && getUI().getAddButton().isEnabled()) { + getContext().getActionEngine().runAction(getUI().getAddButton()); } } 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 e6e689b..5d5b730 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 @@ -70,8 +70,8 @@ public class AddStratasAction extends SimpleActionSupport<ZoneEditorUI> { } Collection<SubStrata> alreadyAddedSubStratas = stratasToAdd.stream() - .map(strata -> strata.getSubstrata()) - .flatMap(c -> c.stream()) + .map(StrataUIModel::getSubstrata) + .flatMap(Collection::stream) .collect(Collectors.toSet()); subStratasToAdd.removeAll(alreadyAddedSubStratas); 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 93a8cdf..094230f 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 @@ -41,11 +41,12 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { Set<StrataUIModel> stratasToRemove = new HashSet<>(); Set<SubStrataUIModel> subStratasToRemove = new HashSet<>(); - for (TreePath treePath : selectedStratas) { + if (selectedStratas!=null) { + for (TreePath treePath : selectedStratas) { - Object node = treePath.getLastPathComponent(); + Object node = treePath.getLastPathComponent(); - if (node instanceof ZoneNode) { + if (node instanceof ZoneNode) { // ZoneUIModel zone = ((ZoneNode) node).getZone(); // if (log.isInfoEnabled()) { @@ -53,32 +54,38 @@ public class RemoveStratasAction extends SimpleActionSupport<ZoneEditorUI> { // } // stratasToRemove.addAll(zone.getStrata()); - } else if (node instanceof StrataNode) { + } else if (node instanceof StrataNode) { - StrataUIModel strata = ((StrataNode) node).getStrata(); - if (log.isInfoEnabled()) { - log.info("remove strata " + strata.getLabel()); - } - stratasToRemove.add(strata); + StrataUIModel strata = ((StrataNode) node).getStrata(); + if (log.isInfoEnabled()) { + log.info("remove strata " + strata.getLabel()); + } + stratasToRemove.add(strata); - } else if (node instanceof SubStrataNode) { - SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); - if (log.isInfoEnabled()) { - log.info("remove subtrata " + subStrata.getLabel() + " from " + subStrata.getStrata()); + } else if (node instanceof SubStrataNode) { + SubStrataUIModel subStrata = ((SubStrataNode) node).getSubstrata(); + if (log.isInfoEnabled()) { + log.info("remove subtrata " + subStrata.getLabel() + " from " + subStrata.getStrata()); + } + subStratasToRemove.add(subStrata); } - subStratasToRemove.add(subStrata); + } - } + Collection<SubStrata> alreadyRemovedSubStratas = stratasToRemove.stream() + .map(StrataUIModel::getSubstrata) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); - Collection<SubStrata> alreadyRemovedSubStratas = stratasToRemove.stream() - .map(strata->strata.getSubstrata()) - .flatMap(c -> c.stream()) - .collect(Collectors.toSet()); + subStratasToRemove.removeAll(alreadyRemovedSubStratas); - subStratasToRemove.removeAll(alreadyRemovedSubStratas); + zoneEditorUI.getModel().removeStratasFromZone(stratasToRemove); + zoneEditorUI.getModel().removeSubStratasFromZone(subStratasToRemove); + + // select zone path + zonesTree.setSelectionPath(selectedStratas[0].getParentPath()); + + } - zoneEditorUI.getModel().removeStratasFromZone(stratasToRemove); - zoneEditorUI.getModel().removeSubStratasFromZone(subStratasToRemove); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 2ab86d0de8299a0ec2b199f6c7a8ddb134c8bd03 Merge: 17b3ba9 793f199 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Feb 6 09:21:08 2016 +0100 Fixes #7929 Merge branch 'feature/7929_editeur_de_zone' into develop pom.xml | 2 + .../tutti/persistence/TuttiPersistenceImpl.java | 5 + .../persistence/TuttiPersistenceNoDbImpl.java | 5 + .../entities/protocol/TuttiProtocols.java | 3 + .../service/ProtocolPersistenceServiceImpl.java | 47 +++ .../referential/LocationPersistenceService.java | 10 + .../LocationPersistenceServiceImpl.java | 38 ++ .../src/main/xmi/tutti-persistence.zargo | Bin 59366 -> 60851 bytes .../ifremer/tutti/service/PersistenceService.java | 5 + .../swing/content/cruise/EditCruiseUIHandler.java | 2 +- .../content/cruise/actions/SaveCruiseAction.java | 4 +- .../accidental/AccidentalBatchUIHandler.java | 2 +- .../catches/benthos/BenthosBatchUIHandler.java | 4 +- .../IndividualObservationBatchUIHandler.java | 2 +- .../marinelitter/MarineLitterBatchUIHandler.java | 2 +- .../catches/species/SpeciesBatchUIHandler.java | 4 +- .../actions/EditFishingOperationAction.java | 4 +- .../actions/SaveFishingOperationAction.java | 2 +- .../content/program/EditProgramUIHandler.java | 2 +- .../content/program/actions/SaveProgramAction.java | 2 +- .../ui/swing/content/protocol/EditProtocolUI.jaxx | 5 + .../content/protocol/EditProtocolUIHandler.java | 15 +- .../content/protocol/EditProtocolUIModel.java | 232 +++++++++++ .../actions/ExportProtocolBenthosAction.java | 2 +- .../actions/ExportProtocolCaracteristicAction.java | 2 +- .../actions/ExportProtocolSpeciesAction.java | 2 +- .../actions/ImportProtocolBenthosAction.java | 2 +- .../actions/ImportProtocolCaracteristicAction.java | 4 +- .../actions/ImportProtocolSpeciesAction.java | 2 +- .../protocol/actions/SaveProtocolAction.java | 15 +- .../content/protocol/rtp/RtpEditorUIModel.java | 4 +- .../swing/content/protocol/zones/ZoneEditorUI.jaxx | 87 +++++ .../swing/content/protocol/zones/ZoneEditorUI.jcss | 65 ++++ .../protocol/zones/ZoneEditorUIHandler.java | 427 +++++++++++++++++++++ .../protocol/zones/actions/AddStratasAction.java | 84 ++++ .../CollapseAvailableStratasTreeAction.java | 21 + .../zones/actions/CollapseZonesTreeAction.java | 21 + .../protocol/zones/actions/CreateZoneAction.java | 51 +++ .../protocol/zones/actions/DeleteZoneAction.java | 50 +++ .../actions/ExpandAvailableStratasTreeAction.java | 21 + .../zones/actions/ExpandZonesTreeAction.java | 21 + .../zones/actions/RemoveStratasAction.java | 91 +++++ .../protocol/zones/actions/RenameZoneAction.java | 54 +++ .../protocol/zones/models/StrataUIModel.java | 225 +++++++++++ .../protocol/zones/models/SubStrataUIModel.java | 122 ++++++ .../content/protocol/zones/models/ZoneUIModel.java | 204 ++++++++++ .../zones/tree/AbstractZoneEditorTreeModel.java | 25 ++ .../content/protocol/zones/tree/StrataNode.java | 19 + .../protocol/zones/tree/StratasTreeModel.java | 134 +++++++ .../content/protocol/zones/tree/SubStrataNode.java | 18 + .../protocol/zones/tree/ZoneEditorNode.java | 52 +++ .../zones/tree/ZoneEditorTreeCellRenderer.java | 30 ++ .../content/protocol/zones/tree/ZoneNode.java | 19 + .../protocol/zones/tree/ZonesTreeModel.java | 206 ++++++++++ .../report/actions/GenerateReportAction.java | 2 +- .../actions/EditCruiseInValidationUIAction.java | 2 +- .../EditFishingOperationInValidationUIAction.java | 4 +- .../ifremer/tutti/ui/swing/util/TuttiUIUtil.java | 15 + .../EditProtocolUIModel-error-validation.xml | 40 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 21 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 18 +- .../src/main/resources/icons/action-left.png | Bin 0 -> 345 bytes .../src/main/resources/icons/action-right.png | Bin 0 -> 349 bytes 63 files changed, 2540 insertions(+), 39 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm