r875 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/java/fr/ifremer/tutti/service/catches tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation tutti-ui-swing/src/main/resources/i18n
Author: kmorin Date: 2013-04-25 19:22:52 +0200 (Thu, 25 Apr 2013) New Revision: 875 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/875 Log: refs #2079 [CONTROLE] - Contr?\195?\180le / Validation apr?\195?\168s la saisie Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml 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/cruise/ValidateCruiseUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.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/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-04-25 17:22:52 UTC (rev 875) @@ -44,11 +44,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; +import org.nuiton.util.DateUtil; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Closeable; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; @@ -765,6 +767,19 @@ return existingFishingOperations; } + public boolean isDateInCruise(Date date) { + return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate()); + } + + public boolean isValidDuration(Date gearShootingStartDate, Date gearShootingEndDate) { + boolean result = gearShootingStartDate == null || gearShootingEndDate == null; + if (!result) { + int minutes = DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate); + result |= minutes <= 45 && minutes >= 20; + } + return result; + } + public void reset() { existingPrograms = null; existingProtocols = null; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/ValidateCruiseOperationsService.java 2013-04-25 17:22:52 UTC (rev 875) @@ -79,6 +79,7 @@ TuttiDataContext dataContext = context.getDataContext(); List<FishingOperation> operations = persistenceService.getAllFishingOperation(dataContext.getCruiseId()); for (FishingOperation operation : operations) { + operation = persistenceService.getFishingOperation(operation.getId()); NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE); checkOperation(operation, validator); @@ -89,6 +90,16 @@ } /** + * Validates the operation of the currently selected cruise whose id is the given id. + * @return the validation results + */ + public NuitonValidatorResult validateCruiseOperation(FishingOperation operation) { + NuitonValidatorResult validator = validationService.validateFishingOperation(operation, ValidationService.VALIDATION_CONTEXT_VALIDATE); + checkOperation(operation, validator); + return validator; + } + + /** * Adds additional messages to the validation results * @param fishingOperation the operation to validate * @param validator the validatpr containing the messages. Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-edit-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875) @@ -67,8 +67,8 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || isValidDuration() + <![CDATA[ + isValidDuration(gearShootingStartDate, gearShootingEndDate) ]]> </param> <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> @@ -91,8 +91,8 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || isValidDuration() + <![CDATA[ + isValidDuration(gearShootingStartDate, gearShootingEndDate) ]]> </param> <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-error-validation.xml 2013-04-25 17:22:52 UTC (rev 875) @@ -99,13 +99,7 @@ <field name="gearShootingStartLatitude"> - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || gearShootingStartLatitude != null - ]]> - </param> - + <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.latitude.start.required</message> </field-validator> @@ -113,13 +107,9 @@ <param name="doubleParams">min:90.0|max:90.0</param> <param name="expression"> <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || - ( gearShootingStartLatitude != null - && -doubles.min <= gearShootingStartLatitude - && gearShootingStartLatitude <= doubles.max ) + -doubles.min <= gearShootingStartLatitude && gearShootingStartLatitude <= doubles.max ]]> </param> - <message>tutti.validator.warning.latitude.outOfBounds</message> </field-validator> @@ -130,13 +120,7 @@ <field name="gearShootingStartLongitude"> - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || gearShootingStartLongitude != null - ]]> - </param> - + <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.longitude.start.required</message> </field-validator> @@ -144,10 +128,7 @@ <param name="doubleParams">min:180.0|max:180.0</param> <param name="expression"> <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || - ( gearShootingStartLongitude != null - && -doubles.min <= gearShootingStartLongitude - && gearShootingStartLongitude <= doubles.max ) + -doubles.min <= gearShootingStartLongitude && gearShootingStartLongitude <= doubles.max ]]> </param> @@ -161,13 +142,7 @@ <field name="gearShootingEndLatitude"> - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || gearShootingEndLatitude != null - ]]> - </param> - + <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.latitude.end.required</message> </field-validator> @@ -175,10 +150,7 @@ <param name="doubleParams">min:90.0|max:90.0</param> <param name="expression"> <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || - ( gearShootingEndLatitude != null - && -doubles.min <= gearShootingEndLatitude - && gearShootingEndLatitude <= doubles.max ) + -doubles.min <= gearShootingEndLatitude && gearShootingEndLatitude <= doubles.max ]]> </param> @@ -192,13 +164,7 @@ <field name="gearShootingEndLongitude"> - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || gearShootingEndLongitude != null - ]]> - </param> - + <field-validator type="required" short-circuit="true"> <message>tutti.validator.error.longitude.end.required</message> </field-validator> @@ -206,10 +172,7 @@ <param name="doubleParams">min:180.0|max:180.0</param> <param name="expression"> <![CDATA[ - !"DD".equals(coordinateEditorType.toString()) || - ( gearShootingEndLongitude != null - && -doubles.min <= gearShootingEndLongitude - && gearShootingEndLongitude <= doubles.max ) + -doubles.min <= gearShootingEndLongitude && gearShootingEndLongitude <= doubles.max ]]> </param> Modified: trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml =================================================================== --- trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/FishingOperation-validate-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875) @@ -33,9 +33,8 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 - && org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) >= 20 ) + <![CDATA[ + isValidDuration(gearShootingStartDate, gearShootingEndDate) ]]> </param> <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> @@ -47,9 +46,8 @@ <field-validator type="fieldexpression" short-circuit="true"> <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) <= 45 - && org.nuiton.util.DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate) >= 20 ) + <![CDATA[ + isValidDuration(gearShootingStartDate, gearShootingEndDate) ]]> </param> <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> 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-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseFishingOperationAction.java 2013-04-25 17:22:52 UTC (rev 875) @@ -53,7 +53,7 @@ protected FishingOperation fishingOperation; public EditCruiseFishingOperationAction(ValidateCruiseUIHandler handler) { - super(handler, true); + super(handler, false); setActionDescription(_("tutti.editFishingOperation.action.editFishingOperation.tip")); } 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-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIHandler.java 2013-04-25 17:22:52 UTC (rev 875) @@ -24,19 +24,31 @@ * #L% */ +import com.google.common.base.Preconditions; import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.ValidationService; +import fr.ifremer.tutti.service.catches.ValidateCruiseOperationsService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.content.MainUI; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; +import fr.ifremer.tutti.ui.swing.util.RemoveablePropertyChangeListener; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; +import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; +import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; +import jaxx.runtime.validator.swing.SwingValidatorMessage; +import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorResult; @@ -45,16 +57,19 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeModel; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.tree.*; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; import java.util.Map; import static org.nuiton.i18n.I18n._; +import static org.nuiton.i18n.I18n.n_; /** * @author kmorin <kmorin@codelutin.com> @@ -64,29 +79,71 @@ private final static Log log = LogFactory.getLog(ValidateCruiseUIHandler.class); - /** Persistence service. */ - private final PersistenceService persistenceService; - /** Validation service. */ - private final ValidationService validationService; + private final ValidateCruiseOperationsService validationService; protected EditCruiseFishingOperationAction editFishingOperationAction; - protected Map<FishingOperation, NuitonValidatorResult> validator; + protected final PropertyChangeListener editFishingOperationModelListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + List<String> propertiesToIgnore = Lists.newArrayList( + EditFishingOperationUIModel.PROPERTY_MODIFY, + EditFishingOperationUIModel.PROPERTY_VALID, + EditFishingOperationUIModel.PROPERTY_PERSISTED + ); + EditFishingOperationUIModel model = (EditFishingOperationUIModel) evt.getSource(); + + if (!getUI().getOperationPanel().getModel().isEditionAdjusting() + && model.getFishingOperation() != null + &&!propertiesToIgnore.contains(evt.getPropertyName())) { + + if (model.getCoordinateEditorType() != CoordinateEditorType.DD) { + model.convertGearShootingCoordinatesDMSToDD(); + } + + FishingOperation operation = model.toBean(); + NuitonValidatorResult validationResult = validationService.validateCruiseOperation(operation); + + updateCurrentOperatonNode(validationResult); + + } + } + }; + public ValidateCruiseUIHandler(TuttiUI parentUi, ValidateCruiseUI ui) { super(parentUi.getHandler().getContext(), ui); - persistenceService = context.getPersistenceService(); - validationService = context.getValidationService(); + validationService = context.getValidateCruiseOperationsService(); } @Override public void beforeInitUI() { - validator = context.getValidateCruiseOperationsService().validateCruiseOperations(); ValidateCruiseUIModel model = new ValidateCruiseUIModel(); + + model.setValidator(validationService.validateCruiseOperations()); + + model.addPropertyChangeListener(ValidateCruiseUIModel.PROPERTY_SELECTED_FISHING_OPERATION, + new RemoveablePropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + FishingOperation operation = (FishingOperation) evt.getNewValue(); + + ui.getOperationPanel().getFishingOperationTabContent().getModel(). + removePropertyChangeListener(editFishingOperationModelListener); + + editFishingOperationAction.setFishingOperation(null); + AbstractTuttiAction.runAction(editFishingOperationAction); + + if (operation != null) { + editFishingOperationAction.setFishingOperation(operation); + TuttiActionHelper.runAction(editFishingOperationAction); + } + } + }); + ui.setContextValue(model); - } @Override @@ -98,15 +155,11 @@ ui.getOperationPanel().getModel().setSelectedFishingOperation(null); DefaultMutableTreeNode root = new DefaultMutableTreeNode(); + Map<FishingOperation, NuitonValidatorResult> validator = getModel().getValidator(); + for (FishingOperation operation : validator.keySet()) { - operation = persistenceService.getFishingOperation(operation.getId()); NuitonValidatorResult result = validator.get(operation); - - Multimap<NuitonValidatorScope, String> messages = LinkedListMultimap.create(); - messages.putAll(NuitonValidatorScope.ERROR, result.getMessagesForScope(NuitonValidatorScope.ERROR)); - messages.putAll(NuitonValidatorScope.WARNING, result.getMessagesForScope(NuitonValidatorScope.WARNING)); - - OperationTreeNode node = new OperationTreeNode(operation, messages); + OperationTreeNode node = new OperationTreeNode(operation, result); root.add(node); } TreeModel model = new DefaultTreeModel(root); @@ -117,23 +170,36 @@ navigation.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { - Object[] paths = navigation.getSelectionPath().getPath(); - FishingOperation operation = null; - for (Object o : paths) { - if (o != null && OperationTreeNode.class.isAssignableFrom(o.getClass())) { - operation = (FishingOperation) ((OperationTreeNode) o).getUserObject(); - break; - } - } - editFishingOperationAction.setFishingOperation(operation); - AbstractTuttiAction.runAction(editFishingOperationAction); + TreePath selectionPath = navigation.getSelectionPath(); + Preconditions.checkArgument(selectionPath.getPathCount() > 1); + + Object o = selectionPath.getPathComponent(1); + FishingOperation operation = null; + + if (o != null) { + operation = (FishingOperation) ((OperationTreeNode) o).getUserObject(); } + getModel().setSelectedFishingOperation(operation); } }); + SwingUtil.expandTree(navigation); + SwingUtil.addExpandOnClickListener(navigation); FishingOperationsUI operationPanel = ui.getOperationPanel(); operationPanel.getTopPanel().setVisible(false); + + operationPanel.getFishingOperationTabContent().getModel().addPropertyChangeListener( + EditFishingOperationUIModel.PROPERTY_PERSISTED, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditFishingOperationUIModel model = (EditFishingOperationUIModel) evt.getSource(); + if (Boolean.TRUE.equals(evt.getNewValue())) { + model.addPropertyChangeListener(editFishingOperationModelListener); + } else { + model.removePropertyChangeListener(editFishingOperationModelListener); + } + } + }); } @Override @@ -159,6 +225,20 @@ return true; } + protected void updateCurrentOperatonNode(NuitonValidatorResult validationResult) { + JTree navigation = ui.getNavigation(); + TreePath selectionPath = navigation.getSelectionPath(); + Preconditions.checkArgument(selectionPath.getPathCount() > 1); + + OperationTreeNode operationNode = (OperationTreeNode) selectionPath.getPathComponent(1); + operationNode.removeAllChildren(); + operationNode.createChildren(validationResult); + + DefaultTreeModel treeModel = (DefaultTreeModel) navigation.getModel(); + treeModel.reload(operationNode); + navigation.setSelectionPath(selectionPath); + } + protected class ValidationTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 1L; @@ -170,11 +250,15 @@ if (value != null) { if (value instanceof OperationTreeNode) { OperationTreeNode node = (OperationTreeNode) value; - label.setText(getDecorator(FishingOperation.class, null).toString(node.getUserObject())); + String text = getDecorator(FishingOperation.class, null).toString(node.getUserObject()); + label.setText(text); + label.setToolTipText(text); } else if (value instanceof MessageTreeNode) { MessageTreeNode node = (MessageTreeNode) value; - label.setText(_(String.valueOf(node.getUserObject()))); + String text = _(String.valueOf(node.getUserObject())); + label.setText(text); + label.setToolTipText(text); String iconName = node.getScope().toString().toLowerCase(); label.setIcon(SwingUtil.createImageIcon(iconName + ".png")); } @@ -188,20 +272,32 @@ private static final long serialVersionUID = 1L; public OperationTreeNode(FishingOperation operation, - Multimap<NuitonValidatorScope, String> messages) { + NuitonValidatorResult validationResult) { super(operation); - setAllowsChildren(messages != null); - createChildren(messages); + + setAllowsChildren(true); + createChildren(validationResult); } - public void createChildren(Multimap<NuitonValidatorScope, String> messages) { - for (NuitonValidatorScope scope : messages.keySet()) { - for (String message : messages.get(scope)) { - MessageTreeNode child = new MessageTreeNode(scope, message); - this.add(child); - } + public void createChildren(NuitonValidatorResult validationResult) { + int messageNb = 0; + messageNb += addMessages(NuitonValidatorScope.ERROR, + validationResult.getMessagesForScope(NuitonValidatorScope.ERROR)); + messageNb += addMessages(NuitonValidatorScope.WARNING, + validationResult.getMessagesForScope(NuitonValidatorScope.WARNING)); + + if (messageNb == 0) { + addMessages(NuitonValidatorScope.INFO, Lists.newArrayList(_("tutti.validator.info.operation.noError"))); } } + + protected int addMessages(NuitonValidatorScope scope, List<String> messages) { + for (String message : messages) { + MessageTreeNode child = new MessageTreeNode(scope, message); + this.add(child); + } + return messages.size(); + } } protected class MessageTreeNode extends DefaultMutableTreeNode { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ValidateCruiseUIModel.java 2013-04-25 17:22:52 UTC (rev 875) @@ -35,359 +35,53 @@ import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.beans.AbstractSerializableBean; +import org.nuiton.validator.NuitonValidatorResult; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Map; /** * @author kmorin <kmorin@codelutin.com> * @since 1.4 */ -public class ValidateCruiseUIModel extends AbstractTuttiBeanUIModel<FishingOperation, ValidateCruiseUIModel> - implements AttachmentModelAware, FishingOperation { +public class ValidateCruiseUIModel extends AbstractSerializableBean { - protected ValidateCruiseUIModel() { - super(FishingOperation.class, null, null); - } + private static final long serialVersionUID = 1L; - /** - * Delegate edit object. - * - * @since 1.4 - */ - protected FishingOperation editObject = null; + /** Logger. */ + private static final Log log = + LogFactory.getLog(ValidateCruiseUIModel.class); - public FishingOperation getEditFishingOperation() { - return editObject; - } + public static final String PROPERTY_SELECTED_FISHING_OPERATION = "selectedFishingOperation"; - public void setEditFishingOperation(FishingOperation editObject) { - this.editObject = editObject; - } + public static final String PROPERTY_VALIDATOR = "validator"; - @Override - protected FishingOperation newEntity() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } + protected FishingOperation selectedFishingOperation; - @Override - public AttachementObjectTypeEnum getObjectType() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } + protected Map<FishingOperation, NuitonValidatorResult> validator; - @Override - public Integer getObjectId() { - return null; //To change body of implemented methods use File | Settings | File Templates. + public FishingOperation getSelectedFishingOperation() { + return selectedFishingOperation; } - @Override - public List<Attachment> getAttachment() { - return null; //To change body of implemented methods use File | Settings | File Templates. + public void setSelectedFishingOperation(FishingOperation selectedFishingOperation) { + Object oldValue = getSelectedFishingOperation(); + this.selectedFishingOperation = selectedFishingOperation; + firePropertyChange(PROPERTY_SELECTED_FISHING_OPERATION, oldValue, selectedFishingOperation); } - @Override - public void addAllAttachment(Collection<Attachment> attachments) { - //To change body of implemented methods use File | Settings | File Templates. + public Map<FishingOperation, NuitonValidatorResult> getValidator() { + return validator; } - @Override - public void addAttachment(Attachment attachment) { - //To change body of implemented methods use File | Settings | File Templates. + public void setValidator(Map<FishingOperation, NuitonValidatorResult> validator) { + Object oldValue = getValidator(); + this.validator = validator; + firePropertyChange(PROPERTY_VALIDATOR, oldValue, validator); } - - @Override - public void removeAllAttachment(Collection<Attachment> attachments) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void removeAttachment(Attachment attachment) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String getStationNumber() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setStationNumber(String stationNumber) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Integer getFishingOperationNumber() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setFishingOperationNumber(Integer fishingOperationNumber) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Float getGearShootingStartLatitude() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingStartLatitude(Float gearShootingStartLatitude) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Float getGearShootingStartLongitude() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingStartLongitude(Float gearShootingStartLongitude) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Date getGearShootingStartDate() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingStartDate(Date gearShootingStartDate) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Float getGearShootingEndLatitude() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingEndLatitude(Float gearShootingEndLatitude) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Float getGearShootingEndLongitude() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingEndLongitude(Float gearShootingEndLongitude) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Date getGearShootingEndDate() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearShootingEndDate(Date gearShootingEndDate) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isFishingOperationRectiligne() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setFishingOperationRectiligne(boolean fishingOperationRectiligne) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Float getTrawlDistance() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setTrawlDistance(Float trawlDistance) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Boolean getFishingOperationValid() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setFishingOperationValid(Boolean fishingOperationValid) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isPlanktonObserved() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setPlanktonObserved(boolean planktonObserved) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public CaracteristicMap getVesselUseFeatures() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setVesselUseFeatures(CaracteristicMap vesselUseFeatures) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public CaracteristicMap getGearUseFeatures() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGearUseFeatures(CaracteristicMap gearUseFeatures) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isAccidentalObserved() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setAccidentalObserved(boolean accidentalObserved) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String getMultirigAggregation() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setMultirigAggregation(String multirigAggregation) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String getComment() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setComment(String comment) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Cruise getCruise() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setCruise(Cruise cruise) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Person getRecorderPerson(int index) { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isRecorderPersonEmpty() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public int sizeRecorderPerson() { - return 0; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void addRecorderPerson(Person recorderPerson) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void addAllRecorderPerson(Collection<Person> recorderPerson) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean removeRecorderPerson(Person recorderPerson) { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean removeAllRecorderPerson(Collection<Person> recorderPerson) { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean containsRecorderPerson(Person recorderPerson) { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean containsAllRecorderPerson(Collection<Person> recorderPerson) { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public List<Person> getRecorderPerson() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setRecorderPerson(List<Person> recorderPerson) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Gear getGear() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setGear(Gear gear) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public Vessel getVessel() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setVessel(Vessel vessel) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public TuttiLocation getStrata() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setStrata(TuttiLocation strata) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public TuttiLocation getSubStrata() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setSubStrata(TuttiLocation subStrata) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public TuttiLocation getLocation() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setLocation(TuttiLocation location) { - //To change body of implemented methods use File | Settings | File Templates. - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ValidateCatchesAction.java 2013-04-25 17:22:52 UTC (rev 875) @@ -29,6 +29,7 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.AbstractChangeScreenAction; +import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel-edit-warning-validation.xml 2013-04-25 17:22:52 UTC (rev 875) @@ -29,56 +29,6 @@ <validators> - <field name="gearShootingStartDate"> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ gearShootingStartDate == null || isDateInCruise(gearShootingStartDate) ]]> - </param> - <message> - tutti.validator.error.fishingOperation.dates.startOutOfCruiseDates - </message> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || isValidDuration() - ]]> - </param> - <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> - </field-validator> - - </field> - - <field name="gearShootingEndDate"> - - <field-validator type="required" short-circuit="true"> - <message> - tutti.validator.error.fishingOperation.date.end.required - </message> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ gearShootingEndDate == null || isDateInCruise(gearShootingEndDate) ]]> - </param> - <message> - tutti.validator.error.fishingOperation.dates.endOutOfCruiseDates - </message> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[ gearShootingStartDate == null || gearShootingEndDate == null - || isValidDuration() - ]]> - </param> - <message>tutti.validator.error.fishingOperation.dates.wrongTime</message> - </field-validator> - - </field> - <field name="gearShootingStartLatitudeDegree"> <field-validator type="fieldexpression" short-circuit="true"> 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-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-04-25 17:22:52 UTC (rev 875) @@ -1147,6 +1147,7 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.invalidValue= 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= 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-04-25 09:22:03 UTC (rev 874) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-04-25 17:22:52 UTC (rev 875) @@ -55,7 +55,7 @@ tutti.common.askSaveBeforeLeaving.title=Modifications non enregistrées tutti.common.cancel=Annuler tutti.common.cancel.mnemonic=A -tutti.common.datefield.tip=Format attendu : %s +tutti.common.datefield.tip=Format attendu \: %s tutti.common.file.csv=Extension d'un fichier csv tutti.common.file.pdf=Extension d'un fichier pdf tutti.common.file.protocol=Extension d'un fichier de protocole Tutti @@ -1133,6 +1133,7 @@ tutti.validator.error.splitSpeciesBatch.sampleWeight.invalidValue=La somme des poids ventilés doit être strictement positive 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
participants (1)
-
kmorin@users.forge.codelutin.com