r1202 - in trunk: tutti-service/src/main/java/fr/ifremer/tutti/service tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create
Author: tchemit Date: 2013-09-22 13:29:17 +0200 (Sun, 22 Sep 2013) New Revision: 1202 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1202 Log: fixes #3297: [DONNEES INDIVIDUELLES] g?\195?\169rer les colonnes du tableau dans le protocole Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-09-21 17:45:55 UTC (rev 1201) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-09-22 11:29:17 UTC (rev 1202) @@ -54,6 +54,7 @@ public class DecoratorService extends AbstractTuttiService { public static final String CARACTERISTIC_WITH_UNIT = "withUnit"; + public static final String CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT = "parameterOnlyWithUnit"; public static final String CARACTERISTIC_PARAMETER_ONLY = "parameterOnly"; @@ -104,8 +105,7 @@ registerTuttiDecorator(Person.class, "${firstName}$s#${lastName}$s#${department}$s", SEPARATOR, " "); registerTuttiDecorator(Caracteristic.class, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s", SEPARATOR, " - "); registerTuttiDecorator(Caracteristic.class, CARACTERISTIC_PARAMETER_ONLY, "${parameterName}$s", SEPARATOR, " - "); -// registerMultiJXPathDecorator(Caracteristic.class, CARACTERISTIC_WITH_UNIT, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s (${unit}$s)", SEPARATOR, " - "); -// registerTuttiDecorator(CaracteristicQualitativeValue.class, "${name}$s", SEPARATOR, " - "); + registerTuttiDecorator(Caracteristic.class, CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT, "${parameterName}$s (${unit}$s)", SEPARATOR, " - "); registerTuttiDecorator(CaracteristicQualitativeValue.class, "${description}$s", SEPARATOR, " - "); registerTuttiDecorator(SpeciesProtocol.class, "${speciesReferenceTaxonId}", SEPARATOR, " - "); registerTuttiDecorator(Attachment.class, "${name}$s", SEPARATOR, " - "); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-09-21 17:45:55 UTC (rev 1201) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-09-22 11:29:17 UTC (rev 1202) @@ -308,13 +308,6 @@ new IndividualObservationBatchUIModel(catchesUIModel, defaultCaracteristic); ui.setContextValue(model); - -// // propagate when value is changing -// PropagatePropertyChangeListener.listenAndPropagate( -// catchesUIModel, -// model, -// EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, -// EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT); } @Override @@ -551,19 +544,25 @@ IndividualObservationBatch catchBean = row.toBean(); - // use a new instance of caracteristicMap - CaracteristicMap caracteristics = CaracteristicMap.copy(catchBean.getCaracteristics()); + CaracteristicMap caracteristics = new CaracteristicMap(); catchBean.setCaracteristics(caracteristics); - // push back default caracteristics - CaracteristicMap defaultCaracteristics = row.getDefaultCaracteristics(); - for (Map.Entry<Caracteristic, Serializable> entry : defaultCaracteristics.entrySet()) { + // push back not null caracteristics + for (Map.Entry<Caracteristic, Serializable> entry : row.getCaracteristics().entrySet()) { Serializable value = entry.getValue(); if (value != null) { caracteristics.put(entry.getKey(), value); } } + // push back not null default caracteristics + for (Map.Entry<Caracteristic, Serializable> entry : row.getDefaultCaracteristics().entrySet()) { + Serializable value = entry.getValue(); + if (value != null) { + caracteristics.put(entry.getKey(), value); + } + } + FishingOperation fishingOperation = getModel().getFishingOperation(); catchBean.setFishingOperation(fishingOperation); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-09-21 17:45:55 UTC (rev 1201) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-09-22 11:29:17 UTC (rev 1202) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; @@ -45,13 +46,20 @@ import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUI; import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUIModel; import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.Table; +import jaxx.runtime.swing.editor.NumberEditor; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import javax.swing.JComponent; +import javax.swing.JLabel; import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.Insets; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; @@ -90,6 +98,7 @@ listModelIsModify(model); } + @Override public void afterInitUI() { @@ -105,7 +114,7 @@ Lists.newArrayList(lengthStepCaracteristics), null); - if (context.isProtocolFilled()) { + if (getDataContext().isProtocolFilled()) { // get loaded protocol TuttiProtocol protocol = getDataContext().getProtocol(); @@ -134,9 +143,102 @@ } } }); + + // add default caracteristic editors + List<Caracteristic> caracteristics = + getDataContext().getDefaultIndividualObservationCaracteristics(); + + Table configurationPanel = ui.getConfigurationPanel(); + + Decorator<Caracteristic> caracteristicDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); + + Decorator<Caracteristic> caracteristicTipDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); + + int index = 4; + for (Caracteristic caracteristic : caracteristics) { + + final CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor editorModel = + getModel().newCaracteristicEditor(caracteristic); + + JComponent editor = null; + + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: { + final NumberEditor numberEditor = new NumberEditor(ui); + + String name = caracteristic.getId() + "CaracteristicField"; + numberEditor.setName(name); + numberEditor.setProperty(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY); + numberEditor.setUseFloat(true); + numberEditor.setShowReset(true); + numberEditor.setBean(editorModel); + numberEditor.setAutoPopup(getConfig().isAutoPopupNumberEditor()); + numberEditor.setShowPopupButton(getConfig().isShowNumberEditorButton()); + numberEditor.setNumberPattern(TuttiUI.DECIMAL3_PATTERN); + + editorModel.addPropertyChangeListener(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + numberEditor.setModel((Number) evt.getNewValue()); + } + }); + + editor = numberEditor; + ui.get$objectMap().put(name, editor); + + initNumberEditor(numberEditor); + } + break; + case QUALITATIVE: + + { + final BeanFilterableComboBox<CaracteristicQualitativeValue> qualitativeValuesEditor = new BeanFilterableComboBox<CaracteristicQualitativeValue>(ui); + + String name = caracteristic.getId() + "CaracteristicComboBox"; + qualitativeValuesEditor.setName(name); + qualitativeValuesEditor.setI18nPrefix("tutti.property."); + qualitativeValuesEditor.setProperty(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY); + qualitativeValuesEditor.setShowReset(true); + qualitativeValuesEditor.setBeanType(CaracteristicQualitativeValue.class); + + qualitativeValuesEditor.setBean(editorModel); + + editorModel.addPropertyChangeListener(CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor.PROPERTY_PROPERTY, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + qualitativeValuesEditor.setSelectedItem(evt.getNewValue()); + } + }); + + editor = qualitativeValuesEditor; + ui.get$objectMap().put(name, editor); + + initBeanFilterableComboBox(qualitativeValuesEditor, + Lists.newArrayList(caracteristic.getQualitativeValue()), + null); + } + + break; + case TEXT: + break; + } + JLabel jLabel = new JLabel(); + jLabel.setText(caracteristicDecorator.toString(caracteristic)); + jLabel.setToolTipText(caracteristicTipDecorator.toString(caracteristic)); + jLabel.setLabelFor(editor); + jLabel.putClientProperty("help", "tutti.createIndividualObservationBatch.field.defaultCaracteristic.help"); + ui.registerHelpId(ui.getBroker(), jLabel, "tutti.createIndividualObservationBatch.field.defaultCaracteristic.help"); + + configurationPanel.add(jLabel, new GridBagConstraints(0, index, 1, 1, 0.0, 0.0, 17, 1, new Insets(3, 3, 3, 3), 0, 0)); + configurationPanel.add(SwingUtil.boxComponentWithJxLayer(editor), new GridBagConstraints(1, index, 2, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0)); + index++; + } } - listenValidatorValid(ui.getValidator(), getModel()); + listenValidatorValid(getValidator(), getModel()); } @Override @@ -152,7 +254,7 @@ } // evict model from validator - ui.getValidator().setBean(null); + getValidator().setBean(null); // when canceling always invalid model getModel().setValid(false); @@ -187,7 +289,7 @@ CreateIndividualObservationBatchUIModel model = getModel(); // connect model to validator - ui.getValidator().setBean(model); + getValidator().setBean(model); model.reset(); @@ -196,9 +298,6 @@ List<Species> speciesListWithSurveyCode = getDataContext().getReferentSpeciesWithSurveyCode(); -// Map<String, Species> speciesMap = -// TuttiEntities.splitById(speciesListWithSurveyCode); - List<Species> speciesList; EditCatchesUI parent = @@ -267,18 +366,6 @@ // set last species filled here Species lastSpeciesUsed = batchModel.getLastSpeciesUsed(); model.setSpecies(lastSpeciesUsed); -// if (lastSpeciesUsed != null) { -// -// // use the version with surveycode -// Species species = speciesMap.get(lastSpeciesUsed.getId()); -// if (species == null) { -// -// speciesMap = TuttiEntities.splitById(speciesList); -// species = speciesMap.get(lastSpeciesUsed.getId()); -// } -// -// model.setSpecies(lastSpeciesUsed); -// } model.setLengthStepCaracteristic(batchModel.getLastLengthStepCaracteristicUsed()); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-09-21 17:45:55 UTC (rev 1201) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-09-22 11:29:17 UTC (rev 1202) @@ -29,9 +29,12 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.beans.AbstractSerializableBean; +import java.io.Serializable; import java.util.List; /** @@ -46,6 +49,8 @@ public static final String PROPERTY_AVAILABLE_SPECIES = "availableSpecies"; + public static final String PROPERTY_CARACTERISTICS = "caracteristics"; + /** * All available species (sets by protocol). * @@ -68,6 +73,14 @@ */ protected final List<Caracteristic> defaultCaracteristic; + /** + * Default caracteristics editors. + * + * @since 2.5 + */ + protected final List<CaracteristicMapPropertyEditor> caracteristicEditors = + Lists.newArrayList(); + public CreateIndividualObservationBatchUIModel(List<Caracteristic> defaultCaracteristic) { super(IndividualObservationBatch.class, null, null); this.defaultCaracteristic = defaultCaracteristic; @@ -118,6 +131,13 @@ return editObject.getCaracteristics(); } + public void setCaracteristics(CaracteristicMap caracteristics) { + + editObject.setCaracteristics(caracteristics); + firePropertyChange(IndividualObservationBatch.PROPERTY_CARACTERISTICS, null, caracteristics); + + } + public List<Species> getAvailableSpecies() { if (log.isDebugEnabled()) { log.debug("getAvailableSpecies " + availableSpecies); @@ -145,6 +165,52 @@ setWeight(null); setSize(null); setLengthStepCaracteristic(null); + for (CaracteristicMapPropertyEditor editor : caracteristicEditors) { + editor.setProperty(null); + } getCaracteristics().clear(); } + + public CaracteristicMapPropertyEditor newCaracteristicEditor(Caracteristic caracteristic) { + CaracteristicMapPropertyEditor editor = new CaracteristicMapPropertyEditor(caracteristic); + caracteristicEditors.add(editor); + return editor; + } + + /** + * Model to edit a caracteristic and flush it in the caracteristc map of + * the global model. + * <p/> + * Acts as a bean for the given caracteristic. + * + * @since 2.5 + */ + public class CaracteristicMapPropertyEditor extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_PROPERTY = "property"; + + private final Caracteristic caracteristic; + + protected Serializable property; + + public Serializable getProperty() { + return property; + } + + public void setProperty(Serializable property) { + Object oldValue = getProperty(); + this.property = property; + getCaracteristics().put(caracteristic, property); + if (ObjectUtils.notEqual(oldValue, property)) { + firePropertyChange(PROPERTY_PROPERTY, oldValue, property); + CreateIndividualObservationBatchUIModel.this.firePropertyChanged(PROPERTY_CARACTERISTICS, null, getCaracteristics()); + } + } + + public CaracteristicMapPropertyEditor(Caracteristic caracteristic) { + this.caracteristic = caracteristic; + } + } }
participants (1)
-
tchemit@users.forge.codelutin.com