branch feature/8429 created (now 4c2eb52)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git at 4c2eb52 Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire) This branch includes the following new commits: new 1bbfba9 mettre à jour les rapports disponibles au démarrage de l'action new 67cd7c1 Ajout méthodes sur les entités pour afficher les mesures dans les rapports new 525461d Ajout d'opérations pour calculer les mesures dans les rapports new 97a6ebe Ajout nouvelles requetes pour lister les équipements new eac470c Ajout d'un test sur le nouveau rapport new ba91660 [TABLEAUX DE SYNTHESE] Nouvelle requête sur les équipements bateau (Fixes #8396) Merge branch 'feature/8396' into develop new 1365c73 Ajout raccourci clavier sur les listes déroulantes new 4c2eb52 Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire) The 8 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 4c2eb52ee1d2d01c435a5e70315de0b707c088ca Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 20:20:34 2016 +0100 Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire) commit 1365c73bb628fa222e3c18b73271960b0464d300 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 12:20:37 2016 +0100 Ajout raccourci clavier sur les listes déroulantes commit ba916608ea37e2160991e1ca91b8fd36b40f7902 Merge: 1bbfba9 eac470c Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:08:49 2016 +0100 [TABLEAUX DE SYNTHESE] Nouvelle requête sur les équipements bateau (Fixes #8396) Merge branch 'feature/8396' into develop commit eac470cdc481545d4de110eba5e5093e2848ce46 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:08:43 2016 +0100 Ajout d'un test sur le nouveau rapport commit 97a6ebee6a29baeb763c68f719ab47d883540627 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:07:47 2016 +0100 Ajout nouvelles requetes pour lister les équipements commit 525461d7b1652682f247dd9636cc7a04594ad005 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:07:26 2016 +0100 Ajout d'opérations pour calculer les mesures dans les rapports commit 67cd7c1db0677621165513accf172fd2b82bc182 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:06:54 2016 +0100 Ajout méthodes sur les entités pour afficher les mesures dans les rapports commit 1bbfba9b68b28f9100d5773b02d033731656ece0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:04:09 2016 +0100 mettre à jour les rapports disponibles au démarrage de l'action -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 1bbfba9b68b28f9100d5773b02d033731656ece0 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:04:09 2016 +0100 mettre à jour les rapports disponibles au démarrage de l'action --- .../java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java index aace2ea..092714e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java @@ -615,6 +615,7 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { getSelectionDataModel().removePropertyChangeListener(DataSelectionModel.PROPERTY_SELECTED_DATA, listenerSelectedDataForReport); getSelectionDataModel().addPropertyChangeListener(DataSelectionModel.PROPERTY_SELECTED_DATA, listenerSelectedDataForReport); + getReportModel().updateReports(); // if (log.isInfoEnabled()) { // log.info("Detects " + reports.size() + " report(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 feature/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 67cd7c1db0677621165513accf172fd2b82bc182 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:06:54 2016 +0100 Ajout méthodes sur les entités pour afficher les mesures dans les rapports --- .../longline/GearUseFeaturesLonglineImpl.java | 58 +++++++++++++++++++++ .../entities/seine/GearUseFeaturesSeineImpl.java | 58 +++++++++++++++++++++ entities/src/main/xmi/observe-longline.zargo | Bin 93746 -> 93824 bytes entities/src/main/xmi/observe-seine.zargo | Bin 87124 -> 87287 bytes 4 files changed, 116 insertions(+) diff --git a/entities/src/main/java/fr/ird/observe/entities/longline/GearUseFeaturesLonglineImpl.java b/entities/src/main/java/fr/ird/observe/entities/longline/GearUseFeaturesLonglineImpl.java new file mode 100644 index 0000000..5768beb --- /dev/null +++ b/entities/src/main/java/fr/ird/observe/entities/longline/GearUseFeaturesLonglineImpl.java @@ -0,0 +1,58 @@ +package fr.ird.observe.entities.longline; + +/*- + * #%L + * ObServe :: Entities + * %% + * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * %% + * 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% + */ + +import com.google.common.base.Joiner; +import fr.ird.observe.entities.referentiel.GearCaracteristic; + +import java.util.stream.Collectors; + +public class GearUseFeaturesLonglineImpl extends GearUseFeaturesLonglineAbstract { + + private static final long serialVersionUID = 1L; + + @Override + public String getMeasurementsAsString() { + return Joiner.on(", ").join( + getGearUseFeaturesMeasurement().stream() + .map(g -> { + GearCaracteristic gearCaracteristic = g.getGearCaracteristic(); + String code = gearCaracteristic.getCode(); + String unit = gearCaracteristic.getUnit(); + String measurementValue = g.getMeasurementValue(); + boolean isBoolean = false; + if ("true".equals(measurementValue)) { + measurementValue = "Oui"; + isBoolean = true; + } else if ("false".equals(measurementValue)) { + measurementValue = "Non"; + isBoolean = true; + } + return "( " + (code == null ? " Aucun code" : code) + + " - " + gearCaracteristic.getLabel2() + + (isBoolean ? "" : (" [ " + (unit == null ? "pas d'unité" : unit) + " ]")) + + " = " + measurementValue + " )"; + }) + .collect(Collectors.toList())); + } +} diff --git a/entities/src/main/java/fr/ird/observe/entities/seine/GearUseFeaturesSeineImpl.java b/entities/src/main/java/fr/ird/observe/entities/seine/GearUseFeaturesSeineImpl.java new file mode 100644 index 0000000..057e259 --- /dev/null +++ b/entities/src/main/java/fr/ird/observe/entities/seine/GearUseFeaturesSeineImpl.java @@ -0,0 +1,58 @@ +package fr.ird.observe.entities.seine; + +/*- + * #%L + * ObServe :: Entities + * %% + * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * %% + * 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% + */ + +import com.google.common.base.Joiner; +import fr.ird.observe.entities.referentiel.GearCaracteristic; + +import java.util.stream.Collectors; + +public class GearUseFeaturesSeineImpl extends GearUseFeaturesSeineAbstract { + + private static final long serialVersionUID = 1L; + + @Override + public String getMeasurementsAsString() { + return Joiner.on(", ").join( + getGearUseFeaturesMeasurement().stream() + .map(g -> { + GearCaracteristic gearCaracteristic = g.getGearCaracteristic(); + String code = gearCaracteristic.getCode(); + String unit = gearCaracteristic.getUnit(); + String measurementValue = g.getMeasurementValue(); + boolean isBoolean = false; + if ("true".equals(measurementValue)) { + measurementValue = "Oui"; + isBoolean = true; + } else if ("false".equals(measurementValue)) { + measurementValue = "Non"; + isBoolean = true; + } + return "( " + (code == null ? " Aucun code" : code) + + " - " + gearCaracteristic.getLabel2() + + (isBoolean ? "" : (" [ " + (unit == null ? "pas d'unité" : unit) + " ]")) + + " = " + measurementValue + " )"; + }) + .collect(Collectors.toList())); + } +} diff --git a/entities/src/main/xmi/observe-longline.zargo b/entities/src/main/xmi/observe-longline.zargo index 62bd7db..f96b968 100644 Binary files a/entities/src/main/xmi/observe-longline.zargo and b/entities/src/main/xmi/observe-longline.zargo differ diff --git a/entities/src/main/xmi/observe-seine.zargo b/entities/src/main/xmi/observe-seine.zargo index f87b2aa..8c5bf2a 100644 Binary files a/entities/src/main/xmi/observe-seine.zargo and b/entities/src/main/xmi/observe-seine.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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 525461d7b1652682f247dd9636cc7a04594ad005 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:07:26 2016 +0100 Ajout d'opérations pour calculer les mesures dans les rapports --- .../fr/ird/observe/services/dto/actions/report/ReportOperation.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services-dto/src/main/java/fr/ird/observe/services/dto/actions/report/ReportOperation.java b/services-dto/src/main/java/fr/ird/observe/services/dto/actions/report/ReportOperation.java index 9a09747..6864932 100644 --- a/services-dto/src/main/java/fr/ird/observe/services/dto/actions/report/ReportOperation.java +++ b/services-dto/src/main/java/fr/ird/observe/services/dto/actions/report/ReportOperation.java @@ -36,6 +36,8 @@ public enum ReportOperation implements ObserveDto { SumColumn, SumIntColumn, SumIntRow, - SumRow + SumRow, + ComputeMeasurementsSeine, + ComputeMeasurementsLongline } -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 97a6ebee6a29baeb763c68f719ab47d883540627 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:07:47 2016 +0100 Ajout nouvelles requetes pour lister les équipements --- .../service/actions/report/ReportServiceTopia.java | 68 +++++++++++++++++++--- .../src/main/filters/observe-reports.properties | 54 +++++++++++++++++ 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/report/ReportServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/report/ReportServiceTopia.java index 7b0ecf1..f87f1f5 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/report/ReportServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/report/ReportServiceTopia.java @@ -26,12 +26,11 @@ import com.google.common.collect.Maps; import fr.ird.observe.AbstractObserveTopiaDao; import fr.ird.observe.entities.ObserveDataEntity; import fr.ird.observe.entities.ObserveEntity; +import fr.ird.observe.entities.longline.GearUseFeaturesLongline; +import fr.ird.observe.entities.longline.GearUseFeaturesLonglineImpl; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.entities.seine.GearUseFeaturesSeine; import fr.ird.observe.entities.seine.TripSeine; -import fr.ird.observe.services.service.actions.report.ReportService; -import fr.ird.observe.services.topia.ObserveServiceTopia; -import fr.ird.observe.services.topia.binder.data.DataBinderSupport; -import fr.ird.observe.services.topia.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.dto.AbstractReference; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DataReference; @@ -42,6 +41,10 @@ import fr.ird.observe.services.dto.actions.report.ReportRequest; import fr.ird.observe.services.dto.actions.report.ReportVariable; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.actions.report.ReportService; +import fr.ird.observe.services.topia.ObserveServiceTopia; +import fr.ird.observe.services.topia.binder.data.DataBinderSupport; +import fr.ird.observe.services.topia.binder.referential.ReferentialBinderSupport; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,6 +54,7 @@ import java.awt.Dimension; import java.awt.Point; import java.io.Serializable; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -142,8 +146,7 @@ public class ReportServiceTopia extends ObserveServiceTopia implements ReportSer doPopulateRepeatVariables(report, tripId); if (log.isDebugEnabled()) { - log.debug("Build result for report [" + report.getName() + - "] on " + tripId); + log.debug("Build result for report [" + report.getName() + "] on " + tripId); } int rows = report.getRows(); @@ -162,14 +165,14 @@ public class ReportServiceTopia extends ObserveServiceTopia implements ReportSer new DataMatrix()); // lancement des opérations supplémentaires - for (ReportOperation objectOperation : report.getOperations()) { + for (ReportOperation operation : report.getOperations()) { DataMatrix tmp = result; if (log.isDebugEnabled()) { - log.debug("Apply objectOperation " + objectOperation + " to " + tmp); + log.debug("Apply operation " + operation + " to " + tmp); } result = executeReportOperation( - objectOperation, + operation, report, tripId, tmp); @@ -298,6 +301,53 @@ public class ReportServiceTopia extends ObserveServiceTopia implements ReportSer } break; + case ComputeMeasurementsSeine: { + DataMatrix tmpMatrix = createTmpMatrix(incoming.getWidth(), 0, 1, incoming.getHeight()); + + ReportVariable<String> variable = report.getRepeatVariable("gearUseFeaturesId"); + Iterator<String> gearUseFeaturesIds = variable.getValues().iterator(); + + for (int row = 0, nbRows = incoming.getHeight(); row < nbRows; row++) { + + String gearUseFeaturesId = gearUseFeaturesIds.next(); + + GearUseFeaturesSeine gearUseFeaturesSeine = getTopiaPersistenceContext().getGearUseFeaturesSeineDao().forTopiaIdEquals(gearUseFeaturesId).findUnique(); + + String measurementsAsString = gearUseFeaturesSeine.getMeasurementsAsString(); + + tmpMatrix.setValue(0, row, measurementsAsString); + if (log.isDebugEnabled()) { + log.debug("operation [0, " + row + "] = " + measurementsAsString); + } + } + + result = DataMatrix.merge(incoming, tmpMatrix); + + } + break; + case ComputeMeasurementsLongline: { + DataMatrix tmpMatrix = createTmpMatrix(incoming.getWidth(), 0, 1, incoming.getHeight()); + + ReportVariable<String> variable = report.getRepeatVariable("gearUseFeaturesId"); + Iterator<String> gearUseFeaturesIds = variable.getValues().iterator(); + + for (int row = 0, nbRows = incoming.getHeight(); row < nbRows; row++) { + + String gearUseFeaturesId = gearUseFeaturesIds.next(); + + GearUseFeaturesLongline gearUseFeatures = getTopiaPersistenceContext().getGearUseFeaturesLonglineDao().forTopiaIdEquals(gearUseFeaturesId).findUnique(); + + String measurementsAsString = gearUseFeatures.getMeasurementsAsString(); + + tmpMatrix.setValue(0, row, measurementsAsString); + if (log.isDebugEnabled()) { + log.debug("operation [0, " + row + "] = " + measurementsAsString); + } + } + + result = DataMatrix.merge(incoming, tmpMatrix); + } + break; } return result; diff --git a/services/src/main/filters/observe-reports.properties b/services/src/main/filters/observe-reports.properties index 145528e..b513e8a 100644 --- a/services/src/main/filters/observe-reports.properties +++ b/services/src/main/filters/observe-reports.properties @@ -21,6 +21,60 @@ ### ################################################################################ +## Liste des \u00e9quipements (Seine) +################################################################################ +report.tripSeineGearUseFeatures.modelType=PS +report.tripSeineGearUseFeatures.name=Liste des \u00e9quipements +report.tripSeineGearUseFeatures.description=Afficher les \u00e9quipements +report.tripSeineGearUseFeatures.columns=Equipement, Nombre, Utilis\u00e9 dans la mar\u00e9e, Mesures +report.tripSeineGearUseFeatures.operations.1=ComputeMeasurementsSeine +report.tripSeineGearUseFeatures.repeatVariable.gearUseFeaturesId=java.lang.String|\ + Select g.id \ + From TripSeineImpl m \ + Join m.gearUseFeaturesSeine g \ + Where \ + m.id = :tripId \ + and g in elements (m.gearUseFeaturesSeine) \ + Order By g.gear.label2 + +report.tripSeineGearUseFeatures.request.1=0,0|row|\ + Select \ + concat(CASE When g.gear.code IS NULL Then 'Aucun code' Else g.gear.code End, ' - ', g.gear.label2), \ + g.number, \ + ( CASE g.usedInTrip When true Then 'Oui' Else Case g.usedInTrip When false Then 'Non' Else 'Ind\u00e9termin\u00e9' End End )\ + From GearUseFeaturesSeineImpl g \ + Where g.id = :gearUseFeaturesId + +report.tripSeineGearUseFeatures.request.1.repeat=gearUseFeaturesId|column + +################################################################################ +## Liste des \u00e9quipements (Longline) +################################################################################ +report.tripLonglineGearUseFeatures.modelType=LL +report.tripLonglineGearUseFeatures.name=Liste des \u00e9quipements +report.tripLonglineGearUseFeatures.description=Afficher les \u00e9quipements +report.tripLonglineGearUseFeatures.columns=Equipement, Nombre, Utilis\u00e9 dans la mar\u00e9e, Mesures +report.tripLonglineGearUseFeatures.operations.1=ComputeMeasurementsLongline +report.tripLonglineGearUseFeatures.repeatVariable.gearUseFeaturesId=java.lang.String|\ + Select g.id \ + From TripLonglineImpl m \ + Join m.gearUseFeaturesLongline g \ + Where \ + m.id = :tripId \ + and g in elements (m.gearUseFeaturesLongline) \ + Order By g.gear.label2 + +report.tripLonglineGearUseFeatures.request.1=0,0|row|\ + Select \ + concat(CASE When g.gear.code IS NULL Then 'Aucun code' Else g.gear.code End, ' - ', g.gear.label2), \ + g.number, \ + ( CASE g.usedInTrip When true Then 'Oui' Else Case g.usedInTrip When false Then 'Non' Else 'Ind\u00e9termin\u00e9' End End )\ + From GearUseFeaturesLonglineImpl g \ + Where g.id = :gearUseFeaturesId + +report.tripLonglineGearUseFeatures.request.1.repeat=gearUseFeaturesId|column + +################################################################################ ## Liste des activit\u00e9s avec des comments ################################################################################ report.activityWithComment.modelType=PS -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit eac470cdc481545d4de110eba5e5093e2848ce46 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:08:43 2016 +0100 Ajout d'un test sur le nouveau rapport --- .../actions/report/ReportSeineEquipmentsTest.java | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/report/ReportSeineEquipmentsTest.java b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/report/ReportSeineEquipmentsTest.java new file mode 100644 index 0000000..c471c81 --- /dev/null +++ b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/report/ReportSeineEquipmentsTest.java @@ -0,0 +1,85 @@ +/* + * #%L + * ObServe :: Services ToPIA Implementation + * %% + * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * %% + * 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% + */ +package fr.ird.observe.services.topia.service.actions.report; + + +import fr.ird.observe.services.dto.actions.report.DataMatrix; +import fr.ird.observe.services.dto.actions.report.Report; +import fr.ird.observe.services.dto.actions.report.ReportRequest; +import org.junit.Assert; + +/** + * Test du report {@code discardedAccessoire}. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 1.9 + */ +public class ReportSeineEquipmentsTest extends AbstractReportServiceTopiaTest { + + @Override + protected void testReportSyntax(Report report) { + Assert.assertNotNull(report); + assertReportName( + report, + "Liste des équipements", + "Afficher les équipements" + ); + + assertReportDimension( + report, + -1, + 4, + new String[]{"Equipement", + "Nombre", + "Utilisé dans la marée", + "Mesures", + } + ); + + assertReportNbRequests(report, 1); + + ReportRequest[] requests = report.getRequests(); + + assertReportRequestDimension( + requests[0], + ReportRequest.RequestLayout.row, + 0, + 0 + ); + } + + @Override + protected String getReportId() { + return "tripSeineGearUseFeatures"; + } + + @Override + protected void testReportResult(DataMatrix result) { + + assertResultDimension(result, 4, 2, 0, 0); + + assertResultRow(result, 0, "Aucun code - Radar de route", "1", "Oui", "( Aucun code - Portée [ m ] = 50 )"); + assertResultRow(result, 1, "Aucun code - Radeau", "1", "Oui", "( Aucun code - Hauteur [ m ] = 3 ), ( Aucun code - Non maillant (oui/non) pourquoi pas : maillant oui/non ? = Oui ), ( Aucun code - Matériau écologique (oui/non) = Non )"); + + } + +} -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit ba916608ea37e2160991e1ca91b8fd36b40f7902 Merge: 1bbfba9 eac470c Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 11:08:49 2016 +0100 [TABLEAUX DE SYNTHESE] Nouvelle requête sur les équipements bateau (Fixes #8396) Merge branch 'feature/8396' into develop .../longline/GearUseFeaturesLonglineImpl.java | 58 ++++++++++++++ .../entities/seine/GearUseFeaturesSeineImpl.java | 58 ++++++++++++++ entities/src/main/xmi/observe-longline.zargo | Bin 93746 -> 93824 bytes entities/src/main/xmi/observe-seine.zargo | Bin 87124 -> 87287 bytes .../dto/actions/report/ReportOperation.java | 4 +- .../service/actions/report/ReportServiceTopia.java | 68 ++++++++++++++--- .../actions/report/ReportSeineEquipmentsTest.java | 85 +++++++++++++++++++++ .../src/main/filters/observe-reports.properties | 54 +++++++++++++ 8 files changed, 317 insertions(+), 10 deletions(-) -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 1365c73bb628fa222e3c18b73271960b0464d300 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 12:20:37 2016 +0100 Ajout raccourci clavier sur les listes déroulantes --- .../swing/ui/content/ContentUIInitializer.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java index 6cd093c..c2cee31 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java @@ -69,7 +69,9 @@ import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor; import org.nuiton.jaxx.widgets.select.FilterableDoubleList; import org.nuiton.util.DateUtil; +import javax.swing.AbstractAction; import javax.swing.AbstractButton; +import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.JCheckBox; import javax.swing.JComboBox; @@ -82,6 +84,7 @@ import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.KeyStroke; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import javax.swing.border.LineBorder; @@ -89,6 +92,7 @@ import javax.swing.table.TableCellEditor; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.event.ActionEvent; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -361,6 +365,43 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E } beanComboBox.setI18nPrefix("observe.common."); beanComboBox.setMinimumSize(new Dimension(0, 24)); + beanComboBox.getResetButton().setToolTipText(beanComboBox.getResetButton().getToolTipText() + " (ctrl + D)"); + beanComboBox.getChangeDecorator().setToolTipText(beanComboBox.getChangeDecorator().getToolTipText() + " (ctrl + F)"); + JComponent editorComponent = (JComponent) beanComboBox.getCombobox().getEditor().getEditorComponent(); + + Action resetAction = new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + beanComboBox.doActionPerformed__on__resetButton(null); + SwingUtilities.invokeLater(beanComboBox::grabFocus); + } + }; + + editorComponent.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ctrl pressed D"), "resetAction"); + editorComponent.getActionMap().put("resetAction", resetAction); + + Action showPopupAction = new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + if (!beanComboBox.getCombobox().isPopupVisible()) { + beanComboBox.getCombobox().showPopup(); + } else { + beanComboBox.setSelectedItem(beanComboBox.getCombobox().getEditor().getItem()); + beanComboBox.getCombobox().hidePopup(); + } + } + }; + editorComponent.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"), "showPopupAction"); + editorComponent.getActionMap().put("showPopupAction", showPopupAction); + + Action showDecoratorPopupAction = new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + beanComboBox.getPopup().show(beanComboBox, 0, 0); + } + }; + editorComponent.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ctrl pressed F"), "showDecoratorPopupAction"); + editorComponent.getActionMap().put("showDecoratorPopupAction", showDecoratorPopupAction); Class dtoClass = getDtoClass(beanComboBox); -- 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/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 4c2eb52ee1d2d01c435a5e70315de0b707c088ca Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 20:20:34 2016 +0100 Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire) --- .../ui/actions/shared/CloseAndCreateUIAction.java | 16 +- .../swing/ui/actions/shared/CloseOpenUIAction.java | 199 ++++++++++++--------- .../swing/ui/actions/shared/ReOpenUIAction.java | 23 ++- .../swing/ui/content/ContentUIInitializer.java | 3 + .../LonglineDetailCompositionUIHandler.java | 67 ++++++- .../impl/longline/SetLonglineUIHandler.java | 39 ++++ ...ngObjectTransmittingBuoyOperationUIHandler.java | 48 ++++- .../impl/seine/FloatingObjectUIHandler.java | 48 ++++- .../ui/content/impl/seine/SetSeineUIHandler.java | 63 ++++++- .../swing/ui/content/list/ContentListUI.jaxx | 21 ++- .../swing/ui/content/list/ContentListUI.jcss | 7 + .../ui/content/list/ContentListUIHandler.java | 66 ++++++- .../list/impl/longline/ActivityLonglinesUI.jaxx | 8 +- .../impl/longline/ActivityLonglinesUIHandler.java | 11 +- .../list/impl/longline/TripLonglinesUI.jaxx | 7 +- .../list/impl/longline/TripLonglinesUIHandler.java | 13 +- .../content/list/impl/seine/ActivitySeinesUI.jaxx | 8 +- .../list/impl/seine/ActivitySeinesUIHandler.java | 8 +- .../swing/ui/content/list/impl/seine/RoutesUI.jaxx | 8 +- .../content/list/impl/seine/RoutesUIHandler.java | 8 +- .../ui/content/list/impl/seine/TripSeinesUI.jaxx | 8 +- .../list/impl/seine/TripSeinesUIHandler.java | 11 +- .../swing/ui/content/open/ContentOpenableUI.jaxx | 12 +- .../ui/content/open/ContentOpenableUIHandler.java | 39 ++-- .../open/impl/longline/ActivityLonglineUI.jaxx | 16 +- .../impl/longline/ActivityLonglineUIHandler.java | 37 +++- .../content/open/impl/longline/TripLonglineUI.jaxx | 47 +++-- .../open/impl/longline/TripLonglineUIHandler.java | 43 ++++- .../content/open/impl/seine/ActivitySeineUI.jaxx | 5 +- .../open/impl/seine/ActivitySeineUIHandler.java | 62 ++++++- .../swing/ui/content/open/impl/seine/RouteUI.jaxx | 16 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 84 ++++----- .../ui/content/open/impl/seine/TripSeineUI.jaxx | 27 +-- .../open/impl/seine/TripSeineUIHandler.java | 52 ++++-- .../swing/ui/content/table/ContentTableModel.java | 7 +- .../swing/ui/content/table/ContentTableUI.jaxx | 6 +- .../ui/content/table/ContentTableUIHandler.java | 155 +++++----------- .../content/table/ContentTableUIInitializer.java | 4 +- .../ui/content/table/ContentTableUIModel.java | 6 +- .../ui/content/table/ObserveContentTableUI.java | 4 +- .../table/impl/longline/BaitsCompositionUI.jaxx | 19 +- .../impl/longline/BaitsCompositionUIHandler.java | 8 +- .../impl/longline/BaitsCompositionUIModel.java | 20 +-- .../impl/longline/BranchlinesCompositionUI.jaxx | 19 +- .../longline/BranchlinesCompositionUIHandler.java | 8 +- .../longline/BranchlinesCompositionUIModel.java | 20 +-- .../impl/longline/CatchLonglineTableModel.java | 3 +- .../table/impl/longline/CatchLonglineUI.jaxx | 59 ++++-- .../impl/longline/CatchLonglineUIHandler.java | 97 ++++++++-- .../table/impl/longline/CatchLonglineUIModel.java | 58 +++--- .../content/table/impl/longline/EncounterUI.jaxx | 14 +- .../table/impl/longline/EncounterUIHandler.java | 47 ++++- .../table/impl/longline/EncounterUIModel.java | 12 +- .../impl/longline/FloatlinesCompositionUI.jaxx | 16 +- .../longline/FloatlinesCompositionUIHandler.java | 8 +- .../longline/FloatlinesCompositionUIModel.java | 17 +- .../GearUseFeaturesLonglineTableModel.java | 8 +- .../impl/longline/GearUseFeaturesLonglineUI.jaxx | 25 ++- .../longline/GearUseFeaturesLonglineUIHandler.java | 41 ++++- .../longline/GearUseFeaturesLonglineUIModel.java | 10 +- .../table/impl/longline/HooksCompositionUI.jaxx | 20 +-- .../impl/longline/HooksCompositionUIHandler.java | 8 +- .../impl/longline/HooksCompositionUIModel.java | 19 +- .../content/table/impl/longline/SensorUsedUI.jaxx | 18 +- .../table/impl/longline/SensorUsedUIHandler.java | 40 ++++- .../table/impl/longline/SensorUsedUIModel.java | 23 +-- .../ui/content/table/impl/longline/TdrUI.jaxx | 27 +-- .../content/table/impl/longline/TdrUIHandler.java | 83 ++++++++- .../ui/content/table/impl/longline/TdrUIModel.java | 5 +- .../table/impl/seine/AbstractSampleUIHandler.java | 6 +- .../impl/seine/GearUseFeaturesSeineTableModel.java | 8 +- .../table/impl/seine/GearUseFeaturesSeineUI.jaxx | 25 ++- .../impl/seine/GearUseFeaturesSeineUIHandler.java | 55 +++++- .../impl/seine/GearUseFeaturesSeineUIModel.java | 24 +-- .../content/table/impl/seine/NonTargetCatchUI.jaxx | 45 ++--- .../table/impl/seine/NonTargetCatchUIHandler.java | 28 ++- .../table/impl/seine/NonTargetCatchUIModel.java | 12 +- .../table/impl/seine/NonTargetSampleUI.jaxx | 15 +- .../table/impl/seine/NonTargetSampleUIHandler.java | 35 +++- .../table/impl/seine/NonTargetSampleUIModel.java | 23 +-- .../table/impl/seine/ObjectObservedSpeciesUI.jaxx | 31 ++-- .../impl/seine/ObjectObservedSpeciesUIHandler.java | 28 ++- .../impl/seine/ObjectObservedSpeciesUIModel.java | 13 +- .../table/impl/seine/ObjectSchoolEstimateUI.jaxx | 31 ++-- .../impl/seine/ObjectSchoolEstimateUIHandler.java | 28 ++- .../impl/seine/ObjectSchoolEstimateUIModel.java | 13 +- .../content/table/impl/seine/SchoolEstimateUI.jaxx | 24 +-- .../table/impl/seine/SchoolEstimateUIHandler.java | 42 ++++- .../table/impl/seine/SchoolEstimateUIModel.java | 19 +- .../ui/content/table/impl/seine/TargetCatchUI.jaxx | 27 ++- .../table/impl/seine/TargetCatchUIHandler.java | 40 ++++- .../table/impl/seine/TargetCatchUIModel.java | 27 +-- .../table/impl/seine/TargetDiscardCatchUI.jaxx | 33 ++-- .../impl/seine/TargetDiscardCatchUIHandler.java | 34 +++- .../impl/seine/TargetDiscardCatchUIModel.java | 27 +-- .../table/impl/seine/TargetSampleCaptureUI.jaxx | 7 +- .../table/impl/seine/TargetSampleRejeteUI.jaxx | 7 +- .../content/table/impl/seine/TargetSampleUI.jaxx | 17 +- .../table/impl/seine/TargetSampleUIHandler.java | 37 +++- .../table/impl/seine/TargetSampleUIModel.java | 4 +- 100 files changed, 1867 insertions(+), 962 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java index 96a3ce0..d2e1807 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java @@ -22,8 +22,6 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; @@ -32,6 +30,8 @@ import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; import fr.ird.observe.application.swing.ui.content.open.impl.longline.ActivityLonglineUI; import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; +import fr.ird.observe.services.dto.seine.ActivitySeineDto; import javax.swing.JComponent; import javax.swing.JTree; @@ -70,12 +70,10 @@ public class CloseAndCreateUIAction extends AbstractUIAction { ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property " + - "ui on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } if (ui instanceof ContentOpenableUI) { - ((ContentOpenableUI<?>) ui).closeAndCreateData(); + ((ContentOpenableUI<?, ?>) ui).closeAndCreateData(); return; } @@ -86,11 +84,7 @@ public class CloseAndCreateUIAction extends AbstractUIAction { JTree tree = getMainUI().getNavigation(); ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); + boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); // selection du noeud de l'activity ouverte treeHelper.selectOpenNode(ActivitySeineDto.class); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java index 8e68887..79d443f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java @@ -22,22 +22,19 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.RoutesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.TripSeinesUI; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; -import fr.ird.observe.application.swing.ui.content.open.impl.longline.ActivityLonglineUI; -import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import javax.swing.JComponent; -import javax.swing.JTree; import javax.swing.SwingUtilities; -import javax.swing.tree.TreePath; import java.awt.event.ActionEvent; import static org.nuiton.i18n.I18n.n; @@ -68,104 +65,144 @@ public class CloseOpenUIAction extends AbstractUIAction { SwingUtilities.invokeLater(() -> { JComponent c = (JComponent) e.getSource(); - ContentUI<?> ui = (ContentUI<?>) - c.getClientProperty("ui"); + ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property " + - "ui on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } if (ui instanceof ContentOpenableUI) { - ((ContentOpenableUI<?>) ui).closeData(); + ((ContentOpenableUI<?, ?>) ui).closeData(); return; } - if (ui instanceof ActivitySeinesUI) { - - // cas particulier pour l'écran des activités - - JTree tree = getMainUI().getNavigation(); - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - - // recuperation du noeud courant (activitys) - ObserveNode node = treeHelper.getSelectedNode(); - - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); - - // selection du noeud de l'activity ouverte - treeHelper.selectOpenNode(ActivitySeineDto.class); - - // on conserve le path de l'activity - TreePath path = tree.getSelectionPath(); - - // recuperation de l'écran associé - ActivitySeineUI selectedUI = (ActivitySeineUI) - ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); - - // fermeture de l'activity - selectedUI.closeData(); - - if (wasCollapsed) { - - // on ferme le noeud de l'activity (qui a ete ouvert - // lors de la selection de celle-ci) - tree.collapsePath(path); - } - - // retour sur le noeud des activitys - treeHelper.selectNode(node); + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + if (ui instanceof TripSeinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenTripSeineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } + if (ui instanceof RoutesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenRouteId(); + closeData(applicationContext, ui, higherOpenId); + return; + } + if (ui instanceof ActivitySeinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenActivitySeineId(); + closeData(applicationContext, ui, higherOpenId); return; } + if (ui instanceof TripLonglinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenTripLonglineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } if (ui instanceof ActivityLonglinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenActivityLonglineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } - // cas particulier pour l'écran des activités - - JTree tree = getMainUI().getNavigation(); - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// if (ui instanceof ActivitySeinesUI) { +// +// // cas particulier pour l'écran des activités +// +// JTree tree = getMainUI().getNavigation(); +// ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// +// // recuperation du noeud courant (activitys) +// ObserveNode node = treeHelper.getSelectedNode(); +// +// boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); +// +// // selection du noeud de l'activity ouverte +// treeHelper.selectOpenNode(ActivitySeineDto.class); +// +// // on conserve le path de l'activity +// TreePath path = tree.getSelectionPath(); +// +// // recuperation de l'écran associé +// ActivitySeineUI selectedUI = (ActivitySeineUI) +// applicationContext.getContentUIManager().getSelectedContentUI(); +// +// // fermeture de l'activity +// selectedUI.closeData(); +// +// if (wasCollapsed) { +// +// // on ferme le noeud de l'activity (qui a ete ouvert +// // lors de la selection de celle-ci) +// tree.collapsePath(path); +// } +// +// // retour sur le noeud des activitys +// treeHelper.selectNode(node); +// +// return; +// } +// +// if (ui instanceof ActivityLonglinesUI) { +// +// // cas particulier pour l'écran des activités +// +// JTree tree = getMainUI().getNavigation(); +// ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// +// // recuperation du noeud courant (activitys) +// ObserveNode node = treeHelper.getSelectedNode(); +// +// boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); +// +// // selection du noeud de l'activity ouverte +// treeHelper.selectOpenNode(ActivityLonglineDto.class); +// +// // on conserve le path de l'activité +// TreePath path = tree.getSelectionPath(); +// +// // recuperation de l'écran associé +// ActivityLonglineUI selectedUI = (ActivityLonglineUI) +// applicationContext.getContentUIManager().getSelectedContentUI(); +// +// // fermeture de l'activité +// selectedUI.closeData(); +// +// if (wasCollapsed) { +// +// // on ferme le noeud de l'activité (qui a ete ouvert lors de la selection de celle-ci) +// tree.collapsePath(path); +// } +// +// // retour sur le noeud des activités +// treeHelper.selectNode(node); +// +// return; +// } - // recuperation du noeud courant (activitys) - ObserveNode node = treeHelper.getSelectedNode(); + throw new IllegalStateException("Can not come here!"); + }); - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); + } - // selection du noeud de l'activity ouverte - treeHelper.selectOpenNode(ActivityLonglineDto.class); + private void closeData(ObserveSwingApplicationContext applicationContext, ContentUI<?> ui, String id) { - // on conserve le path de l'activity - TreePath path = tree.getSelectionPath(); + ObserveTreeHelper treeHelper = ui.getTreeHelper(); + ObserveNode selectedNode = treeHelper.getSelectedNode(); - // recuperation de l'écran associé - ActivityLonglineUI selectedUI = (ActivityLonglineUI) - ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + ObserveNode node = treeHelper.findNode(selectedNode, id); - // fermeture de l'activity - selectedUI.closeData(); + treeHelper.selectNode(node); - if (wasCollapsed) { + ContentOpenableUI selectedUI = (ContentOpenableUI) applicationContext.getContentUIManager().getSelectedContentUI(); - // on ferme le noeud de l'activity (qui a ete ouvert - // lors de la selection de celle-ci) - tree.collapsePath(path); - } + // on demande la fermeture de la donnée + selectedUI.closeData(); - // retour sur le noeud des activitys - treeHelper.selectNode(node); + SwingUtilities.invokeLater(() -> { - return; - } + // retour sur le noeud parent + treeHelper.selectNode(selectedNode); - throw new IllegalStateException("Can not come here!"); }); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java index a5935c8..7f5aa95 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java @@ -22,13 +22,13 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.ContentListUI; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; +import fr.ird.observe.services.dto.DataReference; import javax.swing.JComponent; import javax.swing.SwingUtilities; @@ -62,23 +62,20 @@ public class ReOpenUIAction extends AbstractUIAction { public void actionPerformed(final ActionEvent e) { SwingUtilities.invokeLater(() -> { JComponent c = (JComponent) e.getSource(); - ContentUI<?> ui = (ContentUI<?>) - c.getClientProperty("ui"); + ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property ui " + - "on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } - ContentOpenableUI<?> openUI; + ContentOpenableUI<?, ?> openUI; - if (ui instanceof ContentOpenableUI<?>) { + if (ui instanceof ContentOpenableUI<?, ?>) { - openUI = (ContentOpenableUI<?>) ui; - } else if (ui instanceof ContentListUI<?, ?>) { + openUI = (ContentOpenableUI<?, ?>) ui; + } else if (ui instanceof ContentListUI<?, ?, ?>) { - DataReference<?> selectedData = ((ContentListUI<?, ?>) ui).getSelectedData(); + DataReference<?> selectedData = ((ContentListUI<?, ?, ?>) ui).getSelectedData(); String id = selectedData.getId(); @@ -88,7 +85,7 @@ public class ReOpenUIAction extends AbstractUIAction { treeHelper.selectNode(node); - openUI = (ContentOpenableUI<?>) + openUI = (ContentOpenableUI<?, ?>) ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); } else { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java index c2cee31..3cc59b2 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java @@ -434,6 +434,8 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E protected void init(FilterableDoubleList beanList) { beanList.setI18nPrefix("observe.common."); + beanList.getAddButton().setFocusable(false); + beanList.getRemoveButton().setFocusable(false); if (log.isInfoEnabled()) { log.info("init list for " + beanList.getBeanType()); @@ -467,6 +469,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E log.debug("init date time editor " + editor.getName()); } editor.init(); + editor.getSliderHidor().setFocusable(false); if (isAutoSelectOnFocus(editor)) { addAutoSelectOnFocus((JSpinner.DateEditor) editor.getHourEditor().getEditor()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java index d4f6dfa..d7d03d7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java @@ -27,6 +27,12 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.ContentUIHandler; +import fr.ird.observe.application.swing.ui.content.ContentUIModel; +import fr.ird.observe.application.swing.ui.util.JVetoableTabbedPane; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.BasketDto; @@ -39,12 +45,6 @@ import fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionDto; import fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionHelper; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.data.longline.SetLonglineDetailCompositionService; -import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.ContentUIHandler; -import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.util.JVetoableTabbedPane; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -53,8 +53,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComboBox; import javax.swing.JOptionPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.ChangeListener; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -329,6 +332,54 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong tabPane.setChangeSelectedIndex(tabbedPaneWillChanged); tabPane.addChangeListener(tabbedPaneChanged); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + if (aComponent.equals(getUi().getBranchlineDetailUI().getTopType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getBranchlineDetailUI().getHookType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + int subSelectedIndex = getUi().getBranchlineDetailUI().getFishingOperationTabPane().getSelectedIndex(); + switch (subSelectedIndex) { + case 0: + return getUi().getBranchlineDetailUI().getTopType(); + case 1: + return getUi().getBranchlineDetailUI().getHookType(); + } + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + + if (getUi().getSave().isEnabled()) { + return getUi().getSave(); + } + if (getUi().getReset().isEnabled()) { + return getUi().getReset(); + } + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + getUi().getBranchlineDetailUI().getComment2(); + } + return super.getLastComponent(aContainer); + } + }); } @Override @@ -564,8 +615,8 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong sectionsTableModel.setData(sections); List<SectionDto> sectionHelper = sections.stream() - .map(SectionWithTemplate::getDelegate) - .collect(Collectors.toList()); + .map(SectionWithTemplate::getDelegate) + .collect(Collectors.toList()); getBean().addAllSection(sectionHelper); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java index 71569ed..02c0a18 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java @@ -49,7 +49,10 @@ import org.nuiton.jaxx.widgets.gis.CoordinateFormat; import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditorModel; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.HashSet; import java.util.Set; @@ -152,6 +155,42 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLonglineDto> { getUi().getHaulingStartCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); getUi().getHaulingEndCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return getUi().getHomeId(); + case 1: + return getUi().getSettingShape(); + case 2: + return getUi().getHaulingDirectionSameAsSetting(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getUi().getDelete(); + } + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(getUi().getHomeId())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getHaulingDirectionSameAsSetting())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getSettingShape().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + }); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java index ad7d3b8..8e4a2c3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java @@ -47,7 +47,10 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JPanel; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; import java.awt.GridLayout; import java.util.ArrayList; import java.util.Collection; @@ -102,6 +105,41 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH } @Override + public void initUI() { + super.initUI(); + + FloatingObjectTransmittingBuoyOperationUI ui = getUi(); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + + if (aComponent.equals(ui.getTypeOperation())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getTypeOperation(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }); + } + + @Override public void openUI() { super.openUI(); @@ -170,7 +208,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH FloatingObjectTransmittingBuoyOperationUI.BINDING_COUNTRY1_SELECTED_ITEM, FloatingObjectTransmittingBuoyOperationUI.BINDING_COUNTRY2_SELECTED_ITEM, FloatingObjectTransmittingBuoyOperationUI.BINDING_TYPE_OPERATION_SELECTED_ITEM - ); + ); FloatingObjectTransmittingBuoyOperationUI ui = getUi(); @@ -332,7 +370,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH if (log.isDebugEnabled()) { log.debug("Reuse an empty balise lue for objectOperation " + - transmittingBuoyOperation.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_LABEL1)); + transmittingBuoyOperation.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_LABEL1)); } if (isBalisePose(transmittingBuoyOperation)) { @@ -357,7 +395,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH } protected ReferentialReference<TransmittingBuoyOperationDto> getObjectOperation(List<ReferentialReference<TransmittingBuoyOperationDto>> objectOperations, - String codeOperation) { + String codeOperation) { ReferentialReference<TransmittingBuoyOperationDto> objectOperation = null; for (ReferentialReference<TransmittingBuoyOperationDto> op : objectOperations) { if (codeOperation.equals(op.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_CODE))) { @@ -368,13 +406,13 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH if (objectOperation == null) { throw new IllegalArgumentException( "could not find a " + - TransmittingBuoyOperationDto.class + " with code " + codeOperation); + TransmittingBuoyOperationDto.class + " with code " + codeOperation); } return objectOperation; } protected TransmittingBuoyOperationService getTransmittingBuoyOperationService() { - return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTransmittingBuoyOperationService(); + return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTransmittingBuoyOperationService(); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java index b219958..582a5b4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java @@ -25,6 +25,11 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.ContentUIHandler; +import fr.ird.observe.application.swing.ui.content.ContentUIModel; +import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.result.SaveResultDto; @@ -32,15 +37,14 @@ import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.FloatingObjectDto; import fr.ird.observe.services.dto.seine.FloatingObjectHelper; import fr.ird.observe.services.service.data.seine.FloatingObjectService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.ContentUIHandler; -import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; -import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; +import java.awt.Component; +import java.awt.Container; + import static org.nuiton.i18n.I18n.t; /** @@ -96,6 +100,40 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto> } @Override + public void initUI() { + super.initUI(); + + FloatingObjectUI ui = getUi(); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getObjectOperation().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getObjectOperation(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { + return ui.getDelete(); + } + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } + }); + } + + @Override public void openUI() { super.openUI(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java index 4a1e41c..3b2a5a6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui.content.impl.seine; +import fr.ird.observe.application.swing.I18nEnumHelper; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; @@ -28,9 +29,8 @@ import fr.ird.observe.application.swing.db.constants.DataContextType; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; -import fr.ird.observe.application.swing.I18nEnumHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.constants.seine.SchoolType; @@ -50,7 +50,12 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import javax.swing.JSpinner; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.Date; import java.util.HashSet; @@ -136,15 +141,59 @@ public class SetSeineUIHandler extends ContentUIHandler<SetSeineDto> { super.initUI(); + SetSeineUI ui = getUi(); + // To be sure always remove listener (could prevent some leaks) - getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + ui.getErrorTableModel().removeTableModelListener(computeTabValidStateListener); // listen messages to see if required to add - getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + ui.getErrorTableModel().addTableModelListener(computeTabValidStateListener); + + ui.getStartTime().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getEndPursingTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getEndSetTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.getParent().equals(ui.getStartTime().getHourEditor().getEditor())) { + return getLastComponent(aContainer); + } + case 1: + if (aComponent.equals(ui.getSchoolThickness().getTextField())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } - getUi().getStartTime().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); - getUi().getEndPursingTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); - getUi().getEndSetTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + JComponent editor = ui.getStartTime().getHourEditor().getEditor(); + return ((JSpinner.DateEditor) editor).getTextField(); + case 1: + return ui.getSchoolThickness(); + } + return super.getFirstComponent(aContainer); + } + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { + return ui.getDelete(); + } + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } + }); } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx index e2bd28b..b40b058 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx @@ -21,11 +21,11 @@ --> <fr.ird.observe.application.swing.ui.content.ContentUI - abstract='true' - superGenericType='E' - genericType='E extends IdDto, C extends DataDto'> + abstract='true' superGenericType='E' + genericType='E extends IdDto, C extends DataDto, U extends ContentListUI<E,C, U>'> <import> + fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction @@ -50,11 +50,10 @@ <ContentListUIModel id='model' genericType='E, C'/> - <ListSelectionModel id='listSelectionModel' - initializer='new DefaultListSelectionModel()' + <ListSelectionModel id='listSelectionModel' initializer='new DefaultListSelectionModel()' onValueChanged='if (!event.getValueIsAdjusting()) getModel().setSelectedDatas(getSelectedDatas());'/> - <ContentListUIHandler id='handler' genericType='E, C'/> + <ContentListUIHandler id='handler' genericType='E, C, U'/> <script><![CDATA[ @@ -70,13 +69,12 @@ public final List<DataReference<C>> getSelectedDatas() { <JPanel id='body'> - <JScrollPane id='listPane' constraints='BorderLayout.CENTER' - onFocusGained='list.requestFocus()' + <JScrollPane id='listPane' constraints='BorderLayout.CENTER' onFocusGained='list.requestFocus()' columnHeaderView='{listHeader}'> <JList id='list' onMouseClicked='getHandler().onDataSelected(event)'/> - <BeanListHeader id='listHeader' genericType='DataReference< C >' _entityClass="getModel().getChildType()"/> + <BeanListHeader id='listHeader' genericType='DataReference< C >'/> </JScrollPane> @@ -93,6 +91,11 @@ public final List<DataReference<C>> getSelectedDatas() { <JButton id='reopenChild'/> </cell> </row> + <row> + <cell fill='both' columns="3"> + <JButton id='closeChild'/> + </cell> + </row> <row weighty="1" weightx="1" fill="both"> <cell> <JButton id='gotoOpenChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss index ab4721e..1ea4dae 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss @@ -32,6 +32,7 @@ _listNoLoad: true; beanType:{(Class)DataReference.class}; _doInit:{getModel().getChildType()}; + _entityClass:{getModel().getChildType()}; showReset:true; list:{list}; data:{getHandler().updateList(listHeader, model.getData())}; @@ -60,6 +61,12 @@ _observeAction:{ReOpenUIAction.ACTION_NAME}; } +#closeChild { + visible:{!model.isEmpty() && !model.isCanReopen()}; + enabled:{getHandler().isCanCloseChild()}; + _observeAction:{CloseOpenUIAction.ACTION_NAME}; +} + #createChild { actionIcon:"add"; visible:{model.isCreatingMode()}; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java index 9aca004..a2efb7f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java @@ -23,7 +23,6 @@ package fr.ird.observe.application.swing.ui.content.list; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; -import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; @@ -41,14 +40,20 @@ import org.apache.commons.logging.LogFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.Icon; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import java.awt.Color; import java.awt.Component; +import java.awt.Container; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import static org.nuiton.i18n.I18n.t; @@ -56,12 +61,12 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.5 */ -public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> extends ContentUIHandler<E> { +public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U extends ContentListUI<E, C, U>> extends ContentUIHandler<E> { /** Logger */ private static final Log log = LogFactory.getLog(ContentListUIHandler.class); - public ContentListUIHandler(ContentListUI<E, C> ui, + public ContentListUIHandler(U ui, DataContextType parentType, DataContextType type) { super(ui, parentType, type); @@ -76,14 +81,16 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e */ protected abstract List<DataReference<C>> getChilds(String parentId); + public abstract boolean isCanCloseChild(); + @Override protected boolean computeCanWrite(ObserveSwingDataSource source) { return source.canWriteData(); } @Override - public ContentListUI<E, C> getUi() { - return (ContentListUI<E, C>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } @Override @@ -103,6 +110,53 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e ListCellRenderer renderer2 = new EntityListCellRenderer(renderer, treeHelper); getUi().getList().setCellRenderer(renderer2); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + private List<JComponent> actions; + + @Override + public Component getFirstComponent(Container aContainer) { + return getUi().getList(); + } + + public List<JComponent> getActions() { + if (actions == null) { + + actions = new ArrayList<>(); + actions.add(getUi().getGotoSelectedChild()); + actions.add(getUi().getReopenChild()); + actions.add(getUi().getCloseChild()); + actions.add(getUi().getGotoOpenChild()); + actions.add(getUi().getGotoOpenChild2()); + actions.add(getUi().getCreateChild()); + for (Component component : getUi().getExtraActions().getComponents()) { + if (component instanceof JButton) { + actions.add((JComponent) component); + } + } + actions.add(getUi().getMoveSelectedChildren()); + + } + List<JComponent> result = new ArrayList<>(actions); + Collections.reverse(result); + return result; + } + + @Override + public Component getLastComponent(Container aContainer) { + Optional<JComponent> optional = getActions().stream().filter(a -> a.isEnabled() && a.isVisible()).findFirst(); + return optional.isPresent() ? optional.get() : super.getLastComponent(aContainer); + } + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(getUi().getList())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + }); } @Override @@ -162,6 +216,7 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e // getUi().getGotoOpenChild().setEnabled(false); }); + getUi().getCloseChild().setEnabled(isCanCloseChild()); // finalize openUI with specified code finalizeOpenUI(); } @@ -216,6 +271,7 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e // rien par default } + /** * Un renderer de liste d'entité qui reprendre la cosmétique de l'arbre * de navigation. diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx index 2a09f19..89140dc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripLonglineDto, ActivityLonglineDto' - contentTitle='{n("observe.storage.activityLonglines.title")}' listText='{n("observe.common.activities.list")}' - emptyListMessage='{n("observe.message.no.activity.for.trip")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='TripLonglineDto, ActivityLonglineDto, ActivityLonglinesUI' + contentTitle='{n("observe.storage.activityLonglines.title")}' listText='{n("observe.common.activities.list")}' + emptyListMessage='{n("observe.message.no.activity.for.trip")}'> <import> fr.ird.observe.services.dto.longline.ActivityLonglineDto @@ -49,6 +50,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenActivity'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenActivity2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java index 650c3e5..799d23a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java @@ -25,13 +25,13 @@ package fr.ird.observe.application.swing.ui.content.list.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.service.data.longline.ActivityLonglineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,7 +46,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglineDto, ActivityLonglineDto> { +public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglineDto, ActivityLonglineDto, ActivityLonglinesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivityLonglinesUIHandler.class); @@ -56,6 +56,11 @@ public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglin } @Override + public boolean isCanCloseChild() { + return true; + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { String openTripLonglineId = dataContext.getOpenTripId(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx index 82a5eb8..4bfe978 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx @@ -19,9 +19,9 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='ProgramDto, TripLonglineDto' - listText='{n("observe.common.trips.list")}' - emptyListMessage='{n("observe.message.no.trip.for.program")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='ProgramDto, TripLonglineDto, TripLonglinesUI' + listText='{n("observe.common.trips.list")}' emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> fr.ird.observe.services.dto.longline.ActivityLonglineDto @@ -47,6 +47,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenTrip'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenTrip2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java index f3899d5..e9472b8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java @@ -25,14 +25,14 @@ package fr.ird.observe.application.swing.ui.content.list.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.service.data.longline.TripLonglineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,7 +47,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, TripLonglineDto> { +public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, TripLonglineDto, TripLonglinesUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripLonglinesUIHandler.class); @@ -89,6 +89,11 @@ public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, Tri } @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenActivityLongline(); + } + + @Override protected void finalizeOpenUI() { Class referenceType = ProgramDto.class; ReferentialReference<ProgramDto> programRef = getDataSource().getReferentialReference(referenceType, getSelectedParentId()); @@ -100,7 +105,7 @@ public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, Tri protected List<DataReference<TripLonglineDto>> getChilds(String parentId) { TripLonglineService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTripLonglineService(); - DataReferenceSet<TripLonglineDto> tripLonglineByProgram = service.getTripLonglineByProgram( parentId); + DataReferenceSet<TripLonglineDto> tripLonglineByProgram = service.getTripLonglineByProgram(parentId); if (log.isDebugEnabled()) { log.debug("Will use " + tripLonglineByProgram.sizeReference() + " trips."); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx index 5d67433..0a453d7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='RouteDto, ActivitySeineDto' - contentTitle='{n("observe.storage.activitySeines.title")}' listText='{n("observe.common.activities.list")}' - emptyListMessage='{n("observe.message.no.activity.for.route")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='RouteDto, ActivitySeineDto, ActivitySeinesUI' + contentTitle='{n("observe.storage.activitySeines.title")}' listText='{n("observe.common.activities.list")}' + emptyListMessage='{n("observe.message.no.activity.for.route")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -49,6 +50,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenActivity'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenActivity2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java index e20e302..8e13d88 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java @@ -24,6 +24,7 @@ package fr.ird.observe.application.swing.ui.content.list.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.seine.ActivitySeineDto; @@ -43,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, ActivitySeineDto> { +public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, ActivitySeineDto, ActivitySeinesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivitySeinesUIHandler.class); @@ -53,6 +54,11 @@ public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, Acti } @Override + public boolean isCanCloseChild() { + return true; + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { String openRouteId = dataContext.getOpenRouteId(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx index f722954..bdc29a5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripSeineDto, RouteDto' - contentTitle='{n("observe.content.routes.title")}' listText='{n("observe.common.routes.list")}' - emptyListMessage='{n("observe.message.no.route.for.maree")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripSeineDto, RouteDto, RoutesUI' + contentTitle='{n("observe.content.routes.title")}' + listText='{n("observe.common.routes.list")}' + emptyListMessage='{n("observe.message.no.route.for.maree")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -48,6 +49,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenRoute'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenRoute2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java index f17564b..ce25730 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java @@ -43,7 +43,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto> { +public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto, RoutesUI> { /** Logger */ private static final Log log = LogFactory.getLog(RoutesUIHandler.class); @@ -52,6 +52,12 @@ public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto super(ui, DataContextType.TripSeine, DataContextType.Route); } + + @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenActivitySeine(); + } + @Override protected ContentMode getContentMode(DataContext dataContext) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx index bb84e3c..4701fef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx @@ -19,10 +19,9 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI - superGenericType='ProgramDto, TripSeineDto' - listText='{n("observe.common.trips.list")}' - emptyListMessage='{n("observe.message.no.trip.for.program")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI listText='{n("observe.common.trips.list")}' + superGenericType='ProgramDto, TripSeineDto, TripSeinesUI' + emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -49,6 +48,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenTrip'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenTrip2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java index 044424b..0840ef3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java @@ -24,14 +24,14 @@ package fr.ird.observe.application.swing.ui.content.list.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSeineDto> { +public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSeineDto, TripSeinesUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripSeinesUIHandler.class); @@ -94,6 +94,11 @@ public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSe } @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenRoute(); + } + + @Override protected List<DataReference<TripSeineDto>> getChilds(String parentId) { TripSeineService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTripSeineService(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx index 1b434e4..ba5ebcd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx @@ -21,13 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.ContentUI - abstract='true' - superGenericType='E' - genericType='E extends IdDto' - > + abstract='true' superGenericType='E' + genericType='E extends IdDto, U extends ContentOpenableUI<E, U>'> <import> - fr.ird.observe.services.dto.AbstractObserveDto fr.ird.observe.services.dto.IdDto fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction @@ -43,11 +40,10 @@ </import> <!-- handler --> - <ContentOpenableUIHandler id='handler' genericType='E'/> + <ContentOpenableUIHandler id='handler' genericType='E, U'/> <!-- model --> - <ContentOpenableUIModel id='model' genericType='E' - enabled='{!model.isReadingMode()}'/> + <ContentOpenableUIModel id='model' genericType='E' enabled='{!model.isReadingMode()}'/> <script><![CDATA[ diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java index c608156..491671c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java @@ -39,13 +39,16 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.t; /** * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentUIHandler<E> { +public abstract class ContentOpenableUIHandler<E extends IdDto, U extends ContentOpenableUI<E, U>> extends ContentUIHandler<E> { protected static final String POSITION_OPENABLE = "positionOpenable"; @@ -54,7 +57,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected final String closeMessage; - public ContentOpenableUIHandler(ContentOpenableUI<E> ui, + public ContentOpenableUIHandler(U ui, DataContextType parentType, DataContextType type, String closeMessage) { @@ -64,9 +67,19 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected abstract boolean obtainCanReopen(boolean create); + + public void initUI() { + + super.initUI(); + ((JComponent) ui).setFocusCycleRoot(true); + ((JComponent) ui).setFocusTraversalPolicy(createFocusTraversalPolicy(getUi())); + } + + protected abstract FocusTraversalPolicy createFocusTraversalPolicy(U ui); + @Override - public ContentOpenableUI<E> getUi() { - return (ContentOpenableUI<E>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } @Override @@ -97,7 +110,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU public final void afterOpenData() { - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); // On charge les ensembles de références utilisées dans les combobox updateUiWithReferenceSetsFromModel(); @@ -133,7 +146,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU public final void afterCloseData() { - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); ContentOpenableUIModel<E> model = getModel(); @@ -148,12 +161,6 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU getTypeI18nKey(bean.getClass()), t(closeMessage)); ObserveTreeHelper treeHelper = getTreeHelper(ui); -// ObserveNode selectedNode = treeHelper.getSelectedNode(); -// if (bean instanceof Trip) { -// // le program peut change d'etat open -// selectedNode = selectedNode.getParent(); -// } -// treeHelper.refreshNode(selectedNode, true); treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true); updateActions(); } @@ -163,7 +170,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU super.afterSave(refresh); - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); int position = ui.getContextValue(Integer.class, POSITION_OPENABLE); ObserveTreeHelper treeHelper = getTreeHelper(ui); @@ -214,10 +221,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU } // on repaint le noeud et ses enfants -// treeHelper.refreshNode(node, true); treeHelper.reloadSelectedNode(false, true); - -// treeHelper.refreshNode(node, false); } } @@ -275,9 +279,6 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected final void finalizeOpenUI(ContentMode mode, boolean create) { -// // utilisation du mode requis -// setContentMode(mode); - boolean historicalData = false; ContentOpenableUIModel<E> model = getUi().getModel(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx index a914f39..03c3ef9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx @@ -20,8 +20,9 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivityLonglineDto' - contentTitle='{n("observe.storage.activityLongline.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI + superGenericType='ActivityLonglineDto, ActivityLonglineUI' + contentTitle='{n("observe.storage.activityLongline.title")}'> <style source="../../../Common.jcss"/> @@ -42,8 +43,6 @@ java.awt.Dimension - javax.swing.SwingConstants - static fr.ird.observe.application.swing.ui.UIHelper.getStringValue static org.nuiton.i18n.I18n.n </import> @@ -94,7 +93,8 @@ <JLabel id='vesselActivityLonglineLabel'/> </cell> <cell anchor='east' fill="both"> - <BeanComboBox id='vesselActivityLongline' genericType='ReferentialReference<VesselActivityLonglineDto>' _entityClass='VesselActivityLonglineDto.class' constructorParams='this'/> + <BeanComboBox id='vesselActivityLongline' genericType='ReferentialReference<VesselActivityLonglineDto>' + _entityClass='VesselActivityLonglineDto.class' constructorParams='this'/> </cell> </row> @@ -103,7 +103,8 @@ <JLabel id='fpaZoneLabel'/> </cell> <cell anchor='east' fill="both"> - <BeanComboBox id='fpaZone' genericType='ReferentialReference<FpaZoneDto>' _entityClass='FpaZoneDto.class' constructorParams='this'/> + <BeanComboBox id='fpaZone' genericType='ReferentialReference<FpaZoneDto>' + _entityClass='FpaZoneDto.class' constructorParams='this'/> </cell> </row> @@ -138,8 +139,7 @@ <Table id='extraActions' fill="both" weightx="1" insets='2' visible='{model.isUpdatingMode()}'> <row> <cell weightx="0.5" fill="both"> - <JButton id='addSet' - onActionPerformed='getHandler().addChild(SetLonglineDto.class)'/> + <JButton id='addSet' onActionPerformed='getHandler().addChild(SetLonglineDto.class)'/> </cell> </row> </Table> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java index 17682ad..b0fbc96 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java @@ -40,7 +40,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -51,7 +55,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglineDto> { +class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglineDto, ActivityLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivityLonglineUIHandler.class); @@ -72,8 +76,35 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin } @Override - public ActivityLonglineUI getUi() { - return (ActivityLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ActivityLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getTimeStamp().getDayDateEditor().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getTimeStamp().getDayDateEditor().getEditor(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getTimeStamp().getDayDateEditor().getEditor(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx index 26be957..5b71a2f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx @@ -20,21 +20,18 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripLonglineDto' - contentTitle='{n("observe.content.tripLongline.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripLonglineDto, TripLonglineUI' + contentTitle='{n("observe.content.tripLongline.title")}'> <style source="../../../Common.jcss"/> <import> fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.longline.TripLonglineDto - fr.ird.observe.services.dto.longline.ActivityLonglineDto fr.ird.observe.services.dto.longline.TripLonglineActivityDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.HarbourDto - fr.ird.observe.services.dto.referential.PersonHelper fr.ird.observe.services.dto.referential.VesselDto - fr.ird.observe.services.dto.referential.VesselHelper fr.ird.observe.services.dto.referential.PersonDto fr.ird.observe.services.dto.referential.OceanDto fr.ird.observe.services.dto.referential.longline.TripTypeDto @@ -47,11 +44,8 @@ jaxx.runtime.swing.editor.bean.BeanComboBox java.awt.Dimension - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener static fr.ird.observe.application.swing.ui.UIHelper.getStringValue - static org.apache.commons.lang3.StringUtils.isEmpty static org.nuiton.i18n.I18n.n </import> @@ -65,11 +59,8 @@ <TripLonglineDto id='bean'/> <!-- validator --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.longline.TripLonglineDto' - errorTableModel='{getErrorTableModel()}' - autoField='true' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.longline.TripLonglineDto' + errorTableModel='{getErrorTableModel()}' autoField='true' context='ui-update'> <field name='activityLongline' component='{actionDown}'/> </BeanValidator> @@ -94,7 +85,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='tripTypeLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='tripType' constructorParams='this' genericType='ReferentialReference<TripTypeDto>' _entityClass='TripTypeDto.class'/> + <BeanComboBox id='tripType' constructorParams='this' genericType='ReferentialReference<TripTypeDto>' + _entityClass='TripTypeDto.class'/> </cell> </row> @@ -104,7 +96,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='captainLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -114,7 +107,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='observerLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -124,7 +118,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='dataEntryOperatorLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='dataEntryOperator' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='dataEntryOperator' constructorParams='this' + genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> </cell> </row> @@ -134,7 +129,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='vesselLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' _entityClass='VesselDto.class'/> + <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' + _entityClass='VesselDto.class'/> </cell> </row> @@ -144,7 +140,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='oceanLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' constructorParams='this'/> + <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' + constructorParams='this'/> </cell> </row> @@ -154,7 +151,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='departureHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -164,7 +162,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='landingHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -217,10 +216,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <!-- comment --> <row> <cell columns='2' fill='both' weighty="1"> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getModel().getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getModel().getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java index 3c0a539..1ea6413 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java @@ -45,7 +45,11 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import javax.swing.JTabbedPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Date; import java.util.LinkedList; @@ -60,7 +64,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto> { +class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto,TripLonglineUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripLonglineUIHandler.class); @@ -74,9 +78,42 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto> { n("observe.content.tripLongline.message.not.open")); } +// @Override +// public TripLonglineUI getUi() { +// return (TripLonglineUI) super.getUi(); +// } + + @Override - public TripLonglineUI getUi() { - return (TripLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TripLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getTripType().getCombobox().getEditor().getEditorComponent())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getTripType(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getTripType(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx index f7adb30..290eeef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx @@ -20,7 +20,7 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivitySeineDto' +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivitySeineDto, ActivitySeineUI' contentTitle='{n("observe.storage.activitySeine.title")}'> <style source="../../../Common.jcss"/> @@ -43,7 +43,6 @@ jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox - jaxx.runtime.swing.CardLayout2Ext org.nuiton.jaxx.widgets.datetime.TimeEditor org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor @@ -52,8 +51,6 @@ java.awt.Dimension java.util.Collection - javax.swing.SwingConstants - static fr.ird.observe.application.swing.ui.UIHelper.getStringValue static org.nuiton.i18n.I18n.n </import> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java index db40d22..de4ee78 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java @@ -43,8 +43,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import javax.swing.JSpinner; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.HashSet; import java.util.Set; @@ -55,7 +61,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto> { +class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, ActivitySeineUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivitySeineUIHandler.class); @@ -77,8 +83,58 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto> } @Override - public ActivitySeineUI getUi() { - return (ActivitySeineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ActivitySeineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.getParent().equals(ui.getTime().getHourEditor().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + break; + case 1: + if (aComponent.equals(ui.getVesselSpeed().getTextField())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getObservedSystem().getUniverseList())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + JComponent editor = ui.getTime().getHourEditor().getEditor(); + return ((JSpinner.DateEditor) editor).getTextField(); + case 1: + return ui.getVesselSpeed(); + case 2: return ui.getObservedSystem().getUniverseList(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (getModel().isCreatingMode()) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } else + return ui.getCloseAndCreate(); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx index f36134c..7fecea6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx @@ -20,7 +20,8 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='RouteDto' contentTitle='{n("observe.content.route.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='RouteDto, RouteUI' + contentTitle='{n("observe.content.route.title")}'> <import> fr.ird.observe.services.dto.seine.RouteDto @@ -45,11 +46,8 @@ <RouteDto id='bean'/> <!-- validator --> - <BeanValidator id='validator' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.RouteDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.RouteDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <field name='activitySeine' component='{actionDown}'/> </BeanValidator> @@ -82,10 +80,8 @@ </row> <row> <cell columns='2' fill="both" weightx="1" weighty="1"> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java index d17062e..b911436 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java @@ -28,8 +28,8 @@ import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; @@ -45,6 +45,10 @@ import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JOptionPane; +import javax.swing.LayoutFocusTraversalPolicy; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Date; import static org.nuiton.i18n.I18n.n; @@ -54,9 +58,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { - -// private static final String UPDATE_TRIP_NODE = "updateTripNode"; +class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> { /** Logger */ private static final Log log = LogFactory.getLog(RouteUIHandler.class); @@ -69,8 +71,35 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { } @Override - public RouteUI getUi() { - return (RouteUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(RouteUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getDate().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getDate(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getDate(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override @@ -103,9 +132,7 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { } else { // la maree courante est ouverte - addMessage(ui, NuitonValidatorScope.INFO, - getTypeI18nKey(RouteDto.class), - t(closeMessage)); + addMessage(ui, NuitonValidatorScope.INFO, getTypeI18nKey(RouteDto.class), t(closeMessage)); } return ContentMode.READ; } @@ -402,13 +429,13 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { if (close) { - // on sauvegarde l'activity + // on sauvegarde l'activité selectedUI.save(false); - // on ferme l'activity + // on ferme l'activité selectedUI.closeData(); - // on ferme l'écean + // on ferme l'écran selectedUI.stopEdit(); } return selectedUI; @@ -423,39 +450,6 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { return !create && getOpenDataManager().canOpenRoute(getSelectedParentId()); } -// private void repaintTripNode() { -// Boolean updateTripNode = getUi().getContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// getUi().removeContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// if (updateTripNode == null || !updateTripNode) { -// return; -// } -// -// -// ObserveTreeHelper treeHelper = getTreeHelper(getUi()); -// ObserveNode tripNode = treeHelper.getSelectedNode().getParent().getParent(); -// if (log.isInfoEnabled()) { -// log.info("Refresh trip node : " + tripNode); -// } -// treeHelper.reloadNode(tripNode, false); -// } - -// protected void setUpdateMareeNodeTag(boolean wasUpdated) { -// -// if (wasUpdated) { -// -// // la date de fin a ete modifiee, il faut : redessiner le noeud de la maree le repositionner -// getUi().setContextValue(Boolean.TRUE, UPDATE_TRIP_NODE); -// -// } else { -// -// getUi().removeContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// } -// -// } - private RouteService getRouteService() { return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newRouteService(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx index 1f5639b..51dcc25 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx @@ -20,8 +20,8 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripSeineDto' - contentTitle='{n("observe.content.tripSeine.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripSeineDto, TripSeineUI' + contentTitle='{n("observe.content.tripSeine.title")}'> <import> fr.ird.observe.services.dto.seine.TripSeineDto @@ -82,7 +82,7 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JPanel id="body" layout='{new BorderLayout()}'> <JTabbedPane id='tripSeineTabPane' constraints='BorderLayout.CENTER'> <tab id='generalTab'> - <Table insets="0" fill="both"> + <Table insets="0" fill="both" id="formGeneral"> <!-- captain --> <row> @@ -90,7 +90,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='captainLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -100,7 +101,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='observerLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -110,7 +112,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='dataEntryOperatorLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='dataEntryOperator' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='dataEntryOperator' constructorParams='this' + genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> </cell> </row> @@ -120,7 +123,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='vesselLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' _entityClass='VesselDto.class'/> + <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' + _entityClass='VesselDto.class'/> </cell> </row> @@ -130,7 +134,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='oceanLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' constructorParams='this'/> + <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' + constructorParams='this'/> </cell> </row> @@ -140,7 +145,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='departureHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -150,7 +156,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='landingHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java index 84f2885..7a31c57 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java @@ -25,6 +25,10 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.application.swing.ui.util.tripMap.TripMapUI; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.referential.PersonHelper; @@ -35,16 +39,16 @@ import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.dto.seine.TripSeineHelper; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; -import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIModel; -import fr.ird.observe.application.swing.ui.util.tripMap.TripMapUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import javax.swing.JTabbedPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Date; import java.util.LinkedList; @@ -57,7 +61,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { +class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSeineUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripSeineUIHandler.class); @@ -71,12 +75,6 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { n("observe.content.tripSeine.message.not.open")); } - - @Override - public TripSeineUI getUi() { - return (TripSeineUI) super.getUi(); - } - @Override public boolean doCloseData() { boolean result = getOpenDataManager().isOpenTripSeine(getSelectedId()); @@ -87,6 +85,38 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(TripSeineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getCaptain().getCombobox().getEditor().getEditorComponent())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getCaptain(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getCaptain(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; + } + + @Override public void initUI() { super.initUI(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java index 3ba96f9..3cfcb10 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java @@ -127,11 +127,10 @@ public abstract class ContentTableModel<P extends IdDto, B extends IdDto> extend /** un drapeau pour savoir si le modèle a ete initialisé. */ private boolean init; - private ObserveContentTableUI<P, B> context; + private ObserveContentTableUI<P, B, ?> context; @SuppressWarnings("unchecked") - public ContentTableModel(ObserveContentTableUI<P, B> context, - List<ContentTableMeta<B>> metas) { + public ContentTableModel(ObserveContentTableUI<P, B, ?> context, List<ContentTableMeta<B>> metas) { if (CollectionUtils.isEmpty(metas)) { throw new NullPointerException("meta parameter can not be null, nor empty"); } @@ -449,7 +448,7 @@ public abstract class ContentTableModel<P extends IdDto, B extends IdDto> extend } @SuppressWarnings("unchecked") - protected ContentTableUIHandler<P, B> getHandler() { + protected ContentTableUIHandler<P, B, ?> getHandler() { return context.getHandler(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx index c6e467b..58e3cdd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx @@ -22,8 +22,8 @@ <fr.ird.observe.application.swing.ui.content.ContentUI abstract='true' - superGenericType='E' implements="fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI<E,D>" - genericType='E extends IdDto, D extends IdDto'> + superGenericType='E' implements="fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI<E, D, U>" + genericType='E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>'> <import> fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction @@ -58,7 +58,7 @@ <String id='deleteEntryTip' javaBean='n("observe.action.delete.entry.tip")'/> <!-- Handler --> - <ContentTableUIHandler id='handler' genericType='E, D'/> + <ContentTableUIHandler id='handler' genericType='E, D, U'/> <!-- Model --> <ContentTableUIModel id='model' genericType='E, D' initializer='ContentTableUIModel.newModel(this)'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java index a458c6c..86c660f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java @@ -25,13 +25,6 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; -import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.services.dto.referential.SpeciesDto; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; @@ -40,10 +33,18 @@ import fr.ird.observe.application.swing.ui.content.table.impl.longline.WeightMea import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.util.table.EditableTableModelSupport; import fr.ird.observe.application.swing.ui.util.table.InlineTableAutotSelectRowAndShowPopupAction; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.ActivitySeineDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; @@ -53,6 +54,8 @@ import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.TableModelEvent; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.FocusTraversalPolicy; import java.awt.Rectangle; import java.beans.PropertyChangeListener; import java.io.Serializable; @@ -68,12 +71,12 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> extends ContentUIHandler<E> { +public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>> extends ContentUIHandler<E> { /** Logger */ private static final Log log = LogFactory.getLog(ContentTableUIHandler.class); - protected ContentTableUIHandler(ObserveContentTableUI<E, D> ui, DataContextType dataContextType) { + protected ContentTableUIHandler(U ui, DataContextType dataContextType) { super(ui, dataContextType, null); } @@ -133,8 +136,8 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex } @Override - public ObserveContentTableUI<E, D> getUi() { - return (ObserveContentTableUI<E, D>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } public final D getTableEditBean() { @@ -143,7 +146,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex public final void updateEditor(ListSelectionEvent event) { - final ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); if (ui.getValidatorTable() == null) { log.debug("skip validator is null!"); @@ -217,50 +220,40 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex protected abstract void loadEditBean(String beanId); - //FIXME -// @Override -// protected final void onLoad(TopiaContext tx, E bean) throws TopiaException { -// super.onLoad(tx, bean); -// -// // on duplique la liste des fils traites dans le tableau -// // sinon on reste sur les references d'origine et on aura pas -// // la possibilité d'annuler l'edition ensuite car on aura modifie -// // les entrées d'origine... -// E editBean = getBean(); -// Collection<D> data = loadChilds(tx, editBean); -// getModel().getChildsUpdator().setChilds(editBean, data); -// } - - //FIXME -// protected Collection<D> loadChilds(TopiaContext tx, E bean) throws TopiaException { -// Collection<D> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<D> data = new ArrayList<D>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// Loador<D> loader = getModel().getChildLoador(); -// TopiaDAO<D> dao = getMainDataSource().getDAO(tx, getTableEditBean()); -// for (D c : childs) { -// try { -// D cUp = dao.findByTopiaId(c.getTopiaId()); -// D c2 = getModel().newTableEditBean(); -// loader.load(cUp, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } + protected abstract FocusTraversalPolicy createFocusTraversalPolicy(U ui); @Override public void initUI() { - final ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>> uiInitializer = - new ContentTableUIInitializer<>(getUi()); + ContentTableUIInitializer<E, D, U> uiInitializer = new ContentTableUIInitializer<>(getUi()); uiInitializer.initUI(); getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_FORM, evt -> updateUiWithReferenceSetsFromModel()); + ((JComponent) ui).setFocusCycleRoot(true); + ((JComponent) ui).setFocusTraversalPolicy(createFocusTraversalPolicy(getUi())); + } + + protected Component getDefaultLastComponent(U ui, Component optionalComponent) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (optionalComponent != null) { + return optionalComponent; + } + if (ui.getDeleteEntry().isVisible() && ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isVisible() && ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetNewEntry().isVisible() && ui.getResetNewEntry().isEnabled()) { + return ui.getResetNewEntry(); + } + return ui.getResetEntry(); } @Override @@ -271,7 +264,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex // récupération du mode de l'écran ContentMode mode = computeContentMode(); - ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); int oldIndex = ui.getTableModel().getSelectedRow(); @@ -341,7 +334,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex @Override protected boolean doSave(E bean) throws Exception { - ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); List<D> objets = ui.getTableModel().getData(); @@ -364,63 +357,6 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex protected abstract void doPersist(E bean); - //FIXME -// @Override -// protected E onUpdate(TopiaContext tx, Object parentBean, E beanToSave) throws TopiaException { -// -// List<D> childs = getUi().getTableModel().getData(); -// -// E editBean = getBean(); -// -// TopiaEntityBinder<E> binder = getLoadBinder(); -// -// Loador<D> childBinder = getModel().getChildLoador(); -// -// EntityListUpdator<E, D> childUpdator = getModel().getChildsUpdator(); -// -// // recopie des propriétés du bean en excluant toujours la liste des fils -// binder.copyExcluding(editBean, beanToSave, childUpdator.getPropertyName()); -// -// // on conserve l'ancienne liste des fils (pour traitement ultérieure) -// Collection<D> oldChilds = -// new ArrayList<D>(childUpdator.getChilds(beanToSave)); -// -// // suppression des fils dans le bean a sauver -// childUpdator.removeAll(beanToSave); -// -// TopiaDAO<D> dao = ObserveDAOHelper.getDAO(tx, getModel().getChildType()); -// -// for (D child : childs) { -// -// D childToSave; -// -// if (child.getTopiaId() == null) { -// -// // creation du fils -// Map<String, Object> map = childBinder.obtainProperties(child); -// -// childToSave = dao.create(map); -// -// } else { -// -// // mise a jour du fils -// -// childToSave = dao.findByTopiaId(child.getTopiaId()); -// -// childBinder.load(child, childToSave, false); -// } -// -// // ajout du fils au bean à sauver -// childUpdator.addToList(beanToSave, childToSave); -// } -// -// // on donne la main aux implantations pour faire des traitements -// // supplémentaires -// onUpdateFinalize(tx, beanToSave, oldChilds); -// -// return beanToSave; -// } - @Override protected void afterSave(boolean refresh) { @@ -434,11 +370,6 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex return true; } - //FIXME -// protected void onUpdateFinalize(TopiaContext tx, E bean, Collection<D> oldChilds) throws TopiaException { -// // par défaut, rien à faire -// } - protected ContentTableModel<E, D> getTableModel() { return getUi().getTableModel(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java index c5d8701..93105a3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java @@ -50,7 +50,7 @@ import java.awt.event.KeyEvent; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI extends ObserveContentTableUI<E, D>> extends ContentUIInitializer<E, UI> { +public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI extends ContentTableUI<E, D, UI>> extends ContentUIInitializer<E, UI> { public static final String CLIENT_PROPERTY_TABLE_PROPERTY_NAME = "tablePropertyName"; @@ -71,7 +71,7 @@ public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI exte return ui.getModel(); } - protected ContentTableUIHandler<E, D> getHandler() { + protected ContentTableUIHandler<E, D, UI> getHandler() { return ui.getHandler(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java index fd26972..3209c07 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java @@ -94,7 +94,7 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte this.selectionModel = new ContentTableListSelectionModel(); } - public static <E extends IdDto, D extends IdDto> ContentTableUIModel<E, D> newModel(ObserveContentTableUI<E, D> ui) { + public static <E extends IdDto, D extends IdDto> ContentTableUIModel<E, D> newModel(ObserveContentTableUI<E, D, ?> ui) { String uiName = ui.getClass().getName(); String modelName = uiName + "Model"; @@ -110,13 +110,13 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte } - public void initModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas) { + public void initModel(ObserveContentTableUI<E, D, ?> ui, List<ContentTableMeta<D>> metas) { this.tableModel = createTableModel(ui, metas); } - protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas) ; + protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D, ?> ui, List<ContentTableMeta<D>> metas) ; public Class<D> getChildType() { return childType; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java index 30feeeb..951482a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java @@ -35,9 +35,9 @@ import javax.swing.*; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public interface ObserveContentTableUI<E extends IdDto, D extends IdDto> extends ObserveContentUI<E> { +public interface ObserveContentTableUI<E extends IdDto, D extends IdDto, U extends ContentTableUI<E,D, U>> extends ObserveContentUI<E> { - ContentTableUIHandler<E, D> getHandler(); + ContentTableUIHandler<E, D, U> getHandler(); ContentTableUIModel<E, D> getModel(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx index c417e00..5bab278 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, BaitsCompositionDto' - contentTitle='{n("observe.content.baitsComposition.title")}' - saveNewEntryText='{n("observe.content.baitsComposition.action.create")}' - saveNewEntryTip='{n("observe.content.baitsComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, BaitsCompositionDto, BaitsCompositionUI' + contentTitle='{n("observe.content.baitsComposition.title")}' + saveNewEntryText='{n("observe.content.baitsComposition.action.create")}' + saveNewEntryTip='{n("observe.content.baitsComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.BaitsCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.BaitsCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='baitTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='baitType' constructorParams='this' genericType='ReferentialReference<BaitTypeDto>' _entityClass='BaitTypeDto.class'/> + <BeanComboBox id='baitType' constructorParams='this' genericType='ReferentialReference<BaitTypeDto>' + _entityClass='BaitTypeDto.class'/> </cell> </row> @@ -86,7 +86,8 @@ <JLabel id='baitSettingStatusLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='baitSettingStatus' constructorParams='this' genericType='ReferentialReference<BaitSettingStatusDto>' _entityClass='BaitSettingStatusDto.class'/> + <BeanComboBox id='baitSettingStatus' constructorParams='this' _entityClass='BaitSettingStatusDto.class' + genericType='ReferentialReference<BaitSettingStatusDto>'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java index d1da929..13377c4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BaitsCompositionDto> { +public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BaitsCompositionDto, BaitsCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(BaitsCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLongline } @Override - public BaitsCompositionUI getUi() { - return (BaitsCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(BaitsCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java index ef1e396..07fe92f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BaitsCompositionDto; -import fr.ird.observe.services.dto.longline.BaitsCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BaitsCompositionDto; +import fr.ird.observe.services.dto.longline.BaitsCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,12 +51,12 @@ public class BaitsCompositionUIModel extends ContentTableUIModel<SetLonglineGlob SetLonglineGlobalCompositionDto.PROPERTY_BAITS_COMPOSITION }, new String[]{BaitsCompositionDto.PROPERTY_BAIT_TYPE, - BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, - BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, - BaitsCompositionDto.PROPERTY_INDIVIDUAL_WEIGHT, - BaitsCompositionDto.PROPERTY_PROPORTION}); + BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, + BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, + BaitsCompositionDto.PROPERTY_INDIVIDUAL_WEIGHT, + BaitsCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<BaitsCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<BaitsCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_BAIT_TYPE, false), ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, false), ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, false), @@ -69,7 +69,7 @@ public class BaitsCompositionUIModel extends ContentTableUIModel<SetLonglineGlob @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, BaitsCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, BaitsCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, BaitsCompositionDto, ?> ui, List<ContentTableMeta<BaitsCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, BaitsCompositionDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx index c68aea7..5994fbc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, BranchlinesCompositionDto' - contentTitle='{n("observe.content.branchlinesComposition.title")}' - saveNewEntryText='{n("observe.content.branchlinesComposition.action.create")}' - saveNewEntryTip='{n("observe.content.branchlinesComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, BranchlinesCompositionUI' + contentTitle='{n("observe.content.branchlinesComposition.title")}' + saveNewEntryText='{n("observe.content.branchlinesComposition.action.create")}' + saveNewEntryTip='{n("observe.content.branchlinesComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -63,9 +63,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.BranchlinesCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.BranchlinesCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -75,7 +74,8 @@ <JLabel id='topTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='topType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='topType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> @@ -85,7 +85,8 @@ <JLabel id='tracelineTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='tracelineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='tracelineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java index 259ba83..a0d947c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> { +public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, BranchlinesCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(BranchlinesCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLo } @Override - public BranchlinesCompositionUI getUi() { - return (BranchlinesCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(BranchlinesCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java index b757b51..9193e9f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BranchlinesCompositionDto; -import fr.ird.observe.services.dto.longline.BranchlinesCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BranchlinesCompositionDto; +import fr.ird.observe.services.dto.longline.BranchlinesCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,12 +51,12 @@ public class BranchlinesCompositionUIModel extends ContentTableUIModel<SetLongli SetLonglineGlobalCompositionDto.PROPERTY_BRANCHLINES_COMPOSITION }, new String[]{BranchlinesCompositionDto.PROPERTY_TOP_TYPE, - BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, - BranchlinesCompositionDto.PROPERTY_LENGTH, - BranchlinesCompositionDto.PROPERTY_TRACELINE_LENGTH, - BranchlinesCompositionDto.PROPERTY_PROPORTION}); + BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, + BranchlinesCompositionDto.PROPERTY_LENGTH, + BranchlinesCompositionDto.PROPERTY_TRACELINE_LENGTH, + BranchlinesCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<BranchlinesCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<BranchlinesCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_TOP_TYPE, false), ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, false), ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_LENGTH, false), @@ -70,7 +70,7 @@ public class BranchlinesCompositionUIModel extends ContentTableUIModel<SetLongli @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, ?> ui, List<ContentTableMeta<BranchlinesCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java index 5099fdd..f4d81e1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java @@ -33,7 +33,6 @@ import fr.ird.observe.services.dto.longline.WeightMeasureDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.SwingUtilities; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -51,7 +50,7 @@ public class CatchLonglineTableModel extends ContentTableModel<SetLonglineCatchD private static final long serialVersionUID = 1L; - public CatchLonglineTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto> context, + public CatchLonglineTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto, ?> context, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx index 7499479..3449fb4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx @@ -20,12 +20,13 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineCatchDto, CatchLonglineDto' - contentTitle='{n("observe.content.catchLongline.title")}' - newEntryText='{n("observe.content.catchLongline.action.new")}' - newEntryTip='{n("observe.content.catchLongline.action.new.tip")}' - saveNewEntryText='{n("observe.content.catchLongline.action.create")}' - saveNewEntryTip='{n("observe.content.catchLongline.action.create.tip")}'> +<fr.ird.observe.application.swing.ui.content.table.ContentTableUI + superGenericType='SetLonglineCatchDto, CatchLonglineDto, CatchLonglineUI' + contentTitle='{n("observe.content.catchLongline.title")}' + newEntryText='{n("observe.content.catchLongline.action.new")}' + newEntryTip='{n("observe.content.catchLongline.action.new.tip")}' + saveNewEntryText='{n("observe.content.catchLongline.action.create")}' + saveNewEntryTip='{n("observe.content.catchLongline.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -156,7 +157,8 @@ <JLabel id='sectionLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='section' genericType='DataReference<SectionDto>' _entityClass='SectionDto.class' constructorParams='this'/> + <BeanComboBox id='section' genericType='DataReference<SectionDto>' + _entityClass='SectionDto.class' constructorParams='this'/> </cell> </row> <row> @@ -164,7 +166,8 @@ <JLabel id='basketLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='basket' genericType='DataReference<BasketDto>' _entityClass='BasketDto.class' constructorParams='this'/> + <BeanComboBox id='basket' genericType='DataReference<BasketDto>' + _entityClass='BasketDto.class' constructorParams='this'/> </cell> </row> <row> @@ -172,7 +175,8 @@ <JLabel id='branchlineLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' _entityClass='BranchlineDto.class' constructorParams='this'/> + <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' + _entityClass='BranchlineDto.class' constructorParams='this'/> </cell> </row> </Table> @@ -187,7 +191,8 @@ <JLabel id='speciesCatchLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='speciesCatch' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' constructorParams='this'/> + <BeanComboBox id='speciesCatch' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class' constructorParams='this'/> </cell> <cell anchor='west'> <JLabel id='tagNumberLabel'/> @@ -226,13 +231,17 @@ <JLabel id='catchHealthnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='catchHealthness' constructorParams='this' genericType='ReferentialReference<HealthnessDto>' _entityClass='HealthnessDto.class'/> + <BeanComboBox id='catchHealthness' constructorParams='this' + genericType='ReferentialReference<HealthnessDto>' + _entityClass='HealthnessDto.class'/> </cell> <cell> <JLabel id='hookPositionLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookPosition' constructorParams='this' genericType='ReferentialReference<HookPositionDto>' _entityClass='HookPositionDto.class'/> + <BeanComboBox id='hookPosition' constructorParams='this' + genericType='ReferentialReference<HookPositionDto>' + _entityClass='HookPositionDto.class'/> </cell> </row> @@ -243,13 +252,17 @@ <JLabel id='catchFateLonglineLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='catchFateLongline' constructorParams='this' genericType='ReferentialReference<CatchFateLonglineDto>' _entityClass='CatchFateLonglineDto.class'/> + <BeanComboBox id='catchFateLongline' constructorParams='this' + genericType='ReferentialReference<CatchFateLonglineDto>' + _entityClass='CatchFateLonglineDto.class'/> </cell> <cell> <JLabel id='discardHealthnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='discardHealthness' constructorParams='this' genericType='ReferentialReference<HealthnessDto>' _entityClass='HealthnessDto.class'/> + <BeanComboBox id='discardHealthness' constructorParams='this' + genericType='ReferentialReference<HealthnessDto>' + _entityClass='HealthnessDto.class'/> </cell> </row> @@ -303,7 +316,8 @@ <row> <cell columns="2" fill="both" weighty="0.7"> <JScrollPane id='predatorPane'> - <FilterableDoubleList id='predator' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <FilterableDoubleList id='predator' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </JScrollPane> </cell> </row> @@ -322,7 +336,9 @@ <JLabel id='stomacFullnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='stomacFullness' constructorParams='this' genericType='ReferentialReference<StomacFullnessDto>' _entityClass='StomacFullnessDto.class'/> + <BeanComboBox id='stomacFullness' constructorParams='this' + genericType='ReferentialReference<StomacFullnessDto>' + _entityClass='StomacFullnessDto.class'/> </cell> </row> @@ -332,7 +348,8 @@ <JLabel id='sexLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sex' constructorParams='this' genericType='ReferentialReference<SexDto>' _entityClass='SexDto.class'/> + <BeanComboBox id='sex' constructorParams='this' genericType='ReferentialReference<SexDto>' + _entityClass='SexDto.class'/> </cell> </row> @@ -342,7 +359,9 @@ <JLabel id='maturityStatusLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='maturityStatus' constructorParams='this' genericType='ReferentialReference<MaturityStatusDto>' _entityClass='MaturityStatusDto.class'/> + <BeanComboBox id='maturityStatus' constructorParams='this' + genericType='ReferentialReference<MaturityStatusDto>' + _entityClass='MaturityStatusDto.class'/> </cell> </row> @@ -422,7 +441,9 @@ <JLabel id='baitHaulingStatusLabel'/> </cell> <cell anchor='east' weightx="1" fill="both" columns="2"> - <BeanComboBox id='baitHaulingStatus' constructorParams='this' genericType='ReferentialReference<BaitHaulingStatusDto>' _entityClass='BaitHaulingStatusDto.class'/> + <BeanComboBox id='baitHaulingStatus' constructorParams='this' + genericType='ReferentialReference<BaitHaulingStatusDto>' + _entityClass='BaitHaulingStatusDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java index 2cf0545..2ed9f6d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java @@ -52,11 +52,11 @@ import fr.ird.observe.services.dto.longline.WeightMeasureDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferences; +import fr.ird.observe.services.dto.referential.SizeMeasureTypeDto; import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.WeightMeasureTypeDto; import fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto; import fr.ird.observe.services.dto.referential.longline.HealthnessDto; -import fr.ird.observe.services.dto.referential.SizeMeasureTypeDto; -import fr.ird.observe.services.dto.referential.WeightMeasureTypeDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.data.longline.BranchlineService; import fr.ird.observe.services.service.data.longline.SetLonglineCatchService; @@ -76,8 +76,12 @@ import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.util.Calendar; import java.util.Collection; @@ -97,7 +101,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCatchDto, CatchLonglineDto> { +public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCatchDto, CatchLonglineDto, CatchLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(CatchLonglineUIHandler.class); @@ -136,11 +140,6 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat } @Override - public CatchLonglineUI getUi() { - return (CatchLonglineUI) super.getUi(); - } - - @Override public CatchLonglineUIModel getModel() { return (CatchLonglineUIModel) super.getModel(); } @@ -148,7 +147,7 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat @Override public void initUI() { - final CatchLonglineContentTableUIInitializer uiInitializer = new CatchLonglineContentTableUIInitializer(getUi()); + CatchLonglineContentTableUIInitializer uiInitializer = new CatchLonglineContentTableUIInitializer(getUi()); uiInitializer.initUI(); getModel().addPropertyChangeListener(CatchLonglineUIModel.PROPERTY_SHOW_INDIVIDUAL_TABS, evt -> { @@ -178,6 +177,84 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(CatchLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (getTableModel().isCreate()) { + if (aComponent.equals(ui.getAcquisitionModeIndividual())) { + return getLastComponent(aContainer); + } + } else { + if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + + case 1: + if (aComponent.equals(ui.getDepredated())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getStomacFullness().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + case 5: + if (aComponent.equals(ui.getDepthRecorder())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (getTableModel().isCreate()) { + return ui.getAcquisitionModeIndividual(); + } else { + return ui.getSection(); + } + case 1: + return ui.getDepredated(); + case 2: + return ui.getStomacFullness(); + case 5: + return ui.getDepthRecorder(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + + return super.getLastComponent(aContainer); + } + }; + } + + @Override public void openUI() { if (log.isInfoEnabled()) { @@ -423,7 +500,7 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat ui.getFishingOperationTabPane().setSelectedIndex(0); // select by default individual acquisition mode - String openTripLonglineId = getDataContext().getOpenTripLonglineId(); +// String openTripLonglineId = getDataContext().getOpenTripLonglineId(); ObserveTreeHelper treeHelper = ObserveSwingApplicationContext.get().getMainUI().getTreeHelper(); ObserveNode selectedNode = treeHelper.getSelectedNode(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java index cc50155..45091d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java @@ -23,17 +23,17 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BranchlineDto; -import fr.ird.observe.services.dto.longline.CatchLonglineDto; -import fr.ird.observe.services.dto.longline.SetLonglineCatchDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BranchlineDto; +import fr.ird.observe.services.dto.longline.CatchLonglineDto; +import fr.ird.observe.services.dto.longline.SetLonglineCatchDto; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderModelBuilder; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Set; @@ -122,35 +122,35 @@ public class CatchLonglineUIModel extends ContentTableUIModel<SetLonglineCatchDt SetLonglineCatchDto.PROPERTY_CATCH_LONGLINE }, new String[]{CatchLonglineDto.PROPERTY_SPECIES_CATCH, - CatchLonglineDto.PROPERTY_ACQUISITION_MODE, - CatchLonglineDto.PROPERTY_COUNT, - CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, - CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, - CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, - CatchLonglineDto.PROPERTY_DEPREDATED, - CatchLonglineDto.PROPERTY_NUMBER, - CatchLonglineDto.PROPERTY_HOME_ID, - CatchLonglineDto.PROPERTY_HOOK_POSITION, - CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED, - CatchLonglineDto.PROPERTY_MATURITY_STATUS, - CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, - CatchLonglineDto.PROPERTY_SEX, - CatchLonglineDto.PROPERTY_PREDATOR, - CatchLonglineDto.PROPERTY_STOMAC_FULLNESS, - CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, - CatchLonglineDto.PROPERTY_BEAT_DIAMETER, - CatchLonglineDto.PROPERTY_GONADE_WEIGHT, - CatchLonglineDto.PROPERTY_SECTION, - CatchLonglineDto.PROPERTY_BASKET, - CatchLonglineDto.PROPERTY_BRANCHLINE, - CatchLonglineDto.PROPERTY_TAG_NUMBER, - CatchLonglineDto.PROPERTY_COMMENT + CatchLonglineDto.PROPERTY_ACQUISITION_MODE, + CatchLonglineDto.PROPERTY_COUNT, + CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, + CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, + CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, + CatchLonglineDto.PROPERTY_DEPREDATED, + CatchLonglineDto.PROPERTY_NUMBER, + CatchLonglineDto.PROPERTY_HOME_ID, + CatchLonglineDto.PROPERTY_HOOK_POSITION, + CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED, + CatchLonglineDto.PROPERTY_MATURITY_STATUS, + CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, + CatchLonglineDto.PROPERTY_SEX, + CatchLonglineDto.PROPERTY_PREDATOR, + CatchLonglineDto.PROPERTY_STOMAC_FULLNESS, + CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, + CatchLonglineDto.PROPERTY_BEAT_DIAMETER, + CatchLonglineDto.PROPERTY_GONADE_WEIGHT, + CatchLonglineDto.PROPERTY_SECTION, + CatchLonglineDto.PROPERTY_BASKET, + CatchLonglineDto.PROPERTY_BRANCHLINE, + CatchLonglineDto.PROPERTY_TAG_NUMBER, + CatchLonglineDto.PROPERTY_COMMENT }); this.sizeMeasuresTableModel = new SizeMeasuresTableModel(); this.weightMeasuresTableModel = new WeightMeasuresTableModel(); - List<ContentTableMeta<CatchLonglineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<CatchLonglineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_SECTION, false), ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_BASKET, false), ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_BRANCHLINE, false), @@ -232,7 +232,7 @@ public class CatchLonglineUIModel extends ContentTableUIModel<SetLonglineCatchDt } @Override - protected ContentTableModel<SetLonglineCatchDto, CatchLonglineDto> createTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto> ui, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { + protected ContentTableModel<SetLonglineCatchDto, CatchLonglineDto> createTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto, ?> ui, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { return new CatchLonglineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx index 21588ef..673ce69 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='ActivityLonglineEncounterDto, EncounterDto' - contentTitle='{n("observe.content.encounter.title")}' - saveNewEntryText='{n("observe.content.encounter.action.create")}' - saveNewEntryTip='{n("observe.content.encounter.action.create.tip")}'> + superGenericType='ActivityLonglineEncounterDto, EncounterDto, EncounterUI' + contentTitle='{n("observe.content.encounter.title")}' + saveNewEntryText='{n("observe.content.encounter.action.create")}' + saveNewEntryTip='{n("observe.content.encounter.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -77,7 +77,8 @@ <JLabel id='encounterTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='encounterType' constructorParams='this' genericType='ReferentialReference<EncounterTypeDto>' _entityClass='EncounterTypeDto.class'/> + <BeanComboBox id='encounterType' constructorParams='this' + genericType='ReferentialReference<EncounterTypeDto>' _entityClass='EncounterTypeDto.class'/> </cell> </row> @@ -87,7 +88,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java index 00d6bb7..59063c5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java @@ -24,6 +24,8 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterHelper; @@ -35,15 +37,17 @@ import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.SpeciesListDto; import fr.ird.observe.services.dto.referential.longline.EncounterTypeDto; import fr.ird.observe.services.dto.result.SaveResultDto; -import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.data.longline.ActivityLongLineEncounterService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; +import fr.ird.observe.services.service.referential.ReferentialService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -56,7 +60,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEncounterDto, EncounterDto> { +public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEncounterDto, EncounterDto, EncounterUI> { /** Logger */ private static final Log log = LogFactory.getLog(EncounterUIHandler.class); @@ -66,11 +70,6 @@ public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEn } @Override - public EncounterUI getUi() { - return (EncounterUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, EncounterDto bean, boolean create) { if (getTableModel().isEditable()) { if (log.isDebugEnabled()) { @@ -81,6 +80,36 @@ public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEn } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(EncounterUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getEncounterType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getEncounterType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }; + } + + @Override protected void initTableUI(DefaultTableCellRenderer renderer) { JTable table = getUi().getTable(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java index e5ea568..0da0597 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; -import fr.ird.observe.services.dto.longline.EncounterDto; -import fr.ird.observe.services.dto.longline.EncounterHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; +import fr.ird.observe.services.dto.longline.EncounterDto; +import fr.ird.observe.services.dto.longline.EncounterHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -56,7 +56,7 @@ public class EncounterUIModel extends ContentTableUIModel<ActivityLonglineEncoun EncounterDto.PROPERTY_COUNT, EncounterDto.PROPERTY_ENCOUNTER_TYPE}); - List<ContentTableMeta<EncounterDto>> metas = Lists.newArrayList( + List<ContentTableMeta<EncounterDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_ENCOUNTER_TYPE, false), ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_DISTANCE, false), @@ -68,7 +68,7 @@ public class EncounterUIModel extends ContentTableUIModel<ActivityLonglineEncoun @Override protected ContentTableModel<ActivityLonglineEncounterDto, EncounterDto> createTableModel( - ObserveContentTableUI<ActivityLonglineEncounterDto, EncounterDto> ui, + ObserveContentTableUI<ActivityLonglineEncounterDto, EncounterDto, ?> ui, List<ContentTableMeta<EncounterDto>> contentTableMetas) { return new ContentTableModel<ActivityLonglineEncounterDto, EncounterDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx index 6e42e3b..2851019 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, FloatlinesCompositionDto' - contentTitle='{n("observe.content.floatlinesComposition.title")}' - saveNewEntryText='{n("observe.content.floatlinesComposition.action.create")}' - saveNewEntryTip='{n("observe.content.floatlinesComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, FloatlinesCompositionUI' + contentTitle='{n("observe.content.floatlinesComposition.title")}' + saveNewEntryText='{n("observe.content.floatlinesComposition.action.create")}' + saveNewEntryTip='{n("observe.content.floatlinesComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.FloatlinesCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.FloatlinesCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='lineTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='lineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='lineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java index 5de05fa..c402d38 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java @@ -34,6 +34,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -42,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> { +public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, FloatlinesCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(FloatlinesCompositionUIHandler.class); @@ -52,8 +54,8 @@ public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLon } @Override - public FloatlinesCompositionUI getUi() { - return (FloatlinesCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(FloatlinesCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java index ca309ba..6cbb411 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.FloatlinesCompositionDto; -import fr.ird.observe.services.dto.longline.FloatlinesCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.FloatlinesCompositionDto; +import fr.ird.observe.services.dto.longline.FloatlinesCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,10 +51,10 @@ public class FloatlinesCompositionUIModel extends ContentTableUIModel<SetLonglin SetLonglineGlobalCompositionDto.PROPERTY_FLOATLINES_COMPOSITION }, new String[]{FloatlinesCompositionDto.PROPERTY_LINE_TYPE, - FloatlinesCompositionDto.PROPERTY_LENGTH, - FloatlinesCompositionDto.PROPERTY_PROPORTION}); + FloatlinesCompositionDto.PROPERTY_LENGTH, + FloatlinesCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<FloatlinesCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<FloatlinesCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_LINE_TYPE, false), ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_LENGTH, false), ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_PROPORTION, false)); @@ -66,11 +66,12 @@ public class FloatlinesCompositionUIModel extends ContentTableUIModel<SetLonglin @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, ?> ui, List<ContentTableMeta<FloatlinesCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<FloatlinesCompositionDto> getChilds(SetLonglineGlobalCompositionDto bean) { return bean.getFloatlinesComposition(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java index efd69f6..7fafb31 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java @@ -23,15 +23,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.Sets; +import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineHelper; import fr.ird.observe.services.dto.longline.GearUseFeaturesMeasurementLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,7 +54,7 @@ public class GearUseFeaturesLonglineTableModel extends ContentTableModel<TripLon private transient GearUseFeaturesLonglineUIHandler gearUseFeaturesLonglineUIHandler; - public GearUseFeaturesLonglineTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> context, + public GearUseFeaturesLonglineTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, ?> context, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx index b7609c4..86b428e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TripLonglineGearUseDto, GearUseFeaturesLonglineDto' - contentTitle='{n("observe.content.gearUseFeaturesLongline.title")}' - saveNewEntryText='{n("observe.content.action.gearUseFeaturesLongline")}' - saveNewEntryTip='{n("observe.content.action.gearUseFeaturesLongline.tip")}'> + superGenericType='TripLonglineGearUseDto, GearUseFeaturesLonglineDto, GearUseFeaturesLonglineUI' + contentTitle='{n("observe.content.gearUseFeaturesLongline.title")}' + saveNewEntryText='{n("observe.content.action.gearUseFeaturesLongline")}' + saveNewEntryTip='{n("observe.content.action.gearUseFeaturesLongline.tip")}'> <style source="../../CommonTable.jcss"/> @@ -32,7 +32,6 @@ fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.longline.TripLonglineDto fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto - fr.ird.observe.services.dto.longline.GearUseFeaturesMeasurementLonglineDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.GearDto fr.ird.observe.application.swing.ui.content.table.* @@ -66,17 +65,12 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.longline.TripLonglineGearUseDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.longline.TripLonglineGearUseDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto'/> <JPopupMenu id='measurementsTablePopup'> <JMenuItem id='addMeasurement' onActionPerformed='getHandler().addMeasurement()'/> @@ -101,7 +95,8 @@ <JLabel id='gearLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' _entityClass='GearDto.class'/> + <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' + _entityClass='GearDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java index 097b2ae..13a708d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java @@ -45,8 +45,8 @@ import fr.ird.observe.services.dto.referential.GearCaracteristicTypeHelper; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.result.SaveResultDto; -import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.data.longline.TripLonglineGearUseService; +import fr.ird.observe.services.service.referential.ReferentialService; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidatorMessage; import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; @@ -57,8 +57,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.awt.GridBagConstraints; import java.awt.Insets; import java.beans.PropertyChangeListener; @@ -78,7 +82,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.16 */ -public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> { +public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, GearUseFeaturesLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(GearUseFeaturesLonglineUIHandler.class); @@ -100,8 +104,37 @@ public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<Trip } @Override - public GearUseFeaturesLonglineUI getUi() { - return (GearUseFeaturesLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(GearUseFeaturesLonglineUI ui) { + + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getGear(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, null); + } + }; + } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java index adb0d7b..a5865fd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java @@ -23,14 +23,14 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; -import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; +import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -74,7 +74,7 @@ public class GearUseFeaturesLonglineUIModel extends ContentTableUIModel<TripLong this.measurementsTableModel = new GearUseFeaturesMeasurementLonglinesTableModel(); - List<ContentTableMeta<GearUseFeaturesLonglineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<GearUseFeaturesLonglineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_GEAR, false), ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_NUMBER, false), ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_USED_IN_TRIP, false), @@ -86,7 +86,7 @@ public class GearUseFeaturesLonglineUIModel extends ContentTableUIModel<TripLong } @Override - protected GearUseFeaturesLonglineTableModel createTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> ui, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { + protected GearUseFeaturesLonglineTableModel createTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, ?> ui, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { return new GearUseFeaturesLonglineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx index 7328788..8448aa5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, HooksCompositionDto' - contentTitle='{n("observe.content.hooksComposition.title")}' - saveNewEntryText='{n("observe.content.hooksComposition.action.create")}' - saveNewEntryTip='{n("observe.content.hooksComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, HooksCompositionDto, HooksCompositionUI' + contentTitle='{n("observe.content.hooksComposition.title")}' + saveNewEntryText='{n("observe.content.hooksComposition.action.create")}' + saveNewEntryTip='{n("observe.content.hooksComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.HooksCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.HooksCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='hookTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookType' constructorParams='this' genericType='ReferentialReference<HookTypeDto>' _entityClass='HookTypeDto.class'/> + <BeanComboBox id='hookType' constructorParams='this' genericType='ReferentialReference<HookTypeDto>' + _entityClass='HookTypeDto.class'/> </cell> </row> @@ -86,11 +86,11 @@ <JLabel id='hookSizeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookSize' constructorParams='this' genericType='ReferentialReference<HookSizeDto>' _entityClass='HookSizeDto.class'/> + <BeanComboBox id='hookSize' constructorParams='this' genericType='ReferentialReference<HookSizeDto>' + _entityClass='HookSizeDto.class'/> </cell> </row> - <!-- hookOffset --> <row> <cell> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java index ad25532..e3e2c88 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, HooksCompositionDto> { +public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, HooksCompositionDto, HooksCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(HooksCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLongline } @Override - public HooksCompositionUI getUi() { - return (HooksCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(HooksCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java index 1ab45b5..1b9e373 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.HooksCompositionDto; -import fr.ird.observe.services.dto.longline.HooksCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.HooksCompositionDto; +import fr.ird.observe.services.dto.longline.HooksCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,11 +51,11 @@ public class HooksCompositionUIModel extends ContentTableUIModel<SetLonglineGlob SetLonglineGlobalCompositionDto.PROPERTY_HOOKS_COMPOSITION }, new String[]{HooksCompositionDto.PROPERTY_HOOK_TYPE, - HooksCompositionDto.PROPERTY_HOOK_SIZE, - HooksCompositionDto.PROPERTY_HOOK_OFFSET, - HooksCompositionDto.PROPERTY_PROPORTION}); + HooksCompositionDto.PROPERTY_HOOK_SIZE, + HooksCompositionDto.PROPERTY_HOOK_OFFSET, + HooksCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<HooksCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<HooksCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_TYPE, false), ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_SIZE, false), ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_OFFSET, false), @@ -68,11 +68,12 @@ public class HooksCompositionUIModel extends ContentTableUIModel<SetLonglineGlob @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, HooksCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, HooksCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, HooksCompositionDto, ?> ui, List<ContentTableMeta<HooksCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, HooksCompositionDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<HooksCompositionDto> getChilds(SetLonglineGlobalCompositionDto bean) { return bean.getHooksComposition(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx index 5a25e06..c32c54e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='ActivityLonglineSensorUsedDto, SensorUsedDto' - contentTitle='{n("observe.content.sensorUsed.title")}' - saveNewEntryText='{n("observe.content.sensorUsed.action.create")}' - saveNewEntryTip='{n("observe.content.sensorUsed.action.create.tip")}'> + superGenericType='ActivityLonglineSensorUsedDto, SensorUsedDto, SensorUsedUI' + contentTitle='{n("observe.content.sensorUsed.title")}' + saveNewEntryText='{n("observe.content.sensorUsed.action.create")}' + saveNewEntryTip='{n("observe.content.sensorUsed.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -77,7 +77,8 @@ <JLabel id='sensorTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorType' constructorParams='this' genericType='ReferentialReference<SensorTypeDto>' _entityClass='SensorTypeDto.class'/> + <BeanComboBox id='sensorType' constructorParams='this' genericType='ReferentialReference<SensorTypeDto>' + _entityClass='SensorTypeDto.class'/> </cell> </row> @@ -87,7 +88,9 @@ <JLabel id='sensorDataFormatLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorDataFormat' constructorParams='this' genericType='ReferentialReference<SensorDataFormatDto>' _entityClass='SensorDataFormatDto.class'/> + <BeanComboBox id='sensorDataFormat' constructorParams='this' + genericType='ReferentialReference<SensorDataFormatDto>' + _entityClass='SensorDataFormatDto.class'/> </cell> </row> @@ -97,7 +100,8 @@ <JLabel id='sensorBrandLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' _entityClass='SensorBrandDto.class'/> + <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' + _entityClass='SensorBrandDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java index 0b3bb08..b1bd29b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java @@ -44,8 +44,11 @@ import org.nuiton.jaxx.runtime.JaxxFileChooser; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -59,7 +62,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineSensorUsedDto, SensorUsedDto> { +public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineSensorUsedDto, SensorUsedDto, SensorUsedUI> { /** Logger */ private static final Log log = LogFactory.getLog(SensorUsedUIHandler.class); @@ -69,11 +72,6 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS } @Override - public SensorUsedUI getUi() { - return (SensorUsedUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, SensorUsedDto bean, boolean create) { if (getTableModel().isEditable()) { if (log.isDebugEnabled()) { @@ -234,6 +232,36 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS ActivityLonglineSensorUsedHelper.copyActivityLonglineSensorUsedDto(form.getObject(), getBean()); } + @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(SensorUsedUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSensorType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSensorType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }; + } + protected ActivityLongLineSensorUsedService getActivityLonglineSensorUsedService() { return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newActivityLongLineSensorUsedService(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java index fa79727..aa13383 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.ActivityLonglineSensorUsedDto; -import fr.ird.observe.services.dto.longline.SensorUsedDto; -import fr.ird.observe.services.dto.longline.SensorUsedHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.ActivityLonglineSensorUsedDto; +import fr.ird.observe.services.dto.longline.SensorUsedDto; +import fr.ird.observe.services.dto.longline.SensorUsedHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -52,13 +52,13 @@ public class SensorUsedUIModel extends ContentTableUIModel<ActivityLonglineSenso ActivityLonglineSensorUsedDto.PROPERTY_SENSOR_USED, ActivityLonglineSensorUsedDto.PROPERTY_COMMENT}, new String[]{SensorUsedDto.PROPERTY_HAS_DATA, - SensorUsedDto.PROPERTY_DATA, - SensorUsedDto.PROPERTY_SENSOR_SERIAL_NO, - SensorUsedDto.PROPERTY_SENSOR_TYPE, - SensorUsedDto.PROPERTY_SENSOR_BRAND, - SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT}); + SensorUsedDto.PROPERTY_DATA, + SensorUsedDto.PROPERTY_SENSOR_SERIAL_NO, + SensorUsedDto.PROPERTY_SENSOR_TYPE, + SensorUsedDto.PROPERTY_SENSOR_BRAND, + SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT}); - List<ContentTableMeta<SensorUsedDto>> metas = Lists.newArrayList( + List<ContentTableMeta<SensorUsedDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_TYPE, false), ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_BRAND, false), ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT, false), @@ -72,11 +72,12 @@ public class SensorUsedUIModel extends ContentTableUIModel<ActivityLonglineSenso @Override protected ContentTableModel<ActivityLonglineSensorUsedDto, SensorUsedDto> createTableModel( - ObserveContentTableUI<ActivityLonglineSensorUsedDto, SensorUsedDto> ui, + ObserveContentTableUI<ActivityLonglineSensorUsedDto, SensorUsedDto, ?> ui, List<ContentTableMeta<SensorUsedDto>> contentTableMetas) { return new ContentTableModel<ActivityLonglineSensorUsedDto, SensorUsedDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<SensorUsedDto> getChilds(ActivityLonglineSensorUsedDto bean) { return bean.getSensorUsed(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx index c7ddc72..3e7c8e5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx @@ -18,10 +18,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineTdrDto, TdrDto' - contentTitle='{n("observe.content.tdr.title")}' - saveNewEntryText='{n("observe.content.tdr.action.create")}' - saveNewEntryTip='{n("observe.content.tdr.action.create.tip")}'> +<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineTdrDto, TdrDto, TdrUI' + contentTitle='{n("observe.content.tdr.title")}' + saveNewEntryText='{n("observe.content.tdr.action.create")}' + saveNewEntryTip='{n("observe.content.tdr.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -124,7 +124,9 @@ <JLabel id='sensorBrandLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' _entityClass='SensorBrandDto.class'/> + <BeanComboBox id='sensorBrand' constructorParams='this' + genericType='ReferentialReference<SensorBrandDto>' + _entityClass='SensorBrandDto.class'/> </cell> </row> @@ -176,7 +178,8 @@ <JLabel id='sectionLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='section' genericType='DataReference<SectionDto>' _entityClass='SectionDto.class' constructorParams='this'/> + <BeanComboBox id='section' genericType='DataReference<SectionDto>' + _entityClass='SectionDto.class' constructorParams='this'/> </cell> </row> <row> @@ -184,7 +187,8 @@ <JLabel id='basketLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='basket' genericType='DataReference<BasketDto>' _entityClass='BasketDto.class' constructorParams='this'/> + <BeanComboBox id='basket' genericType='DataReference<BasketDto>' + _entityClass='BasketDto.class' constructorParams='this'/> </cell> </row> <row> @@ -192,7 +196,8 @@ <JLabel id='branchlineLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' _entityClass='BranchlineDto.class' constructorParams='this'/> + <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' + _entityClass='BranchlineDto.class' constructorParams='this'/> </cell> </row> </Table> @@ -206,7 +211,8 @@ </cell> <cell weightx='1' anchor='east'> <BeanComboBox id='itemHorizontalPosition' constructorParams='this' - genericType='ReferentialReference<ItemHorizontalPositionDto>' _entityClass='ItemHorizontalPositionDto.class'/> + genericType='ReferentialReference<ItemHorizontalPositionDto>' + _entityClass='ItemHorizontalPositionDto.class'/> </cell> </row> @@ -217,7 +223,8 @@ </cell> <cell weightx='1' anchor='east'> <BeanComboBox id='itemVerticalPosition' constructorParams='this' - genericType='ReferentialReference<ItemVerticalPositionDto>' _entityClass='ItemVerticalPositionDto.class'/> + genericType='ReferentialReference<ItemVerticalPositionDto>' + _entityClass='ItemVerticalPositionDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java index 1d4a545..1617795 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java @@ -54,9 +54,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; @@ -77,7 +80,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDto> { +public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDto, TdrUI> { /** Logger */ private static final Log log = LogFactory.getLog(TdrUIHandler.class); @@ -108,11 +111,6 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt } @Override - public TdrUI getUi() { - return (TdrUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, TdrDto bean, boolean create) { ContentTableModel<SetLonglineTdrDto, TdrDto> model = getTableModel(); @@ -210,6 +208,79 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(TdrUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getEditTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getHomeId())) { + return getLastComponent(aContainer); + } + case 1: + if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getEnableTimestamp())) { + return getLastComponent(aContainer); + } + case 3: + if (aComponent.equals(ui.getFishingStartDepth())) { + return getLastComponent(aContainer); + } + case 4: + if (aComponent.equals(ui.getSpecies().getUniverseList())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getEditTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getHomeId(); + case 1: + return ui.getSection(); + case 2: + return ui.getEnableTimestamp(); + case 3: + return ui.getFishingStartDepth(); + case 4: + return ui.getSpecies().getUniverseList(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + + return super.getLastComponent(aContainer); + } + }; + } + + @Override public void openUI() { if (log.isInfoEnabled()) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java index e2d8b35..793fa1d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java @@ -32,6 +32,7 @@ import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; @@ -147,7 +148,7 @@ public class TdrUIModel extends ContentTableUIModel<SetLonglineTdrDto, TdrDto> { // species tab TdrDto.PROPERTY_SPECIES}); - List<ContentTableMeta<TdrDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TdrDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_HOME_ID, false), ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_SERIAL_NO, false), ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_SENSOR_BRAND, false), @@ -159,7 +160,7 @@ public class TdrUIModel extends ContentTableUIModel<SetLonglineTdrDto, TdrDto> { @Override protected ContentTableModel<SetLonglineTdrDto, TdrDto> createTableModel( - ObserveContentTableUI<SetLonglineTdrDto, TdrDto> ui, + ObserveContentTableUI<SetLonglineTdrDto, TdrDto, ?> ui, List<ContentTableMeta<TdrDto>> contentTableMetas) { return new ContentTableModel<SetLonglineTdrDto, TdrDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java index fbf67dc..9efd037 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java @@ -23,8 +23,8 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.SpeciesDto; @@ -38,7 +38,7 @@ import java.beans.PropertyChangeListener; * @author Tony Chemit - chemit@codelutin.com * @since 5.1 */ -public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto> extends ContentTableUIHandler<E, D> { +public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>> extends ContentTableUIHandler<E, D, U> { /** * Ecoute les modifications de la propriété {@link TargetLengthDto#getWeight()}, @@ -67,7 +67,7 @@ public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto> */ protected final PropertyChangeListener speciesChanged; - protected AbstractSampleUIHandler(ObserveContentTableUI<E, D> ui) { + protected AbstractSampleUIHandler(U ui) { super(ui, DataContextType.SetSeine); weightChanged = evt -> { onWeightChanged((Float) evt.getNewValue()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java index 9b1a35b..d3b7557 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java @@ -23,15 +23,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import com.google.common.collect.Sets; +import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineHelper; import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; -import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,7 +54,7 @@ public class GearUseFeaturesSeineTableModel extends ContentTableModel<TripSeineG private transient GearUseFeaturesSeineUIHandler gearUseFeaturesSeineUIHandler; - public GearUseFeaturesSeineTableModel(ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto> context, + public GearUseFeaturesSeineTableModel(ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto, ?> context, List<ContentTableMeta<GearUseFeaturesSeineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx index 9ac4a1a..291995d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TripSeineGearUseDto, GearUseFeaturesSeineDto' - contentTitle='{n("observe.content.gearUseFeaturesSeine.title")}' - saveNewEntryText='{n("observe.content.action.create.gearUseFeaturesSeine")}' - saveNewEntryTip='{n("observe.content.action.create.gearUseFeaturesSeine.tip")}'> + superGenericType='TripSeineGearUseDto, GearUseFeaturesSeineDto, GearUseFeaturesSeineUI' + contentTitle='{n("observe.content.gearUseFeaturesSeine.title")}' + saveNewEntryText='{n("observe.content.action.create.gearUseFeaturesSeine")}' + saveNewEntryTip='{n("observe.content.action.create.gearUseFeaturesSeine.tip")}'> <style source="../../CommonTable.jcss"/> @@ -32,7 +32,6 @@ fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.seine.TripSeineGearUseDto fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto - fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.GearDto fr.ird.observe.application.swing.ui.content.table.* @@ -66,17 +65,12 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.TripSeineGearUseDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.TripSeineGearUseDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto'/> <JPopupMenu id='measurementsTablePopup'> <JMenuItem id='addMeasurement' onActionPerformed='getHandler().addMeasurement()'/> @@ -101,7 +95,8 @@ <JLabel id='gearLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' _entityClass='GearDto.class'/> + <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' + _entityClass='GearDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java index 565fd94..932488b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java @@ -57,8 +57,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.awt.GridBagConstraints; import java.awt.Insets; import java.beans.PropertyChangeListener; @@ -78,7 +82,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.16 */ -public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSeineGearUseDto, GearUseFeaturesSeineDto> { +public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSeineGearUseDto, GearUseFeaturesSeineDto, GearUseFeaturesSeineUI> { /** Logger */ private static final Log log = LogFactory.getLog(GearUseFeaturesSeineUIHandler.class); @@ -100,8 +104,53 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei } @Override - public GearUseFeaturesSeineUI getUi() { - return (GearUseFeaturesSeineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(GearUseFeaturesSeineUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getGear(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isVisible() && ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isVisible() && ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetNewEntry().isVisible() && ui.getResetNewEntry().isEnabled()) { + return ui.getResetNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + return super.getLastComponent(aContainer); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java index 4696bfb..1b6c58a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java @@ -23,14 +23,14 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; -import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; +import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -59,13 +59,13 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe public GearUseFeaturesSeineUIModel(GearUseFeaturesSeineUI ui) { super(TripSeineGearUseDto.class, - GearUseFeaturesSeineDto.class, - new String[]{ - TripSeineGearUseDto.PROPERTY_ID, - TripSeineGearUseDto.PROPERTY_GEAR_USE_FEATURES_SEINE, - TripSeineGearUseDto.PROPERTY_LAST_UPDATE_DATE, - }, - new String[]{ + GearUseFeaturesSeineDto.class, + new String[]{ + TripSeineGearUseDto.PROPERTY_ID, + TripSeineGearUseDto.PROPERTY_GEAR_USE_FEATURES_SEINE, + TripSeineGearUseDto.PROPERTY_LAST_UPDATE_DATE, + }, + new String[]{ GearUseFeaturesSeineDto.PROPERTY_ID, GearUseFeaturesSeineDto.PROPERTY_NUMBER, GearUseFeaturesSeineDto.PROPERTY_USED_IN_TRIP, @@ -76,7 +76,7 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe this.measurementsTableModel = new GearUseFeaturesMeasurementSeinesTableModel(); - List<ContentTableMeta<GearUseFeaturesSeineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<GearUseFeaturesSeineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_GEAR, false), ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_NUMBER, false), ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_USED_IN_TRIP, false), @@ -88,7 +88,7 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe @Override protected GearUseFeaturesSeineTableModel createTableModel( - ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto> ui, + ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto, ?> ui, List<ContentTableMeta<GearUseFeaturesSeineDto>> contentTableMetas) { return new GearUseFeaturesSeineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx index 66852f6..473ea0f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx @@ -22,10 +22,10 @@ <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineNonTargetCatchDto, NonTargetCatchDto' - contentTitle='{n("observe.common.nonTargetCatch")}' - saveNewEntryText='{n("observe.content.action.create.nonTargetCatch")}' - saveNewEntryTip='{n("observe.content.action.create.nonTargetCatch.tip")}'> + superGenericType='SetSeineNonTargetCatchDto, NonTargetCatchDto, NonTargetCatchUI' + contentTitle='{n("observe.common.nonTargetCatch")}' + saveNewEntryText='{n("observe.content.action.create.nonTargetCatch")}' + saveNewEntryTip='{n("observe.content.action.create.nonTargetCatch.tip")}'> <style source="../../CommonTable.jcss"/> @@ -66,20 +66,15 @@ <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="nonTargetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.NonTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.NonTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <Table id='editorPanel' fill='both' insets='1' onFocusGained='species.requestFocus()'> @@ -90,7 +85,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -100,7 +96,8 @@ <JLabel id='speciesFateLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='speciesFate' constructorParams='this' genericType='ReferentialReference<SpeciesFateDto>' _entityClass='SpeciesFateDto.class'/> + <BeanComboBox id='speciesFate' constructorParams='this' genericType='ReferentialReference<SpeciesFateDto>' + _entityClass='SpeciesFateDto.class'/> </cell> </row> @@ -110,7 +107,8 @@ <JLabel id='reasonForDiscardLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='reasonForDiscard' constructorParams='this' genericType='ReferentialReference<ReasonForDiscardDto>' _entityClass='ReasonForDiscardDto.class'/> + <BeanComboBox id='reasonForDiscard' constructorParams='this' _entityClass='ReasonForDiscardDto.class' + genericType='ReferentialReference<ReasonForDiscardDto>'/> </cell> </row> @@ -124,8 +122,7 @@ </cell> <cell anchor='east'> <JToolBar id='catchWeightComputedAction'> - <JButton id='catchWeightComputedInformation' - onActionPerformed='getHandler().resetCatchWeightComputed()'/> + <JButton id='catchWeightComputedInformation' onActionPerformed='getHandler().resetCatchWeightComputed()'/> </JToolBar> </cell> </row> @@ -141,8 +138,7 @@ </cell> <cell anchor='east'> <JToolBar id='totalCountComputedAction'> - <JButton id='totalCountComputedInformation' - onActionPerformed='getHandler().resetTotalCountComputed()'/> + <JButton id='totalCountComputedInformation' onActionPerformed='getHandler().resetTotalCountComputed()'/> </JToolBar> </cell> </row> @@ -157,8 +153,7 @@ </cell> <cell anchor='east'> <JToolBar id='meanWeightComputedAction'> - <JButton id='meanWeightComputedInformation' - onActionPerformed='getHandler().resetMeanWeightComputed()'/> + <JButton id='meanWeightComputedInformation' onActionPerformed='getHandler().resetMeanWeightComputed()'/> </JToolBar> </cell> </row> @@ -173,8 +168,7 @@ </cell> <cell anchor='east'> <JToolBar id='meanLengthComputedAction'> - <JButton id='meanLengthComputedInformation' - onActionPerformed='getHandler().resetMeanLengthComputed()'/> + <JButton id='meanLengthComputedInformation' onActionPerformed='getHandler().resetMeanLengthComputed()'/> </JToolBar> </cell> </row> @@ -197,8 +191,7 @@ <!-- comment --> <row> <cell columns='3' weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> <JTextArea id='comment2' onKeyReleased='getTableEditBean().setComment(((JTextArea) event.getSource()).getText())'/> </JScrollPane> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java index a2f5278..ee42d6e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java @@ -51,7 +51,11 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; @@ -66,7 +70,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTargetCatchDto, NonTargetCatchDto> { +public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTargetCatchDto, NonTargetCatchDto, NonTargetCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(NonTargetCatchUIHandler.class); @@ -128,8 +132,26 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTa } @Override - public NonTargetCatchUI getUi() { - return (NonTargetCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(NonTargetCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, null); + } + }; } public String getCatchWeightDataTip(NonTargetCatchComputedValueSource computed) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java index be4a698..f95e4ff 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.NonTargetCatchDto; -import fr.ird.observe.services.dto.seine.NonTargetCatchHelper; -import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.NonTargetCatchDto; +import fr.ird.observe.services.dto.seine.NonTargetCatchHelper; +import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -65,7 +65,7 @@ public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineNonTarget NonTargetCatchDto.PROPERTY_COMMENT }); - List<ContentTableMeta<NonTargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<NonTargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES_FATE, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD, false), @@ -82,7 +82,7 @@ public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineNonTarget @Override protected ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineNonTargetCatchDto, NonTargetCatchDto> ui, + ObserveContentTableUI<SetSeineNonTargetCatchDto, NonTargetCatchDto, ?> ui, List<ContentTableMeta<NonTargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx index cc648fa..f741966 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx @@ -21,7 +21,7 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='NonTargetSampleDto, NonTargetLengthDto' + superGenericType='NonTargetSampleDto, NonTargetLengthDto, NonTargetSampleUI' contentTitle='{n("observe.common.nonTargetSample")}' saveNewEntryText='{n("observe.content.action.create.nonTargetSample")}' saveNewEntryTip='{n("observe.content.action.create.nonTargetSample.tip")}'> @@ -66,19 +66,14 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.NonTargetSampleDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.NonTargetSampleDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <field name='comment'/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.NonTargetLengthDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.NonTargetLengthDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> </BeanValidator> <ButtonGroup id='acquisitionModeGroup' diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java index 1ec4207..aa464d0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java @@ -46,7 +46,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -60,7 +64,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetSampleDto, NonTargetLengthDto> { +public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetSampleDto, NonTargetLengthDto, NonTargetSampleUI> { /** Logger */ private static final Log log = LogFactory.getLog(NonTargetSampleUIHandler.class); @@ -70,8 +74,33 @@ public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetS } @Override - public NonTargetSampleUI getUi() { - return (NonTargetSampleUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(NonTargetSampleUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getAcquisitionModeEffectif())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getAcquisitionModeEffectif().isEnabled()) { + return ui.getAcquisitionModeEffectif(); + } + return ui.getSizeMeasureType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; + } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java index 3087dba..87d3d7e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java @@ -47,7 +47,7 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD private static final long serialVersionUID = 1L; - public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE="defaultSizeMeasureType"; + public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE = "defaultSizeMeasureType"; private ReferentialReference<SizeMeasureTypeDto> defaultSizeMeasureType; @@ -59,15 +59,15 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD NonTargetSampleDto.PROPERTY_NON_TARGET_LENGTH, NonTargetSampleDto.PROPERTY_COMMENT}, new String[]{NonTargetLengthDto.PROPERTY_SPECIES, - NonTargetLengthDto.PROPERTY_LENGTH, - NonTargetLengthDto.PROPERTY_IS_LENGTH_COMPUTED, - NonTargetLengthDto.PROPERTY_WEIGHT, - NonTargetLengthDto.PROPERTY_IS_WEIGHT_COMPUTED, - NonTargetLengthDto.PROPERTY_SEX, - NonTargetLengthDto.PROPERTY_COUNT, - NonTargetLengthDto.PROPERTY_SPECIES_FATE, - NonTargetLengthDto.PROPERTY_ACQUISITION_MODE, - NonTargetLengthDto.PROPERTY_PICTURES_REFERENCES + NonTargetLengthDto.PROPERTY_LENGTH, + NonTargetLengthDto.PROPERTY_IS_LENGTH_COMPUTED, + NonTargetLengthDto.PROPERTY_WEIGHT, + NonTargetLengthDto.PROPERTY_IS_WEIGHT_COMPUTED, + NonTargetLengthDto.PROPERTY_SEX, + NonTargetLengthDto.PROPERTY_COUNT, + NonTargetLengthDto.PROPERTY_SPECIES_FATE, + NonTargetLengthDto.PROPERTY_ACQUISITION_MODE, + NonTargetLengthDto.PROPERTY_PICTURES_REFERENCES }); List<ContentTableMeta<NonTargetLengthDto>> metas = Arrays.asList( @@ -91,9 +91,10 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD } @Override - protected ContentTableModel<NonTargetSampleDto, NonTargetLengthDto> createTableModel(ObserveContentTableUI<NonTargetSampleDto, NonTargetLengthDto> ui, List<ContentTableMeta<NonTargetLengthDto>> contentTableMetas) { + protected ContentTableModel<NonTargetSampleDto, NonTargetLengthDto> createTableModel(ObserveContentTableUI<NonTargetSampleDto, NonTargetLengthDto, ?> ui, List<ContentTableMeta<NonTargetLengthDto>> contentTableMetas) { return new ContentTableModel<NonTargetSampleDto, NonTargetLengthDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<NonTargetLengthDto> getChilds(NonTargetSampleDto bean) { return bean.getNonTargetLength(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx index b912040..1e6d6cb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto' - contentTitle='{n("observe.common.objectObservedSpecies")}' - saveNewEntryText='{n("observe.content.action.create.objectObservedSpecies")}' - saveNewEntryTip='{n("observe.content.action.create.objectObservedSpecies.tip")}'> + superGenericType='FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ObjectObservedSpeciesUI' + contentTitle='{n("observe.common.objectObservedSpecies")}' + saveNewEntryText='{n("observe.content.action.create.objectObservedSpecies")}' + saveNewEntryTip='{n("observe.content.action.create.objectObservedSpecies.tip")}'> <style source="../../CommonTable.jcss"/> @@ -62,18 +62,13 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -83,8 +78,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' - genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -113,10 +108,8 @@ <Table id='extraZone' fill='both' weightx='1' insets='0'> <row> <cell weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java index 54ac0f8..da0e421 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java @@ -43,7 +43,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -54,7 +58,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> { +public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ObjectObservedSpeciesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ObjectObservedSpeciesUIHandler.class); @@ -64,8 +68,26 @@ public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<Floati } @Override - public ObjectObservedSpeciesUI getUi() { - return (ObjectObservedSpeciesUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ObjectObservedSpeciesUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java index 6764cf7..4ead773 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; -import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; -import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -57,7 +57,7 @@ public class ObjectObservedSpeciesUIModel extends ContentTableUIModel<FloatingOb ObjectObservedSpeciesDto.PROPERTY_COUNT} ); - List<ContentTableMeta<ObjectObservedSpeciesDto>> metas = Lists.newArrayList( + List<ContentTableMeta<ObjectObservedSpeciesDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES_STATUS, false), ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_COUNT, false)); @@ -68,11 +68,12 @@ public class ObjectObservedSpeciesUIModel extends ContentTableUIModel<FloatingOb @Override protected ContentTableModel<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> createTableModel( - ObserveContentTableUI<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> ui, + ObserveContentTableUI<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ?> ui, List<ContentTableMeta<ObjectObservedSpeciesDto>> contentTableMetas) { return new ContentTableModel<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<ObjectObservedSpeciesDto> getChilds(FloatingObjectObservedSpeciesDto bean) { return bean.getObjectObservedSpecies(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx index c5a18d4..ac22112 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto' - contentTitle='{n("observe.common.schoolEstimate")}' - saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' - saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> + superGenericType='FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ObjectSchoolEstimateUI' + contentTitle='{n("observe.common.schoolEstimate")}' + saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' + saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> <style source="../../CommonTable.jcss"/> @@ -61,18 +61,13 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -82,8 +77,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' - genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -101,10 +96,8 @@ <Table id='extraZone' fill='both' weightx='1' insets='1'> <row> <cell weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java index c2d6ccd..272ac1d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java @@ -41,7 +41,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -52,7 +56,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> { +public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ObjectSchoolEstimateUI> { /** Logger */ @@ -63,8 +67,26 @@ public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<Floatin } @Override - public ObjectSchoolEstimateUI getUi() { - return (ObjectSchoolEstimateUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ObjectSchoolEstimateUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java index 09bb397..f513381 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; -import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; -import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -56,7 +56,7 @@ public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObj ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT} ); - List<ContentTableMeta<ObjectSchoolEstimateDto>> metas = Lists.newArrayList( + List<ContentTableMeta<ObjectSchoolEstimateDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(ObjectSchoolEstimateDto.class, ObjectSchoolEstimateDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(ObjectSchoolEstimateDto.class, ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, false)); @@ -66,11 +66,12 @@ public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObj @Override protected ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> createTableModel( - ObserveContentTableUI<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> ui, + ObserveContentTableUI<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ?> ui, List<ContentTableMeta<ObjectSchoolEstimateDto>> contentTableMetas) { return new ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<ObjectSchoolEstimateDto> getChilds(FloatingObjectSchoolEstimateDto bean) { return bean.getObjectSchoolEstimate(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx index 1990c02..6a03201 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx @@ -21,12 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineSchoolEstimateDto, SchoolEstimateDto' - - - contentTitle='{n("observe.common.schoolEstimate")}' - saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' - saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> + superGenericType='SetSeineSchoolEstimateDto, SchoolEstimateDto, SchoolEstimateUI' + contentTitle='{n("observe.common.schoolEstimate")}' + saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' + saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> <style source="../../CommonTable.jcss"/> @@ -63,21 +61,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="schoolEstimate" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.SchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.SchoolEstimateDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- formulaire --> <Table id='editorPanel' fill='both' insets='1'> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java index ea130a4..a663687 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java @@ -23,6 +23,9 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -35,15 +38,16 @@ import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateHelper; import fr.ird.observe.services.service.data.seine.SchoolEstimateService; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -57,7 +61,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoolEstimateDto, SchoolEstimateDto> { +public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoolEstimateDto, SchoolEstimateDto, SchoolEstimateUI> { /** Logger */ private static final Log log = LogFactory.getLog(SchoolEstimateUIHandler.class); @@ -67,8 +71,32 @@ public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoo } @Override - public SchoolEstimateUI getUi() { - return (SchoolEstimateUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(SchoolEstimateUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getTotalWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getTotalWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override @@ -98,7 +126,7 @@ public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoo Set<String> listSpeciesIdUsed = listSpeciesUsed.stream().map(ReferentialReference::getId).collect(Collectors.toSet()); - availableEspeces = ReferentialReferences.filterNotContains(references,listSpeciesIdUsed); + availableEspeces = ReferentialReferences.filterNotContains(references, listSpeciesIdUsed); requestFocus = ui.getSpecies(); } else { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java index d0585a3..b09c152 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.SchoolEstimateDto; -import fr.ird.observe.services.dto.seine.SchoolEstimateHelper; -import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.SchoolEstimateDto; +import fr.ird.observe.services.dto.seine.SchoolEstimateHelper; +import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -52,12 +52,12 @@ public class SchoolEstimateUIModel extends ContentTableUIModel<SetSeineSchoolEst SetSeineSchoolEstimateDto.PROPERTY_SCHOOL_ESTIMATE, SetSeineSchoolEstimateDto.PROPERTY_COMMENT}, new String[]{ - SchoolEstimateDto.PROPERTY_SPECIES, - SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, - SchoolEstimateDto.PROPERTY_MEAN_WEIGHT} + SchoolEstimateDto.PROPERTY_SPECIES, + SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, + SchoolEstimateDto.PROPERTY_MEAN_WEIGHT} ); - List<ContentTableMeta<SchoolEstimateDto>> metas = Lists.newArrayList( + List<ContentTableMeta<SchoolEstimateDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, false), ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_MEAN_WEIGHT, false)); @@ -68,11 +68,12 @@ public class SchoolEstimateUIModel extends ContentTableUIModel<SetSeineSchoolEst @Override protected ContentTableModel<SetSeineSchoolEstimateDto, SchoolEstimateDto> createTableModel( - ObserveContentTableUI<SetSeineSchoolEstimateDto, SchoolEstimateDto> ui, + ObserveContentTableUI<SetSeineSchoolEstimateDto, SchoolEstimateDto, ?> ui, List<ContentTableMeta<SchoolEstimateDto>> contentTableMetas) { return new ContentTableModel<SetSeineSchoolEstimateDto, SchoolEstimateDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<SchoolEstimateDto> getChilds(SetSeineSchoolEstimateDto bean) { return bean.getSchoolEstimate(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx index 3b72dc1..08a308a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineTargetCatchDto, TargetCatchDto' - contentTitle='{n("observe.common.targetCatch")}' - saveNewEntryText='{n("observe.content.action.create.targetCatch")}' - saveNewEntryTip='{n("observe.content.action.create.targetCatch.tip")}'> + superGenericType='SetSeineTargetCatchDto, TargetCatchDto, TargetCatchUI' + contentTitle='{n("observe.common.targetCatch")}' + saveNewEntryText='{n("observe.content.action.create.targetCatch")}' + saveNewEntryTip='{n("observe.content.action.create.targetCatch.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,20 +64,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetCatch'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetCatch'> <!-- clef unique --> <field name="targetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetCatch'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetCatch'/> <Table id='editorPanel' fill='both' insets='1' onFocusGained='species.requestFocus()'> @@ -88,7 +83,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' constructorParams='this'/> + <BeanComboBox id='species' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' + constructorParams='this'/> </cell> </row> @@ -99,7 +95,8 @@ <JLabel id='weightCategoryLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='weightCategory' genericType='ReferentialReference<WeightCategoryDto>' _entityClass='WeightCategoryDto.class' constructorParams='this'/> + <BeanComboBox id='weightCategory' genericType='ReferentialReference<WeightCategoryDto>' + _entityClass='WeightCategoryDto.class' constructorParams='this'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java index 4a72373..d722d51 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java @@ -25,6 +25,9 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -40,9 +43,6 @@ import fr.ird.observe.services.dto.seine.TargetCatchDto; import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.services.service.data.seine.TargetCatchService; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +51,11 @@ import org.nuiton.decorator.Decorator; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -65,7 +69,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto> { +public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto, TargetCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetCatchUIHandler.class); @@ -75,8 +79,32 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCa } @Override - public TargetCatchUI getUi() { - return (TargetCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getCatchWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getTargetCatchCompositionEstimatedByObserver()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java index b9cb1d4..a3a6afc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java @@ -22,16 +22,16 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -54,15 +54,15 @@ public class TargetCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchD SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH }, new String[]{ - TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, - TargetCatchDto.PROPERTY_CATCH_WEIGHT, - TargetCatchDto.PROPERTY_WELL, - TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, - TargetCatchDto.PROPERTY_DISCARDED, - TargetCatchDto.PROPERTY_COMMENT} + TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, + TargetCatchDto.PROPERTY_CATCH_WEIGHT, + TargetCatchDto.PROPERTY_WELL, + TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, + TargetCatchDto.PROPERTY_DISCARDED, + TargetCatchDto.PROPERTY_COMMENT} ); - List<ContentTableMeta<TargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TargetCatchDto.class, WeightCategoryDto.PROPERTY_SPECIES, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WELL, false), @@ -75,10 +75,11 @@ public class TargetCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchD @Override protected ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto> ui, + ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto, ?> ui, List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<TargetCatchDto> getChilds(SetSeineTargetCatchDto bean) { return bean.getTargetCatch(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx index c462c04..a6de31a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineTargetCatchDto, TargetCatchDto' - contentTitle='{n("observe.common.targetDiscarded")}' - saveNewEntryText='{n("observe.content.action.create.targetDiscarded")}' - saveNewEntryTip='{n("observe.content.action.create.targetDiscarded.tip")}'> + superGenericType='SetSeineTargetCatchDto, TargetCatchDto, TargetDiscardCatchUI' + contentTitle='{n("observe.common.targetDiscarded")}' + saveNewEntryText='{n("observe.content.action.create.targetDiscarded")}' + saveNewEntryTip='{n("observe.content.action.create.targetDiscarded.tip")}'> <style source="../../CommonTable.jcss"/> @@ -66,20 +66,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetDiscarded'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetDiscarded'> <!-- clef unique --> <field name="targetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetDiscarded'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetDiscarded'/> <Table id='editorPanel' fill='both' insets='1'> @@ -89,7 +84,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -99,7 +95,8 @@ <JLabel id='weightCategoryLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='weightCategory' constructorParams='this' genericType='ReferentialReference<WeightCategoryDto>' _entityClass='WeightCategoryDto.class'/> + <BeanComboBox id='weightCategory' constructorParams='this' _entityClass='WeightCategoryDto.class' + genericType='ReferentialReference<WeightCategoryDto>'/> </cell> </row> @@ -109,7 +106,8 @@ <JLabel id='reasonForDiscardLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='reasonForDiscard' constructorParams='this' genericType='ReferentialReference<ReasonForDiscardDto>' _entityClass='ReasonForDiscardDto.class'/> + <BeanComboBox id='reasonForDiscard' constructorParams='this' _entityClass='ReasonForDiscardDto.class' + genericType='ReferentialReference<ReasonForDiscardDto>'/> </cell> </row> @@ -140,8 +138,7 @@ <!-- comment --> <row> <cell columns='2' weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> <JTextArea id='comment2' onKeyReleased='getTableEditBean().setComment(((JTextArea) event.getSource()).getText())'/> </JScrollPane> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java index 830f600..d9bceb4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java @@ -52,7 +52,11 @@ import org.nuiton.decorator.Decorator; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -68,7 +72,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto> { +public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto, TargetDiscardCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetDiscardCatchUIHandler.class); @@ -78,8 +82,32 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineT } @Override - public TargetDiscardCatchUI getUi() { - return (TargetDiscardCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetDiscardCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getCatchWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getTargetDiscardCatchCompositionEstimatedByObserver()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java index bd83a08..ac6b6c0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java @@ -22,16 +22,16 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -53,14 +53,14 @@ public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineTarge SetSeineTargetCatchDto.PROPERTY_DISCARDED, SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH}, new String[]{ - TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, - TargetCatchDto.PROPERTY_CATCH_WEIGHT, - TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, - TargetCatchDto.PROPERTY_DISCARDED, - TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, - TargetCatchDto.PROPERTY_COMMENT}); + TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, + TargetCatchDto.PROPERTY_CATCH_WEIGHT, + TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, + TargetCatchDto.PROPERTY_DISCARDED, + TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, + TargetCatchDto.PROPERTY_COMMENT}); - List<ContentTableMeta<TargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TargetCatchDto.class, WeightCategoryDto.PROPERTY_SPECIES, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, true), @@ -74,11 +74,12 @@ public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineTarge @Override protected ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto> ui, + ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto, ?> ui, List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<TargetCatchDto> getChilds(SetSeineTargetCatchDto bean) { return bean.getTargetCatch(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx index 69ab37d..49e14a1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx @@ -20,10 +20,9 @@ #L% --> -<TargetSampleUI - contentTitle='{n("observe.common.targetSampleCapture")}' - saveNewEntryText='{n("observe.content.action.create.targetSampleCapture")}' - saveNewEntryTip='{n("observe.content.action.create.targetSampleCapture.tip")}'> +<TargetSampleUI contentTitle='{n("observe.common.targetSampleCapture")}' + saveNewEntryText='{n("observe.content.action.create.targetSampleCapture")}' + saveNewEntryTip='{n("observe.content.action.create.targetSampleCapture.tip")}'> <import> static org.nuiton.i18n.I18n.n diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx index 36f5716..a80c9de 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx @@ -20,10 +20,9 @@ #L% --> -<TargetSampleUI - contentTitle='{n("observe.common.targetSample")}' - saveNewEntryText='{n("observe.content.action.create.targetSample")}' - saveNewEntryTip='{n("observe.content.action.create.targetSample.tip")}'> +<TargetSampleUI contentTitle='{n("observe.common.targetSample")}' + saveNewEntryText='{n("observe.content.action.create.targetSample")}' + saveNewEntryTip='{n("observe.content.action.create.targetSample.tip")}'> <import> static org.nuiton.i18n.I18n.n diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx index 74667d6..717e3d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx @@ -21,8 +21,7 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TargetSampleDto, TargetLengthDto' - abstract="true"> + superGenericType='TargetSampleDto, TargetLengthDto, TargetSampleUI' abstract="true"> <style source="AbstractSampleUI.jcss"/> @@ -61,22 +60,16 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.TargetSampleDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.TargetSampleDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="targetLength" component="editorPanel"/> <field name='comment'/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetLengthDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update' - parentValidator='{validator}'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetLengthDto' + errorTableModel='{getErrorTableModel()}' context='ui-update' parentValidator='{validator}'/> <ButtonGroup id='acquisitionModeGroup' onStateChanged='getHandler().updateModeSaisie((ModeSaisieEchantillonEnum) acquisitionModeGroup.getSelectedValue())'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java index 818bbd3..20ff998 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java @@ -26,7 +26,6 @@ import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -46,7 +45,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; @@ -60,7 +63,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleDto, TargetLengthDto> { +public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleDto, TargetLengthDto, TargetSampleUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetSampleUIHandler.class); @@ -73,14 +76,38 @@ public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleD */ protected final boolean discarded; - public TargetSampleUIHandler(ContentTableUI<TargetSampleDto, TargetLengthDto> ui, boolean discarded) { + public TargetSampleUIHandler(TargetSampleUI ui, boolean discarded) { super(ui); this.discarded = discarded; } @Override - public TargetSampleUI getUi() { - return (TargetSampleUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetSampleUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getAcquisitionModeEffectif())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getAcquisitionModeEffectif().isEnabled()) { + return ui.getAcquisitionModeEffectif(); + } + return ui.getSizeMeasureType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java index 8a3ecbb..8e81801 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java @@ -47,7 +47,7 @@ public class TargetSampleUIModel extends ContentTableUIModel<TargetSampleDto, Ta private static final long serialVersionUID = 1L; - public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE="defaultSizeMeasureType"; + public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE = "defaultSizeMeasureType"; private ReferentialReference<SizeMeasureTypeDto> defaultSizeMeasureType; @@ -85,7 +85,7 @@ public class TargetSampleUIModel extends ContentTableUIModel<TargetSampleDto, Ta @Override protected ContentTableModel<TargetSampleDto, TargetLengthDto> createTableModel( - ObserveContentTableUI<TargetSampleDto, TargetLengthDto> ui, + ObserveContentTableUI<TargetSampleDto, TargetLengthDto, ?> ui, List<ContentTableMeta<TargetLengthDto>> contentTableMetas) { return new ContentTableModel<TargetSampleDto, TargetLengthDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm