r397 - in trunk/tutti-ui-swing: . src/main/java/fr/ifremer/tutti/ui/swing/content/operation src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency src/main/java/fr/ifremer/tutti/ui/swing/util src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise src/main/resources/fr/ifremer/tutti/ui/swing/content/operation src/main/resources/i18n
Author: kmorin Date: 2013-02-11 18:05:40 +0100 (Mon, 11 Feb 2013) New Revision: 397 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/397 Log: - use distance computing algorithm sent by Vincent - validations - continue wieght computing Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiComputedOrNotData.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml Modified: trunk/tutti-ui-swing/pom.xml 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/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/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-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_fr_FR.properties Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/pom.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -359,11 +359,6 @@ <artifactId>junit</artifactId> </dependency> - <dependency> - <groupId>com.javadocmd</groupId> - <artifactId>simplelatlng</artifactId> - </dependency> - </dependencies> <profiles> 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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-02-11 17:05:40 UTC (rev 397) @@ -50,6 +50,8 @@ import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.event.ActionEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.List; import static org.nuiton.i18n.I18n._; @@ -101,7 +103,44 @@ * @since 1.0 */ protected SaveCatchBatchAction saveCatchBatchAction; + + 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_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_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_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 + ); + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (properties.contains(evt.getPropertyName())) { + EditFishingOperationUIModel source = (EditFishingOperationUIModel) evt.getSource(); + if (source.isFishingOperationRectiligne()) { + source.computeDistance(); + } + } + } + }; + public EditFishingOperationAction(FishingOperationsUIHandler handler) { super(handler, "editFishingOperation", @@ -229,7 +268,7 @@ if (log.isInfoEnabled()) { log.info("Edit in ui fishingOperation: " + fishingOperation); } - + // now fishing operation is edited model.setEditFishingOperation(fishingOperation); @@ -256,6 +295,8 @@ // wait last minute to display (avoid dirty display effects) ui.add(form, BorderLayout.CENTER); } + + model.addPropertyChangeListener(coordinatePropertiesListener); SwingUtilities.invokeLater(new Runnable() { @Override @@ -272,8 +313,9 @@ EditFishingOperationUIHandler handler = ui.getHandler(); EditFishingOperationUIModel editFishingOperationUIModel = ui.getModel(); - + handler.uninstallStartDateListener(); + handler.uninstallCoordinatesListener(); if (bean == null) { @@ -348,6 +390,7 @@ } handler.installStartDateListener(); + handler.installCoordinatesListener(); } public void loadCatchBatch(FishingOperation bean, boolean loadOtherTabs) { 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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-11 17:05:40 UTC (rev 397) @@ -26,9 +26,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import com.javadocmd.simplelatlng.LatLng; -import com.javadocmd.simplelatlng.LatLngTool; -import com.javadocmd.simplelatlng.util.LengthUnit; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation; @@ -93,7 +90,43 @@ } } + }; + + 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_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_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_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 + ); + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (properties.contains(evt.getPropertyName())) { + EditFishingOperationUIModel source = (EditFishingOperationUIModel) evt.getSource(); + if (source.isFishingOperationRectiligne()) { + source.computeDistance(); + } + } + } }; /** @@ -155,29 +188,6 @@ } }); - model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - Boolean rectiligne = (Boolean) evt.getNewValue(); - if (rectiligne) { - EditFishingOperationUIModel source = (EditFishingOperationUIModel) evt.getSource(); - Float latS = source.getGearShootingStartLatitude(); - Float longS = source.getGearShootingStartLongitude(); - Float latE = source.getGearShootingEndLatitude(); - Float longE = source.getGearShootingEndLongitude(); - - if (latS != null && longS != null - && latE != null && longE != null) { - LatLng start = new LatLng(latS, longS); - LatLng end = new LatLng(latE, longE); - Double distance = LatLngTool.distance(start, end, LengthUnit.METER); - source.setTrawlDistance(distance.floatValue()); - } - } - } - }); - getContext().addPropertyChangeListener(TuttiUIContext.PROPERTY_VALIDATION_CONTEXT, new PropertyChangeListener() { @Override @@ -459,7 +469,15 @@ public void installStartDateListener() { getModel().addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE, startDateListener); } + + public void uninstallCoordinatesListener() { + getModel().removePropertyChangeListener(coordinatePropertiesListener); + } + public void installCoordinatesListener() { + getModel().addPropertyChangeListener(coordinatePropertiesListener); + } + public FishingOperationsUI getParentUi() { return parentUi; } 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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-02-11 17:05:40 UTC (rev 397) @@ -25,9 +25,6 @@ */ import com.google.common.collect.Lists; -import com.javadocmd.simplelatlng.LatLng; -import com.javadocmd.simplelatlng.LatLngTool; -import com.javadocmd.simplelatlng.util.LengthUnit; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -37,16 +34,19 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; -import org.nuiton.util.DateUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import java.util.Calendar; import java.util.Date; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n.n_; +import org.nuiton.util.DateUtil; /** * Model for UI {@link EditFishingOperationUI}. @@ -789,17 +789,15 @@ setGearShootingEndLongitude(decimalValue); } - public void computeDictance() { + public void computeDistance() { if (coordinateEditorType != CoordinateEditorType.DD) { convertGearShootingCoordinatesDMSToDD(); } if (gearShootingStartLatitude != null && gearShootingStartLongitude != null && gearShootingEndLatitude != null && gearShootingEndLongitude != null) { - LatLng start = new LatLng(gearShootingStartLatitude, gearShootingStartLongitude); - LatLng end = new LatLng(gearShootingEndLatitude, gearShootingEndLongitude); - Double distance = LatLngTool.distance(start, end, LengthUnit.METER); + Integer distance = TuttiUIUtil.computeDistanceInMeters(gearShootingStartLatitude, gearShootingStartLongitude, gearShootingEndLatitude, gearShootingEndLongitude); setTrawlDistance(distance.floatValue()); } } - + } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-02-11 17:05:40 UTC (rev 397) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; +import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import org.apache.commons.collections.CollectionUtils; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -94,7 +95,7 @@ public static final String PROPERTY_FREQUENCY = "frequency"; - public static final String PROPERTY_COMPUTED_NUMBER = "computedNumber"; + public static final String PROPERTY_COMPUTED_NUMBER = "computedOrNotNumber"; public static final String PROPERTY_ATTACHMENTS = "attachments"; @@ -175,18 +176,12 @@ protected Float weight; /** - * Observed number. - * - * @since 0.3 - */ - protected Integer number; - - /** * Total computed number (from frequencies). * * @since 0.2 */ - protected Integer computedNumber; + protected TuttiComputedOrNotData<Integer> computedOrNotNumber = + new TuttiComputedOrNotData<Integer>(); /** * Comment on this catches. @@ -523,12 +518,12 @@ } public Integer getNumber() { - return number; + return computedOrNotNumber.getData(); } public void setNumber(Integer number) { Object oldValue = getNumber(); - this.number = number; + computedOrNotNumber.setData(number); firePropertyChange(PROPERTY_NUMBER, oldValue, number); } @@ -563,14 +558,22 @@ } public Integer getComputedNumber() { - return computedNumber; + return computedOrNotNumber.getComputedData(); } public void setComputedNumber(Integer computedNumber) { Object oldValue = getComputedNumber(); - this.computedNumber = computedNumber; + computedOrNotNumber.setComputedData(computedNumber); firePropertyChange(PROPERTY_COMPUTED_NUMBER, oldValue, computedNumber); } + public TuttiComputedOrNotData<Integer> getComputedOrNotNumber() { + return computedOrNotNumber; + } + + public void setComputedOrNotNumber(TuttiComputedOrNotData<Integer> computedOrNotNumber) { + this.computedOrNotNumber = computedOrNotNumber; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-11 17:05:40 UTC (rev 397) @@ -818,12 +818,11 @@ } public void updateTotalFromFrequencies(SpeciesBatchRowModel row) { - Integer totalNumber = null; Float totalWeight = null; List<SpeciesFrequencyRowModel> frequency = row.getFrequency(); if (CollectionUtils.isNotEmpty(frequency)) { - totalNumber = 0; + Integer totalNumber = 0; totalWeight = 0f; for (SpeciesFrequencyRowModel frequencyModel : frequency) { totalNumber += frequencyModel.getNumber(); @@ -838,12 +837,9 @@ totalWeight += w; } } - } else { - totalNumber = row.getNumber(); + row.setComputedNumber(totalNumber); } - row.setComputedNumber(totalNumber); - SampleCategory finestCategory; if (row.getAgeCategory().isValid()) { finestCategory = row.getAgeCategory(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/FrequencyCellComponent.java 2013-02-11 17:05:40 UTC (rev 397) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; +import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import jaxx.runtime.SwingUtil; @@ -149,13 +150,13 @@ if (frequencyModel.isValid()) { // at close, synch back frequencies - + List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); + if (frequencyModel.isSimpleCountingMode()) { editRow.setNumber(frequencyModel.getSimpleCount()); } else { // transfer rows to editor - List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); for (SpeciesFrequencyRowModel row : frequencyModel.getRows()) { if (row.isValid()) { @@ -170,11 +171,15 @@ } // push back to batch - editRow.setFrequency(frequency); - editRow.setNumber(null); + Integer number = null; + if (frequency.size() == 1) { + number = frequency.get(0).getNumber(); + } + editRow.setNumber(number); } + editRow.setFrequency(frequency); // update frequencies total ui.getHandler().updateTotalFromFrequencies(editRow); @@ -225,7 +230,7 @@ Object result = null; if (columnIdentifier == SpeciesBatchTableModel.COMPUTED_NUMBER) { - result = editRow.getComputedNumber(); + result = editRow.getComputedOrNotNumber(); } if (log.isInfoEnabled()) { log.info("editor value (" + columnIdentifier + "): " + result); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-02-11 17:05:40 UTC (rev 397) @@ -456,8 +456,7 @@ model.setRows(editFrequency); model.setLengthStepCaracteristic(lengthStepCaracteristic); - model.setSimpleCount(speciesBatch.getComputedNumber()); - + SpeciesFrequencyUIModel.ConfigurationMode mode = SpeciesFrequencyUIModel.ConfigurationMode.SIMPLE; if (protocol != null) { Integer taxonId = speciesBatch.getSpecies().getReferenceTaxonId(); @@ -466,7 +465,11 @@ mode = SpeciesFrequencyUIModel.ConfigurationMode.SIMPLE_COUNTING; } } + if (speciesBatch.getNumber() != null && editFrequency.size() != 1) { + mode = SpeciesFrequencyUIModel.ConfigurationMode.SIMPLE_COUNTING; + } model.setConfigurationMode(mode); + model.setSimpleCount(speciesBatch.getNumber()); // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiComputedOrNotData.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiComputedOrNotData.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiComputedOrNotData.java 2013-02-11 17:05:40 UTC (rev 397) @@ -0,0 +1,51 @@ + +package fr.ifremer.tutti.ui.swing.util; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class TuttiComputedOrNotData<N extends Number> { + + protected N data; + + protected N computedData; + + public TuttiComputedOrNotData() { + data = null; + computedData = null; + } + + public TuttiComputedOrNotData(N data, N computedData) { + this.data = data; + this.computedData = computedData; + } + + public N getData() { + return data; + } + + public void setData(N data) { + this.data = data; + } + + public N getComputedData() { + return computedData; + } + + public void setComputedData(N computedData) { + this.computedData = computedData; + } + + @Override + public String toString() { + String result = null; + if (data != null) { + result = data.toString(); + } else if (computedData != null) { + result = "<html><em style='color: blue'>" + computedData.toString() + "</em></html>"; + } + return result; + } + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-02-11 17:05:40 UTC (rev 397) @@ -325,4 +325,21 @@ } return duration; } + + public static int computeDistanceInMeters(Float startLatitude, + Float startLongitude, + Float endLatitude, + Float endLongitude) { + + double sLat = startLatitude * Math.PI / 180; + double sLong = startLongitude * Math.PI / 180; + double eLat = endLatitude * Math.PI / 180; + double eLong = endLongitude * Math.PI / 180; + + Double d = 6378288 * + (Math.PI/2 - Math.asin( Math.sin(eLat) * Math.sin(sLat) + + Math.cos(eLong - sLong) * Math.cos(eLat) * Math.cos(sLat))); + return d.intValue(); + + } } Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel-error-validation.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -58,7 +58,7 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ endDate == null || beginDate.compareTo(endDate) <= 0 ]]> + <![CDATA[ endDate == null || beginDate.compareTo(endDate) < 0 ]]> </param> <message>tutti.validator.error.cruise.dates.endBeforeStart</message> </field-validator> @@ -71,7 +71,7 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ beginDate == null || beginDate.compareTo(endDate) <= 0 ]]> + <![CDATA[ beginDate == null || beginDate.compareTo(endDate) < 0 ]]> </param> <message>tutti.validator.error.cruise.dates.endBeforeStart</message> </field-validator> Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-error-validation.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -93,9 +93,27 @@ <param name="nullValueSkipped">true</param> <message>tutti.validator.error.fishingOperation.existingKey</message> </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) < 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> </field> + + <field name="gearShootingEndDate"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingEndDate == null || gearShootingStartDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) < 0 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + </field-validator> + + </field> + <field name="comment"> <field-validator type="stringlength" short-circuit="true"> <param name="maxLength">2000</param> 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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -31,35 +31,41 @@ <validators> <field name="gearShootingStartDate"> + <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + <![CDATA[ gearShootingStartDate == null || isDateInCruise(gearShootingStartDate) ]]> </param> - <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + <message>tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates</message> </field-validator> <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || isDateInCruise(gearShootingStartDate) ]]> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null + || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 ]]> </param> - <message>tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates</message> + <message>tutti.validator.error.fishingOperation.dates.tooLong</message> </field-validator> + </field> <field name="gearShootingEndDate"> + <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + <![CDATA[ gearShootingEndDate == null || isDateInCruise(gearShootingEndDate) ]]> </param> - <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> + <message>tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates</message> </field-validator> <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingEndDate == null || isDateInCruise(gearShootingEndDate) ]]> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null + || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 ]]> </param> - <message>tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates</message> + <message>tutti.validator.error.fishingOperation.dates.tooLong</message> </field-validator> + </field> <!--gear shooting start latitude validation --> @@ -514,5 +520,16 @@ </field-validator> </field> + + <field name="trawlDistance"> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ trawlDistance == null || trawlDistance <= 5556 ]]> + </param> + <message>tutti.validator.error.fishingOperation.trawlDistance.tooLong</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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -123,7 +123,7 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + <![CDATA[ gearShootingEndDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) < 0 ]]> </param> <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> </field-validator> @@ -145,7 +145,7 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) <= 0 ]]> + <![CDATA[ gearShootingStartDate == null || gearShootingStartDate.compareTo(gearShootingEndDate) < 0 ]]> </param> <message>tutti.validator.error.fishingOperation.dates.endBeforeStart</message> </field-validator> Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-warning-validation.xml 2013-02-11 17:05:40 UTC (rev 397) @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!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="gearShootingStartDate"> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null + || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.tooLong</message> + </field-validator> + + </field> + + <field name="gearShootingEndDate"> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null + || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 ]]> + </param> + <message>tutti.validator.error.fishingOperation.dates.tooLong</message> + </field-validator> + + </field> + + <field name="trawlDistance"> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ trawlDistance == null || trawlDistance <= 5556 ]]> + </param> + <message>tutti.validator.error.fishingOperation.trawlDistance.tooLong</message> + </field-validator> + + </field> + +</validators> 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-02-11 16:56:38 UTC (rev 396) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-11 17:05:40 UTC (rev 397) @@ -481,6 +481,7 @@ tutti.validator.error.fishingOperation.dates.endBeforeStart=La date de fin doit être après la date de début tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates=La date de fin est en dehors des dates de la campagne tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates=La date de début est en dehors des dates de la campagne +tutti.validator.error.fishingOperation.dates.tooLong=La durée du trait dépasse 45 minutes, merci de vérifier les dates/heures du trait tutti.validator.error.fishingOperation.existingKey=La clé code station/numéro de trait/date de début existe déjà tutti.validator.error.fishingOperation.fishingOperationNumber.required=Le numéro de trait est obligatoire tutti.validator.error.fishingOperation.fishingOperationValid.required=La validité du traît est obligatoire @@ -489,6 +490,7 @@ tutti.validator.error.fishingOperation.stationNumber.too.long=Valeur trop longue (limitée à %s caractères) tutti.validator.error.fishingOperation.strataLocation.required=La strate, sous-strate ou la localité doit être renseignée tutti.validator.error.fishingOperation.trawlDistance.required=La distance est obligatoire +tutti.validator.error.fishingOperation.trawlDistance.tooLong=La distance du trait dépasse 3 milles marin (5556 m), merci de vérifier les coordonnées tutti.validator.error.fishingOperation.trawlNetNumber.required=Le numéro de poche est obligatoire tutti.validator.error.fishingOperation.vessel.required=Le navire est obligatoire tutti.validator.error.program.existingKey=Le couple nom/zone existe déjà
participants (1)
-
kmorin@users.forge.codelutin.com