Author: kmorin Date: 2013-01-08 23:32:00 +0100 (Tue, 08 Jan 2013) New Revision: 160 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/160 Log: refs #1908 [CONSOLIDATION] Mise en place des deux contextes de validation (pour les captures) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 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/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/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java 2013-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiBeanUIModel.java 2013-01-08 22:32:00 UTC (rev 160) @@ -95,6 +95,10 @@ this.id = id; firePropertyChange(PROPERTY_ID, oldValue, id); } + + public String getTitle() { + return "test title"; + } public boolean isModify() { return modify; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2013-01-08 22:32:00 UTC (rev 160) @@ -92,7 +92,7 @@ public abstract void afterInitUI(); public abstract void onCloseUI(); - + protected abstract M getModel(); protected final TuttiUIContext context; 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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-01-08 22:32:00 UTC (rev 160) @@ -115,8 +115,7 @@ layout='{new BorderLayout()}'> <JTabbedPane id='fishingOperationTabPane' constraints='BorderLayout.CENTER'> - <tab id='traitGeneralTab' - title='tutti.label.tab.fishingOperation.general'> + <tab id='traitGeneralTab'> <Table fill='both' id='generalForm'> <!-- Numero station / Numéro trait / Date --> 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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-08 22:32:00 UTC (rev 160) @@ -32,12 +32,14 @@ import fr.ifremer.tutti.persistence.entities.referential.Zone; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.environment.EnvironmentTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUIModel; +import fr.ifremer.tutti.ui.swing.util.CustomTab; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import jaxx.runtime.swing.editor.bean.BeanDoubleListModel; import org.apache.commons.collections.CollectionUtils; @@ -50,7 +52,16 @@ import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyVetoException; +import java.beans.VetoableChangeListener; import java.util.List; +import javax.swing.DefaultSingleSelectionModel; +import javax.swing.JTabbedPane; +import javax.swing.SingleSelectionModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.nuiton.validator.bean.simple.SimpleBeanValidatorEvent; +import org.nuiton.validator.bean.simple.SimpleBeanValidatorListener; /** @@ -161,8 +172,6 @@ } }); -// listModelIsModify(model); - ui.setContextValue(model); fishingOperationMonitor.setBean(model); @@ -181,25 +190,7 @@ initBeanList(ui.getSaisisseurList(), persistenceService.getAllPerson(), model.getSaisisseur()); - final BeanDoubleListModel<Person> saisisseurModel = ui.getSaisisseurList().getModel(); -// saisisseurModel.getSelectedModel().addListDataListener(new ListDataListener() { -// -// public void intervalAdded(ListDataEvent e) { -// log.info(">>>>>>>>>> intervalAdded " + saisisseurModel.getSelected()); -// getModel().setSaisisseur(saisisseurModel.getSelected()); -// } -// -// public void intervalRemoved(ListDataEvent e) { -// log.info(">>>>>>>>>> intervalRemoved " + saisisseurModel.getSelected()); -// getModel().setSaisisseur(saisisseurModel.getSelected()); -// } -// -// public void contentsChanged(ListDataEvent e) { -// log.info(">>>>>>>>>> contentsChanged " + saisisseurModel.getSelected()); -// getModel().setSaisisseur(saisisseurModel.getSelected()); -// } -// }); - + String programId = context.getProgramId(); Program program = persistenceService.getProgram(programId); @@ -247,20 +238,44 @@ changeValidatorContext(model.getValidationContext(), ui.getValidator()); listenValidatorValid(ui.getValidator(), model); - + + JTabbedPane tabPanel = ui.getFishingOperationTabPane(); + tabPanel.setTabComponentAt(0, new CustomTab(model)); + listModelIsModify(model); + //init gear shooting GearShootingTabUIModel gearShootingModel = ui.getGearShootingTabContent().getModel(); gearShootingModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationGearCaracteristic()); - +// tabPanel.setTabComponentAt(1, new CustomTab(gearShootingModel)); + //init environment EnvironmentTabUIModel environmentModel = ui.getEnvironmentTabContent().getModel(); environmentModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationEnvironmentCaracteristic()); +// tabPanel.setTabComponentAt(2, new CustomTab(environmentModel)); //init hydrology HydrologyTabUIModel hydrologyModel = ui.getHydrologyTabContent().getModel(); hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic()); +// tabPanel.setTabComponentAt(3, new CustomTab(hydrologyModel)); + + tabPanel.setModel(new DefaultSingleSelectionModel() { + + @Override + public void setSelectedIndex(int index) { + EditFishingOperationUIModel model = getModel(); + + if (TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(model.getValidationContext()) + || model.isEmpty() || model.isValid()) { + if (model.isModify()) { + save(); + } + super.setSelectedIndex(index); + } + } + + }); } @Override @@ -287,40 +302,7 @@ public void selectFishingOperation(FishingOperation bean) { if (fishingOperationMonitor.wasModified()) { - - // previous fishingOperation was modified, let's save it - EditFishingOperationUIModel beanToSave = fishingOperationMonitor.getBean(); - - if (beanToSave.isEmpty()) { - - // user must use save button - if (log.isWarnEnabled()) { - log.warn("Won't save new fishing operation, use explicit save button instead..."); - } - } else { - if (beanToSave.isUseSexagecimalFormat()) { - beanToSave.convertGearShootingCoordinatesDMSToDD(); - } - - // save modified fishing operation - FishingOperation toSave = beanToSave.toBean(); - - showInformationMessage( - "[ Trait - Caractéristiques générales ] " + - "Sauvegarde des modifications de " + decorate(toSave) + - "."); - - if (log.isInfoEnabled()) { - log.info("FishingOperation " + toSave.getId() + - " was modified, will save it."); - } - - fishingOperationMonitor.clearModified(); - - // persist current fishingOperation - persistenceService.saveFishingOperation(toSave); - //parentUi.getHandler().saveFishingOperation(toSave); - } + save(); } boolean empty = bean == null; @@ -365,8 +347,8 @@ List<Person> saisisseur = model.getSaisisseur(); if (log.isInfoEnabled()) { log.info("Selected saisisseurs: " + (saisisseur == null ? 0 : saisisseur.size())); + log.info(saisisseur); } - ui.getSaisisseurList().getModel().setSelected(saisisseur); // update model empty property model.setEmpty(empty); @@ -383,6 +365,7 @@ HydrologyTabUI hydrologyTab = ui.getHydrologyTabContent(); hydrologyTab.getHandler().reset(bean); + model.setModify(false); fishingOperationMonitor.clearModified(); } @@ -409,31 +392,41 @@ } public void save() { - EditFishingOperationUIModel model = getModel(); + // previous fishingOperation was modified, let's save it + EditFishingOperationUIModel beanToSave = fishingOperationMonitor.getBean(); - // get fishingOperation to save - if (model.isUseSexagecimalFormat()) { - model.convertGearShootingCoordinatesDMSToDD(); - } - FishingOperation toSave = model.toBean(); + if (beanToSave.isEmpty()) { - if (log.isInfoEnabled()) { - log.info("Save edition for fishingOperation: " + toSave.getId()); - } + // user must use save button + if (log.isWarnEnabled()) { + log.warn("Won't save new fishing operation, use explicit save button instead..."); + } + } else { + if (beanToSave.isUseSexagecimalFormat()) { + beanToSave.convertGearShootingCoordinatesDMSToDD(); + } - // keep selected tab (to resotre it after save) - int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + // save modified fishing operation + FishingOperation toSave = beanToSave.toBean(); - // clean auto-save monitor to avoid re-entrant code - fishingOperationMonitor.clearModified(); + showInformationMessage( + "[ Trait - Caractéristiques générales ] " + + "Sauvegarde des modifications de " + decorate(toSave) + + "."); - // persist current fishingOperation - parentUi.getHandler().saveFishingOperation(toSave); + if (log.isInfoEnabled()) { + log.info("FishingOperation " + toSave.getId() + + " was modified, will save it."); + } - // reselect current tab - ui.getFishingOperationTabPane().setSelectedIndex(selectedIndex); + fishingOperationMonitor.clearModified(); + getModel().setModify(false); -// getModel().setModify(false); + // persist current fishingOperation + persistenceService.saveFishingOperation(toSave); + //parentUi.getHandler().saveFishingOperation(toSave); + } + } public void importCasino() { 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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-01-08 22:32:00 UTC (rev 160) @@ -31,12 +31,11 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.spatial.SexagecimalPosition; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import java.util.Date; +import java.util.List; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; -import java.util.Date; -import java.util.List; - /** * Model for UI {@link EditFishingOperationUI}. * @@ -46,6 +45,8 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<FishingOperation, EditFishingOperationUIModel> { private static final long serialVersionUID = 1L; + + public static final String TITLE = "tutti.label.tab.fishingOperation.general"; public static final String PROPERTY_PERSISTED = "persisted"; @@ -192,7 +193,11 @@ gearShootingEndLatitudeAsSexagecimal = SexagecimalPosition.valueOf(gearShootingEndLatitude); gearShootingEndLongitudeAsSexagecimal = SexagecimalPosition.valueOf(gearShootingEndLongitude); } - + + public String getTitle() { + return TITLE; + } + public FishingOperation getFishingOperation() { return fishingOperation; } @@ -570,8 +575,9 @@ } public void setSaisisseur(List<Person> saisisseur) { + Object oldValue = getSaisisseur(); this.saisisseur = saisisseur; - firePropertyChange(PROPERTY_SAISISSEUR, null, saisisseur); + firePropertyChange(PROPERTY_SAISISSEUR, oldValue, saisisseur); } public String getValidationContext() { Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-01-08 22:32:00 UTC (rev 160) @@ -0,0 +1,51 @@ + +package fr.ifremer.tutti.ui.swing.util; + +import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import java.awt.Color; +import java.awt.Transparency; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.JLabel; +import javax.swing.JPanel; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static org.nuiton.i18n.I18n._; +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class CustomTab extends JPanel { + + private Log log = LogFactory.getLog(CustomTab.class); + + protected AbstractTuttiBeanUIModel model; + + protected JLabel title = new JLabel(); + + public AbstractTuttiBeanUIModel getModel() { + return model; + } + + public CustomTab(AbstractTuttiBeanUIModel model) { + this.model = model; + title.setText(_(model.getTitle())); + setBackground(new Color(0, 0, 0, 0)); + this.model.addPropertyChangeListener(AbstractTuttiBeanUIModel.PROPERTY_MODIFY, new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + log.info(">>>>>>>> model modified ? evt " + evt.getNewValue()); + log.info(">>>>>>>> model modified ? model " + CustomTab.this.model.isModify()); + Boolean modified = (Boolean) evt.getNewValue(); + String title = _(CustomTab.this.model.getTitle()); + if (modified) { + title += "*"; + } + CustomTab.this.title.setText(title); + } + }); + add(title); + } + +} 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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-01-08 22:32:00 UTC (rev 160) @@ -17,11 +17,11 @@ 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% - --> +You should have received a copy of the GNU General Public +License along with this program. If not, see +<http://www.gnu.org/licenses/gpl-3.0.html>. +#L% +--> <!DOCTYPE validators PUBLIC @@ -34,27 +34,27 @@ <field name="gearShootingStartLatitude"> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:90.0|max:90.0</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:90.0|max:90.0</param> + <param name="expression"> <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingStartLatitude && gearShootingStartLatitude <= doubles.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLatitudeDegree"> + <field name="gearShootingStartLatitudeDegree"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:90|max:90</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ( + !useSexagecimalFormat || ( ( -ints.min < getGearShootingStartLatitudeDegree() && getGearShootingStartLatitudeDegree() < ints.max ) || ( ( getGearShootingStartLatitudeDegree() == ints.max || getGearShootingStartLatitudeDegree() == -ints.min ) @@ -62,71 +62,71 @@ ) ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLatitudeMinute"> + <field name="gearShootingStartLatitudeMinute"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLatitudeSecond"> + <field name="gearShootingStartLatitudeSecond"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.second.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <!--gear shooting start longitude validation --> + <!--gear shooting start longitude validation --> - <field name="gearShootingStartLongitude"> + <field name="gearShootingStartLongitude"> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:180.0|max:180.0</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:180.0|max:180.0</param> + <param name="expression"> <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingStartLongitude && gearShootingStartLongitude <= doubles.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLongitudeDegree"> + <field name="gearShootingStartLongitudeDegree"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:180|max:180</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ( + !useSexagecimalFormat || ( (-ints.min < getGearShootingStartLongitudeDegree() && getGearShootingStartLongitudeDegree() < ints.max) || ( ( getGearShootingStartLongitudeDegree() == ints.max || getGearShootingStartLongitudeDegree() == -ints.min ) @@ -134,72 +134,72 @@ ) ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLongitudeMinute"> + <field name="gearShootingStartLongitudeMinute"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingStartLongitudeSecond"> + <field name="gearShootingStartLongitudeSecond"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.second.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <!--gear shooting end latitude validation --> + <!--gear shooting end latitude validation --> - <field name="gearShootingEndLatitude"> + <field name="gearShootingEndLatitude"> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:90.0|max:90.0</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:90.0|max:90.0</param> + <param name="expression"> <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingEndLatitude && gearShootingEndLatitude <= doubles.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLatitudeDegree"> + <field name="gearShootingEndLatitudeDegree"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:90|max:90</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:90|max:90</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ( + !useSexagecimalFormat || ( (-ints.min < getGearShootingEndLatitudeDegree() && getGearShootingEndLatitudeDegree() < ints.max) || ( ( getGearShootingEndLatitudeDegree() == ints.max || getGearShootingEndLatitudeDegree() == -ints.min ) @@ -207,71 +207,71 @@ ) ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLatitudeMinute"> + <field name="gearShootingEndLatitudeMinute"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLatitudeSecond"> + <field name="gearShootingEndLatitudeSecond"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.latitude.second.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <!--gear shooting end longitude validation --> + <!--gear shooting end longitude validation --> - <field name="gearShootingEndLongitude"> + <field name="gearShootingEndLongitude"> - <field-validator type="fieldexpressionwithparams"> - <param name="doubleParams">min:180.0|max:180.0</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="doubleParams">min:180.0|max:180.0</param> + <param name="expression"> <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingEndLongitude && gearShootingEndLongitude <= doubles.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLongitudeDegree"> + <field name="gearShootingEndLongitudeDegree"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:180|max:180</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:180|max:180</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ( + !useSexagecimalFormat || ( (-ints.min < getGearShootingEndLongitudeDegree() && getGearShootingEndLongitudeDegree() < ints.max) || ( ( getGearShootingEndLongitudeDegree() == ints.max || getGearShootingEndLongitudeDegree() == -ints.min ) @@ -279,44 +279,44 @@ ) ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLongitudeMinute"> + <field name="gearShootingEndLongitudeMinute"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </field> - <field name="gearShootingEndLongitudeSecond"> + <field name="gearShootingEndLongitudeSecond"> - <field-validator type="fieldexpressionwithparams"> - <param name="intParams">min:0|max:60</param> - <param name="expression"> + <field-validator type="fieldexpressionwithparams"> + <param name="intParams">min:0|max:60</param> + <param name="expression"> <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max ) ]]> - </param> + </param> - <message></message> + <message>tutti.validator.warning.longitude.second.outOfBounds</message> - </field-validator> + </field-validator> - </field> + </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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-validate-error-validation.xml 2013-01-08 22:32:00 UTC (rev 160) @@ -58,28 +58,28 @@ <!--gear shooting start latitude validation --> <field name="gearShootingStartLatitude"> - + <field-validator type="fieldexpressionwithparams"> <param name="doubleParams">min:90.0|max:90.0</param> <param name="expression"> - <![CDATA[ + <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingStartLatitude && gearShootingStartLatitude <= doubles.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLatitudeDegree"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:90|max:90</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ( + <![CDATA[ + !useSexagecimalFormat || ( ( -ints.min < getGearShootingStartLatitudeDegree() && getGearShootingStartLatitudeDegree() < ints.max ) || ( ( getGearShootingStartLatitudeDegree() == ints.max || getGearShootingStartLatitudeDegree() == -ints.min ) @@ -88,70 +88,70 @@ ) ]]> </param> + + <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLatitudeMinute"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLatitudeMinute() && getGearShootingStartLatitudeMinute() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLatitudeSecond"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLatitudeSecond() && getGearShootingStartLatitudeSecond() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.second.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <!--gear shooting start longitude validation --> <field name="gearShootingStartLongitude"> - + <field-validator type="fieldexpressionwithparams"> <param name="doubleParams">min:180.0|max:180.0</param> <param name="expression"> - <![CDATA[ + <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingStartLongitude && gearShootingStartLongitude <= doubles.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLongitudeDegree"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:180|max:180</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ( + <![CDATA[ + !useSexagecimalFormat || ( (-ints.min < getGearShootingStartLongitudeDegree() && getGearShootingStartLongitudeDegree() < ints.max) || ( ( getGearShootingStartLongitudeDegree() == ints.max || getGearShootingStartLongitudeDegree() == -ints.min ) @@ -160,71 +160,71 @@ ) ]]> </param> + + <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLongitudeMinute"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLongitudeMinute() && getGearShootingStartLongitudeMinute() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingStartLongitudeSecond"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingStartLongitudeSecond() && getGearShootingStartLongitudeSecond() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.second.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <!--gear shooting end latitude validation --> - + <field name="gearShootingEndLatitude"> - + <field-validator type="fieldexpressionwithparams"> <param name="doubleParams">min:90.0|max:90.0</param> <param name="expression"> - <![CDATA[ + <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingEndLatitude && gearShootingEndLatitude <= doubles.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.outOfBounds</message> - <message></message> - </field-validator> - + </field> - - + + <field name="gearShootingEndLatitudeDegree"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:90|max:90</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ( + <![CDATA[ + !useSexagecimalFormat || ( (-ints.min < getGearShootingEndLatitudeDegree() && getGearShootingEndLatitudeDegree() < ints.max) || ( ( getGearShootingEndLatitudeDegree() == ints.max || getGearShootingEndLatitudeDegree() == -ints.min ) @@ -233,70 +233,70 @@ ) ]]> </param> + + <message>tutti.validator.warning.latitude.degree.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingEndLatitudeMinute"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLatitudeMinute() && getGearShootingEndLatitudeMinute() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.minute.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingEndLatitudeSecond"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLatitudeSecond() && getGearShootingEndLatitudeSecond() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.latitude.second.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <!--gear shooting end longitude validation --> - + <field name="gearShootingEndLongitude"> - + <field-validator type="fieldexpressionwithparams"> <param name="doubleParams">min:180.0|max:180.0</param> <param name="expression"> - <![CDATA[ + <![CDATA[ useSexagecimalFormat || ( -doubles.min <= gearShootingEndLongitude && gearShootingEndLongitude <= doubles.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingEndLongitudeDegree"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:180|max:180</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ( + <![CDATA[ + !useSexagecimalFormat || ( (-ints.min < getGearShootingEndLongitudeDegree() && getGearShootingEndLongitudeDegree() < ints.max) || ( ( getGearShootingEndLongitudeDegree() == ints.max || getGearShootingEndLongitudeDegree() == -ints.min ) @@ -305,44 +305,43 @@ ) ]]> </param> + + <message>tutti.validator.warning.longitude.degree.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingEndLongitudeMinute"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLongitudeMinute() && getGearShootingEndLongitudeMinute() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.minute.outOfBounds</message> - <message></message> - </field-validator> - + </field> - + <field name="gearShootingEndLongitudeSecond"> - + <field-validator type="fieldexpressionwithparams"> <param name="intParams">min:0|max:60</param> <param name="expression"> - <![CDATA[ - useSexagecimalFormat && ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max + <![CDATA[ + !useSexagecimalFormat || ( ints.min <= getGearShootingEndLongitudeSecond() && getGearShootingEndLongitudeSecond() < ints.max ) ]]> </param> + + <message>tutti.validator.warning.longitude.second.outOfBounds</message> - <message></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-01-08 10:36:37 UTC (rev 159) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-08 22:32:00 UTC (rev 160) @@ -188,14 +188,14 @@ tutti.table.benthos.batch.header.speciesByGenusCode=Espèce tutti.table.benthos.batch.header.toConfirm=A Confirmer tutti.table.benthos.batch.header.weight=Poids -tutti.table.fishing.environment.header.key=Clé +tutti.table.fishing.environment.header.key=Paramètre tutti.table.fishing.environment.header.value=Valeur -tutti.table.fishing.gearShooting.header.key=Clé +tutti.table.fishing.gearShooting.header.key=Paramètre tutti.table.fishing.gearShooting.header.value=Valeur tutti.table.fishing.hydrology.header.averageValue=Moyenne tutti.table.fishing.hydrology.header.gearShootingEndValue=Fin de traîne tutti.table.fishing.hydrology.header.gearShootingStartValue=Début de traîne -tutti.table.fishing.hydrology.header.key=Clé +tutti.table.fishing.hydrology.header.key=Paramètre tutti.table.macrowaste.batch.header.comment=Commentaire tutti.table.macrowaste.batch.header.file=Pièces jointes tutti.table.macrowaste.batch.header.macroWasteCategory=Catégorie @@ -286,4 +286,12 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.required=Pas de poids ventilé 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.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 60 +tutti.validator.warning.latitude.outOfBounds=La Latitude doit être comprise entre -90.0 et 90.0 +tutti.validator.warning.latitude.second.outOfBounds=La seconde de la latitude doit être comprise entre 0 et 60 +tutti.validator.warning.longitude.degree.outOfBounds=Le degré de la latitude doit être compris entre -180 et 180 +tutti.validator.warning.longitude.minute.outOfBounds=La minute de la latitude doit être comprise entre 0 et 60 +tutti.validator.warning.longitude.outOfBounds=La Latitude doit être comprise entre -180.0 et 180.0 +tutti.validator.warning.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 60 tutti.validator.warning.splitSpeciesBatch.sampleBatch=Ce lot est-il vraiment un échantillon du lot parent ?