r917 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-persistence/src/main/resources tutti-persistence/src/main/xmi tutti-service/src/main/java/fr/ifremer/tutti/service tutti-ui-swing/src/main/filtered-resources 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/operation/catches/benthos tutti-ui-swing/src/main/re
Author: kmorin Date: 2013-05-03 17:49:20 +0200 (Fri, 03 May 2013) New Revision: 917 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/917 Log: fixes #1830 [REFERENTIEL] - Engins de pr?\195?\169l?\195?\168vement Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditGearCaracteristicsAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ViewGearCaracteristicsAction.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 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-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-05-03 15:49:20 UTC (rev 917) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -399,6 +400,11 @@ @Transactional(readOnly = false) Cruise saveCruise(Cruise bean); + Gear getGearWithCaracteristics(Gear gear, Cruise cruise); + + @Transactional(readOnly = false) + void saveGearCaracteristics(Gear gear, Cruise cruise); + //------------------------------------------------------------------------// //-- Protocol methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-05-03 15:49:20 UTC (rev 917) @@ -26,6 +26,7 @@ import com.google.common.collect.Maps; import fr.ifremer.adagio.core.service.technical.CacheService; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -508,6 +509,16 @@ return cruiseService.saveCruise(bean); } + @Override + public Gear getGearWithCaracteristics(Gear gear, Cruise cruise) { + return cruiseService.getGearWithCaracteristics(gear, cruise); + } + + @Override + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + cruiseService.saveGearCaracteristics(gear, cruise); + } + //------------------------------------------------------------------------// //-- Protocol methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-05-03 15:49:20 UTC (rev 917) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -327,6 +328,16 @@ } @Override + public Gear getGearWithCaracteristics(Gear gear, Cruise cruise) { + throw notImplemented(); + } + + @Override + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + throw notImplemented(); + } + + @Override public List<String> getAllProtocolNames() { throw notImplemented(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceService.java 2013-05-03 15:49:20 UTC (rev 917) @@ -25,7 +25,9 @@ */ import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.referential.Gear; import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -48,4 +50,9 @@ @Transactional(readOnly = false) Cruise saveCruise(Cruise bean); + + Gear getGearWithCaracteristics(Gear gear, Cruise cruise); + + @Transactional(readOnly = false) + void saveGearCaracteristics(Gear gear, Cruise cruise); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-05-03 15:49:20 UTC (rev 917) @@ -32,6 +32,7 @@ import fr.ifremer.adagio.core.dao.administration.programStrategy.ProgramImpl; import fr.ifremer.adagio.core.dao.administration.user.PersonDao; import fr.ifremer.adagio.core.dao.administration.user.PersonImpl; +import fr.ifremer.adagio.core.dao.data.measure.GearPhysicalMeasurement; import fr.ifremer.adagio.core.dao.data.measure.SurveyMeasurement; import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip; @@ -50,20 +51,15 @@ import fr.ifremer.adagio.core.dao.referential.location.Location; import fr.ifremer.adagio.core.dao.referential.location.LocationDao; import fr.ifremer.adagio.core.dao.referential.location.LocationImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmDao; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueDao; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.*; import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.*; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -74,13 +70,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.Serializable; import java.text.MessageFormat; -import java.util.Collections; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author tchemit <chemit@codelutin.com> @@ -487,6 +479,126 @@ role); } + public Gear getGearWithCaracteristics(Gear gear, Cruise cruise) { + Preconditions.checkNotNull(cruise); + Preconditions.checkNotNull(cruise.getId(), "Cruise 'id' must not be null or empty"); + Preconditions.checkNotNull(gear); + Preconditions.checkNotNull(gear.getId(), "Gear 'id' must not be null or empty"); + + CaracteristicMap result = new CaracteristicMap(); + + Iterator<GearPhysicalMeasurement> list = queryListTyped( + "gearCaracteristics", + "cruiseId", IntegerType.INSTANCE, cruise.getIdAsInt(), + "gearId", IntegerType.INSTANCE, gear.getIdAsInt()); + + while (list.hasNext()) { + GearPhysicalMeasurement measurement = list.next(); + + Integer pmfmId = measurement.getPmfm().getId(); + if (!enumeration.PMFM_ID_MULTIRIG_NUMBER.equals(pmfmId)) { + Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); + + Serializable value = null; + switch (caracteristic.getCaracteristicType()) { + case NUMBER: + value = measurement.getNumericalValue(); + break; + case QUALITATIVE: + QualitativeValue qualitativeValue = measurement.getQualitativeValue(); + if (qualitativeValue != null) { + value = TuttiEntities.getQualitativeValue(caracteristic, + qualitativeValue.getId()); + } + break; + case TEXT: + value = measurement.getAlphanumericalValue(); + break; + } + result.put(caracteristic, value); + } + } + + gear.setCaracteristics(result); + return gear; + } + + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + Preconditions.checkNotNull(cruise); + Preconditions.checkNotNull(cruise.getId(), "Cruise 'id' must not be null or empty"); + Preconditions.checkNotNull(gear); + Preconditions.checkNotNull(gear.getId(), "Gear 'id' must not be null or empty"); + + ScientificCruise scientificCruise = scientificCruiseDao.load(cruise.getIdAsInt()); + if (scientificCruise == null) { + throw new DataRetrievalFailureException("Could not retrieve cruise with id=" + cruise.getId()); + } + + // Retrieve entities : FishingTrip + ObservedFishingTrip fishingTrip = (ObservedFishingTrip) scientificCruise.getFishingTrips().iterator().next(); + Preconditions.checkNotNull(fishingTrip); + + List<Integer> measurementsToRemove = Lists.newArrayList(); + + GearPhysicalFeatures gpf = gearPhysicalFeaturesDao.getGearPhysicalfeatures(fishingTrip, gear.getIdAsInt(), true); + if (gpf.getGearPhysicalMeasurements() != null) { + for (GearPhysicalMeasurement measurement : gpf.getGearPhysicalMeasurements()) { + Integer pmfmId = measurement.getPmfm().getId(); + if (!enumeration.PMFM_ID_MULTIRIG_NUMBER.equals(pmfmId)) { + measurementsToRemove.add(pmfmId); + } + } + } + + CaracteristicMap caracteristicMap = gear.getCaracteristics(); + if (caracteristicMap != null) { + for (Caracteristic caracteristic : caracteristicMap.keySet()) { + + Float numericalValue = null; + String alphanumericalValue = null; + Integer qualitativeValue = null; + Object value = caracteristicMap.get(caracteristic); + + switch (caracteristic.getCaracteristicType()) { + case NUMBER: + numericalValue = (Float) value; + break; + + case QUALITATIVE: + Integer qvId = null; + if (value instanceof CaracteristicQualitativeValue) { + qvId = Integer.valueOf(((CaracteristicQualitativeValue) value).getId()); + } else if (value instanceof Integer) { + qvId = (Integer) value; + } + qualitativeValue = qvId; + break; + + case TEXT: + alphanumericalValue = (String) value; + break; + } + + GearPhysicalMeasurement gearPhysicalMeasurement = + gearPhysicalFeaturesDao.setGearPhysicalMeasurement(scientificCruise, + gpf, + caracteristic.getIdAsInt(), + numericalValue, + alphanumericalValue, + qualitativeValue); + + measurementsToRemove.remove(gearPhysicalMeasurement.getPmfm().getId()); + } + } + + for (Integer pmfmId : measurementsToRemove) { + gearPhysicalFeaturesDao.removeGearPhysicalMeasurement(gpf, pmfmId); + } + + gearPhysicalFeaturesDao.update(gpf); + + } + // adapt to surveyMeasurement protected SurveyMeasurement getOrCreateSurveyMeasurement(FishingTrip fishingTrip, Integer pmfmId) { Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-05-03 15:49:20 UTC (rev 917) @@ -152,9 +152,9 @@ <![CDATA[ SELECT gpf.gear.id AS gearId, - MAX(CASE gpm.pmfm.id + MAX(CASE gpm.pmfm.id WHEN :pmfmIdTrawlNet THEN gpm.numericalValue - ELSE 0 + ELSE 0 END) as trawlNet, count(o.id) as operationCount FROM @@ -165,7 +165,7 @@ LEFT OUTER JOIN gpf.operations o WHERE sc.id = :cruiseId - GROUP BY + GROUP BY gpf.gear.id ORDER BY count(o.id) DESC ]]> @@ -173,6 +173,24 @@ <query-param name="pmfmIdTrawlNet" type="java.lang.Integer"/> </query> + <query cacheable="true" name="gearCaracteristics"> + <![CDATA[ + SELECT + gpm + FROM + ScientificCruiseImpl sc + JOIN sc.fishingTrips ft + JOIN ft.gearPhysicalFeatures gpf + LEFT OUTER JOIN gpf.gearPhysicalMeasurements gpm + WHERE + sc.id = :cruiseId + AND + gpf.gear.id = :gearId + ]]> + <query-param name="cruiseId" type="java.lang.Integer"/> + <query-param name="gearId" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="allCruiseSecondaryVessels"> <![CDATA[ SELECT Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-05-03 15:49:20 UTC (rev 917) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistence; import fr.ifremer.tutti.persistence.TuttiPersistenceNoDbImpl; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -590,6 +591,16 @@ return driver.saveCruise(bean); } + @Override + public Gear getGearWithCaracteristics(Gear gear, Cruise cruise) { + return driver.getGearWithCaracteristics(gear, cruise); + } + + @Override + public void saveGearCaracteristics(Gear gear, Cruise cruise) { + driver.saveGearCaracteristics(gear, cruise); + } + //------------------------------------------------------------------------// //-- Protocol methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-05-03 15:49:20 UTC (rev 917) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Apr 26 18:46:10 CEST 2013 +#Tue Apr 30 17:57:05 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=createAccidentalBatch.html\#actions tutti.createAccidentalBatch.action.save.help=createAccidentalBatch.html\#actions @@ -105,8 +105,10 @@ tutti.editCatchBatch.field.speciesTotalWeight.help=editCatchBatch.html\#fields tutti.editCatchBatch.help=editCatchBatch.html tutti.editCruise.action.close.help=editCruise.html\#actions +tutti.editCruise.action.editGearCaracteristics.help= tutti.editCruise.action.generateName.help=editCruise.html\#actions tutti.editCruise.action.save.help=editCruise.html\#actions +tutti.editCruise.action.viewGearCaracteristics.help= tutti.editCruise.field.beginDate.help=editCruise.html\#fields tutti.editCruise.field.comment.help=editCruise.html\#fields tutti.editCruise.field.country.help=editCruise.html\#fields Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-05-03 15:49:20 UTC (rev 917) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Apr 26 18:46:10 CEST 2013 +#Tue Apr 30 17:57:05 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=createAccidentalBatch.html\#actions tutti.createAccidentalBatch.action.save.help=createAccidentalBatch.html\#actions @@ -105,8 +105,10 @@ tutti.editCatchBatch.field.speciesTotalWeight.help=editCatchBatch.html\#fields tutti.editCatchBatch.help=editCatchBatch.html tutti.editCruise.action.close.help=editCruise.html\#actions +tutti.editCruise.action.editGearCaracteristics.help= tutti.editCruise.action.generateName.help=editCruise.html\#actions tutti.editCruise.action.save.help=editCruise.html\#actions +tutti.editCruise.action.viewGearCaracteristics.help= tutti.editCruise.field.beginDate.help=editCruise.html\#fields tutti.editCruise.field.comment.help=editCruise.html\#fields tutti.editCruise.field.country.help=editCruise.html\#fields Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-05-03 15:49:20 UTC (rev 917) @@ -50,8 +50,25 @@ _selectOnFocus: {true}; } +#editGearCaracteristicsItem { + actionIcon: edit; + text: "tutti.editCruise.action.editGearCaracteristics"; + toolTipText: "tutti.editCruise.action.editGearCaracteristics.tip"; + _tuttiAction: {EditGearCaracteristicsAction.class}; + _help: {"tutti.editCruise.action.editGearCaracteristics.help"}; +} + +#viewGearCaracteristicsItem { + actionIcon: show-frequency; + text: "tutti.editCruise.action.viewGearCaracteristics"; + toolTipText: "tutti.editCruise.action.viewGearCaracteristics.tip"; + _tuttiAction: {ViewGearCaracteristicsAction.class}; + _help: {"tutti.editCruise.action.viewGearCaracteristics.help"}; +} + #editCruiseTopPanel { _help: {"tutti.editCruise.help"}; + layout:{mainPanelLayout}; } #cruiseScrollPane { @@ -278,4 +295,8 @@ #attachmentsButton { enabled: {model.getId() != null}; +} + +#gearCaracteristicsEditorTitledPanel { + title: "tutti.editCruise.gearCaracteristics.title"; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-05-03 15:49:20 UTC (rev 917) @@ -21,7 +21,7 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='editCruiseTopPanel' layout='{new BorderLayout()}' decorator='help' +<JPanel id='editCruiseTopPanel' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditCruiseUIModel, EditCruiseUIHandler>'> <import> @@ -38,8 +38,10 @@ jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanFilterableComboBox jaxx.runtime.swing.editor.bean.BeanDoubleList + jaxx.runtime.swing.CardLayout2Ext org.jdesktop.swingx.JXDatePicker + org.jdesktop.swingx.JXTitledPanel javax.swing.JSeparator javax.swing.SwingConstants @@ -84,6 +86,9 @@ <field name='comment' component='commentPane'/> </BeanValidator> + <CardLayout2Ext id='mainPanelLayout' + constructorParams='this, "editCruiseTopPanel"'/> + <TuttiHelpBroker id='broker' constructorParams='"tutti.editCruise.help"'/> @@ -92,156 +97,171 @@ constructorParams='getHandler().getContext(), getModel()'/> </JToolBar> - <JScrollPane id='cruiseScrollPane' constraints='BorderLayout.CENTER'> - <Table fill='both'> + <JPopupMenu id='gearMenuPopup'> + <JMenuItem id='editGearCaracteristicsItem'/> + <JMenuItem id='viewGearCaracteristicsItem'/> + </JPopupMenu> - <!-- cruise program / survey part --> - <row> - <cell anchor='west'> - <JLabel id='programLabel'/> - </cell> - <cell weightx='0.3'> - <BeanFilterableComboBox id='programComboBox' constructorParams='this' - genericType='Program'/> - </cell> - <cell> - <JLabel id='surveyPartLabel'/> - </cell> - <cell weightx='0.3'> - <JTextField id='surveyPartField' - onKeyReleased='handler.setText(event, "surveyPart")'/> - </cell> - </row> + <JPanel layout='{new BorderLayout()}' + constraints='EditCruiseUIHandler.CRUISE_CARD'> + <JScrollPane id='cruiseScrollPane' constraints='BorderLayout.CENTER'> + <Table fill='both'> - <!-- departure harbour / begin date --> - <row> - <cell anchor='west'> - <JLabel id='departureLocationLabel'/> - </cell> - <cell> - <BeanFilterableComboBox id='departureLocationComboBox' - constructorParams='this' - genericType='TuttiLocation'/> - </cell> - <cell> - <JLabel id='beginDateLabel'/> - </cell> - <cell> - <JXDatePicker id='beginDateField' - onActionPerformed='handler.setDate(event, "beginDate")'/> - </cell> - </row> + <!-- cruise program / survey part --> + <row> + <cell anchor='west'> + <JLabel id='programLabel'/> + </cell> + <cell weightx='0.3'> + <BeanFilterableComboBox id='programComboBox' constructorParams='this' + genericType='Program'/> + </cell> + <cell> + <JLabel id='surveyPartLabel'/> + </cell> + <cell weightx='0.3'> + <JTextField id='surveyPartField' + onKeyReleased='handler.setText(event, "surveyPart")'/> + </cell> + </row> - <!-- landing harbour / end date --> - <row> - <cell anchor='west'> - <JLabel id='returnLocationLabel'/> - </cell> - <cell> - <BeanFilterableComboBox id='returnLocationComboBox' - constructorParams='this' - genericType='TuttiLocation'/> - </cell> - <cell> - <JLabel id='endDateLabel'/> - </cell> - <cell> - <JXDatePicker id='endDateField' - onActionPerformed='handler.setDate(event, "endDate")'/> - </cell> - </row> + <!-- departure harbour / begin date --> + <row> + <cell anchor='west'> + <JLabel id='departureLocationLabel'/> + </cell> + <cell> + <BeanFilterableComboBox id='departureLocationComboBox' + constructorParams='this' + genericType='TuttiLocation'/> + </cell> + <cell> + <JLabel id='beginDateLabel'/> + </cell> + <cell> + <JXDatePicker id='beginDateField' + onActionPerformed='handler.setDate(event, "beginDate")'/> + </cell> + </row> - <!-- cruise name / multirigNumber --> - <row> - <cell> - <JLabel id='nameLabel'/> - </cell> - <cell> - <JTextField id='nameField' - onKeyReleased='handler.setText(event, "name")'/> - </cell> - <cell columns='2'> - <JButton id='generateNameButton' - onActionPerformed='handler.generateCampaignName()'/> - </cell> - </row> + <!-- landing harbour / end date --> + <row> + <cell anchor='west'> + <JLabel id='returnLocationLabel'/> + </cell> + <cell> + <BeanFilterableComboBox id='returnLocationComboBox' + constructorParams='this' + genericType='TuttiLocation'/> + </cell> + <cell> + <JLabel id='endDateLabel'/> + </cell> + <cell> + <JXDatePicker id='endDateField' + onActionPerformed='handler.setDate(event, "endDate")'/> + </cell> + </row> - <!-- cruise name / multirigNumber --> - <row> - <cell> - <JLabel id='multirigNumberLabel'/> - </cell> - <cell> - <NumberEditor id='multirigNumberField' constructorParams='this'/> - </cell> - <cell columns="2"> - <JLabel/> - </cell> - </row> + <!-- cruise name / multirigNumber --> + <row> + <cell> + <JLabel id='nameLabel'/> + </cell> + <cell> + <JTextField id='nameField' + onKeyReleased='handler.setText(event, "name")'/> + </cell> + <cell columns='2'> + <JButton id='generateNameButton' + onActionPerformed='handler.generateCampaignName()'/> + </cell> + </row> - <!-- cruise vessel / gear --> - <row> - <cell columns='4'> - <JSeparator constructorParams='SwingConstants.HORIZONTAL'/> - </cell> - </row> - <row> - <cell columns='4'> - <JPanel id='vesselFilterPane'> - <JLabel id='filterVesselLabel'/> - <JRadioButton id='filterVesselAllButton' - onActionPerformed='model.setVesselType(VesselTypeEnum.ALL)'/> - <JRadioButton id='filterVesselScientificButton' - onActionPerformed='model.setVesselType(VesselTypeEnum.SCIENTIFIC)'/> - <JRadioButton id='filterVesselFishingButton' - onActionPerformed='model.setVesselType(VesselTypeEnum.FISHING)'/> - </JPanel> - </cell> - </row> - <row> - <cell> - <JLabel id='vesselLabel'/> - </cell> - <cell columns="3"> - <BeanFilterableComboBox id='vesselComboBox' constructorParams='this' - genericType='Vessel'/> + <!-- cruise name / multirigNumber --> + <row> + <cell> + <JLabel id='multirigNumberLabel'/> + </cell> + <cell> + <NumberEditor id='multirigNumberField' constructorParams='this'/> + </cell> + <cell columns="2"> + <JLabel/> + </cell> + </row> - </cell> - </row> - <row weighty='0.3'> - <cell columns="4"> - <BeanDoubleList id='gearList' genericType='Gear'/> - </cell> - </row> + <!-- cruise vessel / gear --> + <row> + <cell columns='4'> + <JSeparator constructorParams='SwingConstants.HORIZONTAL'/> + </cell> + </row> + <row> + <cell columns='4'> + <JPanel id='vesselFilterPane'> + <JLabel id='filterVesselLabel'/> + <JRadioButton id='filterVesselAllButton' + onActionPerformed='model.setVesselType(VesselTypeEnum.ALL)'/> + <JRadioButton id='filterVesselScientificButton' + onActionPerformed='model.setVesselType(VesselTypeEnum.SCIENTIFIC)'/> + <JRadioButton id='filterVesselFishingButton' + onActionPerformed='model.setVesselType(VesselTypeEnum.FISHING)'/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JLabel id='vesselLabel'/> + </cell> + <cell columns="3"> + <BeanFilterableComboBox id='vesselComboBox' constructorParams='this' + genericType='Vessel'/> - <!-- cruise headOfMission / headOfSortRoom --> - <row weighty='0.3'> - <cell columns='4'> - <JPanel layout='{new GridLayout(1, 0)}'> - <BeanDoubleList id='headOfMissionList' genericType='Person'/> - <BeanDoubleList id='headOfSortRoomList' genericType='Person'/> - </JPanel> - </cell> - </row> + </cell> + </row> + <row weighty='0.3'> + <cell columns="4"> + <BeanDoubleList id='gearList' genericType='Gear'/> + </cell> + </row> - <!-- cruise comment --> - <row weighty='0.3'> - <cell columns='4'> - <JScrollPane id='commentPane' - onFocusGained='commentField.requestFocus()'> - <JTextArea id='commentField' - onKeyReleased='handler.setText(event, "comment")'/> - </JScrollPane> - </cell> - </row> + <!-- cruise headOfMission / headOfSortRoom --> + <row weighty='0.3'> + <cell columns='4'> + <JPanel layout='{new GridLayout(1, 0)}'> + <BeanDoubleList id='headOfMissionList' genericType='Person'/> + <BeanDoubleList id='headOfSortRoomList' genericType='Person'/> + </JPanel> + </cell> + </row> - </Table> - </JScrollPane> + <!-- cruise comment --> + <row weighty='0.3'> + <cell columns='4'> + <JScrollPane id='commentPane' + onFocusGained='commentField.requestFocus()'> + <JTextArea id='commentField' + onKeyReleased='handler.setText(event, "comment")'/> + </JScrollPane> + </cell> + </row> - <!-- Form Actions --> - <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> - <JButton id='closeButton'/> - <JButton id='saveButton'/> + </Table> + + </JScrollPane> + + <!-- Form Actions --> + <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> + <JButton id='closeButton'/> + <JButton id='saveButton'/> + </JPanel> </JPanel> + <JXTitledPanel id='gearCaracteristicsEditorTitledPanel' + constraints='EditCruiseUIHandler.GEAR_CARACTERISTICS_CARD'> + <GearCaracteristicsEditorUI id='gearCaracteristicsEditor' + constructorParams='this'/> + </JXTitledPanel> + </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-05-03 15:49:20 UTC (rev 917) @@ -42,7 +42,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.JComponent; +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; @@ -60,6 +63,10 @@ /** Logger. */ private static final Log log = LogFactory.getLog(EditCruiseUIHandler.class); + public static final String CRUISE_CARD = "cruise"; + + public static final String GEAR_CARACTERISTICS_CARD = "gearCaracteristics"; + public static String getTitle(boolean exist) { String result; @@ -211,6 +218,36 @@ users, model.getHeadOfSortRoom()); + ui.getGearList().getSelectedList().addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + + if (SwingUtilities.isRightMouseButton(e)) { + JList jList = (JList) e.getSource(); + Point point = e.getPoint(); + int selectedIndex = jList.locationToIndex(point); + Rectangle rect = jList.getCellBounds(selectedIndex, selectedIndex); + if (rect.contains(point)) { + jList.setSelectedIndex(selectedIndex); //select the item + } else { + jList.clearSelection(); + } + + Gear gear = (Gear) jList.getSelectedValue(); + boolean editMenuEnabled = false; + if (gear != null) { + editMenuEnabled = !getModel().isCreate() && !getModel().isModify() + && (!gear.isScientificGear() || persistenceService.isTemporary(gear)); + ui.setContextValue(gear); + } + ui.getEditGearCaracteristicsItem().setEnabled(editMenuEnabled); + ui.getGearMenuPopup().show(jList, e.getX(), e.getY()); //and show the menu + } + } + }); + + + SwingValidator validator = ui.getValidator(); listenValidatorValid(validator, model); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditGearCaracteristicsAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditGearCaracteristicsAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditGearCaracteristicsAction.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,34 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +import java.util.List; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.1 + */ +public class EditGearCaracteristicsAction extends AbstractTuttiAction<EditCruiseUIModel, EditCruiseUI, EditCruiseUIHandler> { + + protected final PersistenceService persistenceService; + + public EditGearCaracteristicsAction(EditCruiseUIHandler handler) { + super(handler, false); + persistenceService = getContext().getPersistenceService(); + } + + @Override + protected void doAction() throws Exception { + GearCaracteristicsEditorUI editor = getUI().getGearCaracteristicsEditor(); + editor.getModel().setEditable(true); + + Gear gear = getUI().getContextValue(Gear.class); + gear = persistenceService.getGearWithCaracteristics(gear, getDataContext().getCruise()); + editor.getModel().setGear(gear); + + getUI().getMainPanelLayout().setSelected(EditCruiseUIHandler.GEAR_CARACTERISTICS_CARD); + } +} Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorRowModel.java (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorRowModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorRowModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorRowModel.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,35 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.ui.swing.content.operation.fishing.AbstractCaracteristicRowModel; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 1.4 + */ +public class GearCaracteristicsEditorRowModel extends AbstractCaracteristicRowModel<GearCaracteristicsEditorRowModel> { + + private static final long serialVersionUID = 1L; + +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorRowModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorTableModel.java (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorTableModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorTableModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorTableModel.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; +import org.jdesktop.swingx.table.TableColumnModelExt; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 1.4 + */ +public class GearCaracteristicsEditorTableModel extends AbstractTuttiTableModel<GearCaracteristicsEditorRowModel> { + + private static final long serialVersionUID = 1L; + + public static final ColumnIdentifier<GearCaracteristicsEditorRowModel> KEY = ColumnIdentifier.newId( + GearCaracteristicsEditorRowModel.PROPERTY_KEY, + n_("tutti.gearCaracteristicsEditorTable.table.header.key"), + n_("tutti.gearCaracteristicsEditorTable.table.header.key")); + + public static final ColumnIdentifier<GearCaracteristicsEditorRowModel> VALUE = ColumnIdentifier.newId( + GearCaracteristicsEditorRowModel.PROPERTY_VALUE, + n_("tutti.gearCaracteristicsEditorTable.table.header.value"), + n_("tutti.gearCaracteristicsEditorTable.table.header.value")); + + public GearCaracteristicsEditorTableModel(TableColumnModelExt columnModel) { + super(columnModel, false, false); + setNoneEditableCols(KEY); + } + + @Override + public GearCaracteristicsEditorRowModel createNewRow() { + GearCaracteristicsEditorRowModel result = new GearCaracteristicsEditorRowModel(); + return result; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorTableModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.css (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.css) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.css 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,70 @@ +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +BeanFilterableComboBox { + i18nPrefix: "tutti.property."; + showReset: true; +} + +#newRowKey { + property: selectedCaracteristic; + enabled: {model.isEditable() && !newRowKey.isEmpty()}; + visible: {model.isEditable()}; +} + +#addRow { + actionIcon: add; + enabled: {model.isEditable() && newRowKey.getSelectedItem() != null}; + visible: {model.isEditable()}; +} + +#gearCaracteristicsEditorTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + editable: {model.isEditable()}; +} + +#removeCaracteristicMenu { + actionIcon: batch-delete; + text: "tutti.editIndividualObservationCaracteristics.action.removeCaracteristic"; + toolTipText: "tutti.editIndividualObservationCaracteristics.action.removeCaracteristic.tip"; + i18nMnemonic: "tutti.editIndividualObservationCaracteristics.action.removeCaracteristic.mnemonic"; + enabled: {model.isEditable() && model.isRemoveCaracteristicEnabled()}; +} + +#cancelButton { + actionIcon: cancel; + text: "tutti.editIndividualObservationCaracteristics.action.cancel"; + toolTipText: "tutti.editIndividualObservationCaracteristics.action.cancel.tip"; + i18nMnemonic: "tutti.editIndividualObservationCaracteristics.action.cancel.mnemonic"; + _help: {"tutti.editIndividualObservationCaracteristics.action.cancel.help"}; +} + +#saveButton { + actionIcon: save; + text: "tutti.editIndividualObservationCaracteristics.action.save"; + toolTipText: "tutti.editIndividualObservationCaracteristics.action.save.tip"; + i18nMnemonic: "tutti.editIndividualObservationCaracteristics.action.save.mnemonic"; + enabled: {model.isEditable() && model.isValid()}; + _help: {"tutti.editIndividualObservationCaracteristics.action.save.help"}; +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.jaxx (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUI.jaxx) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.jaxx 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,89 @@ +<!-- + #%L + Tutti :: UI + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<Table + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<GearCaracteristicsEditorUIModel, GearCaracteristicsEditorUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Caracteristic + fr.ifremer.tutti.ui.swing.util.TuttiUI + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + org.jdesktop.swingx.JXTable + javax.swing.ListSelectionModel + java.awt.Color + </import> + + <GearCaracteristicsEditorUIHandler id='handler' + initializer='getContextValue(GearCaracteristicsEditorUIHandler.class)'/> + + <GearCaracteristicsEditorUIModel id='model' + initializer='getContextValue(GearCaracteristicsEditorUIModel.class)'/> + + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeCaracteristicMenu' + onActionPerformed='handler.removeCaracteristic()'/> + </JPopupMenu> + + <row fill='both'> + <cell fill='both' weightx='1'> + <BeanFilterableComboBox id='newRowKey' constructorParams='this' + genericType='Caracteristic'/> + </cell> + <cell fill='both'> + <JButton id='addRow' onActionPerformed='handler.addRow()'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='2'> + <JScrollPane> + <JXTable id='gearCaracteristicsEditorTable' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' + onKeyPressed='handler.openRowMenu(event, tablePopup)'/> + </JScrollPane> + </cell> + </row> + + <!-- Form Actions --> + <row fill='both'> + <cell fill='both' columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> + <JButton id='saveButton' onActionPerformed='handler.save()'/> + </JPanel> + </cell> + </row> + <script><![CDATA[ + +public GearCaracteristicsEditorUI(TuttiUI parentUI) { + JAXXUtil.initContext(this, parentUI); + GearCaracteristicsEditorUIHandler handler = new GearCaracteristicsEditorUIHandler(parentUI, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +protected void $afterCompleteSetup() { + handler.afterInitUI(); +} + + ]]></script> + +</Table> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUI.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIHandler.java (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIHandler.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,337 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.util.Cancelable; +import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnRowModel; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapEditorUI; +import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueEditor; +import fr.ifremer.tutti.ui.swing.util.editor.CaracteristicValueRenderer; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.table.DefaultTableColumnModelExt; + +import javax.swing.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + +import static fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent.CaracteristicMapCellEditor; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.1 + */ +public class GearCaracteristicsEditorUIHandler + extends AbstractTuttiTableUIHandler<GearCaracteristicsEditorRowModel, GearCaracteristicsEditorUIModel, GearCaracteristicsEditorUI> + implements Cancelable { + + private final static Log log = + LogFactory.getLog(GearCaracteristicsEditorUIHandler.class); + + protected final PersistenceService persistenceService = getContext().getPersistenceService(); + + public GearCaracteristicsEditorUIHandler(TuttiUI parentUi, + GearCaracteristicsEditorUI ui) { + super(parentUi.getHandler().getContext(), ui, GearCaracteristicsEditorRowModel.PROPERTY_VALUE); + } + + @Override + public GearCaracteristicsEditorTableModel getTableModel() { + return (GearCaracteristicsEditorTableModel) getTable().getModel(); + } + + @Override + public JXTable getTable() { + return ui.getGearCaracteristicsEditorTable(); + } + + @Override + protected boolean isRowValid(GearCaracteristicsEditorRowModel row) { + return row.getKey() != null && row.getValue() != null; + } + + @Override + protected void onRowModified(int rowIndex, GearCaracteristicsEditorRowModel row, + String propertyName, Object oldValue, Object newValue) { + recomputeRowValidState(row); + super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); + saveSelectedRowIfNeeded(); + } + + @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, GearCaracteristicsEditorRowModel oldRow, int newRowIndex, GearCaracteristicsEditorRowModel newRow) { + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + getModel().setRemoveCaracteristicEnabled(newRowIndex >= 0); + } + + @Override + protected void saveSelectedRowIfRequired(TuttiBeanMonitor<GearCaracteristicsEditorRowModel> rowMonitor, + GearCaracteristicsEditorRowModel row) { + if (row.isValid()) { + // there is a valid bean attached to the monitor + + if (rowMonitor.wasModified()) { + + // monitored bean was modified, save it + if (log.isInfoEnabled()) { + log.info("Row " + row + " was modified, will save it"); + } + + saveRow(row); + + } + } + } + + @Override + public void beforeInitUI() { + GearCaracteristicsEditorUIModel model = createModel(); + getUI().setContextValue(model); + + model.addPropertyChangeListener(GearCaracteristicsEditorUIModel.PROPERTY_GEAR, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + editGear((Gear) evt.getNewValue()); + } + }); + + } + + @Override + public void afterInitUI() { + initUI(getUI()); + + initBeanFilterableComboBox(getKeyCombo(), Lists.<Caracteristic>newArrayList(), null); + getModel().setAvailableCaracteristics(getDataContext().getCaracteristics()); + + JXTable table = getTable(); + + // create table column model + DefaultTableColumnModelExt columnModel = + new DefaultTableColumnModelExt(); + + { + + addColumnToModel(columnModel, + null, + newTableCellRender(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT), + GearCaracteristicsEditorTableModel.KEY); + } + + { + + addColumnToModel(columnModel, + new CaracteristicValueEditor(context), + new CaracteristicValueRenderer(context), + GearCaracteristicsEditorTableModel.VALUE); + } + + // create table model + GearCaracteristicsEditorTableModel tableModel = + new GearCaracteristicsEditorTableModel(columnModel); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + + initTable(table); + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getNewRowKey(); + } + + @Override + public void onCloseUI() { + if (log.isDebugEnabled()) { + log.debug("closing: " + ui); + } + + EditCruiseUI ui = getUI().getParentContainer(EditCruiseUI.class); + ui.getMainPanelLayout().setSelected(EditCruiseUIHandler.CRUISE_CARD); + + // when canceling always invalid model (in that way) + getModel().setValid(false); + getModel().setGear(null); + } + + @Override + public SwingValidator<GearCaracteristicsEditorUIModel> getValidator() { + return null; + } + + @Override + public void cancel() { + + if (log.isInfoEnabled()) { + log.info("Cancel UI " + ui); + } + + // close dialog + closeUI(ui); + } + + protected BeanFilterableComboBox<Caracteristic> getKeyCombo() { + return ui.getNewRowKey(); + } + + protected GearCaracteristicsEditorUIModel createModel() { + return new GearCaracteristicsEditorUIModel(); + } + + protected void saveRow(GearCaracteristicsEditorRowModel row) { + + if (row.isValid()) { + CaracteristicMap caracteristics = getModel().getCaracteristicMap(); + Preconditions.checkNotNull(caracteristics); + + caracteristics.put(row.getKey(), row.getValue()); + } + } + + //------------------------------------------------------------------------// + //-- Public methods --// + //------------------------------------------------------------------------// + + /** + * Adds a row with the parameter selected in the combo box + **/ + public void addRow() { + BeanFilterableComboBox<Caracteristic> keyCombo = getKeyCombo(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + GearCaracteristicsEditorTableModel tableModel = getTableModel(); + + GearCaracteristicsEditorRowModel row = tableModel.createNewRow(); + row.setKey(selectedItem); +// tableModel.addNewRow(row); + getModel().getRows().add(row); + + int rowIndex = tableModel.getRowCount() - 1; + tableModel.fireTableRowsInserted(rowIndex, rowIndex); + + keyCombo.getHandler().removeItem(selectedItem); + + GearCaracteristicsEditorUIModel model = getModel(); + model.setModify(true); + recomputeRowValidState(row); + } + + public void removeCaracteristic() { + int rowIndex = getTable().getSelectedRow(); + + Preconditions.checkState( + rowIndex != -1, + "Cant remove caracteristic if no caracteristic selected"); + + GearCaracteristicsEditorRowModel row = getTableModel().getEntry(rowIndex); + + CaracteristicMap caracteristicMap = getModel().getCaracteristicMap(); + if (caracteristicMap != null) { + caracteristicMap.remove(row.getKey()); + } + + //add the row in the combo + BeanFilterableComboBox keyCombo = getKeyCombo(); + keyCombo.addItem(row.getKey()); +// selectFirstInCombo(keyCombo); + keyCombo.getHandler().reset(); + + // remove the row from the model + getModel().getRows().remove(rowIndex); + + // refresh all the table + getTableModel().fireTableRowsDeleted(rowIndex, rowIndex); + + getModel().removeRowInError(row); + } + + public void save() { + + if (log.isInfoEnabled()) { + log.info("Save UI " + ui); + } + + Gear gear = getModel().getGear(); + gear.setCaracteristics((CaracteristicMap) getModel().getCaracteristicMap().clone()); + persistenceService.saveGearCaracteristics(gear, getDataContext().getCruise()); + + closeUI(ui); + } + + protected void editGear(Gear gear) { + + if (gear != null) { + GearCaracteristicsEditorTableModel tableModel = getTableModel(); + GearCaracteristicsEditorUIModel model = getModel(); + + CaracteristicMap caracteristicMap = gear.getCaracteristics(); + if (caracteristicMap == null) { + caracteristicMap = new CaracteristicMap(); + } + model.getCaracteristicMap().putAll(caracteristicMap); + + List<GearCaracteristicsEditorRowModel> rows = Lists.newArrayList(); + List<Caracteristic> caracteristics = Lists.newArrayList(caracteristicMap.keySet()); + + List<Caracteristic> availableCaracteristics = model.getAvailableCaracteristics(); + + for (Caracteristic key : caracteristics) { + GearCaracteristicsEditorRowModel newRow = tableModel.createNewRow(); + newRow.setKey(key); + newRow.setValue(caracteristicMap.get(key)); + rows.add(newRow); + } + + model.setRows(rows); + + List<Caracteristic> caracteristicList = Lists.newArrayList(); + + for (Caracteristic caracteristic : availableCaracteristics) { + if (!caracteristics.contains(caracteristic)) { + caracteristicList.add(caracteristic); + } + } + + BeanFilterableComboBox<Caracteristic> keyCombo = getKeyCombo(); + keyCombo.setData(caracteristicList); + // selectFirstInCombo(keyCombo); + keyCombo.getHandler().reset(); + model.setModify(false); + + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIModel.java (from rev 899, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIModel.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIModel.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,113 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; + +import java.util.List; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.1 + */ +public class GearCaracteristicsEditorUIModel extends AbstractTuttiTableUIModel<Object, GearCaracteristicsEditorRowModel, GearCaracteristicsEditorUIModel> { + + public static final String PROPERTY_GEAR = "gear"; + + public static final String PROPERTY_EDITABLE = "editable"; + + public static final String PROPERTY_REMOVE_CARACTERISTIC_ENABLED = "removeCaracteristicEnabled"; + + public static final String PROPERTY_AVAILABLE_CARACTERISTICS = "availableCaracteristics"; + + private static final long serialVersionUID = 1L; + + protected List<Caracteristic> availableCaracteristics; + + protected Gear gear; + + protected boolean editable; + + protected CaracteristicMap caracteristicMap = new CaracteristicMap(); + + /** + * Can user remove a selected caracteristic? + */ + protected boolean removeCaracteristicEnabled; + + public GearCaracteristicsEditorUIModel() { + super(Object.class, null, null); + } + + public List<Caracteristic> getAvailableCaracteristics() { + return availableCaracteristics; + } + + public void setAvailableCaracteristics(List<Caracteristic> availableCaracteristics) { + Object oldValue = getAvailableCaracteristics(); + this.availableCaracteristics = availableCaracteristics; + firePropertyChange(PROPERTY_AVAILABLE_CARACTERISTICS, oldValue, availableCaracteristics); + } + + public Gear getGear() { + return gear; + } + + public void setGear(Gear gear) { + Object oldValue = getGear(); + this.gear = gear; + firePropertyChange(PROPERTY_GEAR, oldValue, this.gear); + } + + public boolean isRemoveCaracteristicEnabled() { + return removeCaracteristicEnabled; + } + + public void setRemoveCaracteristicEnabled(boolean removeCaracteristicEnabled) { + Object oldValue = isRemoveCaracteristicEnabled(); + this.removeCaracteristicEnabled = removeCaracteristicEnabled; + firePropertyChange(PROPERTY_REMOVE_CARACTERISTIC_ENABLED, oldValue, removeCaracteristicEnabled); + } + + public CaracteristicMap getCaracteristicMap() { + return caracteristicMap; + } + + public boolean isEditable() { + return editable; + } + + public void setEditable(boolean editable) { + Object oldValue = isEditable(); + this.editable = editable; + firePropertyChange(PROPERTY_EDITABLE, oldValue, editable); + } + + @Override + protected Object newEntity() { + return null; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/GearCaracteristicsEditorUIModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ViewGearCaracteristicsAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ViewGearCaracteristicsAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/ViewGearCaracteristicsAction.java 2013-05-03 15:49:20 UTC (rev 917) @@ -0,0 +1,31 @@ +package fr.ifremer.tutti.ui.swing.content.cruise; + +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.1 + */ +public class ViewGearCaracteristicsAction extends AbstractTuttiAction<EditCruiseUIModel, EditCruiseUI, EditCruiseUIHandler> { + + protected final PersistenceService persistenceService; + + public ViewGearCaracteristicsAction(EditCruiseUIHandler handler) { + super(handler, false); + persistenceService = getContext().getPersistenceService(); + } + + @Override + protected void doAction() throws Exception { + GearCaracteristicsEditorUI editor = getUI().getGearCaracteristicsEditor(); + editor.getModel().setEditable(false); + + Gear gear = getUI().getContextValue(Gear.class); + gear = persistenceService.getGearWithCaracteristics(gear, getDataContext().getCruise()); + editor.getModel().setGear(gear); + + getUI().getMainPanelLayout().setSelected(EditCruiseUIHandler.GEAR_CARACTERISTICS_CARD); + } +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-05-03 15:49:20 UTC (rev 917) @@ -75,7 +75,7 @@ <JMenuItem id='removeBenthosBatchMenu'/> <JMenuItem id='removeBenthosSubBatchMenu'/> <JMenuItem id='renameBenthosBatchMenu'/> - <JMenuItem id='createSpeciesMelagMenu'/> + <JMenuItem id='createBenthosMelagMenu'/> </JPopupMenu> <Table id='form' fill='both' constraints='BorderLayout.NORTH'> 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-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-05-03 15:49:20 UTC (rev 917) @@ -6,6 +6,7 @@ swing.error.desktop.mail.not.supported= swing.error.desktop.not.supported= traits= +ttutti.editCruise.action.editGearCaracteristics.mnemonic= tutti.about.bottomText= tutti.about.message= tutti.about.title= @@ -277,6 +278,9 @@ tutti.editBenthosBatch.action.createBatch= tutti.editBenthosBatch.action.createBatch.mnemonic= tutti.editBenthosBatch.action.createBatch.tip= +tutti.editBenthosBatch.action.createMelag= +tutti.editBenthosBatch.action.createMelag.mnemonic= +tutti.editBenthosBatch.action.createMelag.tip= tutti.editBenthosBatch.action.removeBatch= tutti.editBenthosBatch.action.removeBatch.mnemonic= tutti.editBenthosBatch.action.removeBatch.tip= @@ -434,6 +438,8 @@ tutti.editCruise.action.closeEditCruise= tutti.editCruise.action.closeEditCruise.mnemonic= tutti.editCruise.action.closeEditCruise.tip= +tutti.editCruise.action.editGearCaracteristics= +tutti.editCruise.action.editGearCaracteristics.tip= tutti.editCruise.action.generateCampaignName= tutti.editCruise.action.generateCampaignName.mnemonic= tutti.editCruise.action.generateName.tip= @@ -443,6 +449,8 @@ tutti.editCruise.action.saveCruise= tutti.editCruise.action.saveCruise.mnemonic= tutti.editCruise.action.saveCruise.tip= +tutti.editCruise.action.viewGearCaracteristics= +tutti.editCruise.action.viewGearCaracteristics.tip= tutti.editCruise.askCancelEditBeforeLeaving.cancelSaveCruise= tutti.editCruise.askSaveBeforeLeaving.saveCruise= tutti.editCruise.field.beginDate= @@ -481,6 +489,7 @@ tutti.editCruise.filterVesselType.fishing.tip= tutti.editCruise.filterVesselType.scientific= tutti.editCruise.filterVesselType.scientific.tip= +tutti.editCruise.gearCaracteristics.title= tutti.editCruise.title.create.cruise= tutti.editCruise.title.edit.cruise= tutti.editFishingOperation.action.attachments.tip= @@ -887,6 +896,9 @@ tutti.flash.info.species.imported.in.protocol.severalReplaced= tutti.flash.info.species.remove.from.protocol= tutti.flash.info.species.replaced= +tutti.gearCaracteristicsEditorEditorTable.table.header.key= +tutti.gearCaracteristicsEditorTable.table.header.key= +tutti.gearCaracteristicsEditorTable.table.header.value= tutti.gearUseFeatureTable.action.removeCaracteristic= tutti.gearUseFeatureTable.action.removeCaracteristic.mnemonic= tutti.gearUseFeatureTable.action.removeCaracteristic.tip= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-02 15:33:42 UTC (rev 916) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-05-03 15:49:20 UTC (rev 917) @@ -273,6 +273,9 @@ tutti.editBenthosBatch.action.createBatch=Créer un lot pour une espèce tutti.editBenthosBatch.action.createBatch.mnemonic=C tutti.editBenthosBatch.action.createBatch.tip=Créer un nouveau lot pour une espèce +tutti.editBenthosBatch.action.createMelag=Espèces d'un MELAG +tutti.editBenthosBatch.action.createMelag.mnemonic=C +tutti.editBenthosBatch.action.createMelag.tip=Calcul des poids des lots appartenant à un MELAG tutti.editBenthosBatch.action.removeBatch=Supprimer le lot tutti.editBenthosBatch.action.removeBatch.mnemonic=S tutti.editBenthosBatch.action.removeBatch.tip=Supprimer le lot courant (celui de la ligne sélectionnée) et tous ces fils @@ -421,6 +424,8 @@ tutti.editCruise.action.closeEditCruise=Fermer tutti.editCruise.action.closeEditCruise.mnemonic=F tutti.editCruise.action.closeEditCruise.tip=Fermer l'écran d'édition de campagne +tutti.editCruise.action.editGearCaracteristics=Editer +tutti.editCruise.action.editGearCaracteristics.tip=Editer les caractéristiques de l'engin tutti.editCruise.action.generateCampaignName=Générer le nom tutti.editCruise.action.generateCampaignName.mnemonic=G tutti.editCruise.action.generateName.tip=Générer le nom normalisé de la campagne @@ -430,6 +435,8 @@ tutti.editCruise.action.saveCruise=Enregistrer tutti.editCruise.action.saveCruise.mnemonic=E tutti.editCruise.action.saveCruise.tip=Enregistrer la campagne +tutti.editCruise.action.viewGearCaracteristics=Voir +tutti.editCruise.action.viewGearCaracteristics.tip=Voir les caractéristiques de l'engin tutti.editCruise.askCancelEditBeforeLeaving.cancelSaveCruise=La campagne n'est pas valide et ne peut pas être enregistrée. tutti.editCruise.askSaveBeforeLeaving.saveCruise=Des modifications sur la campagne n'ont pas été enregistrées. tutti.editCruise.field.beginDate=Date de début @@ -466,6 +473,7 @@ tutti.editCruise.filterVesselType.fishing.tip=Uniquement les navires professionnels tutti.editCruise.filterVesselType.scientific=Scientifiques tutti.editCruise.filterVesselType.scientific.tip=Uniquement les navires scientifiques +tutti.editCruise.gearCaracteristics.title=Caractéristiques d'un engin tutti.editCruise.title.create.cruise=Créer une nouvelle campagne tutti.editCruise.title.edit.cruise=Éditer une campagne existante tutti.editFishingOperation.action.attachments.tip=Pièces-jointes de l'opération @@ -857,6 +865,8 @@ tutti.flash.info.species.imported.in.protocol.severalReplaced=Espèces importées dans le protocole depuis le fichier <strong>%s</strong>. %s remplacées par leur référent. tutti.flash.info.species.remove.from.protocol=L'espèce <strong>%s</strong> a été retirée du protocole. tutti.flash.info.species.replaced=L'espèce <strong>%s</strong> a été remplacée par son référent <strong>%s</strong>. +tutti.gearCaracteristicsEditorTable.table.header.key=Caractéristique +tutti.gearCaracteristicsEditorTable.table.header.value=Valeur tutti.gearUseFeatureTable.action.removeCaracteristic=Supprimer tutti.gearUseFeatureTable.action.removeCaracteristic.mnemonic=S tutti.gearUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caractéristique
participants (1)
-
kmorin@users.forge.codelutin.com