branch feature/7929_editeur_de_zone updated (7d08009 -> f259b29)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git discards 7d08009 ajout de l'onglet d'édition des zone (refs #7929) discards 3d32505 ajout des zones au protocole (refs #7929) discards 206c51f use java 1.8 adds 12c408a Clean css adds 9f1d4b6 Ajout de l'import-export des rtp en csv + nettoyage de code (See #6115) adds e80fe02 refactor code (See #6115) adds 8ac45ea Merge branch 'feature/6115_import_export_especes' into 'develop' adds 4edcc48 [jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts adds db3a34e [jgitflow-maven-plugin]updating poms for 4.4-rc-1 branch with snapshot versions adds 3cb52f7 Add missing license headers adds 5912871 [jgitflow-maven-plugin]updating poms for branch'release/4.4-rc-1' with non-snapshot versions adds 077a94d [jgitflow-maven-plugin]merging 'release/4.4-rc-1' into 'master' adds b08857b [jgitflow-maven-plugin]merging 'master' into 'develop' adds b714001 [jgitflow-maven-plugin]Updating develop poms back to pre merge state adds e9d5fce Démarrer le SoundEngine à l'ouverture du context applicatif et non plus à sos initialisation, sinon on entre en inter-blocage si l'init se déroule mal (par exemple sur le problème de fichier de lock... adds 6dc314c ajouter bouton pour recopier les valeurs a et b saisie dans Mâle vers femelles et Indéterminé. (refs#7937) adds 9e9a052 bug : pour fermer il faut parfois cliquer deux fois sur [Fermer] (refs #7937) adds de83c9d n'activer RTP que si méthode de mensuration renseignée. Donc dans la navigation flèche avant flèche arrière penser à "sauter" les espèces sans méthode de mensuration (fixes #7937) adds 0d01d8d Fixes #7937 Merge branch 'feature/7937' into develop adds 6f87c93 ajout des bips dans la queue du sound engine (fixes #7939) adds f541684 Supprimer une phrase à l'ouverture de la connexion avec le BingFin (Fixes #7938) adds 9e1882b [jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts adds 6d8d862 [jgitflow-maven-plugin]updating poms for 4.4-rc2 branch with snapshot versions adds 657e3ad upgrade pom version adds 84a8d56 [jgitflow-maven-plugin]updating poms for branch'release/4.4-rc2' with non-snapshot versions adds ef0be51 [jgitflow-maven-plugin]merging 'release/4.4-rc2' into 'master' adds 9c2cc73 [jgitflow-maven-plugin]merging 'master' into 'develop' adds 24fa7eb [jgitflow-maven-plugin]Updating develop poms back to pre merge state adds 786bd8b close UI des ecrans de mensurations quan don quitte les captures + reset des listeners de l'ichtyometre pour etre sur qu'il n'y en a qu'un (fixes #7943) adds 5adb922 Merge branch 'feature/7943' into 'develop' adds abb53af 9 décimales pour a dans les rtp (fixes #7944) adds 3286daf Merge branch 'feature/7944' into 'develop' adds 8385cdd [jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts adds a1fc26f [jgitflow-maven-plugin]updating poms for 4.4-rc3 branch with snapshot versions adds 9f0d29a [jgitflow-maven-plugin]updating poms for branch'release/4.4-rc3' with non-snapshot versions adds ab52755 [jgitflow-maven-plugin]merging 'release/4.4-rc3' into 'master' adds 24a97b1 [jgitflow-maven-plugin]merging 'master' into 'develop' adds 6c0822a [jgitflow-maven-plugin]Updating develop poms back to pre merge state new 595843d use java 1.8 new dedff13 ajout des zones au protocole (refs #7929) new 267fd13 ajout de l'onglet d'édition des zone (refs #7929) new 9ae2970 ajout des strates et sous strates au modèle (refs #7929) new fc7dabe mise a jour suite aux modifs du modele + appel des oncloseui des sous-ui (refs #7929) new 48ded36 noeuds + renderer + modeles d'arbre + modele de zone (refs #7929) new f259b29 creation de zones + déplacement des noeuds (refs #7929) This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (7d08009) \ N -- N -- N refs/heads/feature/7929_editeur_de_zone (f259b29) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 7 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 f259b292286588a3fba9141781c2a083180a3ccc 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 48ded36fc3c1b6808e5e1a49090924f47fd6ed9d 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 fc7dabef9e890fbc3ce622df489b83206f39e10c 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 9ae297036ee7a72aa925b6807f1669c44d5083c5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:35:31 2016 +0100 ajout des strates et sous strates au modèle (refs #7929) commit 267fd13a57627c4743dcdaed84308579b34c286c 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 dedff13b15777fbdbd6672f629a9f8d4a032c702 Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 25 11:22:53 2016 +0100 ajout des zones au protocole (refs #7929) commit 595843dd9e742f9f813db51dac15d2ea8dbe398b 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 +- .../ifremer/tutti/ichtyometer/feed/FeedReader.java | 6 + .../tutti/persistence/entities/protocol/Rtps.java | 19 +- .../entities/protocol/SpeciesProtocolBean.java | 24 ++ .../java/fr/ifremer/tutti/util/BeepFrequency.java | 24 ++ .../src/main/xmi/tutti-persistence.zargo | Bin 59842 -> 60824 bytes .../protocol/ProtocolImportExportService.java | 156 ++++++------- .../ifremer/tutti/service/protocol/SpeciesRow.java | 102 ++++++++- .../tutti/service/protocol/SpeciesRowModel.java | 103 +++++---- .../protocol/ProtocolImportExportServiceTest.java | 251 ++++++++++++--------- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 3 + .../operation/catches/EditCatchesUIHandler.java | 2 + .../frequency/SpeciesFrequencyUIHandler.java | 2 +- .../protocol/EditProtocolSpeciesTableModel.java | 42 ++++ .../content/protocol/EditProtocolUIHandler.java | 6 +- .../content/protocol/EditProtocolUIModel.java | 44 ++-- .../actions/ExportProtocolSpeciesAction.java | 7 +- .../ui/swing/content/protocol/rtp/RtpButton.java | 38 +++- .../swing/content/protocol/rtp/RtpCellEditor.java | 28 ++- .../content/protocol/rtp/RtpCellRenderer.java | 24 ++ .../ui/swing/content/protocol/rtp/RtpEditorUI.jaxx | 53 +++-- .../ui/swing/content/protocol/rtp/RtpEditorUI.jcss | 21 +- .../content/protocol/rtp/RtpEditorUIHandler.java | 33 ++- .../content/protocol/rtp/RtpEditorUIModel.java | 60 ++++- .../protocol/rtp/actions/CloseRtpAction.java | 24 ++ .../rtp/actions/CopyMaleRtpAction.java} | 25 +- .../protocol/rtp/actions/EditNextRowAction.java | 24 ++ .../rtp/actions/EditPreviousRowAction.java | 24 ++ .../protocol/rtp/actions/SaveRtpAction.java | 24 ++ .../content/protocol/zones/StratasTreeModel.java | 123 ++++++++++ .../protocol/zones/ZoneEditorTreeCellRenderer.java | 45 ++++ .../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 ++++++++----- .../swing/content/protocol/zones/ZoneUIModel.java | 136 +++++++++++ .../content/protocol/zones/ZonesTreeModel.java | 98 ++++++++ .../protocol/zones/actions/AddStratasAction.java | 29 ++- .../protocol/zones/actions/CreateZoneAction.java | 30 +++ .../zones/actions/RemoveStratasAction.java | 2 +- .../content/protocol/zones/nodes/StrataNode.java | 20 ++ .../protocol/zones/nodes/SubStrataNode.java | 20 ++ .../content/protocol/zones/nodes/ZoneNode.java | 20 ++ .../ifremer/tutti/ui/swing/util/SoundEngine.java | 62 ++++- .../fr/ifremer/tutti/ui/swing/util/TuttiUI.java | 7 + .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 6 +- 47 files changed, 1690 insertions(+), 508 deletions(-) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/replace/ReplaceTemporarySpeciesUI.jcss => tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/Rtps.java (70%) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/{operation/catches/species/actions/ImportPupitriMelagWeightPopupValidateAction.java => protocol/rtp/actions/CopyMaleRtpAction.java} (54%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/StratasTreeModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneEditorTreeCellRenderer.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZoneUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/ZonesTreeModel.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/nodes/StrataNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/SubStrataNode.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/zones/nodes/ZoneNode.java -- 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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit 595843dd9e742f9f813db51dac15d2ea8dbe398b 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 8036275..3e8bbc2 100644 --- a/pom.xml +++ b/pom.xml @@ -158,6 +158,8 @@ <!-- Where are deployed software components --> <distroUrl>http://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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit dedff13b15777fbdbd6672f629a9f8d4a032c702 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 +++++++++++++++++++++ .../src/main/xmi/tutti-persistence.zargo | Bin 59339 -> 59842 bytes .../ifremer/tutti/service/PersistenceService.java | 5 +++ 6 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-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index 1545a4d..88791d2 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ 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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit 267fd13a57627c4743dcdaed84308579b34c286c 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 336d396..73beba0 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= @@ -1093,6 +1095,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 8ce0e99..c6500ff 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= @@ -1049,6 +1051,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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit 9ae297036ee7a72aa925b6807f1669c44d5083c5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 27 18:35:31 2016 +0100 ajout des strates et sous strates au modèle (refs #7929) --- .../src/main/xmi/tutti-persistence.zargo | Bin 59842 -> 60824 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 88791d2..2edf7d5 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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit fc7dabef9e890fbc3ce622df489b83206f39e10c 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 cc2981b..9a23c9a 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 @@ -239,7 +239,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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit 48ded36fc3c1b6808e5e1a49090924f47fd6ed9d 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 feature/7929_editeur_de_zone in repository tutti. See http://git.codelutin.com/tutti.git commit f259b292286588a3fba9141781c2a083180a3ccc 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 73beba0..f058c04 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 @@ -2344,3 +2344,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 c6500ff..7e8bc0e 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 @@ -2174,3 +2174,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>.
participants (1)
-
codelutin.com scm