Author: tchemit Date: 2013-10-25 18:43:35 +0200 (Fri, 25 Oct 2013) New Revision: 1316 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1316 Log: fixes #3337: [ERGO] am?\195?\169liorer saisie lat et long Added: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPositionTest.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/CoordinateEditorType.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinate.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinate.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorModel.java trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorTest.java trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateTest.java trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorTest.java Removed: trunk/src/main/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CoordinateEditorType.java Modified: trunk/src/conception/specifications/Concepts-metiers/Campagne.txt trunk/src/conception/specifications/Concepts-metiers/Capture.txt trunk/src/conception/specifications/Concepts-metiers/OperationPeche.txt trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt trunk/src/conception/specifications/Concepts-metiers/Trait.txt trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt trunk/src/conception/specifications/Fonctionnalites-transversales/ConfigurationApplication.txt trunk/src/conception/specifications/Fonctionnalites-transversales/ConfigurationCategorisation.txt trunk/src/conception/specifications/Fonctionnalites-transversales/ContexteSaisie.txt trunk/src/conception/specifications/Fonctionnalites-transversales/ControleSaisie.txt trunk/src/conception/specifications/Fonctionnalites-transversales/GestionMisesAJour.txt trunk/src/conception/specifications/Fonctionnalites-transversales/GestionnaireBase.txt trunk/src/conception/specifications/Fonctionnalites-transversales/OrigineDonneesAffichees.txt trunk/src/conception/specifications/Fonctionnalites-transversales/RaccourcisClavier.txt trunk/src/conception/specifications/Fonctionnalites-transversales/SaisieMultiOrdinateurs.txt trunk/src/conception/specifications/Presentation/PresentationGenerale.txt trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPosition.java trunk/tutti-service/src/main/resources/validators.xml trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-warning-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Property changes on: trunk/src/conception/specifications/Concepts-metiers/Campagne.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/Capture.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/OperationPeche.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/ProtocoleSaisie.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/SerieCampagne.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/Trait.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Concepts-metiers/VracHorsVrac.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCampagnes.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionCaptures.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionProtocoles.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-metiers/GestionRef?\195?\169rentielsTemporaires.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/ConfigurationApplication.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/ConfigurationCategorisation.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/ContexteSaisie.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/ControleSaisie.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/GestionMisesAJour.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/GestionnaireBase.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/OrigineDonneesAffichees.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/RaccourcisClavier.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Fonctionnalites-transversales/SaisieMultiOrdinateurs.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/src/conception/specifications/Presentation/PresentationGenerale.txt ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPosition.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPosition.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPosition.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -193,6 +193,17 @@ return result; } + public Integer getSignedDegre() { + Integer result = null; + if (degre!=null) { + result =degre; + if (isSign()) { + result *=-1; + } + } + return result; + } + public Integer getDegre() { return degre; } @@ -255,7 +266,7 @@ @Override public String toString() { - return super.toString() + "<" + (sign ? "-" : "") + degre + "° " + minute + "' " + seconde + "''>"; + return getClass().getSimpleName()+"@"+System.identityHashCode(this) + "<" + (sign ? "-" : "") + degre + "° " + minute + "' " + seconde + "''>"; } @Override Added: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPositionTest.java =================================================================== --- trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPositionTest.java (rev 0) +++ trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPositionTest.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,85 @@ +package fr.ifremer.tutti.persistence.spatial; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created on 10/25/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class SexagecimalPositionTest { + + @Test + public void testValueOf() throws Exception { + + { + SexagecimalPosition position = + SexagecimalPosition.valueOf(false, 42, 0f); + Float actual = position.toDecimal(); + Float expected = 42.0f; + Assert.assertEquals(expected, actual, 0.01); + } + + { + SexagecimalPosition position = + SexagecimalPosition.valueOf(false, 42, 42.42f); + Float actual = position.toDecimal(); + Float expected = 42.70f; + Assert.assertEquals(expected, actual, 0.01); + } + } + + @Test + public void testToDecimal() throws Exception { + + { + SexagecimalPosition actual = SexagecimalPosition.valueOf(42f); + Float expectedDegree = 42.0f; + Float expectedMinute= null; + Assert.assertEquals(expectedDegree, actual.getDegre(), 0.01); + Assert.assertEquals(expectedMinute, actual.getMinuteDecimale()); + } + + { + SexagecimalPosition actual = SexagecimalPosition.valueOf(42.7f); + Float expectedDegree = 42.f; + Float expectedMinute= 42f; + Assert.assertEquals(expectedDegree, actual.getDegre(), 0.01); + Assert.assertEquals(expectedMinute, actual.getMinuteDecimale(), 0.001); + } + + { + SexagecimalPosition actual = SexagecimalPosition.valueOf(null); + actual.setDegre(12); + actual.setMinuteDecimale(12f); + + Assert.assertEquals(12.20f, actual.toDecimal(), 0.001); + } + } +} Property changes on: trunk/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/spatial/SexagecimalPositionTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-service/src/main/resources/validators.xml =================================================================== --- trunk/tutti-service/src/main/resources/validators.xml 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-service/src/main/resources/validators.xml 2013-10-25 16:43:35 UTC (rev 1316) @@ -45,5 +45,6 @@ <!-- les validateurs fournis par nuiton-validator --> <validator name="collectionUniqueKey" class="org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator"/> <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> + <validator name="skipablefieldexpression" class="org.nuiton.validator.xwork2.field.NuitonFieldExpressionValidator"/> </validators> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -29,7 +29,7 @@ import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.service.config.TuttiServiceConfig; import fr.ifremer.tutti.service.config.TuttiServiceConfigOption; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import fr.ifremer.tutti.ui.swing.spatial.CoordinateEditorType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.logging.Log; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import fr.ifremer.tutti.ui.swing.spatial.CoordinateEditorType; import org.nuiton.config.ConfigOptionDef; import javax.swing.KeyStroke; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -32,7 +32,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorResult; @@ -83,9 +82,7 @@ && model.getFishingOperation() != null && !propertiesToIgnore.contains(evt.getPropertyName())) { - if (model.getCoordinateEditorType() != CoordinateEditorType.DD) { - model.convertGearShootingCoordinatesDMSToDD(); - } + model.convertGearShootingCoordinatesToDD(); FishingOperation operation = model.toBean(); NuitonValidatorResult validationResult = validationService.validateCruiseOperation(operation); @@ -93,7 +90,7 @@ ValidateCruiseUIModel uiModel = getModel(); uiModel.getValidator().put(uiModel.getSelectedFishingOperation(), validationResult); - getHandler().updateCurrentOperatonNode(validationResult); + getHandler().updateCurrentOperationNode(validationResult); } } @@ -136,7 +133,7 @@ ValidateCruiseUIModel uiModel = getModel(); uiModel.getValidator().put(uiModel.getSelectedFishingOperation(), validationResult); - getHandler().updateCurrentOperatonNode(validationResult); + getHandler().updateCurrentOperationNode(validationResult); } } }; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -214,7 +214,7 @@ } } - protected void updateCurrentOperatonNode(NuitonValidatorResult validationResult) { + protected void updateCurrentOperationNode(NuitonValidatorResult validationResult) { JTree navigation = ui.getNavigation(); TreePath selectionPath = navigation.getSelectionPath(); Preconditions.checkArgument(selectionPath.getPathCount() > 1); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -135,30 +135,47 @@ */ protected boolean internalAction; + /** + * To recompute distance when coordinate change. + * + * @since 2.4 + */ private final PropertyChangeListener coordinatePropertiesListener = new PropertyChangeListener() { private List<String> properties = Lists.newArrayList( EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_MINUTE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_MINUTE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_MINUTE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_MINUTE ); @Override @@ -472,8 +489,9 @@ editFishingOperationUIModel.setStrata(null); editFishingOperationUIModel.setSubStrata(null); editFishingOperationUIModel.setLocation(null); - editFishingOperationUIModel.convertGearShootingCoordinatesDDToDMS(); + editFishingOperationUIModel.convertGearShootingCoordinatesFromDD(); + if (strata != null) { ui.getStrataComboBox().setSelectedItem(strata); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-10-25 16:43:35 UTC (rev 1316) @@ -49,6 +49,16 @@ _selectOnFocus: {true}; } +DmsCoordinateEditor { + bean: {model}; + showReset: true; +} + +DmdCoordinateEditor { + bean: {model}; + showReset: true; +} + SimpleTimeEditor { bean: {model}; _selectOnFocus: {true}; @@ -58,6 +68,31 @@ _selectOnFocus: {true}; } +#quadrant4 { + text:"observe.common.quadrant4"; + buttonGroup:"quadrantBG"; + selected:{handler.isQuadrantSelected(model.getQuadrant(), 4)}; +} + +#quadrant1 { + text:"observe.common.quadrant1"; + buttonGroup:"quadrantBG"; + selected:{handler.isQuadrantSelected(model.getQuadrant(), 1)}; +} + +#quadrant3 { + text:"observe.common.quadrant3"; + buttonGroup:"quadrantBG"; + selected:{handler.isQuadrantSelected(model.getQuadrant(), 3)}; +} + +#quadrant2 { + text:"observe.common.quadrant2"; + buttonGroup:"quadrantBG"; + selected:{handler.isQuadrantSelected(model.getQuadrant(), 2)}; +} + + #editFishingOperationTopPanel { _help: {"tutti.editFishingOperation.help"}; } @@ -312,42 +347,53 @@ numberPattern: {INT_2_DIGITS_PATTERN}; } -#gearShootingStartLongitudePanel { - layout:{gearShootingStartLongitudeLayout}; - toolTipText: "tutti.editFishingOperation.field.gearShootingStartLongitude.tip"; - _help: {"tutti.editFishingOperation.field.gearShootingStartLongitude.help"}; -} +/****************************************************************************** + * Start Latitude + *****************************************************************************/ -#gearShootingStartLongitudeDMSDegreeField { - property: gearShootingStartLongitudeDegree; - model: {model.getGearShootingStartLongitudeDegree()}; - numberPattern: {SIGNED_INT_3_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitudeDegree")}; +#gearShootingStartLatitudePanel { + layout:{gearShootingStartLatitudeLayout}; + toolTipText: "tutti.editFishingOperation.field.gearShootingStartLatitude.tip"; + _help: {"tutti.editFishingOperation.field.gearShootingStartLatitude.help"}; } -#gearShootingStartLongitudeDMSMinuteField { - property: gearShootingStartLongitudeMinute; - model: {model.getGearShootingStartLongitudeMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitudeMinute")}; +#gearShootingStartLatitudeDDField { + property: gearShootingStartLatitude; + model: {model.getGearShootingStartLatitude()}; + showReset: false; + useFloat: true; + useSign: true; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitude")}; } -#gearShootingStartLongitudeDMSSecondField { - property: gearShootingStartLongitudeSecond; - model: {model.getGearShootingStartLongitudeSecond()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitudeSecond")}; +#gearShootingStartLatitudeDMSField { + propertySign: gearShootingStartLatitudeDmsSign; + propertyDegree: gearShootingStartLatitudeDmsDegree; + propertyMinute: gearShootingStartLatitudeDmsMinute; + propertySecond: gearShootingStartLatitudeDmsSecond; + value: {model.getGearShootingStartLatitudeDms()}; + showResetTip: "tutti.coordinate.action.reset.latitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitude")}; } -#gearShootingStartLongitudeDMDDegreeField { - property: gearShootingStartLongitudeDegree; - model: {model.getGearShootingStartLongitudeDegree()}; - numberPattern: {SIGNED_INT_3_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitudeDegree")}; +#gearShootingStartLatitudeDMDField { + propertySign: gearShootingStartLatitudeDmdSign; + propertyDegree: gearShootingStartLatitudeDmdDegree; + propertyMinute: gearShootingStartLatitudeDmdMinute; + propertyDecimal : gearShootingStartLatitudeDmdDecimal; + value: {model.getGearShootingStartLatitudeDmd()}; + showResetTip: "tutti.coordinate.action.reset.latitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitude")}; } -#gearShootingStartLongitudeDMDMinuteField { - property: gearShootingStartLongitudeDecimalMinute; - model: {model.getGearShootingStartLongitudeDecimalMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitudeMinute")}; +/****************************************************************************** + * Start Longitude + *****************************************************************************/ + +#gearShootingStartLongitudePanel { + layout:{gearShootingStartLongitudeLayout}; + toolTipText: "tutti.editFishingOperation.field.gearShootingStartLongitude.tip"; + _help: {"tutti.editFishingOperation.field.gearShootingStartLongitude.help"}; } #gearShootingStartLongitudeDDField { @@ -359,101 +405,77 @@ _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitude")}; } -#gearShootingStartLatitudePanel { - layout:{gearShootingStartLatitudeLayout}; - toolTipText: "tutti.editFishingOperation.field.gearShootingStartLatitude.tip"; - _help: {"tutti.editFishingOperation.field.gearShootingStartLatitude.help"}; +#gearShootingStartLongitudeDMSField { + propertySign: gearShootingStartLongitudeDmsSign; + propertyDegree: gearShootingStartLongitudeDmsDegree; + propertyMinute: gearShootingStartLongitudeDmsMinute; + propertySecond: gearShootingStartLongitudeDmsSecond; + longitudeEditor: true; + value: {model.getGearShootingStartLongitudeDms()}; + showResetTip: "tutti.coordinate.action.reset.longitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitude")}; } -#gearShootingStartLatitudeDMSDegreeField { - property: gearShootingStartLatitudeDegree; - model: {model.getGearShootingStartLatitudeDegree()}; - numberPattern: {SIGNED_INT_2_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitudeDegree")}; +#gearShootingStartLongitudeDMDField { + propertySign: gearShootingStartLongitudeDmdSign; + propertyDegree: gearShootingStartLongitudeDmdDegree; + propertyMinute: gearShootingStartLongitudeDmdMinute; + propertyDecimal: gearShootingStartLongitudeDmdDecimal; + longitudeEditor: true; + value: {model.getGearShootingStartLongitudeDmd()}; + showResetTip: "tutti.coordinate.action.reset.longitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLongitude")}; } -#gearShootingStartLatitudeDMSMinuteField { - property: gearShootingStartLatitudeMinute; - model: {model.getGearShootingStartLatitudeMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitudeMinute")}; -} +/****************************************************************************** + * End Latitude + *****************************************************************************/ -#gearShootingStartLatitudeDMSSecondField { - property: gearShootingStartLatitudeSecond; - model: {model.getGearShootingStartLatitudeSecond()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitudeSecond")}; +#gearShootingEndLatitudePanel { + layout:{gearShootingEndLatitudeLayout}; + toolTipText: "tutti.editFishingOperation.field.gearShootingEndLatitude.tip"; + _help: {"tutti.editFishingOperation.field.gearShootingEndLatitude.help"}; } -#gearShootingStartLatitudeDMDDegreeField { - property: gearShootingStartLatitudeDegree; - model: {model.getGearShootingStartLatitudeDegree()}; - numberPattern: {SIGNED_INT_2_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitudeDegree")}; -} - -#gearShootingStartLatitudeDMDMinuteField { - property: gearShootingStartLatitudeDecimalMinute; - model: {model.getGearShootingStartLatitudeDecimalMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitudeMinute")}; -} - -#gearShootingStartLatitudeDDField { - property: gearShootingStartLatitude; - model: {model.getGearShootingStartLatitude()}; +#gearShootingEndLatitudeDDField { + property: gearShootingEndLatitude; + model: {model.getGearShootingEndLatitude()}; showReset: false; useFloat: true; useSign: true; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartLatitude")}; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitude")}; } -#gearShootingStartDateField { - date: {model.getGearShootingStartDate()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartDate")}; +#gearShootingEndLatitudeDMSField { + propertySign: gearShootingEndLatitudeDmsSign; + propertyDegree: gearShootingEndLatitudeDmsDegree; + propertyMinute: gearShootingEndLatitudeDmsMinute; + propertySecond: gearShootingEndLatitudeDmsSecond; + value: {model.getGearShootingEndLatitudeDms()}; + showResetTip: "tutti.coordinate.action.reset.latitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitude")}; } -#gearShootingStartTimeField { - property: gearShootingStartTime; - date: {model.getGearShootingStartDate()}; +#gearShootingEndLatitudeDMDField { + propertySign: gearShootingEndLatitudeDmdSign; + propertyDegree: gearShootingEndLatitudeDmdDegree; + propertyMinute: gearShootingEndLatitudeDmdMinute; + propertyDecimal: gearShootingEndLatitudeDmdDecimal; + value: {model.getGearShootingEndLatitudeDmd()}; + showResetTip: "tutti.coordinate.action.reset.latitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitude")}; } +/****************************************************************************** + * End Longitude + *****************************************************************************/ + #gearShootingEndLongitudePanel { layout:{gearShootingEndLongitudeLayout}; toolTipText: "tutti.editFishingOperation.field.gearShootingEndLongitude.tip"; _help: {"tutti.editFishingOperation.field.gearShootingEndLongitude.help"}; } -#gearShootingEndLongitudeDMSDegreeField { - property: gearShootingEndLongitudeDegree; - model: {model.getGearShootingEndLongitudeDegree()}; - numberPattern: {SIGNED_INT_3_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitudeDegree")}; -} - -#gearShootingEndLongitudeDMSMinuteField { - property: gearShootingEndLongitudeMinute; - model: {model.getGearShootingEndLongitudeMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitudeMinute")}; -} - -#gearShootingEndLongitudeDMSSecondField { - property: gearShootingEndLongitudeSecond; - model: {model.getGearShootingEndLongitudeSecond()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitudeSecond")}; -} - -#gearShootingEndLongitudeDMDDegreeField { - property: gearShootingEndLongitudeDegree; - model: {model.getGearShootingEndLongitudeDegree()}; - numberPattern: {SIGNED_INT_3_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitudeDegree")}; -} - -#gearShootingEndLongitudeDMDMinuteField { - property: gearShootingEndLongitudeDecimalMinute; - model: {model.getGearShootingEndLongitudeDecimalMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitudeMinute")}; -} - #gearShootingEndLongitudeDDField { property: gearShootingEndLongitude; model: {model.getGearShootingEndLongitude()}; @@ -463,53 +485,42 @@ _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitude")}; } -#gearShootingEndLatitudePanel { - layout:{gearShootingEndLatitudeLayout}; - toolTipText: "tutti.editFishingOperation.field.gearShootingEndLatitude.tip"; - _help: {"tutti.editFishingOperation.field.gearShootingEndLatitude.help"}; +#gearShootingEndLongitudeDMSField { + propertySign: gearShootingEndLongitudeDmsSign; + propertyDegree: gearShootingEndLongitudeDmsDegree; + propertyMinute: gearShootingEndLongitudeDmsMinute; + propertySecond: gearShootingEndLongitudeDmsSecond; + longitudeEditor: true; + value: {model.getGearShootingEndLongitudeDms()}; + showResetTip: "tutti.coordinate.action.reset.longitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitude")}; } -#gearShootingEndLatitudeDMSDegreeField { - property: gearShootingEndLatitudeDegree; - model: {model.getGearShootingEndLatitudeDegree()}; - numberPattern: {SIGNED_INT_2_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitudeDegree")}; +#gearShootingEndLongitudeDMDField { + propertySign: gearShootingEndLongitudeDmdSign; + propertyDegree: gearShootingEndLongitudeDmdDegree; + propertyMinute: gearShootingEndLongitudeDmdMinute; + propertyDecimal: gearShootingEndLongitudeDmdDecimal; + longitudeEditor: true; + value: {model.getGearShootingEndLongitudeDmd()}; + showResetTip: "tutti.coordinate.action.reset.longitude.tip"; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLongitude")}; } -#gearShootingEndLatitudeDMSMinuteField { - property: gearShootingEndLatitudeMinute; - model: {model.getGearShootingEndLatitudeMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitudeMinute")}; -} +/****************************************************************************** + * Start - End date + *****************************************************************************/ -#gearShootingEndLatitudeDMSSecondField { - property: gearShootingEndLatitudeSecond; - model: {model.getGearShootingEndLatitudeSecond()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitudeSecond")}; +#gearShootingStartDateField { + date: {model.getGearShootingStartDate()}; + _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingStartDate")}; } -#gearShootingEndLatitudeDMDDegreeField { - property: gearShootingEndLatitudeDegree; - model: {model.getGearShootingEndLatitudeDegree()}; - numberPattern: {SIGNED_INT_2_DIGITS_PATTERN}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitudeDegree")}; +#gearShootingStartTimeField { + property: gearShootingStartTime; + date: {model.getGearShootingStartDate()}; } -#gearShootingEndLatitudeDMDMinuteField { - property: gearShootingEndLatitudeDecimalMinute; - model: {model.getGearShootingEndLatitudeDecimalMinute()}; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitudeMinute")}; -} - -#gearShootingEndLatitudeDDField { - property: gearShootingEndLatitude; - model: {model.getGearShootingEndLatitude()}; - showReset: false; - useFloat: true; - useSign: true; - _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndLatitude")}; -} - #gearShootingEndDateField { date: {model.getGearShootingEndDate()}; _validatorLabel: {_("tutti.editFishingOperation.field.gearShootingEndDate")}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -34,8 +34,10 @@ fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUI fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.spatial.CoordinateEditorType + fr.ifremer.tutti.ui.swing.spatial.DmsCoordinateEditor + fr.ifremer.tutti.ui.swing.spatial.DmdCoordinateEditor fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment - fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor jaxx.runtime.swing.editor.bean.BeanFilterableComboBox @@ -47,6 +49,7 @@ org.jdesktop.swingx.JXTitledPanel static org.nuiton.i18n.I18n._ + java.awt.Color </import> <script><![CDATA[ @@ -79,54 +82,67 @@ <field name='trawlDistance' component='trawlDistanceField'/> <field name='gear' component='gearComboBox'/> <field name='multirigAggregation' component='multirigAggregationField'/> + <field name='gearShootingStartLatitude' component='gearShootingStartLatitudeDDField'/> - <field name='gearShootingStartLatitudeDegree' - component='gearShootingStartLatitudeDMSDegreeField'/> - <field name='gearShootingStartLatitudeMinute' - component='gearShootingStartLatitudeDMSMinuteField'/> - <field name='gearShootingStartLatitudeSecond' - component='gearShootingStartLatitudeDMSSecondField'/> - <field name='gearShootingStartLatitudeDecimalDegree' - component='gearShootingStartLatitudeDMDDegreeField'/> - <field name='gearShootingStartLatitudeDecimalMinute' - component='gearShootingStartLatitudeDMDMinuteField'/> + <field name='gearShootingStartLatitudeDmsDegree' + component='gearShootingStartLatitudeDMSField'/> + <field name='gearShootingStartLatitudeDmsMinute' + component='gearShootingStartLatitudeDMSField'/> + <field name='gearShootingStartLatitudeDmsSecond' + component='gearShootingStartLatitudeDMSField'/> + <field name='gearShootingStartLatitudeDmdDegree' + component='gearShootingStartLatitudeDMDField'/> + <field name='gearShootingStartLatitudeDmdMinute' + component='gearShootingStartLatitudeDMDField'/> + <field name='gearShootingStartLatitudeDmdDecimal' + component='gearShootingStartLatitudeDMDField'/> + <field name='gearShootingStartLongitude' component='gearShootingStartLongitudeDDField'/> - <field name='gearShootingStartLongitudeDegree' - component='gearShootingStartLongitudeDMSDegreeField'/> - <field name='gearShootingStartLongitudeMinute' - component='gearShootingStartLongitudeDMSMinuteField'/> - <field name='gearShootingStartLongitudeSecond' - component='gearShootingStartLongitudeDMSSecondField'/> - <field name='gearShootingStartLongitudeDecimalDegree' - component='gearShootingStartLongitudeDMDDegreeField'/> - <field name='gearShootingStartLongitudeDecimalMinute' - component='gearShootingStartLongitudeDMDMinuteField'/> + <field name='gearShootingStartLongitudeDmsDegree' + component='gearShootingStartLongitudeDMSField'/> + <field name='gearShootingStartLongitudeDmsMinute' + component='gearShootingStartLongitudeDMSField'/> + <field name='gearShootingStartLongitudeDmsSecond' + component='gearShootingStartLongitudeDMSField'/> + <field name='gearShootingStartLongitudeDmdDegree' + component='gearShootingStartLongitudeDMDField'/> + <field name='gearShootingStartLongitudeDmdMinute' + component='gearShootingStartLongitudeDMDField'/> + <field name='gearShootingStartLongitudeDmdDecimal' + component='gearShootingStartLongitudeDMDField'/> + <field name='gearShootingEndLatitude' component='gearShootingEndLatitudeDDField'/> - <field name='gearShootingEndLatitudeDegree' - component='gearShootingEndLatitudeDMSDegreeField'/> - <field name='gearShootingEndLatitudeMinute' - component='gearShootingEndLatitudeDMSMinuteField'/> - <field name='gearShootingEndLatitudeSecond' - component='gearShootingEndLatitudeDMSSecondField'/> - <field name='gearShootingEndLatitudeDecimalDegree' - component='gearShootingEndLatitudeDMDDegreeField'/> - <field name='gearShootingEndLatitudeDecimalMinute' - component='gearShootingEndLatitudeDMDMinuteField'/> + <field name='gearShootingEndLatitudeDmsDegree' + component='gearShootingEndLatitudeDMSField'/> + <field name='gearShootingEndLatitudeDmsMinute' + component='gearShootingEndLatitudeDMSField'/> + <field name='gearShootingEndLatitudeDmsSecond' + component='gearShootingEndLatitudeDMSField'/> + <field name='gearShootingEndLatitudeDmdDegree' + component='gearShootingEndLatitudeDMDField'/> + <field name='gearShootingEndLatitudeDmdMinute' + component='gearShootingEndLatitudeDMDField'/> + <field name='gearShootingEndLatitudeDmdDecimal' + component='gearShootingEndLatitudeDMDField'/> + <field name='gearShootingEndLongitude' component='gearShootingEndLongitudeDDField'/> - <field name='gearShootingEndLongitudeDegree' - component='gearShootingEndLongitudeDMSDegreeField'/> - <field name='gearShootingEndLongitudeMinute' - component='gearShootingEndLongitudeDMSMinuteField'/> - <field name='gearShootingEndLongitudeSecond' - component='gearShootingEndLongitudeDMSSecondField'/> - <field name='gearShootingEndLongitudeDecimalDegree' - component='gearShootingEndLongitudeDMDDegreeField'/> - <field name='gearShootingEndLongitudeDecimalMinute' - component='gearShootingEndLongitudeDMDMinuteField'/> + <field name='gearShootingEndLongitudeDmsDegree' + component='gearShootingEndLongitudeDMSField'/> + <field name='gearShootingEndLongitudeDmsMinute' + component='gearShootingEndLongitudeDMSField'/> + <field name='gearShootingEndLongitudeDmsSecond' + component='gearShootingEndLongitudeDMSField'/> + <field name='gearShootingEndLongitudeDmdDegree' + component='gearShootingEndLongitudeDMDField'/> + <field name='gearShootingEndLongitudeDmdMinute' + component='gearShootingEndLongitudeDMDField'/> + <field name='gearShootingEndLongitudeDmdDecimal' + component='gearShootingEndLongitudeDMDField'/> + <field name='fishingOperationValid' component='fishingOperationValidPanel'/> <field name='strata' component='strataComboBox'/> @@ -224,6 +240,9 @@ <cell> <JPanel/> </cell> + <!--cell> + <JPanel/> + </cell--> <cell> <JLabel id='gearLatitudeLabel'/> </cell> @@ -242,36 +261,30 @@ <cell> <JLabel id='gearShootingStartLabel'/> </cell> + <!--cell rows="2" fill="both"> + + <JPanel id='quadrant' + layout="{new GridLayout(2,2,0,0)}" + background='{Color.GREEN}'> + <JToggleButton id='quadrant4' + onActionPerformed='handler.setQuadrantValue(4)'/> + <JToggleButton id='quadrant1' + onActionPerformed='handler.setQuadrantValue(1)'/> + <JToggleButton id='quadrant3' + onActionPerformed='handler.setQuadrantValue(3)'/> + <JToggleButton id='quadrant2' + onActionPerformed='handler.setQuadrantValue(2)'/> + </JPanel> + </cell--> <cell weightx='1'> <JPanel id='gearShootingStartLatitudePanel'> <NumberEditor id='gearShootingStartLatitudeDDField' constraints='"DD"' constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingStartLatitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingStartLatitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> - - <NumberEditor - id='gearShootingStartLatitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingStartLatitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingStartLatitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> - </JPanel> + <DmsCoordinateEditor constraints='"DMS"' + id='gearShootingStartLatitudeDMSField'/> + <DmdCoordinateEditor constraints='"DMD"' + id='gearShootingStartLatitudeDMDField'/> </JPanel> </cell> <cell weightx='1'> @@ -279,31 +292,10 @@ <NumberEditor id='gearShootingStartLongitudeDDField' constraints='"DD"' constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingStartLongitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingStartLongitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> - - <NumberEditor - id='gearShootingStartLongitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingStartLongitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingStartLongitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> - </JPanel> + <DmsCoordinateEditor constraints='"DMS"' + id='gearShootingStartLongitudeDMSField'/> + <DmdCoordinateEditor constraints='"DMD"' + id='gearShootingStartLongitudeDMDField'/> </JPanel> </cell> <cell> @@ -319,36 +311,18 @@ <cell> <JLabel id='gearShootingEndLabel'/> </cell> + <!--cell> + <JPanel/> + </cell--> <cell weightx='1'> <JPanel id='gearShootingEndLatitudePanel'> <NumberEditor id='gearShootingEndLatitudeDDField' constraints='"DD"' constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingEndLatitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingEndLatitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> - - <NumberEditor - id='gearShootingEndLatitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingEndLatitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingEndLatitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> - </JPanel> + <DmsCoordinateEditor constraints='"DMS"' + id='gearShootingEndLatitudeDMSField'/> + <DmdCoordinateEditor constraints='"DMD"' + id='gearShootingEndLatitudeDMDField'/> </JPanel> </cell> <cell weightx='1'> @@ -356,31 +330,10 @@ <NumberEditor id='gearShootingEndLongitudeDDField' constraints='"DD"' constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingEndLongitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingEndLongitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> - - <NumberEditor - id='gearShootingEndLongitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingEndLongitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> - - <NumberEditor - id='gearShootingEndLongitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> - </JPanel> + <DmsCoordinateEditor constraints='"DMS"' + id='gearShootingEndLongitudeDMSField'/> + <DmdCoordinateEditor constraints='"DMD"' + id='gearShootingEndLongitudeDMDField'/> </JPanel> </cell> <cell> @@ -398,6 +351,9 @@ <cell> <JLabel/> </cell> + <!--cell> + <JPanel/> + </cell--> <cell> <JCheckBox id='fishingOperationRectiligneCheckBox' onItemStateChanged='handler.setBoolean(event, "fishingOperationRectiligne")'/> @@ -484,12 +440,15 @@ <JLabel id='filterSecondaryVesselLabel'/> <JRadioButton id='filterSecondaryVesselAllButton' onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.ALL)'/> - <JRadioButton id='filterSecondaryVesselScientificButton' - onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.SCIENTIFIC)'/> - <JRadioButton id='filterSecondaryVesselFishingButton' - onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.FISHING)'/> - <JRadioButton id='filterSecondaryVesselOnlyCruiseButton' - onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.ONLY_CRUISE)'/> + <JRadioButton + id='filterSecondaryVesselScientificButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.SCIENTIFIC)'/> + <JRadioButton + id='filterSecondaryVesselFishingButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.FISHING)'/> + <JRadioButton + id='filterSecondaryVesselOnlyCruiseButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.ONLY_CRUISE)'/> </JPanel> </cell> </row> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -47,7 +47,7 @@ import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.caracteristics.GearCaracteristicListCellRenderer; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; +import fr.ifremer.tutti.ui.swing.spatial.CoordinateEditorType; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.time.DateUtils; @@ -116,25 +116,49 @@ private List<String> properties = Lists.newArrayList( EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DECIMAL, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DECIMAL, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DECIMAL, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DECIMAL ); @Override @@ -144,10 +168,23 @@ if (source.isFishingOperationRectiligne()) { source.computeDistance(); } + + if (log.isInfoEnabled()) { + log.info(String.format("Property %s changed to %s", evt.getPropertyName(), evt.getNewValue())); + } } } }; + public void setQuadrantValue(int value) { + if (log.isInfoEnabled()) { + log.info("New quadrant value: "+value); + } + } + + public boolean isQuadrantSelected(Integer value, int requiredValue) { + return value != null && value == requiredValue; + } /** * To monitor changes on the incoming fishing operation. * @@ -165,11 +202,49 @@ EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_NUMBER, EditFishingOperationUIModel.PROPERTY_STRATA, EditFishingOperationUIModel.PROPERTY_SUB_STRATA, + + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_MINUTE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_MINUTE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SECOND, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_SIGN, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DEGREE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_MINUTE, + EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE, - EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_DATE, EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, EditFishingOperationUIModel.PROPERTY_TRAWL_DISTANCE, Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -36,12 +36,13 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; +import fr.ifremer.tutti.ui.swing.spatial.CoordinateEditorType; +import fr.ifremer.tutti.ui.swing.spatial.DmdCoordinate; +import fr.ifremer.tutti.ui.swing.spatial.DmsCoordinate; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.util.DateUtil; @@ -70,38 +71,86 @@ public static final String PROPERTY_PERSISTED = "persisted"; - public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE = "gearShootingStartLatitudeDegree"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS = "gearShootingStartLatitudeDms"; - public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE = "gearShootingStartLatitudeMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SIGN = "gearShootingStartLatitudeDmsSign"; - public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE = "gearShootingStartLatitudeDecimalMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_DEGREE = "gearShootingStartLatitudeDmsDegree"; - public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND = "gearShootingStartLatitudeSecond"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_MINUTE = "gearShootingStartLatitudeDmsMinute"; - public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE = "gearShootingStartLongitudeDegree"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SECOND = "gearShootingStartLatitudeDmsSecond"; - public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE = "gearShootingStartLongitudeMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD = "gearShootingStartLatitudeDmd"; - public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE = "gearShootingStartLongitudeDecimalMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_SIGN = "gearShootingStartLatitudeDmdSign"; - public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND = "gearShootingStartLongitudeSecond"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DEGREE = "gearShootingStartLatitudeDmdDegree"; - public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE = "gearShootingEndLatitudeDegree"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_MINUTE = "gearShootingStartLatitudeDmdMinute"; - public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE = "gearShootingEndLatitudeMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DECIMAL = "gearShootingStartLatitudeDmdDecimal"; - public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE = "gearShootingEndLatitudeDecimalMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS = "gearShootingStartLongitudeDms"; - public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND = "gearShootingEndLatitudeSecond"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SIGN = "gearShootingStartLongitudeDmsSign"; - public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE = "gearShootingEndLongitudeDegree"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_DEGREE = "gearShootingStartLongitudeDmsDegree"; - public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE = "gearShootingEndLongitudeMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_MINUTE = "gearShootingStartLongitudeDmsMinute"; - public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE = "gearShootingEndLongitudeDecimalMinute"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SECOND = "gearShootingStartLongitudeDmsSecond"; - public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND = "gearShootingEndLongitudeSecond"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD = "gearShootingStartLongitudeDmd"; + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_SIGN = "gearShootingStartLongitudeDmdSign"; + + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DEGREE = "gearShootingStartLongitudeDmdDegree"; + + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_MINUTE = "gearShootingStartLongitudeDmdMinute"; + + public static final String PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DECIMAL = "gearShootingStartLongitudeDmdDecimal"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS = "gearShootingEndLatitudeDms"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SIGN = "gearShootingEndLatitudeDmsSign"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_DEGREE = "gearShootingEndLatitudeDmsDegree"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_MINUTE = "gearShootingEndLatitudeDmsMinute"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SECOND = "gearShootingEndLatitudeDmsSecond"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD = "gearShootingEndLatitudeDmd"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_SIGN = "gearShootingEndLatitudeDmdSign"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DEGREE = "gearShootingEndLatitudeDmdDegree"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_MINUTE = "gearShootingEndLatitudeDmdMinute"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DECIMAL = "gearShootingEndLatitudeDmdDecimal"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS = "gearShootingEndLongitudeDms"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SIGN = "gearShootingEndLongitudeDmsSign"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_DEGREE = "gearShootingEndLongitudeDmsDegree"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_MINUTE = "gearShootingEndLongitudeDmsMinute"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SECOND = "gearShootingEndLongitudeDmsSecond"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD = "gearShootingEndLongitudeDmd"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_SIGN = "gearShootingEndLongitudeDmdSign"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DEGREE = "gearShootingEndLongitudeDmdDegree"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_MINUTE = "gearShootingEndLongitudeDmdMinute"; + + public static final String PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DECIMAL = "gearShootingEndLongitudeDmdDecimal"; + public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext"; public static final String PROPERTY_SECONDARY_VESSEL_TYPE = "secondaryVesselType"; @@ -121,14 +170,82 @@ */ protected final FishingOperation editObject = FishingOperations.newFishingOperation(); - protected SexagecimalPosition gearShootingStartLatitudeAsSexagecimal; + /** + * To edit gearShootingStartLatitude as dms format. + * + * @since 2.8 + */ + protected final DmsCoordinate gearShootingStartLatitudeDms = + DmsCoordinate.empty(); - protected SexagecimalPosition gearShootingStartLongitudeAsSexagecimal; + /** + * To edit gearShootingStartLongitude as dms format. + * + * @since 2.8 + */ + protected final DmsCoordinate gearShootingStartLongitudeDms = + DmsCoordinate.empty(); - protected SexagecimalPosition gearShootingEndLatitudeAsSexagecimal; + /** + * To edit gearShootingEndLatitude as dms format. + * + * @since 2.8 + */ + protected final DmsCoordinate gearShootingEndLatitudeDms = + DmsCoordinate.empty(); - protected SexagecimalPosition gearShootingEndLongitudeAsSexagecimal; + /** + * To edit gearShootingEndLongitude as dms format. + * + * @since 2.8 + */ + protected final DmsCoordinate gearShootingEndLongitudeDms = + DmsCoordinate.empty(); + /** + * To edit gearShootingStartLatitude as dmd format. + * + * @since 2.8 + */ + protected final DmdCoordinate gearShootingStartLatitudeDmd = + DmdCoordinate.empty(); + + /** + * To edit gearShootingStartLongitude as dmd format. + * + * @since 2.8 + */ + protected final DmdCoordinate gearShootingStartLongitudeDmd = + DmdCoordinate.empty(); + + /** + * To edit gearShootingEndLatitude as dmd format. + * + * @since 2.8 + */ + protected final DmdCoordinate gearShootingEndLatitudeDmd = + DmdCoordinate.empty(); + + /** + * To edit gearShootingEndLongitude as dmd format. + * + * @since 2.8 + */ + protected final DmdCoordinate gearShootingEndLongitudeDmd = + DmdCoordinate.empty(); + + protected int quadrant; + + public int getQuadrant() { + return quadrant; + } + + public void setQuadrant(int quadrant) { + Object oldValue = getQuadrant(); + this.quadrant = quadrant; + firePropertyChange("quadrant", oldValue, quadrant); + } + protected final List<Attachment> attachment = Lists.newArrayList(); protected FishingOperation fishingOperation; @@ -150,10 +267,6 @@ public EditFishingOperationUIModel() { super(FishingOperation.class, fromBeanBinder, toBeanBinder); - gearShootingStartLatitudeAsSexagecimal = SexagecimalPosition.valueOf(getGearShootingStartLatitude()); - gearShootingStartLongitudeAsSexagecimal = SexagecimalPosition.valueOf(getGearShootingStartLongitude()); - gearShootingEndLatitudeAsSexagecimal = SexagecimalPosition.valueOf(getGearShootingEndLatitude()); - gearShootingEndLongitudeAsSexagecimal = SexagecimalPosition.valueOf(getGearShootingEndLongitude()); } public boolean isLoadingData() { @@ -176,16 +289,37 @@ @Override public boolean isEmpty() { - return StringUtils.isEmpty(getStationNumber()) + boolean result; + + switch (coordinateEditorType) { + + case DMS: + result = gearShootingStartLatitudeDms.isNull() + && gearShootingStartLongitudeDms.isNull() + && gearShootingEndLatitudeDms.isNull() + && gearShootingEndLongitudeDms.isNull(); + break; + case DMD: + result = gearShootingStartLatitudeDmd.isNull() + && gearShootingStartLongitudeDmd.isNull() + && gearShootingEndLatitudeDmd.isNull() + && gearShootingEndLongitudeDmd.isNull(); + break; + default: + result = getGearShootingStartLatitude() == null + && getGearShootingStartLongitude() == null + && getGearShootingEndLatitude() == null + && getGearShootingEndLongitude() == null; + break; + } + + return result && + StringUtils.isEmpty(getStationNumber()) && getFishingOperationNumber() == null && getStrata() == null && getSubStrata() == null && getLocation() == null - && gearShootingStartLatitudeAsSexagecimal.isNull() - && gearShootingStartLongitudeAsSexagecimal.isNull() && getGearShootingStartDate() == null - && gearShootingEndLatitudeAsSexagecimal.isNull() - && gearShootingEndLongitudeAsSexagecimal.isNull() && getGearShootingEndDate() == null && !isFishingOperationRectiligne() && getTrawlDistance() == null @@ -214,245 +348,481 @@ return fishingOperation != null && !TuttiEntities.isNew(fishingOperation); } - public Integer getGearShootingStartLatitudeDegree() { - Integer result = gearShootingStartLatitudeAsSexagecimal.getDegre(); - if (gearShootingStartLatitudeAsSexagecimal.isSign()) { - result *= -1; - } - return result; + //------------------------------------------------------------------------// + //-- Start Latitude ------------------------------------------------------// + //------------------------------------------------------------------------// + + public DmsCoordinate getGearShootingStartLatitudeDms() { + return gearShootingStartLatitudeDms; } - public Integer getGearShootingStartLatitudeDecimalDegree() { - return getGearShootingStartLatitudeDegree(); + public void setGearShootingStartLatitudeDms(Float decimal) { + DmsCoordinate position = + DmsCoordinate.valueOf(decimal); + setGearShootingStartLatitudeDmsSign(position.isSign()); + setGearShootingStartLatitudeDmsDegree(position.getDegree()); + setGearShootingStartLatitudeDmsMinute(position.getMinute()); + setGearShootingStartLatitudeDmsSecond(position.getSecond()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS, null, getGearShootingStartLatitudeDms()); } - public void setGearShootingStartLatitudeDegree(Integer degree) { - Object oldValue = getGearShootingStartLatitudeDegree(); - boolean sign = degree != null && degree < 0; + public boolean isGearShootingStartLatitudeDmsSign() { + return gearShootingStartLatitudeDms.isSign(); + } + + public void setGearShootingStartLatitudeDmsSign(boolean sign) { + Object oldValue = isGearShootingStartLatitudeDmsSign(); + gearShootingStartLatitudeDms.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SIGN, oldValue, sign); + } + + public Integer getGearShootingStartLatitudeDmsDegree() { + return gearShootingStartLatitudeDms.getDegree(); + } + + public void setGearShootingStartLatitudeDmsDegree(Integer degree) { + Object oldValue = getGearShootingStartLatitudeDmsDegree(); if (degree != null) { degree = Math.abs(degree); } - gearShootingStartLatitudeAsSexagecimal.setSign(sign); - gearShootingStartLatitudeAsSexagecimal.setDegre(degree); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DEGREE, oldValue, degree); + gearShootingStartLatitudeDms.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_DEGREE, oldValue, degree); } - public void setGearShootingStartLatitudeDecimalDegree(Integer degree) { - setGearShootingStartLatitudeDegree(degree); + public Integer getGearShootingStartLatitudeDmsMinute() { + return gearShootingStartLatitudeDms.getMinute(); } - public Integer getGearShootingStartLatitudeMinute() { - return gearShootingStartLatitudeAsSexagecimal.getMinute(); + public void setGearShootingStartLatitudeDmsMinute(Integer minute) { + Object oldValue = getGearShootingStartLatitudeDmsMinute(); + gearShootingStartLatitudeDms.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_MINUTE, oldValue, minute); } - public void setGearShootingStartLatitudeMinute(Integer minute) { - Object oldValue = getGearShootingStartLatitudeMinute(); - gearShootingStartLatitudeAsSexagecimal.setMinute(minute); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_MINUTE, oldValue, minute); + public Integer getGearShootingStartLatitudeDmsSecond() { + return gearShootingStartLatitudeDms.getSecond(); } - public Float getGearShootingStartLatitudeDecimalMinute() { - return gearShootingStartLatitudeAsSexagecimal.getMinuteDecimale(); + public void setGearShootingStartLatitudeDmsSecond(Integer second) { + Object oldValue = getGearShootingStartLatitudeDmsSecond(); + gearShootingStartLatitudeDms.setSecond(second); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMS_SECOND, oldValue, second); } - public void setGearShootingStartLatitudeDecimalMinute(Float decimalMinute) { - gearShootingStartLatitudeAsSexagecimal.setMinuteDecimale(decimalMinute); - // 2013-01-22 kmorin: pass null as previous value, - // otherwise the filed is not filled with the value (I cannot explain why... :() - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DECIMAL_MINUTE, null, decimalMinute); + public DmdCoordinate getGearShootingStartLatitudeDmd() { + return gearShootingStartLatitudeDmd; } - public Integer getGearShootingStartLatitudeSecond() { - return gearShootingStartLatitudeAsSexagecimal.getSeconde(); + public void setGearShootingStartLatitudeDmd(Float decimal) { + DmdCoordinate position = + DmdCoordinate.valueOf(decimal); + setGearShootingStartLatitudeDmdSign(position.isSign()); + setGearShootingStartLatitudeDmdDegree(position.getDegree()); + setGearShootingStartLatitudeDmdMinute(position.getMinute()); + setGearShootingStartLatitudeDmdDecimal(position.getDecimal()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD, null, getGearShootingStartLatitudeDmd()); } - public void setGearShootingStartLatitudeSecond(Integer second) { - Object oldValue = getGearShootingStartLatitudeSecond(); - gearShootingStartLatitudeAsSexagecimal.setSeconde(second); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_SECOND, oldValue, second); + public boolean isGearShootingStartLatitudeDmdSign() { + return gearShootingStartLatitudeDmd.isSign(); } - public Integer getGearShootingStartLongitudeDegree() { - Integer result = gearShootingStartLongitudeAsSexagecimal.getDegre(); - if (gearShootingStartLongitudeAsSexagecimal.isSign()) { - result *= -1; - } - return result; + public void setGearShootingStartLatitudeDmdSign(boolean sign) { + Object oldValue = isGearShootingStartLatitudeDmdSign(); + gearShootingStartLatitudeDmd.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_SIGN, oldValue, sign); } - public Integer getGearShootingStartLongitudeDecimalDegree() { - return getGearShootingStartLongitudeDegree(); + public Integer getGearShootingStartLatitudeDmdDegree() { + return gearShootingStartLatitudeDmd.getDegree(); } - public void setGearShootingStartLongitudeDegree(Integer degree) { - Object oldValue = getGearShootingStartLongitudeDegree(); - boolean sign = degree != null && degree < 0; + public void setGearShootingStartLatitudeDmdDegree(Integer degree) { + Object oldValue = getGearShootingStartLatitudeDmdDegree(); + gearShootingStartLatitudeDmd.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DEGREE, oldValue, degree); + } + + public Integer getGearShootingStartLatitudeDmdMinute() { + return gearShootingStartLatitudeDmd.getMinute(); + } + + public void setGearShootingStartLatitudeDmdMinute(Integer minute) { + Object oldValue = getGearShootingStartLatitudeDmdMinute(); + gearShootingStartLatitudeDmd.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_MINUTE, oldValue, minute); + } + + public Integer getGearShootingStartLatitudeDmdDecimal() { + return gearShootingStartLatitudeDmd.getDecimal(); + } + + public void setGearShootingStartLatitudeDmdDecimal(Integer decimal) { + Object oldValue = getGearShootingStartLatitudeDmdDecimal(); + gearShootingStartLatitudeDmd.setDecimal(decimal); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LATITUDE_DMD_DECIMAL, oldValue, decimal); + } + + //------------------------------------------------------------------------// + //-- Start Longitude -----------------------------------------------------// + //------------------------------------------------------------------------// + + public DmsCoordinate getGearShootingStartLongitudeDms() { + return gearShootingStartLongitudeDms; + } + + public void setGearShootingStartLongitudeDms(Float decimal) { + DmsCoordinate position = + DmsCoordinate.valueOf(decimal); + setGearShootingStartLongitudeDmsSign(position.isSign()); + setGearShootingStartLongitudeDmsDegree(position.getDegree()); + setGearShootingStartLongitudeDmsMinute(position.getMinute()); + setGearShootingStartLongitudeDmsSecond(position.getSecond()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS, null, getGearShootingStartLongitudeDms()); + } + + public boolean isGearShootingStartLongitudeDmsSign() { + return gearShootingStartLongitudeDms.isSign(); + } + + public void setGearShootingStartLongitudeDmsSign(boolean sign) { + Object oldValue = isGearShootingStartLongitudeDmsSign(); + gearShootingStartLongitudeDms.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SIGN, oldValue, sign); + } + + public Integer getGearShootingStartLongitudeDmsDegree() { + return gearShootingStartLongitudeDms.getDegree(); + } + + public void setGearShootingStartLongitudeDmsDegree(Integer degree) { + Object oldValue = getGearShootingStartLongitudeDmsDegree(); if (degree != null) { degree = Math.abs(degree); } - gearShootingStartLongitudeAsSexagecimal.setSign(sign); - gearShootingStartLongitudeAsSexagecimal.setDegre(degree); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DEGREE, oldValue, degree); + gearShootingStartLongitudeDms.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_DEGREE, oldValue, degree); } - public void setGearShootingStartLongitudeDecimalDegree(Integer degree) { - setGearShootingStartLongitudeDegree(degree); + public Integer getGearShootingStartLongitudeDmsMinute() { + return gearShootingStartLongitudeDms.getMinute(); } - public Integer getGearShootingStartLongitudeMinute() { - return gearShootingStartLongitudeAsSexagecimal.getMinute(); + public void setGearShootingStartLongitudeDmsMinute(Integer minute) { + Object oldValue = getGearShootingStartLongitudeDmsMinute(); + gearShootingStartLongitudeDms.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_MINUTE, oldValue, minute); } - public void setGearShootingStartLongitudeMinute(Integer minute) { - Object oldValue = getGearShootingStartLongitudeMinute(); - gearShootingStartLongitudeAsSexagecimal.setMinute(minute); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_MINUTE, oldValue, minute); + public Integer getGearShootingStartLongitudeDmsSecond() { + return gearShootingStartLongitudeDms.getSecond(); } - public Float getGearShootingStartLongitudeDecimalMinute() { - return gearShootingStartLongitudeAsSexagecimal.getMinuteDecimale(); + public void setGearShootingStartLongitudeDmsSecond(Integer second) { + Object oldValue = getGearShootingStartLongitudeDmsSecond(); + gearShootingStartLongitudeDms.setSecond(second); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMS_SECOND, oldValue, second); } - public void setGearShootingStartLongitudeDecimalMinute(Float decimalMinute) { - gearShootingStartLongitudeAsSexagecimal.setMinuteDecimale(decimalMinute); - // 2013-01-22 kmorin: pass null as previous value, - // otherwise the filed is not filled with the value (I cannot explain why... :() - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DECIMAL_MINUTE, null, decimalMinute); + public DmdCoordinate getGearShootingStartLongitudeDmd() { + return gearShootingStartLongitudeDmd; } - public Integer getGearShootingStartLongitudeSecond() { - return gearShootingStartLongitudeAsSexagecimal.getSeconde(); + public void setGearShootingStartLongitudeDmd(Float decimal) { + DmdCoordinate position = + DmdCoordinate.valueOf(decimal); + setGearShootingStartLongitudeDmdSign(position.isSign()); + setGearShootingStartLongitudeDmdDegree(position.getDegree()); + setGearShootingStartLongitudeDmdMinute(position.getMinute()); + setGearShootingStartLongitudeDmdDecimal(position.getDecimal()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD, null, getGearShootingStartLongitudeDmd()); } - public void setGearShootingStartLongitudeSecond(Integer second) { - Object oldValue = getGearShootingStartLongitudeSecond(); - gearShootingStartLongitudeAsSexagecimal.setSeconde(second); - firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_SECOND, oldValue, second); + public boolean isGearShootingStartLongitudeDmdSign() { + return gearShootingStartLongitudeDmd.isSign(); } - public void setGearShootingStartTime(Date gearShootingStartDate) { - Object oldValue = getGearShootingStartDate(); - if (oldValue != null) { - setGearShootingStartDate(gearShootingStartDate); - } + public void setGearShootingStartLongitudeDmdSign(boolean sign) { + Object oldValue = isGearShootingStartLongitudeDmdSign(); + gearShootingStartLongitudeDmd.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_SIGN, oldValue, sign); } - public Integer getGearShootingEndLatitudeDegree() { - Integer result = gearShootingEndLatitudeAsSexagecimal.getDegre(); - if (gearShootingEndLatitudeAsSexagecimal.isSign()) { - result *= -1; + public Integer getGearShootingStartLongitudeDmdDegree() { + return gearShootingStartLongitudeDmd.getDegree(); + } + + public void setGearShootingStartLongitudeDmdDegree(Integer degree) { + Object oldValue = getGearShootingStartLongitudeDmdDegree(); + if (degree != null) { + degree = Math.abs(degree); } - return result; + gearShootingStartLongitudeDmd.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DEGREE, oldValue, degree); } - public Integer getGearShootingEndLatitudeDecimalDegree() { - return getGearShootingEndLatitudeDegree(); + public Integer getGearShootingStartLongitudeDmdMinute() { + return gearShootingStartLongitudeDmd.getMinute(); } - public void setGearShootingEndLatitudeDegree(Integer degree) { - Object oldValue = getGearShootingEndLatitudeDegree(); - boolean sign = degree != null && degree < 0; + public void setGearShootingStartLongitudeDmdMinute(Integer minute) { + Object oldValue = getGearShootingStartLongitudeDmdMinute(); + gearShootingStartLongitudeDmd.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_MINUTE, oldValue, minute); + } + + public Integer getGearShootingStartLongitudeDmdDecimal() { + return gearShootingStartLongitudeDmd.getDecimal(); + } + + public void setGearShootingStartLongitudeDmdDecimal(Integer minute) { + Object oldValue = getGearShootingStartLongitudeDmdDecimal(); + gearShootingStartLongitudeDmd.setDecimal(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_START_LONGITUDE_DMD_DECIMAL, oldValue, minute); + } + + //------------------------------------------------------------------------// + //-- End Latitude --------------------------------------------------------// + //------------------------------------------------------------------------// + + public DmsCoordinate getGearShootingEndLatitudeDms() { + return gearShootingEndLatitudeDms; + } + + public void setGearShootingEndLatitudeDms(Float decimal) { + DmsCoordinate position = + DmsCoordinate.valueOf(decimal); + setGearShootingEndLatitudeDmsSign(position.isSign()); + setGearShootingEndLatitudeDmdDegree(position.getDegree()); + setGearShootingEndLatitudeDmsMinute(position.getMinute()); + setGearShootingEndLatitudeDmsSecond(position.getSecond()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS, null, getGearShootingEndLatitudeDms()); + } + + public boolean isGearShootingEndLatitudeDmsSign() { + return gearShootingEndLatitudeDms.isSign(); + } + + public void setGearShootingEndLatitudeDmsSign(boolean sign) { + Object oldValue = isGearShootingEndLatitudeDmsSign(); + gearShootingEndLatitudeDms.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SIGN, oldValue, sign); + } + + public Integer getGearShootingEndLatitudeDmsDegree() { + return gearShootingEndLatitudeDms.getDegree(); + } + + public void setGearShootingEndLatitudeDmsDegree(Integer degree) { + Object oldValue = getGearShootingEndLatitudeDmsDegree(); if (degree != null) { degree = Math.abs(degree); } - gearShootingEndLatitudeAsSexagecimal.setSign(sign); - gearShootingEndLatitudeAsSexagecimal.setDegre(degree); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DEGREE, oldValue, degree); + gearShootingEndLatitudeDms.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_DEGREE, oldValue, degree); } - public void setGearShootingEndLatitudeDecimalDegree(Integer degree) { - setGearShootingEndLatitudeDegree(degree); + public Integer getGearShootingEndLatitudeDmsMinute() { + return gearShootingEndLatitudeDms.getMinute(); } - public Integer getGearShootingEndLatitudeMinute() { - return gearShootingEndLatitudeAsSexagecimal.getMinute(); + public void setGearShootingEndLatitudeDmsMinute(Integer minute) { + Object oldValue = getGearShootingEndLatitudeDmsMinute(); + gearShootingEndLatitudeDms.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_MINUTE, oldValue, minute); } - public void setGearShootingEndLatitudeMinute(Integer minute) { - Object oldValue = getGearShootingEndLatitudeMinute(); - gearShootingEndLatitudeAsSexagecimal.setMinute(minute); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_MINUTE, oldValue, minute); + public Integer getGearShootingEndLatitudeDmsSecond() { + return gearShootingEndLatitudeDms.getSecond(); } - public Float getGearShootingEndLatitudeDecimalMinute() { - return gearShootingEndLatitudeAsSexagecimal.getMinuteDecimale(); + public void setGearShootingEndLatitudeDmsSecond(Integer second) { + Object oldValue = getGearShootingEndLatitudeDmsSecond(); + gearShootingEndLatitudeDms.setSecond(second); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMS_SECOND, oldValue, second); } - public void setGearShootingEndLatitudeDecimalMinute(Float decimalMinute) { - gearShootingEndLatitudeAsSexagecimal.setMinuteDecimale(decimalMinute); - // 2013-01-22 kmorin: pass null as previous value, - // otherwise the filed is not filled with the value (I cannot explain why... :() - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DECIMAL_MINUTE, null, decimalMinute); + public DmdCoordinate getGearShootingEndLatitudeDmd() { + return gearShootingEndLatitudeDmd; } - public Integer getGearShootingEndLatitudeSecond() { - return gearShootingEndLatitudeAsSexagecimal.getSeconde(); + public void setGearShootingEndLatitudeDmd(Float decimal) { + DmdCoordinate position = + DmdCoordinate.valueOf(decimal); + setGearShootingEndLatitudeDmdSign(position.isSign()); + setGearShootingEndLatitudeDmdDegree(position.getDegree()); + setGearShootingEndLatitudeDmdMinute(position.getMinute()); + setGearShootingEndLatitudeDmdDecimal(position.getDecimal()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD, null, getGearShootingEndLatitudeDmd()); } - public void setGearShootingEndLatitudeSecond(Integer second) { - Object oldValue = getGearShootingEndLatitudeSecond(); - gearShootingEndLatitudeAsSexagecimal.setSeconde(second); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_SECOND, oldValue, second); + public boolean isGearShootingEndLatitudeDmdSign() { + return gearShootingEndLatitudeDmd.isSign(); } - public Integer getGearShootingEndLongitudeDegree() { - Integer result = gearShootingEndLongitudeAsSexagecimal.getDegre(); - if (gearShootingEndLongitudeAsSexagecimal.isSign()) { - result *= -1; - } - return result; + public void setGearShootingEndLatitudeDmdSign(boolean sign) { + Object oldValue = isGearShootingEndLatitudeDmdSign(); + gearShootingEndLatitudeDmd.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_SIGN, oldValue, sign); } - public Integer getGearShootingEndLongitudeDecimalDegree() { - return getGearShootingEndLongitudeDegree(); + public Integer getGearShootingEndLatitudeDmdDegree() { + return gearShootingEndLatitudeDmd.getDegree(); } - public void setGearShootingEndLongitudeDegree(Integer degree) { - Object oldValue = getGearShootingEndLongitudeDegree(); - boolean sign = degree != null && degree < 0; + public void setGearShootingEndLatitudeDmdDegree(Integer degree) { + Object oldValue = getGearShootingEndLatitudeDmdDegree(); + gearShootingEndLatitudeDmd.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DEGREE, oldValue, degree); + } + + public Integer getGearShootingEndLatitudeDmdMinute() { + return gearShootingEndLatitudeDmd.getMinute(); + } + + public void setGearShootingEndLatitudeDmdMinute(Integer minute) { + Object oldValue = getGearShootingEndLatitudeDmdMinute(); + gearShootingEndLatitudeDmd.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_MINUTE, oldValue, minute); + } + + public Integer getGearShootingEndLatitudeDmdDecimal() { + return gearShootingEndLatitudeDmd.getDecimal(); + } + + public void setGearShootingEndLatitudeDmdDecimal(Integer minute) { + Object oldValue = getGearShootingEndLatitudeDmdDecimal(); + gearShootingEndLatitudeDmd.setDecimal(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LATITUDE_DMD_DECIMAL, oldValue, minute); + } + + //------------------------------------------------------------------------// + //-- End Longitude -------------------------------------------------------// + //------------------------------------------------------------------------// + + public DmsCoordinate getGearShootingEndLongitudeDms() { + return gearShootingEndLongitudeDms; + } + + public void setGearShootingEndLongitudeDms(Float decimal) { + DmsCoordinate position = + DmsCoordinate.valueOf(decimal); + setGearShootingEndLongitudeDmsSign(position.isSign()); + setGearShootingEndLongitudeDmsDegree(position.getDegree()); + setGearShootingEndLongitudeDmsMinute(position.getMinute()); + setGearShootingEndLongitudeDmsSecond(position.getSecond()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS, null, getGearShootingEndLongitudeDms()); + } + + public boolean isGearShootingEndLongitudeDmsSign() { + return gearShootingEndLongitudeDms.isSign(); + } + + public void setGearShootingEndLongitudeDmsSign(boolean sign) { + Object oldValue = isGearShootingEndLongitudeDmsSign(); + gearShootingEndLongitudeDms.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SIGN, oldValue, sign); + } + + public Integer getGearShootingEndLongitudeDmsDegree() { + Integer result = gearShootingEndLongitudeDms.getDegree(); + return result; + } + + public void setGearShootingEndLongitudeDmsDegree(Integer degree) { + Object oldValue = getGearShootingEndLongitudeDmsDegree(); if (degree != null) { degree = Math.abs(degree); } - gearShootingEndLongitudeAsSexagecimal.setSign(sign); - gearShootingEndLongitudeAsSexagecimal.setDegre(degree); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DEGREE, oldValue, degree); + gearShootingEndLongitudeDms.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_DEGREE, oldValue, degree); } - public void setGearShootingEndLongitudeDecimalDegree(Integer degree) { - setGearShootingEndLongitudeDegree(degree); + public Integer getGearShootingEndLongitudeDmsMinute() { + return gearShootingEndLongitudeDms.getMinute(); } - public Integer getGearShootingEndLongitudeMinute() { - return gearShootingEndLongitudeAsSexagecimal.getMinute(); + public void setGearShootingEndLongitudeDmsMinute(Integer minute) { + Object oldValue = getGearShootingEndLongitudeDmsMinute(); + gearShootingEndLongitudeDms.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_MINUTE, oldValue, minute); } - public void setGearShootingEndLongitudeMinute(Integer minute) { - Object oldValue = getGearShootingEndLongitudeMinute(); - gearShootingEndLongitudeAsSexagecimal.setMinute(minute); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_MINUTE, oldValue, minute); + public Integer getGearShootingEndLongitudeDmsSecond() { + return gearShootingEndLongitudeDms.getSecond(); } - public Float getGearShootingEndLongitudeDecimalMinute() { - return gearShootingEndLongitudeAsSexagecimal.getMinuteDecimale(); + public void setGearShootingEndLongitudeDmsSecond(Integer second) { + Object oldValue = getGearShootingEndLongitudeDmsSecond(); + gearShootingEndLongitudeDms.setSecond(second); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMS_SECOND, oldValue, second); } - public void setGearShootingEndLongitudeDecimalMinute(Float decimalMinute) { - gearShootingEndLongitudeAsSexagecimal.setMinuteDecimale(decimalMinute); - // 2013-01-22 kmorin: pass null as previous value, - // otherwise the filed is not filled with the value (I cannot explain why... :() - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DECIMAL_MINUTE, null, decimalMinute); + public DmdCoordinate getGearShootingEndLongitudeDmd() { + return gearShootingEndLongitudeDmd; } - public Integer getGearShootingEndLongitudeSecond() { - return gearShootingEndLongitudeAsSexagecimal.getSeconde(); + public void setGearShootingEndLongitudeDmd(Float decimal) { + DmdCoordinate position = + DmdCoordinate.valueOf(decimal); + setGearShootingEndLongitudeDmdSign(position.isSign()); + setGearShootingEndLongitudeDmdDegree(position.getDegree()); + setGearShootingEndLongitudeDmdMinute(position.getMinute()); + setGearShootingEndLongitudeDmdDecimal(position.getDecimal()); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD, null, getGearShootingEndLongitudeDmd()); } - public void setGearShootingEndLongitudeSecond(Integer second) { - Object oldValue = getGearShootingEndLongitudeSecond(); - gearShootingEndLongitudeAsSexagecimal.setSeconde(second); - firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_SECOND, oldValue, second); + public boolean isGearShootingEndLongitudeDmdSign() { + return gearShootingEndLongitudeDmd.isSign(); } + public void setGearShootingEndLongitudeDmdSign(boolean sign) { + Object oldValue = isGearShootingEndLongitudeDmdSign(); + gearShootingEndLongitudeDmd.setSign(sign); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_SIGN, oldValue, sign); + } + + public Integer getGearShootingEndLongitudeDmdDegree() { + return gearShootingEndLongitudeDmd.getDegree(); + } + + public void setGearShootingEndLongitudeDmdDegree(Integer degree) { + Object oldValue = gearShootingEndLongitudeDmd.getDegree(); + gearShootingEndLongitudeDmd.setDegree(degree); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DEGREE, oldValue, degree); + } + + public Integer getGearShootingEndLongitudeDmdMinute() { + return gearShootingEndLongitudeDmd.getMinute(); + } + + public void setGearShootingEndLongitudeDmdMinute(Integer minute) { + Object oldValue = gearShootingEndLongitudeDmd.getMinute(); + gearShootingEndLongitudeDmd.setMinute(minute); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_MINUTE, oldValue, minute); + } + + public Integer getGearShootingEndLongitudeDmdDecimal() { + return gearShootingEndLongitudeDmd.getDecimal(); + } + + public void setGearShootingEndLongitudeDmdDecimal(Integer decimal) { + Object oldValue = gearShootingEndLongitudeDmd.getDecimal(); + gearShootingEndLongitudeDmd.setDecimal(decimal); + firePropertyChange(PROPERTY_GEAR_SHOOTING_END_LONGITUDE_DMD_DECIMAL, oldValue, decimal); + } + + //------------------------------------------------------------------------// + //-- Start - End Time ----------------------------------------------------// + //------------------------------------------------------------------------// + + public void setGearShootingStartTime(Date gearShootingStartDate) { + Object oldValue = getGearShootingStartDate(); + if (oldValue != null) { + setGearShootingStartDate(gearShootingStartDate); + } + } + public void setGearShootingEndTime(Date gearShootingEndDate) { Object oldValue = getGearShootingEndDate(); if (oldValue != null) { @@ -487,72 +857,75 @@ return minutes <= 45 && minutes >= 20; } - public void convertGearShootingCoordinatesDDToDMS() { - SexagecimalPosition position; - Integer degree; + public boolean isCoordinateDms() { + return CoordinateEditorType.DMS.equals(getCoordinateEditorType()); + } - position = SexagecimalPosition.valueOf(getGearShootingStartLatitude()); - degree = position.getDegre(); - if (degree != null) { - degree *= position.isSign() ? -1 : 1; - } - setGearShootingStartLatitudeDegree(degree); - setGearShootingStartLatitudeMinute(position.getMinute()); - setGearShootingStartLatitudeSecond(position.getSeconde()); - setGearShootingStartLatitudeDecimalMinute(position.getMinuteDecimale()); + public boolean isCoordinateDmd() { + return CoordinateEditorType.DMD.equals(getCoordinateEditorType()); + } - position = SexagecimalPosition.valueOf(getGearShootingStartLongitude()); - degree = position.getDegre(); - if (degree != null) { - degree *= position.isSign() ? -1 : 1; - } - setGearShootingStartLongitudeDegree(degree); - setGearShootingStartLongitudeMinute(position.getMinute()); - setGearShootingStartLongitudeSecond(position.getSeconde()); - setGearShootingStartLongitudeDecimalMinute(position.getMinuteDecimale()); + public void convertGearShootingCoordinatesFromDD() { + switch (coordinateEditorType) { - position = SexagecimalPosition.valueOf(getGearShootingEndLatitude()); - degree = position.getDegre(); - if (degree != null) { - degree *= position.isSign() ? -1 : 1; - } - if (position.getDegre() != null) { + case DMS: + setGearShootingStartLatitudeDms(getGearShootingStartLatitude()); + setGearShootingStartLongitudeDms(getGearShootingStartLongitude()); + setGearShootingEndLatitudeDms(getGearShootingEndLatitude()); + setGearShootingEndLongitudeDms(getGearShootingEndLongitude()); + break; + case DMD: + setGearShootingStartLatitudeDmd(getGearShootingStartLatitude()); + setGearShootingStartLongitudeDmd(getGearShootingStartLongitude()); + setGearShootingEndLatitudeDmd(getGearShootingEndLatitude()); + setGearShootingEndLongitudeDmd(getGearShootingEndLongitude()); + break; } - setGearShootingEndLatitudeDegree(degree); - setGearShootingEndLatitudeMinute(position.getMinute()); - setGearShootingEndLatitudeSecond(position.getSeconde()); - setGearShootingEndLatitudeDecimalMinute(position.getMinuteDecimale()); - position = SexagecimalPosition.valueOf(getGearShootingEndLongitude()); - degree = position.getDegre(); - if (degree != null) { - degree *= position.isSign() ? -1 : 1; - } - setGearShootingEndLongitudeDegree(degree); - setGearShootingEndLongitudeMinute(position.getMinute()); - setGearShootingEndLongitudeSecond(position.getSeconde()); - setGearShootingEndLongitudeDecimalMinute(position.getMinuteDecimale()); +// quadrant = GeoPositionHelper.getQuadrant( +// getGearShootingStartLongitude(), +// getGearShootingStartLatitude()); } - public void convertGearShootingCoordinatesDMSToDD() { - Float decimalValue = gearShootingStartLatitudeAsSexagecimal.toDecimal(); - editObject.setGearShootingStartLatitude(decimalValue); + public void convertGearShootingCoordinatesToDD() { - decimalValue = gearShootingStartLongitudeAsSexagecimal.toDecimal(); - editObject.setGearShootingStartLongitude(decimalValue); + switch (coordinateEditorType) { - decimalValue = gearShootingEndLatitudeAsSexagecimal.toDecimal(); - editObject.setGearShootingEndLatitude(decimalValue); + case DMS: + editObject.setGearShootingStartLatitude( + gearShootingStartLatitudeDms.toDecimal()); - decimalValue = gearShootingEndLongitudeAsSexagecimal.toDecimal(); - editObject.setGearShootingEndLongitude(decimalValue); + editObject.setGearShootingStartLongitude( + gearShootingStartLongitudeDms.toDecimal()); + + editObject.setGearShootingEndLatitude( + gearShootingEndLatitudeDms.toDecimal()); + + editObject.setGearShootingEndLongitude( + gearShootingEndLongitudeDms.toDecimal()); + break; + + case DMD: + editObject.setGearShootingStartLatitude( + gearShootingStartLatitudeDmd.toDecimal()); + + editObject.setGearShootingStartLongitude( + gearShootingStartLongitudeDmd.toDecimal()); + + editObject.setGearShootingEndLatitude( + gearShootingEndLatitudeDmd.toDecimal()); + + editObject.setGearShootingEndLongitude( + gearShootingEndLongitudeDmd.toDecimal()); + break; + } } public void computeDistance() { - if (coordinateEditorType != CoordinateEditorType.DD) { - convertGearShootingCoordinatesDMSToDD(); - } + + convertGearShootingCoordinatesToDD(); + if (getGearShootingStartLatitude() != null && getGearShootingStartLongitude() != null && getGearShootingEndLatitude() != null && getGearShootingEndLongitude() != null) { Integer distance = TuttiUIUtil.computeDistanceInMeters( @@ -963,7 +1336,9 @@ List<Vessel> allSecondaryVessel; List<Vessel> onlyCruisSecondaryVessel; + List<Vessel> scientificSecondaryVessel; + List<Vessel> fishingSecondaryVessel; public List<Vessel> getAllSecondaryVessel() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -37,7 +37,6 @@ import fr.ifremer.tutti.ui.swing.content.operation.fishing.VesselUseFeatureTabUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; -import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -91,11 +90,8 @@ if (mustSave) { // prepare model + beanToSave.convertGearShootingCoordinatesToDD(); - if (beanToSave.getCoordinateEditorType() != CoordinateEditorType.DD) { - beanToSave.convertGearShootingCoordinatesDMSToDD(); - } - // save modified fishing operation FishingOperation toSave = beanToSave.toBean(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -37,6 +37,7 @@ javax.swing.ListSelectionModel java.awt.Color + java.awt.Dimension static org.nuiton.i18n.I18n._ </import> @@ -92,4 +93,8 @@ onKeyPressed='handler.openRowMenu(event, tablePopup)'/> </JScrollPane> + <JPanel constraints='BorderLayout.SOUTH' + minimumSize="{new Dimension(10,30)}" + maximumSize="{new Dimension(10,30)}" + preferredSize="{new Dimension(10,30)}"/> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -37,6 +37,7 @@ javax.swing.ListSelectionModel java.awt.Color + java.awt.Dimension static org.nuiton.i18n.I18n._ static fr.ifremer.tutti.ui.swing.util.TuttiUIUtil.getWeightStringValue @@ -172,4 +173,8 @@ onKeyPressed='handler.openRowMenu(event, tablePopup)'/> </JScrollPane> + <JPanel constraints='BorderLayout.SOUTH' + minimumSize="{new Dimension(10,30)}" + maximumSize="{new Dimension(10,30)}" + preferredSize="{new Dimension(10,30)}"/> </JPanel> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -37,6 +37,7 @@ javax.swing.ListSelectionModel java.awt.Color + java.awt.Dimension static org.nuiton.i18n.I18n._ </import> @@ -92,4 +93,8 @@ onKeyPressed='handler.openRowMenu(event, tablePopup)'/> </JScrollPane> + <JPanel constraints='BorderLayout.SOUTH' + minimumSize="{new Dimension(10,30)}" + maximumSize="{new Dimension(10,30)}" + preferredSize="{new Dimension(10,30)}"/> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -36,6 +36,7 @@ javax.swing.ListSelectionModel java.awt.Color + java.awt.Dimension static org.nuiton.i18n.I18n._ </import> @@ -109,4 +110,9 @@ onKeyPressed='handler.openRowMenu(event, tablePopup)'/> </JScrollPane> + <JPanel constraints='BorderLayout.SOUTH' + minimumSize="{new Dimension(10,30)}" + maximumSize="{new Dimension(10,30)}" + preferredSize="{new Dimension(10,30)}"/> + </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -37,6 +37,7 @@ javax.swing.ListSelectionModel java.awt.Color + java.awt.Dimension static org.nuiton.i18n.I18n._ static fr.ifremer.tutti.ui.swing.util.TuttiUIUtil.getWeightStringValue @@ -168,10 +169,18 @@ </Table> - <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER'> - <JXTable id='table' - onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' - onKeyPressed='handler.openRowMenu(event, tablePopup)'/> + <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER' columnHeaderView="{table.getTableHeader()}"> + <JPanel layout='{new BorderLayout()}'> + <JXTable id='table' constraints='BorderLayout.CENTER' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' + onKeyPressed='handler.openRowMenu(event, tablePopup)'/> + <JLabel constraints='BorderLayout.SOUTH' + preferredSize="{new Dimension(10,100)}"/> + </JPanel> + </JScrollPane> + + <!--background="{Color.WHITE}"/>--> + </JPanel> Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/CoordinateEditorType.java (from rev 1314, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CoordinateEditorType.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/CoordinateEditorType.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/CoordinateEditorType.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,47 @@ + +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 1.0 + */ +public enum CoordinateEditorType { + + /** + * Degre-Minute-second. + */ + DMS, + /** + * Degre decimal. + */ + DD, + /** + * Degre minute decimal + */ + DMD + +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinate.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinate.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinate.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,294 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.jdesktop.beans.AbstractSerializableBean; + +/** + * Geo coordinate in degree decimal, minute format. + * <p/> + * Created on 10/23/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmdCoordinate extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + + public static final String PROPERTY_SIGN = "sign"; + + public static final String PROPERTY_DEGREE = "degree"; + + public static final String PROPERTY_MINUTE = "minute"; + + public static final String PROPERTY_DECIMAL = "decimal"; + + protected boolean sign; + + protected Integer degree; + + protected Integer minute; + + protected Integer decimal; + + public static DmdCoordinate empty() { + DmdCoordinate r = new DmdCoordinate(); + return r; + } + + /** + * Methode statique de fabrique de position a partir d'une valeur du format + * decimal. + * <p/> + * Note : Si la valeur (au format decimal) vaut <code>null</code>, alors on + * reinitialise les composants de la position a <code>null</code> et la + * methode {@link #isNull()} vaudra alors {@code true}. + * + * @param decimal la valeur au format decimal + * @return une nouvelle instance de position convertie + */ + public static DmdCoordinate valueOf(Float decimal) { + DmdCoordinate r = new DmdCoordinate(); + r.fromDecimal(decimal); + return r; + } + + /** + * Methode statique de fabrique de position a partir d'une valeur du format + * degre décimale minute. + * + * @param d la valeur des degres + * @param m la valeur des minutes + * @param dc la valeur des décimales de minutes + * @return une nouvelle instance de position convertie + */ + public static DmdCoordinate valueOf(boolean sign, int d, int m, int dc) { + DmdCoordinate r = new DmdCoordinate(); + r.setSign(sign); + r.setDegree(d); + r.setMinute(m); + r.setDecimal(dc); + return r; + } + + public boolean isSign() { + return sign; + } + + public Integer getDegree() { + return degree; + } + + public Integer getMinute() { + return minute; + } + + public Integer getDecimal() { + return decimal; + } + + public void setSign(boolean sign) { + Object oldValue = isSign(); + this.sign = sign; + firePropertyChange(PROPERTY_SIGN, oldValue, sign); + } + + public void setDegree(Integer degree) { + Object oldValue = getDegree(); + this.degree = degree; + firePropertyChange(PROPERTY_DEGREE, oldValue, degree); + } + + public void setMinute(Integer minute) { + Object oldValue = getMinute(); + this.minute = minute; + firePropertyChange(PROPERTY_MINUTE, oldValue, minute); + } + + public void setDecimal(Integer decimal) { + Object oldValue = getDecimal(); + this.decimal = decimal; + firePropertyChange(PROPERTY_DECIMAL, oldValue, decimal); + } + + /** + * @return {@code true} si aucune composante n'est renseignée, + * {@code false} autrement. + */ + public boolean isNull() { + return degree == null && minute == null && decimal == null; + } + + public boolean isDegreeNull() { + return degree == null || degree == 0; + } + + public boolean isMinuteNull() { + return minute == null || minute == 0; + } + + public boolean isDecimalNull() { + return decimal == null || decimal == 0; + } + + /** + * Mets a jour les composants de la position a partir d'une valeur decimal. + * <p/> + * Note : Si la valeur (au format decimal) vaut <code>null</code>, alors on + * reinitialise les composants de la position a <code>null</code> et la + * methode {@link #isNull()} vaudra alors {@code true}. + * + * @param decimalValue la valeur decimale a convertir (qui peut etre nulle). + */ + public void fromDecimal(Float decimalValue) { + Integer d = null; + Integer m = null; + Integer dc = null; + boolean si = false; + if (decimalValue != null) { + si = decimalValue < 0; + + float absDecimal = Math.abs(decimalValue); + + d = (int) (Math.round(absDecimal + 0.5) - 1); + int rest = Math.round(100 * 60.0f * (absDecimal - d)); + if (rest > 0) { + m = rest / 100; + dc = (rest - m * 100); + + // clean not used values + if (m == 0) { + m = null; + } + if (dc == 0) { + dc = null; + } + } + if (d == 0) { + d = null; + } + } + + degree = d; + minute = m; + decimal = dc; + sign = si; + } + + public Float toDecimal() { + if (isNull()) { + return null; + } + Integer d = getNotNullDegree(); + Integer m = getNotNullMinute(); + Integer dc = getNotNullDecimal(); + Float result = Float.valueOf(d); + result += (m + (dc / 100f)) / 60.0f; + if (sign) { + result *= -1; + } + return result; + } + + public Integer getSignedDegree() { + Integer result = null; + if (!isDegreeNull()) { + result = degree; + if (isSign()) { + result *= -1; + } + } + return result; + } + + public int getNotNullDegree() { + return isDegreeNull() ? 0 : degree; + } + + public int getNotNullMinute() { + return isMinuteNull() ? 0 : minute; + } + + public int getNotNullDecimal() { + return isDecimalNull() ? 0 : decimal; + } + + public boolean isLatitudeDegreeValid() { + boolean result = isDegreeValid(false); + return result; + } + + public boolean isLongitudeDegreeValid() { + boolean result = isDegreeValid(true); + return result; + } + + public boolean isMinuteValid() { + boolean result = true; + if (!isMinuteNull()) { + if (minute == 60) { + + // can not have decimal + result = isDecimalNull(); + } else { + result = 0 <= minute && minute < 60; + } + } + return result; + } + + public boolean isDecimalValid() { + boolean result = isDecimalNull() || (0 <= decimal && decimal < 100); + return result; + } + + @Override + public String toString() { + return "DmdCoordinateComponent{" + + "sign=" + sign + + ", degree=" + degree + + ", minute=" + minute + + ", decimal=" + decimal + + '}'; + } + + protected boolean isDegreeValid(boolean longitude) { + boolean result = true; + if (!isDegreeNull()) { + int bound = longitude ? 180 : 90; + if (bound == degree) { + + // can not have minute nor decimal + result = isMinuteNull() && isDecimalNull(); + } else { + result = 0 <= degree && degree < bound; + } + } + return result; + } + +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinate.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.css 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,40 @@ +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +#toolbarLeft { + floatable:false; + borderPainted:false; + visible:{isShowReset()}; +} + +#resetButton { + actionIcon:"combobox-reset"; + toolTipText: {getShowResetTip()}; + focusable:false; + focusPainted:false; + enabled:{isEnabled()}; +} + +#editor { + enabled:{isEnabled()}; +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,61 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<JPanel id='editorPanel' layout='{new BorderLayout()}' + onFocusGained='editor.requestFocus()'> + <import> + java.io.Serializable + java.awt.BorderLayout + javax.swing.JFormattedTextField + </import> + + <!-- show reset property --> + <Boolean id='showReset' javaBean='false'/> + + <!-- show reset tip --> + <String id='showResetTip' javaBean=''/> + + <!-- model --> + <DmdCoordinateEditorModel id='model'/> + + <!-- handler --> + <DmdCoordinateEditorHandler id='handler' constructorParams='this'/> + + <script><![CDATA[ +public void init() { handler.init(); } +public void setBean(Serializable bean) { model.setBean(bean); } +public void setPropertySign(String property ) { model.setPropertySign(property); } +public void setPropertyDegree(String property ) { model.setPropertyDegree(property); } +public void setPropertyMinute(String property ) { model.setPropertyMinute(property); } +public void setPropertyDecimal(String property ) { model.setPropertyDecimal(property); } +public void setLongitudeEditor(boolean longitudeEditor) { model.setLongitudeEditor(longitudeEditor); } +public void setValue(DmdCoordinate value) { handler.setValue(value, false); } +]]> + </script> + + <JToolBar id='toolbarLeft' constraints='BorderLayout.WEST'> + <JButton id='resetButton' onActionPerformed='handler.resetEditor()'/> + </JToolBar> + <JFormattedTextField id='editor' constraints='BorderLayout.CENTER' + onKeyReleased='handler.onKeyReleased(event)'/> +</JPanel> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditor.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorHandler.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,358 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.TuttiTechnicalException; +import jaxx.runtime.swing.editor.bean.BeanUIUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JFormattedTextField; +import javax.swing.text.DefaultFormatterFactory; +import javax.swing.text.MaskFormatter; +import java.awt.event.KeyEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Method; +import java.text.ParseException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created on 10/16/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmdCoordinateEditorHandler { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(DmdCoordinateEditorHandler.class); + + protected static final Pattern VALUE_PATTERN = Pattern.compile("(.*)°(.*)'(.*)"); + + private final DmdCoordinateEditor ui; + + protected Method signMutator; + + protected Method degreMutator; + + protected Method minuteMutator; + + protected Method decimalMutator; + + protected DefaultFormatterFactory unsignedFactory; + + protected DefaultFormatterFactory signedFactory; + + protected boolean valueIsAdjusting; + + protected boolean valueModelIsAdjusting; + + public DmdCoordinateEditorHandler(DmdCoordinateEditor ui) { + this.ui = ui; + } + + public void init() { + + final DmdCoordinateEditorModel model = ui.getModel(); + + Preconditions.checkNotNull(model.getBean(), "could not find bean in " + ui); + Preconditions.checkNotNull(model.getPropertySign(), "could not find propertySign in " + ui); + Preconditions.checkNotNull(model.getPropertyDegree(), "could not find propertyDegree in " + ui); + Preconditions.checkNotNull(model.getPropertyMinute(), "could not find propertyMinute in " + ui); + Preconditions.checkNotNull(model.getPropertyDecimal(), "could not find propertyDecimal in " + ui); + + Object bean = model.getBean(); + signMutator = BeanUIUtil.getMutator(bean, model.getPropertySign()); + Preconditions.checkNotNull(signMutator, "could not find mutator for " + model.getPropertySign()); + + degreMutator = BeanUIUtil.getMutator(bean, model.getPropertyDegree()); + Preconditions.checkNotNull(degreMutator, "could not find mutator for " + model.getPropertyDegree()); + + minuteMutator = BeanUIUtil.getMutator(bean, model.getPropertyMinute()); + Preconditions.checkNotNull(minuteMutator, "could not find mutator for " + model.getPropertyMinute()); + + decimalMutator = BeanUIUtil.getMutator(bean, model.getPropertyDecimal()); + Preconditions.checkNotNull(decimalMutator, "could not find mutator for " + model.getPropertyDecimal()); + + MaskFormatter unsignedFormatter; + try { + + String pattern = model.getMaskFormatterPattern(); + unsignedFormatter = new MaskFormatter(pattern); + unsignedFormatter.setValidCharacters(" 01234567890"); + } catch (ParseException e) { + // can't happen here + throw new TuttiTechnicalException(e); + } + unsignedFactory = new DefaultFormatterFactory(unsignedFormatter); + + MaskFormatter signedFormatter; + try { + + String pattern = model.getMaskFormatterPattern(); + signedFormatter = new MaskFormatter("-" + pattern); + signedFormatter.setValidCharacters(" 01234567890"); + } catch (ParseException e) { + // can't happen here + throw new TuttiTechnicalException(e); + } + signedFactory = new DefaultFormatterFactory(signedFormatter); + + JFormattedTextField editor = ui.getEditor(); + editor.setFormatterFactory(unsignedFactory); + editor.setFocusLostBehavior(JFormattedTextField.COMMIT); + + // When editor changes his value, propagate it to model + editor.addPropertyChangeListener("value", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + String newValue = (String) evt.getNewValue(); + if (log.isDebugEnabled()) { + log.debug("Value has changed: " + newValue); + } + DmdCoordinate value = null; + if (newValue != null) { + + Matcher matcher = VALUE_PATTERN.matcher(newValue); + + if (matcher.matches()) { + + String degresStr = matcher.group(1).replaceAll("\\s", ""); + String minutesStr = matcher.group(2).replaceAll("\\s", ""); + String decimalesStr = matcher.group(3).replaceAll("\\s", ""); + + Integer degre = degresStr.isEmpty() || "-".equals(degresStr) ? 0 : Integer.valueOf(degresStr); + Integer minutes = minutesStr.isEmpty() ? 0 : Integer.valueOf(minutesStr); + Integer decimal = decimalesStr.isEmpty() ? 0 : Integer.valueOf(decimalesStr); + + boolean signed = degre < 0; + value = + DmdCoordinate.valueOf(signed, + Math.abs(degre), + minutes, + decimal); + } + } + model.setValue(value); + } + }); + + // When model sign changed, let's push it back in bean + model.addPropertyChangeListener( + DmdCoordinateEditorModel.PROPERTY_SIGN, + new ModelPropertyChangeListener(model, signMutator)); + + // When model degre changed, let's push it back in bean + model.addPropertyChangeListener( + DmdCoordinateEditorModel.PROPERTY_DEGREE, + new ModelPropertyChangeListener(model, degreMutator)); + + // When model minute changed, let's push it back in bean + model.addPropertyChangeListener( + DmdCoordinateEditorModel.PROPERTY_MINUTE, + new ModelPropertyChangeListener(model, minuteMutator)); + + // When model decimal changed, let's push it back in bean + model.addPropertyChangeListener( + DmdCoordinateEditorModel.PROPERTY_DECIMAL, + new ModelPropertyChangeListener(model, decimalMutator)); + } + + public void setValue(DmdCoordinate value, boolean pushToModel) { + + if (valueModelIsAdjusting) { + // avoid re-entrant code + return; + } + + String signStr = ""; + String degreeStr = ""; + String minuteStr = ""; + String decimalStr = ""; + + if (value != null) { + + boolean sign = value.isSign(); + signStr = sign ? "-" : ""; + + Integer degree = value.getDegree(); + degreeStr = degree == null ? "" : degree.toString(); + + Integer minute = value.getMinute(); + minuteStr = minute == null ? "" : minute.toString(); + + Integer decimal = value.getDecimal(); + decimalStr = decimal == null ? "" : decimal.toString(); + } + + DmdCoordinateEditorModel model = ui.getModel(); + + String stringPattern = model.getStringPattern(); + String valueStr = String.format( + stringPattern, + signStr, + StringUtils.leftPad(degreeStr, model.isLongitudeEditor() ? 3 : 2, ' '), + StringUtils.leftPad(minuteStr, 2, ' '), + StringUtils.leftPad(decimalStr, 2, ' ')); + + valueIsAdjusting = !pushToModel; + + try { + ui.getEditor().setValue(valueStr); + } finally { + valueIsAdjusting = false; + } + } + + public void resetEditor() { + // set null value to model + setValue(null, true); + + // use back unsigned format + ui.getEditor().setFormatterFactory(unsignedFactory); + } + + public void onKeyReleased(KeyEvent e) { + + JFormattedTextField source = (JFormattedTextField) e.getSource(); + + char keyChar = e.getKeyChar(); + int caretPosition = source.getCaretPosition(); + if (log.isDebugEnabled()) { + log.debug("Key pressed: " + keyChar + " (caret position: " + caretPosition + ")"); + } + + String newValue = null; + DefaultFormatterFactory newFactory = null; + if (keyChar == '-') { + + // try to switch unsigned to signed + + if (unsignedFactory == source.getFormatterFactory()) { + + // switch to signed + if (log.isDebugEnabled()) { + log.debug("Switch to signed"); + } + newFactory = signedFactory; + + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + + newValue = "-" + source.getValue(); + + } else { + // switch to unsigned + + if (log.isDebugEnabled()) { + log.debug("Switch to unsigned"); + } + newFactory = unsignedFactory; + + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + + newValue = ((String) source.getValue()).substring(1); + } + } else { + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + if (log.isDebugEnabled()) { + log.debug("Key pressed: newValue " + source.getValue()); + } + } + + if (newFactory != null) { + + // consume event (prevent any side-effects) + e.consume(); + + if (log.isDebugEnabled()) { + log.debug("Key pressed: newValue " + newValue); + } + source.setFormatterFactory(newFactory); + source.setValue(newValue); + + if (unsignedFactory == newFactory) { + + // remove a sign + caretPosition--; + } else { + + // add a sign + caretPosition++; + } + + source.setCaretPosition(caretPosition); + } + } + + private class ModelPropertyChangeListener implements PropertyChangeListener { + + private final DmdCoordinateEditorModel model; + + private final Method mutator; + + private ModelPropertyChangeListener(DmdCoordinateEditorModel model, + Method mutator) { + this.model = model; + this.mutator = mutator; + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (!valueIsAdjusting) { + Object newValue = evt.getNewValue(); + + try { + + valueModelIsAdjusting = true; + try { + mutator.invoke(model.getBean(), newValue); + } finally { + valueModelIsAdjusting = false; + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorModel.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,151 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.io.Serializable; + +/** + * Created on 10/16/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.9 + */ +public class DmdCoordinateEditorModel extends DmdCoordinate { + + public static final String PROPERTY_BEAN = "bean"; + + public static final String PROPERTY_PROPERTY_SIGN = "propertySign"; + + public static final String PROPERTY_PROPERTY_DEGREE = "propertyDegree"; + + public static final String PROPERTY_PROPERTY_MINUTE = "propertyMinute"; + + public static final String PROPERTY_PROPERTY_DECIMAL = "propertyDecimal"; + + public static final String PROPERTY_LONGITUDE_EDITOR = "longitudeEditor"; + + private static final long serialVersionUID = 1L; + + /** Bean where to push data. */ + protected Serializable bean; + + /** Name of the property of the bean to fire the change of the {@link #sign}. */ + protected String propertySign; + + /** Name of the property of the bean to fire the change of the {@link #degree}. */ + protected String propertyDegre; + + /** Name of the property of the bean to fire the change of the {@link #minute}. */ + protected String propertyMinute; + + /** Name of the property of the bean to fire the change of the {@link #decimal}. */ + protected String propertyDecimal; + + /** + * {@code true} if longitude editor, {@code false} for latitude editor. + */ + protected boolean longitudeEditor; + + public Serializable getBean() { + return bean; + } + + public void setBean(Serializable bean) { + Object oldValue = getBean(); + this.bean = bean; + firePropertyChange(PROPERTY_BEAN, oldValue, bean); + } + + public String getPropertySign() { + return propertySign; + } + + public void setPropertySign(String propertySign) { + Object oldValue = getPropertySign(); + this.propertySign = propertySign; + firePropertyChange(PROPERTY_PROPERTY_SIGN, oldValue, propertySign); + } + + public String getPropertyDegree() { + return propertyDegre; + } + + public void setPropertyDegree(String propertyDegree) { + Object oldValue = getPropertyDegree(); + this.propertyDegre = propertyDegree; + firePropertyChange(PROPERTY_PROPERTY_DEGREE, oldValue, propertyDegree); + } + + public String getPropertyMinute() { + return propertyMinute; + } + + public void setPropertyMinute(String propertyMinute) { + Object oldValue = getPropertyMinute(); + this.propertyMinute = propertyMinute; + firePropertyChange(PROPERTY_PROPERTY_MINUTE, oldValue, propertyMinute); + } + + public String getPropertyDecimal() { + return propertyDecimal; + } + + public void setPropertyDecimal(String propertyDecimal) { + Object oldValue = getPropertyDecimal(); + this.propertyDecimal = propertyDecimal; + firePropertyChange(PROPERTY_PROPERTY_DECIMAL, oldValue, propertyDecimal); + } + + public boolean isLongitudeEditor() { + return longitudeEditor; + } + + public void setLongitudeEditor(boolean longitudeEditor) { + Object oldValue = isLongitudeEditor(); + this.longitudeEditor = longitudeEditor; + firePropertyChange(PROPERTY_BEAN, oldValue, longitudeEditor); + } + + public void setValue(DmdCoordinate value) { + setSign(value != null && value.isSign()); + setDegree(value == null ? null : value.getDegree()); + setMinute(value == null ? null : value.getMinute()); + setDecimal(value == null ? null : value.getDecimal()); + } + + public String getMaskFormatterPattern() { + String pattern = "**°**''**"; + if (isLongitudeEditor()) { + // add one more degre + pattern = "*" + pattern; + } + return pattern; + } + + public String getStringPattern() { + String pattern = "%s%s°%s'%s"; + return pattern; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinate.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinate.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinate.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,324 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.jdesktop.beans.AbstractSerializableBean; + +/** + * Geo coordinate in degree, minute, second format. + * <p/> + * Created on 10/23/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmsCoordinate extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_SIGN = "sign"; + + public static final String PROPERTY_DEGREE = "degree"; + + public static final String PROPERTY_MINUTE = "minute"; + + public static final String PROPERTY_SECOND = "second"; + + protected boolean sign; + + protected Integer degree; + + protected Integer minute; + + protected Integer second; + + public static DmsCoordinate empty() { + DmsCoordinate r = new DmsCoordinate(); + return r; + } + + /** + * Methode statique de fabrique de position a partir d'une valeur du format + * decimal. + * <p/> + * Note : Si la valeur (au format decimal) vaut <code>null</code>, alors on + * reinitialise les composants de la position a <code>null</code> et la + * methode {@link #isNull()} vaudra alors {@code true}. + * + * @param decimal la valeur au format decimal + * @return une nouvelle instance de position convertie + */ + public static DmsCoordinate valueOf(Float decimal) { + DmsCoordinate r = new DmsCoordinate(); + r.fromDecimal(decimal); + return r; + } + + /** + * Methode statique de fabrique de position a partir d'une valeur du format + * degre-minute-seconde. + * + * @param d la valeur des degres + * @param m la valeur des minutes + * @param s la valeur des secondes + * @return une nouvelle instance de position convertie + */ + public static DmsCoordinate valueOf(boolean sign, int d, int m, int s) { + DmsCoordinate r = new DmsCoordinate(); + r.setSign(sign); + r.setDegree(d); + r.setMinute(m); + r.setSecond(s); + return r; + } + + public boolean isSign() { + return sign; + } + + public Integer getDegree() { + return degree; + } + + public Integer getMinute() { + return minute; + } + + public Integer getSecond() { + return second; + } + + public void setSign(boolean sign) { + Object oldValue = isSign(); + this.sign = sign; + firePropertyChange(PROPERTY_SIGN, oldValue, sign); + } + + public void setDegree(Integer degree) { + Object oldValue = getDegree(); + this.degree = degree; + firePropertyChange(PROPERTY_DEGREE, oldValue, degree); + } + + public void setMinute(Integer minute) { + Object oldValue = getMinute(); + this.minute = minute; + firePropertyChange(PROPERTY_MINUTE, oldValue, minute); + } + + public void setSecond(Integer second) { + Object oldValue = getSecond(); + this.second = second; + firePropertyChange(PROPERTY_SECOND, oldValue, second); + } + + public boolean isDegreeNull() { + return degree == null || degree == 0; + } + + public boolean isMinuteNull() { + return minute == null || minute == 0; + } + + public boolean isSecondNull() { + return second == null || second == 0; + } + + /** + * @return {@code true} si aucune composante n'est renseignée, + * {@code false} autrement. + */ + public boolean isNull() { + return degree == null && minute == null && second == null; + } + + /** + * Mets a jour les composants de la position a partir d'une valeur decimal. + * <p/> + * Note : Si la valeur (au format decimal) vaut <code>null</code>, alors on + * reinitialise les composants de la position a <code>null</code> et la + * methode {@link #isNull()} vaudra alors {@code true}. + * + * @param decimal la valeur decimale a convertir (qui peut etre nulle). + */ + public void fromDecimal(Float decimal) { + Integer d = null; + Integer m = null; + Integer s = null; + boolean si = false; + if (decimal != null) { + si = decimal < 0; + + decimal = Math.abs(decimal); + int remain = 0; + + d = (int) (Math.round(decimal + 0.5) - 1); + m = 0; + s = 0; + decimal = 60.0f * (decimal - d); + if (decimal > 0) { + m = (int) (Math.round(decimal + 0.5) - 1); + decimal = 60 * (decimal - m); + if (decimal > 0) { + s = (int) (Math.round(decimal + 0.5) - 1); + remain = (int) (10 * (decimal - s)); + } + } + if (remain > 9) { + s++; + } + if (s == 60) { + m++; + s = 0; + } + if (m == 60) { + d++; + m = 0; + } + + // clean not used values + if (m == 0) { + m = null; + } + if (s == 0) { + s = null; + } + } + + if (d == 0) { + d = null; + } + degree = d; + minute = m; + second = s; + sign = si; + + } + + public Float toDecimal() { + if (isNull()) { + return null; + } + Integer d = getNotNullDegree(); + Integer m = getNotNullMinute(); + + Integer s = getNotNullSecond(); + + Float result = Float.valueOf(d); + + if (m > 0) { + result += (float) m / 60; + if (s == 0) { + result += 0.5f / 3600; + } + } + if (s > 0) { + result += ((float) s + 0.5f) / 3600; + } + + if (sign) { + result *= -1; + } + return result; + } + + public Integer getSignedDegree() { + Integer result = null; + if (!isDegreeNull()) { + result = degree; + if (isSign()) { + result *= -1; + } + } + return result; + } + + public int getNotNullDegree() { + return isDegreeNull() ? 0 : degree; + } + + public int getNotNullMinute() { + return isMinuteNull() ? 0 : minute; + } + + + public int getNotNullSecond() { + return isSecondNull() ? 0 : second; + } + + public boolean isLatitudeDegreeValid() { + boolean result = isDegreeValid(false); + return result; + } + + public boolean isLongitudeDegreeValid() { + boolean result = isDegreeValid(true); + return result; + } + + public boolean isMinuteValid() { + boolean result = true; + if (!isMinuteNull()) { + if (60 == minute) { + + // check minute and second are null + result = isSecondNull(); + } else { + result = 0 <= minute && minute < 60; + } + } + return result; + } + + public boolean isSecondValid() { + boolean result = isSecondNull() || (0 <= second && second < 60); + return result; + } + + @Override + public String toString() { + return "DmsCoordinateComponent{" + + "sign=" + sign + + ", degree=" + degree + + ", minute=" + minute + + ", second=" + second + + '}'; + } + + protected boolean isDegreeValid(boolean longitude) { + boolean result = true; + if (!isDegreeNull()) { + int bound = longitude ? 180 : 90; + if (bound == degree) { + + // check minute and second are null + result = isMinuteNull() && isSecondNull(); + } else { + result = degree < bound; + } + } + return result; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinate.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.css 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,40 @@ +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +#toolbarLeft { + floatable:false; + borderPainted:false; + visible:{isShowReset()}; +} + +#resetButton { + actionIcon:"combobox-reset"; + toolTipText: {getShowResetTip()}; + focusable:false; + focusPainted:false; + enabled:{isEnabled()}; +} + +#editor { + enabled:{isEnabled()}; +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.jaxx 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,62 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<JPanel id='editorPanel' layout='{new BorderLayout()}' + onFocusGained='editor.requestFocus()'> + <import> + java.io.Serializable + java.awt.BorderLayout + javax.swing.JFormattedTextField + </import> + + <!-- show reset property --> + + <Boolean id='showReset' javaBean='false'/> + + <!-- show reset tip --> + <String id='showResetTip' javaBean=''/> + + <!-- model --> + <DmsCoordinateEditorModel id='model'/> + + <!-- handler --> + <DmsCoordinateEditorHandler id='handler' constructorParams='this'/> + + <script><![CDATA[ +public void init() { handler.init(); } +public void setBean(Serializable bean) { model.setBean(bean); } +public void setPropertySign(String property ) { model.setPropertySign(property); } +public void setPropertyDegree(String property ) { model.setPropertyDegree(property); } +public void setPropertyMinute(String property ) { model.setPropertyMinute(property); } +public void setPropertySecond(String property ) { model.setPropertySecond(property); } +public void setLongitudeEditor(boolean longitudeEditor) { model.setLongitudeEditor(longitudeEditor); } +public void setValue(DmsCoordinate value) { handler.setValue(value, false); } +]]> + </script> + + <JToolBar id='toolbarLeft' constraints='BorderLayout.WEST'> + <JButton id='resetButton' onActionPerformed='handler.resetEditor()'/> + </JToolBar> + <JFormattedTextField id='editor' constraints='BorderLayout.CENTER' + onKeyReleased='handler.onKeyReleased(event)'/> +</JPanel> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditor.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorHandler.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,357 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.TuttiTechnicalException; +import jaxx.runtime.swing.editor.bean.BeanUIUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JFormattedTextField; +import javax.swing.text.DefaultFormatterFactory; +import javax.swing.text.MaskFormatter; +import java.awt.event.KeyEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Method; +import java.text.ParseException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created on 10/16/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmsCoordinateEditorHandler { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(DmsCoordinateEditorHandler.class); + + protected static final Pattern VALUE_PATTERN = + Pattern.compile("(.*)°(.*)'(.*)''"); + + private final DmsCoordinateEditor ui; + + protected Method signMutator; + + protected Method degreMutator; + + protected Method minuteMutator; + + protected Method secondMutator; + + protected DefaultFormatterFactory unsignedFactory; + + protected DefaultFormatterFactory signedFactory; + + protected boolean valueIsAdjusting; + + protected boolean valueModelIsAdjusting; + + public DmsCoordinateEditorHandler(DmsCoordinateEditor ui) { + this.ui = ui; + } + + public void init() { + + final DmsCoordinateEditorModel model = ui.getModel(); + + Preconditions.checkNotNull(model.getBean(), "could not find bean in " + ui); + Preconditions.checkNotNull(model.getPropertySign(), "could not find propertySign in " + ui); + Preconditions.checkNotNull(model.getPropertyDegree(), "could not find propertyDegree in " + ui); + Preconditions.checkNotNull(model.getPropertyMinute(), "could not find propertyMinute in " + ui); + Preconditions.checkNotNull(model.getPropertySecond(), "could not find propertySecond in " + ui); + + Object bean = model.getBean(); + signMutator = BeanUIUtil.getMutator(bean, model.getPropertySign()); + Preconditions.checkNotNull(signMutator, "could not find mutator for " + model.getPropertySign()); + + degreMutator = BeanUIUtil.getMutator(bean, model.getPropertyDegree()); + Preconditions.checkNotNull(degreMutator, "could not find mutator for " + model.getPropertyDegree()); + + minuteMutator = BeanUIUtil.getMutator(bean, model.getPropertyMinute()); + Preconditions.checkNotNull(minuteMutator, "could not find mutator for " + model.getPropertyMinute()); + + secondMutator = BeanUIUtil.getMutator(bean, model.getPropertySecond()); + Preconditions.checkNotNull(secondMutator, "could not find mutator for " + model.getPropertySecond()); + + MaskFormatter unsignedFormatter; + try { + + String pattern = model.getMaskFormatterPattern(); + unsignedFormatter = new MaskFormatter(pattern); + unsignedFormatter.setValidCharacters(" 01234567890"); + } catch (ParseException e) { + // can't happen here + throw new TuttiTechnicalException(e); + } + unsignedFactory = new DefaultFormatterFactory(unsignedFormatter); + + MaskFormatter signedFormatter; + try { + + String pattern = model.getMaskFormatterPattern(); + signedFormatter = new MaskFormatter("-" + pattern); + signedFormatter.setValidCharacters(" 01234567890"); + } catch (ParseException e) { + // can't happen here + throw new TuttiTechnicalException(e); + } + signedFactory = new DefaultFormatterFactory(signedFormatter); + + JFormattedTextField editor = ui.getEditor(); + editor.setFormatterFactory(unsignedFactory); + editor.setFocusLostBehavior(JFormattedTextField.COMMIT); + + // When editor changes his value, propagate it to model + editor.addPropertyChangeListener("value", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + String newValue = (String) evt.getNewValue(); + if (log.isDebugEnabled()) { + log.debug("Value has changed: " + newValue); + } + DmsCoordinate value = null; + if (newValue != null) { + + Matcher matcher = VALUE_PATTERN.matcher(newValue); + + if (matcher.matches()) { + + String degresStr = matcher.group(1).replaceAll("\\s",""); + String minutesStr = matcher.group(2).replaceAll("\\s", ""); + String secondsStr = matcher.group(3).replaceAll("\\s", ""); + + Integer degre = degresStr.isEmpty() || "-".equals(degresStr) ? 0 : Integer.valueOf(degresStr); + Integer minutes = minutesStr.isEmpty() ? 0 : Integer.valueOf(minutesStr); + Integer seconds = secondsStr.isEmpty() ? 0 : Integer.valueOf(secondsStr); + + boolean signed = degre < 0; + value = + DmsCoordinate.valueOf(signed, + Math.abs(degre), + minutes, + seconds); + } + } + model.setValue(value); + } + }); + + // When model sign changed, let's push it back in bean + model.addPropertyChangeListener( + DmsCoordinateEditorModel.PROPERTY_SIGN, + new ModelPropertyChangeListener(model, signMutator)); + + // When model degre changed, let's push it back in bean + model.addPropertyChangeListener( + DmsCoordinateEditorModel.PROPERTY_DEGREE, + new ModelPropertyChangeListener(model, degreMutator)); + + // When model minute changed, let's push it back in bean + model.addPropertyChangeListener( + DmsCoordinateEditorModel.PROPERTY_MINUTE, + new ModelPropertyChangeListener(model, minuteMutator)); + + // When model second changed, let's push it back in bean + model.addPropertyChangeListener( + DmsCoordinateEditorModel.PROPERTY_SECOND, + new ModelPropertyChangeListener(model, secondMutator)); + } + + public void setValue(DmsCoordinate value, boolean pushToModel) { + + if (valueModelIsAdjusting) { + // avoid re-entrant code + return; + } + + String signStr = ""; + String degreeStr = ""; + String minuteStr = ""; + String secondStr = ""; + if (value != null) { + + boolean sign = value.isSign(); + signStr = sign ? "-" : ""; + + Integer degree = value.getDegree(); + degreeStr = degree == null ? "" : degree.toString(); + + Integer minute = value.getMinute(); + minuteStr = minute == null ? "" : minute.toString(); + + Integer second = value.getSecond(); + secondStr = second == null ? "" : second.toString(); + } + + DmsCoordinateEditorModel model = ui.getModel(); + String stringPattern = model.getStringPattern(); + String valueStr = String.format( + stringPattern, + signStr, + StringUtils.leftPad(degreeStr, model.isLongitudeEditor() ? 3 : 2, ' '), + StringUtils.leftPad(minuteStr, 2, ' '), + StringUtils.leftPad(secondStr, 2, ' ')); + + valueIsAdjusting = !pushToModel; + + try { + ui.getEditor().setValue(valueStr); + } finally { + valueIsAdjusting = false; + } + } + + public void resetEditor() { + // set null value to model + setValue(null, true); + + // use back unsigned format + ui.getEditor().setFormatterFactory(unsignedFactory); + } + + public void onKeyReleased(KeyEvent e) { + + JFormattedTextField source = (JFormattedTextField) e.getSource(); + + char keyChar = e.getKeyChar(); + int caretPosition = source.getCaretPosition(); + if (log.isDebugEnabled()) { + log.debug("Key pressed: " + keyChar + " (caret position: " + caretPosition + ")"); + } + + String newValue = null; + DefaultFormatterFactory newFactory = null; + if (keyChar == '-') { + + // try to switch unsigned to signed + + if (unsignedFactory == source.getFormatterFactory()) { + + // switch to signed + if (log.isDebugEnabled()) { + log.debug("Switch to signed"); + } + newFactory = signedFactory; + + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + + newValue = "-" + source.getValue(); + + } else { + // switch to unsigned + + if (log.isDebugEnabled()) { + log.debug("Switch to unsigned"); + } + newFactory = unsignedFactory; + + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + + newValue = ((String) source.getValue()).substring(1); + } + } else { + try { + source.commitEdit(); + } catch (ParseException e1) { + // ignore it + } + if (log.isDebugEnabled()) { + log.debug("Key pressed: newValue " + source.getValue()); + } + } + + if (newFactory != null) { + + // consume event (prevent any side-effects) + e.consume(); + + + if (log.isDebugEnabled()) { + log.debug("Key pressed: newValue " + newValue); + } + source.setFormatterFactory(newFactory); + source.setValue(newValue); + + if (unsignedFactory == newFactory) { + + // remove a sign + caretPosition--; + } else { + + // add a sign + caretPosition++; + } + + source.setCaretPosition(caretPosition); + } + } + + private class ModelPropertyChangeListener implements PropertyChangeListener { + + private final DmsCoordinateEditorModel model; + + private final Method mutator; + + private ModelPropertyChangeListener(DmsCoordinateEditorModel model, Method mutator) { + this.model = model; + this.mutator = mutator; + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (!valueIsAdjusting) { + Object newValue = evt.getNewValue(); + + try { + + valueModelIsAdjusting = true; + try { + mutator.invoke(model.getBean(), newValue); + } finally { + valueModelIsAdjusting = false; + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorModel.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,151 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.io.Serializable; + +/** + * Created on 10/16/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmsCoordinateEditorModel extends DmsCoordinate { + + public static final String PROPERTY_BEAN = "bean"; + + public static final String PROPERTY_PROPERTY_SIGN = "propertySign"; + + public static final String PROPERTY_PROPERTY_DEGREE = "propertyDegree"; + + public static final String PROPERTY_PROPERTY_MINUTE = "propertyMinute"; + + public static final String PROPERTY_PROPERTY_SECOND = "propertySecond"; + + public static final String PROPERTY_LONGITUDE_EDITOR = "longitudeEditor"; + + private static final long serialVersionUID = 1L; + + /** Bean where to push data. */ + protected Serializable bean; + + /** Name of the property of the bean to fire the change of the {@link #sign}. */ + protected String propertySign; + + /** Name of the property of the bean to fire the change of the {@link #degree}. */ + protected String propertyDegree; + + /** Name of the property of the bean to fire the change of the {@link #minute}. */ + protected String propertyMinute; + + /** Name of the property of the bean to fire the change of the {@link #second}. */ + protected String propertySecond; + + /** + * {@code true} if longitude editor, {@code false} for latitude editor. + */ + protected boolean longitudeEditor; + + public Serializable getBean() { + return bean; + } + + public void setBean(Serializable bean) { + Object oldValue = getBean(); + this.bean = bean; + firePropertyChange(PROPERTY_BEAN, oldValue, bean); + } + + public String getPropertySign() { + return propertySign; + } + + public void setPropertySign(String propertySign) { + Object oldValue = getPropertySign(); + this.propertySign = propertySign; + firePropertyChange(PROPERTY_PROPERTY_SIGN, oldValue, propertySign); + } + + public String getPropertyDegree() { + return propertyDegree; + } + + public void setPropertyDegree(String propertyDegree) { + Object oldValue = getPropertyDegree(); + this.propertyDegree = propertyDegree; + firePropertyChange(PROPERTY_PROPERTY_DEGREE, oldValue, propertyDegree); + } + + public String getPropertyMinute() { + return propertyMinute; + } + + public void setPropertyMinute(String propertyMinute) { + Object oldValue = getPropertyMinute(); + this.propertyMinute = propertyMinute; + firePropertyChange(PROPERTY_PROPERTY_MINUTE, oldValue, propertyMinute); + } + + public String getPropertySecond() { + return propertySecond; + } + + public void setPropertySecond(String propertySecond) { + Object oldValue = getPropertySecond(); + this.propertySecond = propertySecond; + firePropertyChange(PROPERTY_PROPERTY_SECOND, oldValue, propertySecond); + } + + public boolean isLongitudeEditor() { + return longitudeEditor; + } + + public void setLongitudeEditor(boolean longitudeEditor) { + Object oldValue = isLongitudeEditor(); + this.longitudeEditor = longitudeEditor; + firePropertyChange(PROPERTY_BEAN, oldValue, longitudeEditor); + } + + public void setValue(DmsCoordinate value) { + setSign(value != null && value.isSign()); + setDegree(value == null ? null : value.getDegree()); + setMinute(value == null ? null : value.getMinute()); + setSecond(value == null ? null : value.getSecond()); + } + + public String getMaskFormatterPattern() { + String pattern = "**°**''**''''"; + if (isLongitudeEditor()) { + // add one more degre + pattern = "*" + pattern; + } + return pattern; + } + + public String getStringPattern() { + String pattern = "%s%s°%s'%s''"; + return pattern; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -39,6 +39,8 @@ import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.spatial.DmdCoordinateEditor; +import fr.ifremer.tutti.ui.swing.spatial.DmsCoordinateEditor; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; @@ -660,6 +662,12 @@ } else if (component instanceof JScrollPane) { initScrollPane((JScrollPane) component); + } else if (component instanceof DmsCoordinateEditor) { + + initCoordinateDMSEditor((DmsCoordinateEditor) component); + } else if (component instanceof DmdCoordinateEditor) { + + initCoordinateDMDEditor((DmdCoordinateEditor) component); } } @@ -883,6 +891,14 @@ } } + protected void initCoordinateDMSEditor(DmsCoordinateEditor editor) { + editor.init(); + } + + protected void initCoordinateDMDEditor(DmdCoordinateEditor editor) { + editor.init(); + } + protected void initDatePicker(final JXDatePicker picker) { if (log.isDebugEnabled()) { Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CoordinateEditorType.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CoordinateEditorType.java 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/CoordinateEditorType.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -1,36 +0,0 @@ - -package fr.ifremer.tutti.ui.swing.util.editor; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -/** - * @author kmorin <kmorin@codelutin.com> - * @since 1.0 - */ -public enum CoordinateEditorType { - - DMS, DD, DMD - -} Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-warning-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-warning-validation.xml 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-warning-validation.xml 2013-10-25 16:43:35 UTC (rev 1316) @@ -32,7 +32,7 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> <![CDATA[ name == null || name.equals(getGeneratedCampaignName()) ]]></param> - <message>tutti.validator.warning.cruise.name.format</message> + <message>tutti.validator.error.cruise.name.format</message> </field-validator> </field> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-10-25 16:43:35 UTC (rev 1316) @@ -29,584 +29,356 @@ <validators> - <field name="gearShootingStartLatitudeDegree"> + <field name="gearShootingStartLatitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDegree() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.latitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - ( -ints.min < getGearShootingStartLatitudeDegree() && getGearShootingStartLatitudeDegree() < ints.max ) - || ( - ( getGearShootingStartLatitudeDegree() == ints.max || getGearShootingStartLatitudeDegree() == -ints.min ) - && ( getGearShootingStartLatitudeMinute() == null || getGearShootingStartLatitudeMinute() == 0 ) - && ( getGearShootingStartLatitudeSecond() == null || getGearShootingStartLatitudeSecond() == 0 ) - ) - ) - ]]> + <![CDATA[ gearShootingStartLatitudeDms.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeDecimalDegree"> + <field name="gearShootingStartLatitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - ( -ints.min < getGearShootingStartLatitudeDecimalDegree() && getGearShootingStartLatitudeDecimalDegree() < ints.max ) - || ( - ( getGearShootingStartLatitudeDecimalDegree() == ints.max || getGearShootingStartLatitudeDecimalDegree() == -ints.min ) - && ( getGearShootingStartLatitudeDecimalMinute() == null || getGearShootingStartLatitudeDecimalMinute() == 0.0 ) - ) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> + <field name="gearShootingStartLatitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingStartLatitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.latitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeMinute"> + <field name="gearShootingStartLatitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeMinute() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.latitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeDecimalMinute"> + <field name="gearShootingStartLatitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( doubles.min <= getGearShootingStartLatitudeDecimalMinute() && getGearShootingStartLatitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLatitudeSecond"> + <field name="gearShootingStartLatitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeSecond() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.latitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLongitudeDegree"> + <field name="gearShootingStartLongitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDegree() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.longitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingStartLongitudeDegree() && getGearShootingStartLongitudeDegree() < ints.max) - || ( - ( getGearShootingStartLongitudeDegree() == ints.max || getGearShootingStartLongitudeDegree() == -ints.min ) - && ( getGearShootingStartLongitudeMinute() == null || getGearShootingStartLongitudeMinute() == 0 ) - && ( getGearShootingStartLongitudeSecond() == null || getGearShootingStartLongitudeSecond() == 0 ) - ) - ) - ]]> + <![CDATA[ gearShootingStartLongitudeDms.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeDecimalDegree"> + <field name="gearShootingStartLongitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingStartLongitudeDecimalDegree() && getGearShootingStartLongitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingStartLongitudeDecimalDegree() == ints.max || getGearShootingStartLongitudeDecimalDegree() == -ints.min ) - && ( getGearShootingStartLongitudeDecimalMinute() == null || getGearShootingStartLongitudeDecimalMinute() == 0.0 ) - ) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> + <field name="gearShootingStartLongitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingStartLongitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.longitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeMinute"> + <field name="gearShootingStartLongitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.longitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeDecimalMinute"> + <field name="gearShootingStartLongitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( doubles.min <= getGearShootingStartLongitudeDecimalMinute() && getGearShootingStartLongitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLongitudeSecond"> + <field name="gearShootingStartLongitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeSecond() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.longitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLatitudeDegree"> + <field name="gearShootingEndLatitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDegree() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.latitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingEndLatitudeDegree() && getGearShootingEndLatitudeDegree() < ints.max) - || ( - ( getGearShootingEndLatitudeDegree() == ints.max || getGearShootingEndLatitudeDegree() == -ints.min ) - && ( getGearShootingEndLatitudeMinute() == null || getGearShootingEndLatitudeMinute() == 0 ) - && ( getGearShootingEndLatitudeSecond() == null || getGearShootingEndLatitudeSecond() == 0 ) - ) - ) - ]]> + <![CDATA[ gearShootingEndLatitudeDms.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeDecimalDegree"> + <field name="gearShootingEndLatitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingEndLatitudeDecimalDegree() && getGearShootingEndLatitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingEndLatitudeDecimalDegree() == ints.max || getGearShootingEndLatitudeDecimalDegree() == -ints.min ) - && ( getGearShootingEndLatitudeDecimalMinute() == null || getGearShootingEndLatitudeDecimalMinute() == 0.0 ) - ) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> + <field name="gearShootingEndLatitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingEndLatitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.latitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeMinute"> + <field name="gearShootingEndLatitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.latitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeDecimalMinute"> + <field name="gearShootingEndLatitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( doubles.min <= getGearShootingEndLatitudeDecimalMinute() && getGearShootingEndLatitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLatitudeSecond"> + <field name="gearShootingEndLatitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeSecond() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.latitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLongitudeDegree"> + <field name="gearShootingEndLongitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.longitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingEndLongitudeDegree() && getGearShootingEndLongitudeDegree() < ints.max) - || ( - ( getGearShootingEndLongitudeDegree() == ints.max || getGearShootingEndLongitudeDegree() == -ints.min ) - && ( getGearShootingEndLongitudeMinute() == null || getGearShootingEndLongitudeMinute() == 0 ) - && ( getGearShootingEndLongitudeSecond() == null || getGearShootingEndLongitudeSecond() == 0 ) - ) - ) - ]]> + <![CDATA[ gearShootingEndLongitudeDms.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeDecimalDegree"> + <field name="gearShootingEndLongitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - (-ints.min < getGearShootingEndLongitudeDecimalDegree() && getGearShootingEndLongitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingEndLongitudeDecimalDegree() == ints.max || getGearShootingEndLongitudeDecimalDegree() == -ints.min ) - && ( getGearShootingEndLongitudeDecimalMinute() == null || getGearShootingEndLongitudeDecimalMinute() == 0.0 ) - ) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> + <field name="gearShootingEndLongitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingEndLongitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.longitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeMinute"> + <field name="gearShootingEndLongitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.longitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeDecimalMinute"> + <field name="gearShootingEndLongitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( doubles.min <= getGearShootingEndLongitudeDecimalMinute() && getGearShootingEndLongitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLongitudeSecond"> + <field name="gearShootingEndLongitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeSecond() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.longitude.second.outOfBounds</message> - - </field-validator> - </field> </validators> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-10-25 16:43:35 UTC (rev 1316) @@ -22,621 +22,364 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> + + <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> + <validators> - <field name="gearShootingStartLatitudeDegree"> + <field name="gearShootingStartLatitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDegree() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.latitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - getGearShootingStartLatitudeDegree() != null && - (( -ints.min < getGearShootingStartLatitudeDegree() && getGearShootingStartLatitudeDegree() < ints.max ) - || ( - ( getGearShootingStartLatitudeDegree() == ints.max || getGearShootingStartLatitudeDegree() == -ints.min ) - && ( getGearShootingStartLatitudeMinute() == null || getGearShootingStartLatitudeMinute() == 0 ) - && ( getGearShootingStartLatitudeSecond() == null || getGearShootingStartLatitudeSecond() == 0 ) - )) - ) - ]]> + <![CDATA[ gearShootingStartLatitudeDms.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeDecimalDegree"> + <field name="gearShootingStartLatitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - getGearShootingStartLatitudeDecimalDegree() != null && - (( -ints.min < getGearShootingStartLatitudeDecimalDegree() && getGearShootingStartLatitudeDecimalDegree() < ints.max ) - || ( - ( getGearShootingStartLatitudeDecimalDegree() == ints.max || getGearShootingStartLatitudeDecimalDegree() == -ints.min ) - && ( getGearShootingStartLatitudeDecimalMinute() == null || getGearShootingStartLatitudeDecimalMinute() == 0.0 ) - )) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> + <field name="gearShootingStartLatitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingStartLatitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.latitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeMinute"> + <field name="gearShootingStartLatitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeMinute() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.latitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLatitudeMinute() != null - && ints.min <= getGearShootingStartLatitudeMinute() - && getGearShootingStartLatitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLatitudeDecimalMinute"> + <field name="gearShootingStartLatitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLatitudeDecimalMinute() != null - && doubles.min <= getGearShootingStartLatitudeDecimalMinute() - && getGearShootingStartLatitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLatitudeSecond"> + <field name="gearShootingStartLatitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLatitudeSecond() != null - ]]> + <![CDATA[ gearShootingStartLatitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.latitude.start.required</message> + <message>tutti.validator.error.latitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLatitudeSecond() != null - && ints.min <= getGearShootingStartLatitudeSecond() - && getGearShootingStartLatitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.latitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLongitudeDegree"> + <field name="gearShootingStartLongitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDegree() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.longitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - getGearShootingStartLongitudeDegree() != null && - ((-ints.min < getGearShootingStartLongitudeDegree() && getGearShootingStartLongitudeDegree() < ints.max) - || ( - ( getGearShootingStartLongitudeDegree() == ints.max || getGearShootingStartLongitudeDegree() == -ints.min ) - && ( getGearShootingStartLongitudeMinute() == null || getGearShootingStartLongitudeMinute() == 0 ) - && ( getGearShootingStartLongitudeSecond() == null || getGearShootingStartLongitudeSecond() == 0 ) - )) - ) - ]]> + <![CDATA[ gearShootingStartLongitudeDms.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeDecimalDegree"> + <field name="gearShootingStartLongitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - getGearShootingStartLongitudeDecimalDegree() != null && - (( -ints.min < getGearShootingStartLongitudeDecimalDegree() && getGearShootingStartLongitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingStartLongitudeDecimalDegree() == ints.max || getGearShootingStartLongitudeDecimalDegree() == -ints.min ) - && ( getGearShootingStartLongitudeDecimalMinute() == null || getGearShootingStartLongitudeDecimalMinute() == 0.0 ) - )) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> + <field name="gearShootingStartLongitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingStartLongitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.longitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeMinute"> + <field name="gearShootingStartLongitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.longitude.start.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLongitudeMinute() != null - && ints.min <= getGearShootingStartLongitudeMinute() - && getGearShootingStartLongitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingStartLongitudeDecimalMinute"> + <field name="gearShootingStartLongitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLongitudeDecimalMinute() != null - && doubles.min <= getGearShootingStartLongitudeDecimalMinute() - && getGearShootingStartLongitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingStartLongitudeSecond"> + <field name="gearShootingStartLongitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingStartLongitudeSecond() != null - ]]> + <![CDATA[ gearShootingStartLongitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.longitude.start.required</message> + <message>tutti.validator.error.longitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingStartLongitudeSecond() != null - && ints.min <= getGearShootingStartLongitudeSecond() - && getGearShootingStartLongitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.longitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLatitudeDegree"> + <field name="gearShootingEndLatitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDegree() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.latitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - getGearShootingEndLatitudeDegree() != null && - (( -ints.min < getGearShootingEndLatitudeDegree() && getGearShootingEndLatitudeDegree() < ints.max) - || ( - ( getGearShootingEndLatitudeDegree() == ints.max || getGearShootingEndLatitudeDegree() == -ints.min ) - && ( getGearShootingEndLatitudeMinute() == null || getGearShootingEndLatitudeMinute() == 0 ) - && ( getGearShootingEndLatitudeSecond() == null || getGearShootingEndLatitudeSecond() == 0 ) - )) - ) - ]]> + <![CDATA[ gearShootingEndLatitudeDms.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeDecimalDegree"> + <field name="gearShootingEndLatitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - getGearShootingEndLatitudeDecimalDegree() != null && - (( -ints.min < getGearShootingEndLatitudeDecimalDegree() && getGearShootingEndLatitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingEndLatitudeDecimalDegree() == ints.max || getGearShootingEndLatitudeDecimalDegree() == -ints.min ) - && ( getGearShootingEndLatitudeDecimalMinute() == null || getGearShootingEndLatitudeDecimalMinute() == 0.0 ) - )) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.latitude.degree.outOfBounds</message> + <field name="gearShootingEndLatitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingEndLatitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.latitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeMinute"> + <field name="gearShootingEndLatitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.latitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLatitudeMinute() != null - && ints.min <= getGearShootingEndLatitudeMinute() - && getGearShootingEndLatitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.latitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - + <message>tutti.validator.error.latitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLatitudeDecimalMinute"> + <field name="gearShootingEndLatitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLatitudeDecimalMinute() != null - && doubles.min <= getGearShootingEndLatitudeDecimalMinute() - && getGearShootingEndLatitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLatitudeSecond"> + <field name="gearShootingEndLatitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLatitudeSecond() != null - ]]> + <![CDATA[ gearShootingEndLatitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.latitude.end.required</message> + <message>tutti.validator.error.latitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLatitudeSecond() != null - && ints.min <= getGearShootingEndLatitudeSecond() - && getGearShootingEndLatitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.latitude.second.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLongitudeDegree"> + <field name="gearShootingEndLongitudeDmsDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmsDegree != null ]]> </param> - <message>tutti.validator.error.longitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || ( - getGearShootingEndLongitudeDegree() != null && - ((-ints.min < getGearShootingEndLongitudeDegree() && getGearShootingEndLongitudeDegree() < ints.max) - || ( - ( getGearShootingEndLongitudeDegree() == ints.max || getGearShootingEndLongitudeDegree() == -ints.min ) - && ( getGearShootingEndLongitudeMinute() == null || getGearShootingEndLongitudeMinute() == 0 ) - && ( getGearShootingEndLongitudeSecond() == null || getGearShootingEndLongitudeSecond() == 0 ) - )) - ) - ]]> + <![CDATA[ gearShootingEndLongitudeDms.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeDecimalDegree"> + <field name="gearShootingEndLongitudeDmsMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeDecimalDegree() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDms.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || ( - getGearShootingEndLongitudeDecimalDegree() != null && - (( -ints.min < getGearShootingEndLongitudeDecimalDegree() && getGearShootingEndLongitudeDecimalDegree() < ints.max) - || ( - ( getGearShootingEndLongitudeDecimalDegree() == ints.max || getGearShootingEndLongitudeDecimalDegree() == -ints.min ) - && ( getGearShootingEndLongitudeDecimalMinute() == null || getGearShootingEndLongitudeDecimalMinute() == 0.0 ) - )) - ) - ]]> - </param> + </field> - <message>tutti.validator.warning.longitude.degree.outOfBounds</message> + <field name="gearShootingEndLongitudeDmsSecond"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDms ]]> </param> + <param name="expression"> + <![CDATA[ gearShootingEndLongitudeDms.secondValid ]]> + </param> + <message>tutti.validator.error.longitude.second.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeMinute"> + <field name="gearShootingEndLongitudeDmdDegree"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmdDegree != null ]]> </param> - <message>tutti.validator.error.longitude.end.required</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLongitudeMinute() != null - && ints.min <= getGearShootingEndLongitudeMinute() - && getGearShootingEndLongitudeMinute() < ints.max ) - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.longitudeDegreeValid ]]> </param> - - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - + <message>tutti.validator.error.longitude.degree.outOfBounds</message> </field-validator> </field> - <field name="gearShootingEndLongitudeDecimalMinute"> + <field name="gearShootingEndLongitudeDmdMinute"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeDecimalMinute() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.minuteValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.minute.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:0.0|max:60.0</param> - <param name="expression"> - <![CDATA[ - !"DMD".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLongitudeDecimalMinute() != null - && doubles.min <= getGearShootingEndLongitudeDecimalMinute() - && getGearShootingEndLongitudeDecimalMinute() < doubles.max ) - ]]> - </param> - <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - - </field-validator> - </field> - <field name="gearShootingEndLongitudeSecond"> + <field name="gearShootingEndLongitudeDmdDecimal"> - <field-validator type="fieldexpression" short-circuit="true"> + <field-validator type="skipablefieldexpression" short-circuit="true"> + <param name="skip"> <![CDATA[ !coordinateDmd ]]> </param> <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || getGearShootingEndLongitudeSecond() != null - ]]> + <![CDATA[ gearShootingEndLongitudeDmd.decimalValid ]]> </param> - - <message>tutti.validator.error.longitude.end.required</message> + <message>tutti.validator.error.longitude.decimal.outOfBounds</message> </field-validator> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> - <![CDATA[ - !"DMS".equals(coordinateEditorType.toString()) || - ( getGearShootingEndLongitudeSecond() != null - && ints.min <= getGearShootingEndLongitudeSecond() - && getGearShootingEndLongitudeSecond() < ints.max ) - ]]> - </param> - - <message>tutti.validator.warning.longitude.second.outOfBounds</message> - - </field-validator> - </field> </validators> Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-25 16:43:35 UTC (rev 1316) @@ -1,3 +1,9 @@ +BOUUH= +coordinate.action.reset.tip= +observe.common.quadrant1= +observe.common.quadrant2= +observe.common.quadrant3= +observe.common.quadrant4= swing.error.cannot.mail= swing.error.cannot.open.file= swing.error.cannot.open.link= @@ -172,6 +178,7 @@ tutti.config.title= tutti.context.helpPage.notFound= tutti.context.service.close.error= +tutti.coordinate.action.reset.tip= tutti.createAccidentalBatch.action.cancel= tutti.createAccidentalBatch.action.cancel.mnemonic= tutti.createAccidentalBatch.action.cancel.tip= @@ -702,11 +709,17 @@ tutti.editFishingOperation.field.gearShootingEndLatitude= tutti.editFishingOperation.field.gearShootingEndLatitude.tip= tutti.editFishingOperation.field.gearShootingEndLatitudeDegree= +tutti.editFishingOperation.field.gearShootingEndLatitudeDm= +tutti.editFishingOperation.field.gearShootingEndLatitudeDmd= +tutti.editFishingOperation.field.gearShootingEndLatitudeDms= tutti.editFishingOperation.field.gearShootingEndLatitudeMinute= tutti.editFishingOperation.field.gearShootingEndLatitudeSecond= tutti.editFishingOperation.field.gearShootingEndLongitude= tutti.editFishingOperation.field.gearShootingEndLongitude.tip= tutti.editFishingOperation.field.gearShootingEndLongitudeDegree= +tutti.editFishingOperation.field.gearShootingEndLongitudeDm= +tutti.editFishingOperation.field.gearShootingEndLongitudeDmd= +tutti.editFishingOperation.field.gearShootingEndLongitudeDms= tutti.editFishingOperation.field.gearShootingEndLongitudeMinute= tutti.editFishingOperation.field.gearShootingEndLongitudeSecond= tutti.editFishingOperation.field.gearShootingStart= @@ -715,11 +728,17 @@ tutti.editFishingOperation.field.gearShootingStartLatitude= tutti.editFishingOperation.field.gearShootingStartLatitude.tip= tutti.editFishingOperation.field.gearShootingStartLatitudeDegree= +tutti.editFishingOperation.field.gearShootingStartLatitudeDm= +tutti.editFishingOperation.field.gearShootingStartLatitudeDmd= +tutti.editFishingOperation.field.gearShootingStartLatitudeDms= tutti.editFishingOperation.field.gearShootingStartLatitudeMinute= tutti.editFishingOperation.field.gearShootingStartLatitudeSecond= tutti.editFishingOperation.field.gearShootingStartLongitude= tutti.editFishingOperation.field.gearShootingStartLongitude.tip= tutti.editFishingOperation.field.gearShootingStartLongitudeDegree= +tutti.editFishingOperation.field.gearShootingStartLongitudeDm= +tutti.editFishingOperation.field.gearShootingStartLongitudeDmd= +tutti.editFishingOperation.field.gearShootingStartLongitudeDms= tutti.editFishingOperation.field.gearShootingStartLongitudeMinute= tutti.editFishingOperation.field.gearShootingStartLongitudeSecond= tutti.editFishingOperation.field.gearTime= @@ -1516,9 +1535,18 @@ tutti.validator.error.createSpeciesBatch.sortedUnsortedCategory.required= tutti.validator.error.createSpeciesBatch.species.required= tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable= +tutti.validator.error.cruise.name.format= +tutti.validator.error.latitude.decimal.outOfBounds= +tutti.validator.error.latitude.degree.outOfBounds= tutti.validator.error.latitude.end.required= +tutti.validator.error.latitude.minute.outOfBounds= +tutti.validator.error.latitude.second.outOfBounds= tutti.validator.error.latitude.start.required= +tutti.validator.error.longitude.decimal.outOfBounds= +tutti.validator.error.longitude.degree.outOfBounds= tutti.validator.error.longitude.end.required= +tutti.validator.error.longitude.minute.outOfBounds= +tutti.validator.error.longitude.second.outOfBounds= tutti.validator.error.longitude.start.required= tutti.validator.error.program.zone.required= tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required= @@ -1528,13 +1556,6 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight= tutti.validator.error.splitSpeciesBatch.selectedCategory.required= tutti.validator.info.operation.noError= -tutti.validator.warning.cruise.name.format= -tutti.validator.warning.latitude.degree.outOfBounds= -tutti.validator.warning.latitude.minute.outOfBounds= -tutti.validator.warning.latitude.second.outOfBounds= -tutti.validator.warning.longitude.degree.outOfBounds= -tutti.validator.warning.longitude.minute.outOfBounds= -tutti.validator.warning.longitude.second.outOfBounds= tutti.vesselUseFeatureTable.action.removeCaracteristic= tutti.vesselUseFeatureTable.action.removeCaracteristic.mnemonic= tutti.vesselUseFeatureTable.action.removeCaracteristic.tip= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-25 16:03:33 UTC (rev 1315) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-25 16:43:35 UTC (rev 1316) @@ -1,3 +1,8 @@ +BOUUH= +observe.common.quadrant1=(1) NE +observe.common.quadrant2=(2) SE +observe.common.quadrant3=(3) SW +observe.common.quadrant4=(4) NW swing.error.cannot.mail=Erreur lors de l'ouverture du client mail swing.error.cannot.open.file=Aucun programme n'est défini pour ouvrir ce type de fichier. Enregistrez le fichier et ouvrez le en dehors de l'application swing.error.cannot.open.link=Impossible d'ouvrir le fichier %s @@ -170,6 +175,8 @@ tutti.config.title=Configuration tutti.context.helpPage.notFound=La page d'aide %s n'a pas été trouvée tutti.context.service.close.error=Erreur lors de la fermeture du service %s +tutti.coordinate.action.reset.latitude.tip=Réinitialiser la latitude +tutti.coordinate.action.reset.longitude.tip=Réinitialiser la longitude tutti.createAccidentalBatch.action.cancel=Annuler tutti.createAccidentalBatch.action.cancel.mnemonic=A tutti.createAccidentalBatch.action.cancel.tip=Annuler la création de la capture accidentelle @@ -700,11 +707,17 @@ tutti.editFishingOperation.field.gearShootingEndLatitude=Latitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLatitude.tip=Latitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLatitudeDegree=Degré de latitude de fin de traîne +tutti.editFishingOperation.field.gearShootingEndLatitudeDm= +tutti.editFishingOperation.field.gearShootingEndLatitudeDmd= +tutti.editFishingOperation.field.gearShootingEndLatitudeDms= tutti.editFishingOperation.field.gearShootingEndLatitudeMinute=Minute de latitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLatitudeSecond=Seconde de latitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLongitude=Longitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLongitude.tip=Longitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLongitudeDegree=Degré de longitude de fin de traîne +tutti.editFishingOperation.field.gearShootingEndLongitudeDm= +tutti.editFishingOperation.field.gearShootingEndLongitudeDmd= +tutti.editFishingOperation.field.gearShootingEndLongitudeDms= tutti.editFishingOperation.field.gearShootingEndLongitudeMinute=Minute de longitude de fin de traîne tutti.editFishingOperation.field.gearShootingEndLongitudeSecond=Seconde de longitude de fin de traîne tutti.editFishingOperation.field.gearShootingStart=Début de traîne @@ -713,11 +726,17 @@ tutti.editFishingOperation.field.gearShootingStartLatitude=Latitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLatitude.tip=Latitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLatitudeDegree=Degré de latitude de début de traîne +tutti.editFishingOperation.field.gearShootingStartLatitudeDm= +tutti.editFishingOperation.field.gearShootingStartLatitudeDmd= +tutti.editFishingOperation.field.gearShootingStartLatitudeDms= tutti.editFishingOperation.field.gearShootingStartLatitudeMinute=Minute de latitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLatitudeSecond=Seconde de latitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLongitude=Longitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLongitude.tip=Longitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLongitudeDegree=Degré de longitude de début de traîne +tutti.editFishingOperation.field.gearShootingStartLongitudeDm= +tutti.editFishingOperation.field.gearShootingStartLongitudeDmd= +tutti.editFishingOperation.field.gearShootingStartLongitudeDms= tutti.editFishingOperation.field.gearShootingStartLongitudeMinute=Minute de longitude de début de traîne tutti.editFishingOperation.field.gearShootingStartLongitudeSecond=Seconde de longitude de début de traîne tutti.editFishingOperation.field.gearTime=Heure @@ -1515,9 +1534,18 @@ tutti.validator.error.createSpeciesBatch.sortedUnsortedCategory.required=La catégorie Vrac / Hors Vrac est obligatoire tutti.validator.error.createSpeciesBatch.species.required=L'espèce est obligatoire tutti.validator.error.createSpeciesBatch.speciesAndCategory.notAvailable=Couple (espèce - Vrac/Hors Vrac) déjà utilisée +tutti.validator.error.cruise.name.format=Le format n'est pas celui ... +tutti.validator.error.latitude.decimal.outOfBounds=La décimale de la latitude doit être comprise entre 0 et 99 +tutti.validator.error.latitude.degree.outOfBounds=Le degré de la latitude doit être compris entre -90 et 90 tutti.validator.error.latitude.end.required=La latitude de fin de traîne est obligatoire +tutti.validator.error.latitude.minute.outOfBounds=La minute de la latitude doit être comprise entre 0 et 59 +tutti.validator.error.latitude.second.outOfBounds=La seconde de la latitude doit être comprise entre 0 et 59 tutti.validator.error.latitude.start.required=La latitude de début de traîne est obligatoire +tutti.validator.error.longitude.decimal.outOfBounds=La décimale de la longitude doit être comprise entre 0 et 99 +tutti.validator.error.longitude.degree.outOfBounds=Le degré de la longitude doit être compris entre -180 et 180 tutti.validator.error.longitude.end.required=La longitude de fin de traîne est obligatoire +tutti.validator.error.longitude.minute.outOfBounds=La minute de la longitude doit être comprise entre 0 et 59 +tutti.validator.error.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 59 tutti.validator.error.longitude.start.required=La longitude de début de traîne est obligatoire tutti.validator.error.program.zone.required=La zone de la série est obligatoire tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required=La classe de taille est obligatoire @@ -1527,13 +1555,6 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.sampleBatchGreaterThanBatchWeight=La somme des poids ventilés doit être inférieur ou égale à celle du poids du lot tutti.validator.error.splitSpeciesBatch.selectedCategory.required=La catégorie est obligatoire tutti.validator.info.operation.noError=Trait sans erreur -tutti.validator.warning.cruise.name.format=Le format n'est pas celui ... -tutti.validator.warning.latitude.degree.outOfBounds=Le degré de la latitude doit être compris entre -90 et 90 -tutti.validator.warning.latitude.minute.outOfBounds=La minute de la latitude doit être comprise entre 0 et 59 -tutti.validator.warning.latitude.second.outOfBounds=La seconde de la latitude doit être comprise entre 0 et 59 -tutti.validator.warning.longitude.degree.outOfBounds=Le degré de la longitude doit être compris entre -180 et 180 -tutti.validator.warning.longitude.minute.outOfBounds=La minute de la longitude doit être comprise entre 0 et 59 -tutti.validator.warning.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 59 tutti.vesselUseFeatureTable.action.removeCaracteristic=Supprimer tutti.vesselUseFeatureTable.action.removeCaracteristic.mnemonic=S tutti.vesselUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caractéristique Added: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorTest.java =================================================================== --- trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorTest.java (rev 0) +++ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorTest.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,216 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.beans.AbstractSerializableBean; + +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.border.TitledBorder; +import java.awt.BorderLayout; +import java.awt.GridLayout; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.text.ParseException; + +/** + * To test the {@link DmsCoordinateEditor}. + * <p/> + * Created on 10/17/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmdCoordinateEditorTest { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(DmdCoordinateEditorTest.class); + + public static class EditorBean extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_LONGITUDE_SIGN = "longitudeSign"; + + public static final String PROPERTY_LONGITUDE_DEGREE = "longitudeDegree"; + + public static final String PROPERTY_LONGITUDE_MINUTE = "longitudeMinute"; + + public static final String PROPERTY_LONGITUDE_DECIMAL = "longitudeDecimal"; + + public static final String PROPERTY_LATITUDE_SIGN = "latitudeSign"; + + public static final String PROPERTY_LATITUDE_DEGREE = "latitudeDegree"; + + public static final String PROPERTY_LATITUDE_MINUTE = "latitudeMinute"; + + public static final String PROPERTY_LATITUDE_DECIMAL = "latitudeDecimal"; + + protected final DmdCoordinate longitude = DmdCoordinate.empty(); + + protected final DmdCoordinate latitude = DmdCoordinate.empty(); + + public DmdCoordinate getLongitude() { + return longitude; + } + + public void setLongitudeDegree(Integer degre) { + Object oldValue = longitude.getDegree(); + longitude.setDegree(degre); + firePropertyChange(PROPERTY_LONGITUDE_DEGREE, oldValue, degre); + } + + public void setLongitudeMinute(Integer minute) { + Object oldValue = longitude.getMinute(); + longitude.setMinute(minute); + firePropertyChange(PROPERTY_LONGITUDE_MINUTE, oldValue, minute); + } + + public void setLongitudeDecimal(Integer decimal) { + Object oldValue = longitude.getDecimal(); + longitude.setDecimal(decimal); + firePropertyChange(PROPERTY_LONGITUDE_DECIMAL, oldValue, decimal); + } + + public void setLongitudeSign(boolean sign) { + Object oldValue = longitude.isSign(); + longitude.setSign(sign); + firePropertyChange(PROPERTY_LONGITUDE_SIGN, oldValue, sign); + } + + public DmdCoordinate getLatitude() { + return latitude; + } + + public void setLatitudeSign(boolean sign) { + Object oldValue = latitude.isSign(); + latitude.setSign(sign); + firePropertyChange(PROPERTY_LATITUDE_SIGN, oldValue, sign); + } + + public void setLatitudeDegree(Integer degre) { + Object oldValue = latitude.getDegree(); + latitude.setDegree(degre); + firePropertyChange(PROPERTY_LATITUDE_DEGREE, oldValue, degre); + } + + public void setLatitudeMinute(Integer minute) { + Object oldValue = latitude.getMinute(); + latitude.setMinute(minute); + firePropertyChange(PROPERTY_LATITUDE_MINUTE, oldValue, minute); + } + + public void setLatitudeDecimal(Integer decimal) { + Object oldValue = latitude.getDecimal(); + latitude.setDecimal(decimal); + firePropertyChange(PROPERTY_LATITUDE_DECIMAL, oldValue, decimal); + } + + @Override + public String toString() { + return "EditorBean{" + + "longitude=" + longitude + + ", latitude=" + latitude + + '}'; + } + } + + public static void main(String[] args) throws ParseException { + + + EditorBean bean = new EditorBean(); + + DmdCoordinateEditor longitudeEditor = new DmdCoordinateEditor(); + longitudeEditor.setBean(bean); + longitudeEditor.setPropertySign(EditorBean.PROPERTY_LONGITUDE_SIGN); + longitudeEditor.setPropertyDegree(EditorBean.PROPERTY_LONGITUDE_DEGREE); + longitudeEditor.setPropertyMinute(EditorBean.PROPERTY_LONGITUDE_MINUTE); + longitudeEditor.setPropertyDecimal(EditorBean.PROPERTY_LONGITUDE_DECIMAL); + longitudeEditor.setLongitudeEditor(true); + longitudeEditor.setShowReset(true); + longitudeEditor.init(); + + DmdCoordinateEditor latitudeEditor = new DmdCoordinateEditor(); + latitudeEditor.setBean(bean); + latitudeEditor.setPropertySign(EditorBean.PROPERTY_LATITUDE_SIGN); + latitudeEditor.setPropertyDegree(EditorBean.PROPERTY_LATITUDE_DEGREE); + latitudeEditor.setPropertyMinute(EditorBean.PROPERTY_LATITUDE_MINUTE); + latitudeEditor.setPropertyDecimal(EditorBean.PROPERTY_LATITUDE_DECIMAL); + latitudeEditor.setLongitudeEditor(false); + latitudeEditor.setShowReset(true); + latitudeEditor.init(); + + final JLabel latitudeResult = new JLabel(); + final JLabel longitudeResult = new JLabel(); + + bean.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditorBean source = (EditorBean) evt.getSource(); + String propertyName = evt.getPropertyName(); + if (log.isInfoEnabled()) { + log.info("[" + propertyName + "] value changed: " + evt.getNewValue()); + } + if (propertyName.startsWith("longitude")) { + longitudeResult.setText(source.getLongitude().toString()); + } else { + + latitudeResult.setText(source.getLatitude().toString()); + } + } + }); + + JPanel longitudeEditorPanel = new JPanel(new GridLayout()); + longitudeEditorPanel.setBorder(new TitledBorder("Longitude")); + longitudeEditorPanel.add(BorderLayout.CENTER, longitudeEditor); + longitudeEditorPanel.add(BorderLayout.EAST, longitudeResult); + + JPanel latitudeEditorPanel = new JPanel(new GridLayout()); + latitudeEditorPanel.setBorder(new TitledBorder("Latitude")); + latitudeEditorPanel.add(BorderLayout.CENTER, latitudeEditor); + latitudeEditorPanel.add(BorderLayout.EAST, latitudeResult); + + JPanel panel = new JPanel(new GridLayout(0, 1)); + panel.add(longitudeEditorPanel); + panel.add(latitudeEditorPanel); + + final JDialog frame = new JDialog(); + + frame.setContentPane(panel); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + frame.setSize(800, 200); + frame.setVisible(true); + } + }); + } +} Property changes on: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateEditorTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateTest.java =================================================================== --- trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateTest.java (rev 0) +++ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateTest.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,126 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created on 10/25/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmdCoordinateTest { + + @Test + public void testFromDecimal() throws Exception { + + { + DmdCoordinate actual = DmdCoordinate.empty(); + + actual.fromDecimal(42.7f); + + Integer expectedDegree = 42; + Integer expectedMinute = 42; + Integer expectedDecimal = null; + + Assert.assertEquals(expectedDegree, actual.getDegree()); + Assert.assertEquals(expectedMinute, actual.getMinute()); + Assert.assertEquals(expectedDecimal, actual.getDecimal()); + } + + { + DmdCoordinate actual = DmdCoordinate.empty(); + + float decimalExcepted = 42.707f; + actual.fromDecimal(decimalExcepted); + + Integer expectedDegree = 42; + Integer expectedMinute = 42; + Integer expectedDecimal = 42; + + Assert.assertEquals(expectedDegree, actual.getDegree()); + Assert.assertEquals(expectedMinute, actual.getMinute()); + Assert.assertEquals(expectedDecimal, actual.getDecimal()); + + Float decimal = actual.toDecimal(); + Assert.assertEquals(decimalExcepted, decimal, 0.001); + } + } + + @Test + public void testToDecimal() throws Exception { + + { + DmdCoordinate component = DmdCoordinate.empty(); + component.setDegree(42); + component.setMinute(42); + component.setDecimal(42); + Float actual = component.toDecimal(); + Float expected = 42.707f; + Assert.assertEquals(expected, actual, 0.001); + } + + { + DmdCoordinate component = DmdCoordinate.empty(); + component.setDegree(12); + component.setMinute(12); + Float actual = component.toDecimal(); + Float expected = 12.2f; + Assert.assertEquals(expected, actual, 0.0001); + + component.fromDecimal(expected); + + Integer expectedDegree = 12; + Integer expectedMinute = 12; + Integer expectedDecimal = null; + + Assert.assertEquals(expectedDegree, component.getDegree()); + Assert.assertEquals(expectedMinute, component.getMinute()); + Assert.assertEquals(expectedDecimal, component.getDecimal()); + } + + { + DmdCoordinate component = DmdCoordinate.empty(); + component.setDegree(12); + component.setMinute(12); + component.setDecimal(20); + Float actual = component.toDecimal(); + Float expected = 12.203333f; + Assert.assertEquals(expected, actual, 0.001); + + component.fromDecimal(expected); + + Integer expectedDegree = 12; + Integer expectedMinute = 12; + Integer expectedDecimal = 20; + + Assert.assertEquals(expectedDegree, component.getDegree()); + Assert.assertEquals(expectedMinute, component.getMinute()); + Assert.assertEquals(expectedDecimal, component.getDecimal()); + } + } +} Property changes on: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmdCoordinateTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorTest.java =================================================================== --- trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorTest.java (rev 0) +++ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorTest.java 2013-10-25 16:43:35 UTC (rev 1316) @@ -0,0 +1,218 @@ +package fr.ifremer.tutti.ui.swing.spatial; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.beans.AbstractSerializableBean; + +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.border.TitledBorder; +import java.awt.BorderLayout; +import java.awt.GridLayout; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.text.ParseException; + +/** + * To test the {@link DmsCoordinateEditor}. + * <p/> + * Created on 10/17/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.8 + */ +public class DmsCoordinateEditorTest { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(DmsCoordinateEditorTest.class); + + public static class EditorBean extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_LONGITUDE_SIGN = "longitudeSign"; + + public static final String PROPERTY_LONGITUDE_DEGREE = "longitudeDegree"; + + public static final String PROPERTY_LONGITUDE_MINUTE = "longitudeMinute"; + + public static final String PROPERTY_LONGITUDE_SECOND = "longitudeSecond"; + + public static final String PROPERTY_LATITUDE_SIGN = "latitudeSign"; + + public static final String PROPERTY_LATITUDE_DEGREE = "latitudeDegree"; + + public static final String PROPERTY_LATITUDE_MINUTE = "latitudeMinute"; + + public static final String PROPERTY_LATITUDE_SECOND = "latitudeSecond"; + + protected final DmsCoordinate longitude = DmsCoordinate.empty(); + + protected final DmsCoordinate latitude = DmsCoordinate.empty(); + + public DmsCoordinate getLongitude() { + return longitude; + } + + public void setLongitudeDegre(Integer degre) { + Object oldValue = longitude.getDegree(); + longitude.setDegree(degre); + firePropertyChange(PROPERTY_LONGITUDE_DEGREE, oldValue, degre); + } + + public void setLongitudeMinute(Integer minute) { + Object oldValue = longitude.getMinute(); + longitude.setMinute(minute); + firePropertyChange(PROPERTY_LONGITUDE_MINUTE, oldValue, minute); + } + + public void setLongitudeSecond(Integer seconde) { + Object oldValue = longitude.getSecond(); + + longitude.setSecond(seconde); + firePropertyChange(PROPERTY_LONGITUDE_SECOND, oldValue, seconde); + } + + public void setLongitudeSign(boolean sign) { + Object oldValue = longitude.isSign(); + longitude.setSign(sign); + firePropertyChange(PROPERTY_LONGITUDE_SIGN, oldValue, sign); + } + + public DmsCoordinate getLatitude() { + return latitude; + } + + public void setLatitudeDegre(Integer degre) { + Object oldValue = latitude.getDegree(); + latitude.setDegree(degre); + firePropertyChange(PROPERTY_LATITUDE_DEGREE, oldValue, degre); + } + + public void setLatitudeMinute(Integer minute) { + Object oldValue = latitude.getMinute(); + latitude.setMinute(minute); + firePropertyChange(PROPERTY_LATITUDE_MINUTE, oldValue, minute); + } + + + public void setLatitudeSecond(Integer seconde) { + Object oldValue = latitude.getSecond(); + latitude.setSecond(seconde); + firePropertyChange(PROPERTY_LATITUDE_SECOND, oldValue, seconde); + } + + public void setLatitudeSign(boolean sign) { + Object oldValue = latitude.isSign(); + latitude.setSign(sign); + firePropertyChange(PROPERTY_LATITUDE_SIGN, oldValue, sign); + } + + @Override + public String toString() { + return "EditorBean{" + + "longitude=" + longitude + + ", latitude=" + latitude + + '}'; + } + } + + public static void main(String[] args) throws ParseException { + + + EditorBean bean = new EditorBean(); + + DmsCoordinateEditor longitudeEditor = new DmsCoordinateEditor(); + longitudeEditor.setBean(bean); + longitudeEditor.setPropertySign(EditorBean.PROPERTY_LONGITUDE_SIGN); + longitudeEditor.setPropertyDegree(EditorBean.PROPERTY_LONGITUDE_DEGREE); + longitudeEditor.setPropertyMinute(EditorBean.PROPERTY_LONGITUDE_MINUTE); + longitudeEditor.setPropertySecond(EditorBean.PROPERTY_LONGITUDE_SECOND); + longitudeEditor.setLongitudeEditor(true); + longitudeEditor.setShowReset(true); + longitudeEditor.init(); + + DmsCoordinateEditor latitudeEditor = new DmsCoordinateEditor(); + latitudeEditor.setBean(bean); + latitudeEditor.setPropertySign(EditorBean.PROPERTY_LATITUDE_SIGN); + latitudeEditor.setPropertyDegree(EditorBean.PROPERTY_LATITUDE_DEGREE); + latitudeEditor.setPropertyMinute(EditorBean.PROPERTY_LATITUDE_MINUTE); + latitudeEditor.setPropertySecond(EditorBean.PROPERTY_LATITUDE_SECOND); + latitudeEditor.setLongitudeEditor(false); + latitudeEditor.setShowReset(true); + latitudeEditor.init(); + + final JLabel latitudeResult = new JLabel(); + final JLabel longitudeResult = new JLabel(); + + bean.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditorBean source = (EditorBean) evt.getSource(); + String propertyName = evt.getPropertyName(); + if (log.isInfoEnabled()) { + log.info("[" + propertyName + "] value changed: " + evt.getNewValue()); + } + if (propertyName.startsWith("longitude")) { + longitudeResult.setText(source.getLongitude().toString()); + } else { + + latitudeResult.setText(source.getLatitude().toString()); + } + } + }); + + JPanel longitudeEditorPanel = new JPanel(new GridLayout()); + longitudeEditorPanel.setBorder(new TitledBorder("Longitude")); + longitudeEditorPanel.add(BorderLayout.CENTER, longitudeEditor); + longitudeEditorPanel.add(BorderLayout.EAST, longitudeResult); + + JPanel latitudeEditorPanel = new JPanel(new GridLayout()); + latitudeEditorPanel.setBorder(new TitledBorder("Latitude")); + latitudeEditorPanel.add(BorderLayout.CENTER, latitudeEditor); + latitudeEditorPanel.add(BorderLayout.EAST, latitudeResult); + + JPanel panel = new JPanel(new GridLayout(0, 1)); + panel.add(longitudeEditorPanel); + panel.add(latitudeEditorPanel); + + final JDialog frame = new JDialog(); + + frame.setContentPane(panel); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + frame.setSize(800, 200); + frame.setVisible(true); + } + }); + } +} Property changes on: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/spatial/DmsCoordinateEditorTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native