Author: tchemit Date: 2013-07-27 15:48:21 +0200 (Sat, 27 Jul 2013) New Revision: 1158 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1158 Log: refs #2889: [TECH] - Prise en compte de nouvelles cat?\195?\169gories dans l'applicatif (configuration des cat?\195?\169gories) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java trunk/tutti-ui-swing/src/main/resources/icons/action-down.png trunk/tutti-ui-swing/src/main/resources/icons/action-up.png Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.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/TuttiScreen.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -221,6 +221,13 @@ List<Caracteristic> getAllCaracteristicWithProtected(); /** + * + * @return all caracteristics of the system useable for {@link SampleCategoryModel}. + * @since 2.5 + */ + List<Caracteristic> getAllCaracteristicForSampleCategory(); + + /** * @return all numeric caracteristics of the system. * @since 1.0.2 */ Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -173,6 +173,10 @@ return new IdPredicate<B>(id); } + public static Predicate<Caracteristic> newSampleCategoryModelPredicate() { + return new SampleCategoryCaracteristicPredicate(); + } + public static Predicate<SpeciesBatch> newSpeciesBatchCategoryPredicate(Integer cateogryId, Integer value) { return new SpeciesBatchCategoryPredicate(cateogryId, value); } @@ -294,7 +298,7 @@ return value; } - public static <N extends Number> N getValueOrComputedValue(N value, N computedValue) { + public static <N extends Number> N getValueOrComputedValue(N value, N computedValue) { return value == null ? computedValue : value; } @@ -323,17 +327,11 @@ } } - protected static class CaracteristicCategoryPredicate implements Predicate<Caracteristic> { + protected static class SampleCategoryCaracteristicPredicate implements Predicate<Caracteristic> { - private final String id; - - public CaracteristicCategoryPredicate(String id) { - this.id = id; - } - @Override public boolean apply(Caracteristic input) { - return id.equals(input.getCategory()); + return !CaracteristicType.TEXT.equals(input.getCaracteristicType()); } } @@ -366,7 +364,7 @@ public boolean apply(SpeciesBatch input) { return id.equals(input.getSampleCategoryId()) && input.getSampleCategoryValue() instanceof CaracteristicQualitativeValue && - qualitativeValue.equals(((CaracteristicQualitativeValue)input.getSampleCategoryValue()).getIdAsInt()); + qualitativeValue.equals(((CaracteristicQualitativeValue) input.getSampleCategoryValue()).getIdAsInt()); } } @@ -385,7 +383,7 @@ public boolean apply(BenthosBatch input) { return id.equals(input.getSampleCategoryId()) && input.getSampleCategoryValue() instanceof CaracteristicQualitativeValue && - qualitativeValue.equals(((CaracteristicQualitativeValue)input.getSampleCategoryValue()).getIdAsInt()); + qualitativeValue.equals(((CaracteristicQualitativeValue) input.getSampleCategoryValue()).getIdAsInt()); } } 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -104,7 +104,7 @@ registerTuttiDecorator(Gear.class, "${label}$s#${name}$s", SEPARATOR, " - "); registerTuttiDecorator(Person.class, "${firstName}$s#${lastName}$s#${department}$s", SEPARATOR, " "); registerTuttiDecorator(Caracteristic.class, "${parameterName}$s#${matrixName}$s#${fractionName}$s#${methodName}$s", SEPARATOR, " - "); - registerTuttiDecorator(CaracteristicBean.class, CARACTERISTIC_PARAMETER_ONLY, "${parameterName}$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(SpeciesProtocol.class, "${speciesReferenceTaxonId}", SEPARATOR, " - "); 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -25,12 +25,15 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.persistence.InvalidBatchModelException; 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.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -349,6 +352,14 @@ } @Override + public List<Caracteristic> getAllCaracteristicForSampleCategory() { + List<Caracteristic> allCaracteristicWithProtected = driver.getAllCaracteristicWithProtected(); + List<Caracteristic> result = Lists.newArrayList( + Iterables.filter(allCaracteristicWithProtected, TuttiEntities.newSampleCategoryModelPredicate())); + return result; + } + + @Override public List<Caracteristic> getAllNumericCaracteristic() { return driver.getAllNumericCaracteristic(); } 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -188,8 +188,7 @@ public void open(TuttiServiceConfig config, PersistenceService persistenceService) { close(); this.service = persistenceService; - sampleCategoryModel = config.getPersistenceConfig().getSampleCategoryModel(); - sampleCategoryModel.load(persistenceService); + loadSampleCategoryModel(config.getPersistenceConfig().getSampleCategoryModel()); } @Override @@ -719,6 +718,11 @@ caracteristics = null; } + public void loadSampleCategoryModel(SampleCategoryModel sampleCategoryModel) { + this.sampleCategoryModel = sampleCategoryModel; + sampleCategoryModel.load(service); + } + protected void checkOpened() { Preconditions.checkState(service != null, "No persistence service assigned!"); } 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-07-27 13:48:21 UTC (rev 1158) @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Tue Jul 23 13:28:56 CEST 2013 +#Sat Jul 27 15:12:29 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.save.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -229,6 +229,13 @@ tutti.editProtocol.field.vesselUseFeature.help=editProtocol.html\#fieldsCaracteristics tutti.editProtocol.help=editProtocol.html tutti.editProtocol.pane.caracteristic.help=editProtocol.html\#fieldsCaracteristics +tutti.editSampleCategoryModel.action.cancel.help= +tutti.editSampleCategoryModel.action.close.help= +tutti.editSampleCategoryModel.action.moveDownEntry.help= +tutti.editSampleCategoryModel.action.moveUpEntry.help= +tutti.editSampleCategoryModel.action.removeEntry.help= +tutti.editSampleCategoryModel.action.save.help= +tutti.editSampleCategoryModel.help= tutti.editSpeciesBatch.action.createBatch.help=editFishingOperation.html\#captureEspecesActions tutti.editSpeciesBatch.action.createMelag.help=editFishingOperation.html\#captureEspecesActions tutti.editSpeciesBatch.action.editFrequencies.help=editFishingOperation.html\#captureEspecesActions @@ -282,6 +289,7 @@ tutti.main.menu.action.editCruise.help=menu.html\#menu_action tutti.main.menu.action.editProgram.help=menu.html\#menu_action tutti.main.menu.action.editProtocol.help=menu.html\#menu_action +tutti.main.menu.action.editSampleCategoryModel.help= tutti.main.menu.action.exit.help=menu.html\#menu_fichier tutti.main.menu.action.importTemporaryReferential.help=menu.html\#menu_administration tutti.main.menu.action.manageDb.help=menu.html\#menu_fichier 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-07-27 13:48:21 UTC (rev 1158) @@ -22,7 +22,7 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Tue Jul 23 13:28:56 CEST 2013 +#Sat Jul 27 15:12:29 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.save.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -229,6 +229,13 @@ tutti.editProtocol.field.vesselUseFeature.help=editProtocol.html\#fieldsCaracteristics tutti.editProtocol.help=editProtocol.html tutti.editProtocol.pane.caracteristic.help=editProtocol.html\#fieldsCaracteristics +tutti.editSampleCategoryModel.action.cancel.help= +tutti.editSampleCategoryModel.action.close.help= +tutti.editSampleCategoryModel.action.moveDownEntry.help= +tutti.editSampleCategoryModel.action.moveUpEntry.help= +tutti.editSampleCategoryModel.action.removeEntry.help= +tutti.editSampleCategoryModel.action.save.help= +tutti.editSampleCategoryModel.help= tutti.editSpeciesBatch.action.createBatch.help=editFishingOperation.html\#captureEspecesActions tutti.editSpeciesBatch.action.createMelag.help=editFishingOperation.html\#captureEspecesActions tutti.editSpeciesBatch.action.editFrequencies.help=editFishingOperation.html\#captureEspecesActions @@ -282,6 +289,7 @@ tutti.main.menu.action.editCruise.help=menu.html\#menu_action tutti.main.menu.action.editProgram.help=menu.html\#menu_action tutti.main.menu.action.editProtocol.help=menu.html\#menu_action +tutti.main.menu.action.editSampleCategoryModel.help= tutti.main.menu.action.exit.help=menu.html\#menu_fichier tutti.main.menu.action.importTemporaryReferential.help=menu.html\#menu_administration tutti.main.menu.action.manageDb.help=menu.html\#menu_fichier Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -24,6 +24,8 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; + /** * Enumeration of any internal screen of application. * @@ -39,6 +41,12 @@ */ CONFIG, /** + * To edit {@link SampleCategoryModel}. + * + * @since 2.5 + */ + EDIT_SAMPLE_CATEGORY_MODEL, + /** * To manage db used by Tutti. * * @since 1.0 Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.ui.swing.content; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.TuttiScreen; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + +import static org.nuiton.i18n.I18n._; + +/** + * To show {@link TuttiScreen#EDIT_SAMPLE_CATEGORY_MODEL} config screen. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelAction extends AbstractChangeScreenAction { + + public EditSampleCategoryModelAction(MainUIHandler handler) { + super(handler, true, TuttiScreen.EDIT_SAMPLE_CATEGORY_MODEL); + } + + @Override + protected boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + if (result) { + result = TuttiUIUtil.askAdminPassword( + getContext().getActionUI(), + getConfig(), + _("tutti.sampleCategoryModel.passwordDialog.message"), + _("tutti.sampleCategoryModel.passwordDialog.title"), + _("tutti.sampleCategoryModel.passwordDialog.error.message"), + _("tutti.sampleCategoryModel.passwordDialog.error.title") + ); + } + return result; + } +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/EditSampleCategoryModelAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ImportTemporaryReferentialAction.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -25,10 +25,8 @@ */ import fr.ifremer.tutti.ui.swing.TuttiScreen; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.util.StringUtil; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import static org.nuiton.i18n.I18n._; @@ -49,29 +47,14 @@ protected boolean prepareAction() throws Exception { boolean result = super.prepareAction(); if (result) { - String answer; - do { - answer = JOptionPane.showInputDialog(getContext().getActionUI(), - _("tutti.manageTemporaryReferential.passwordDialog.message"), - _("tutti.manageTemporaryReferential.passwordDialog.title"), - JOptionPane.WARNING_MESSAGE); - if (answer != null) { - String cryptedAnswer = StringUtil.encodeMD5(answer); - String correctAnswer = getConfig().getAdminPassword(); - result = StringUtils.equals(cryptedAnswer, correctAnswer); - - if (!result) { - JOptionPane.showMessageDialog(getContext().getActionUI(), - _("tutti.manageTemporaryReferential.passwordDialog.error.message"), - _("tutti.manageTemporaryReferential.passwordDialog.error.title"), - JOptionPane.ERROR_MESSAGE); - } - - } else { - result = false; - } - - } while (!result && answer != null); + result = TuttiUIUtil.askAdminPassword( + getContext().getActionUI(), + getConfig(), + _("tutti.manageTemporaryReferential.passwordDialog.message"), + _("tutti.manageTemporaryReferential.passwordDialog.title"), + _("tutti.manageTemporaryReferential.passwordDialog.error.message"), + _("tutti.manageTemporaryReferential.passwordDialog.error.title") + ); } return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-07-27 13:48:21 UTC (rev 1158) @@ -50,6 +50,16 @@ _help: {"tutti.main.menu.action.configuration.help"}; } +#menuEditSampleCategoryModel{ + actionIcon: sampleOrder; + text: "tutti.main.action.editSampleCategoryModel"; + toolTipText: "tutti.main.action.editSampleCategoryModel.tip"; + i18nMnemonic: "tutti.main.action.editSampleCategoryModel.mnemonic"; + enabled: {model.getScreen() != TuttiScreen.EDIT_SAMPLE_CATEGORY_MODEL}; + _tuttiAction: {EditSampleCategoryModelAction.class}; + _help: {"tutti.main.menu.action.editSampleCategoryModel.help"}; +} + #menuFileExit { actionIcon: exit; text: "tutti.main.action.exit"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-07-27 13:48:21 UTC (rev 1158) @@ -84,6 +84,7 @@ <JMenu id='menuAdministration'> <JMenuItem id='menuImportTemporaryReferential'/> + <JMenuItem id='menuEditSampleCategoryModel'/> </JMenu> <JMenu id='menuHelp'> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -33,6 +33,7 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; +import fr.ifremer.tutti.ui.swing.content.config.EditSampleCategoryModelUI; import fr.ifremer.tutti.ui.swing.content.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIHandler; @@ -399,6 +400,12 @@ icon = ui.getMenuFileConfiguration().getIcon(); break; + case EDIT_SAMPLE_CATEGORY_MODEL: + + screenUI = new EditSampleCategoryModelUI(ui); + screenTitle = _("tutti.editSampleCategoryModel.title"); + icon = ui.getMenuEditSampleCategoryModel().getIcon(); + break; default: case MANAGE_DB: Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,99 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since TODO + */ +public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_LABEL = "label"; + + public static final String PROPERTY_CARACTERISTIC = "caracteristic"; + + protected final SampleCategoryModelEntry editObject = new SampleCategoryModelEntry(); + + protected static final Binder<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> fromBeanBinder = + BinderFactory.newBinder(SampleCategoryModelEntry.class, + EditSampleCategoryModelRowModel.class); + + protected static final Binder<EditSampleCategoryModelRowModel, SampleCategoryModelEntry> toBeanBinder = + BinderFactory.newBinder(EditSampleCategoryModelRowModel.class, + SampleCategoryModelEntry.class); + + public EditSampleCategoryModelRowModel() { + super(SampleCategoryModelEntry.class, fromBeanBinder, toBeanBinder); + } + + public EditSampleCategoryModelRowModel(SampleCategoryModelEntry entry) { + this(); + fromBean(entry); + } + + @Override + protected SampleCategoryModelEntry newEntity() { + return new SampleCategoryModelEntry(); + } + + //------------------------------------------------------------------------// + //-- SampleCategoryModelEntry delegate --// + //------------------------------------------------------------------------// + + public String getLabel() { + return editObject.getLabel(); + } + + public void setLabel(String label) { + String oldValue = getLabel(); + editObject.setLabel(label); + firePropertyChange(PROPERTY_LABEL, oldValue, label); + } + + public Integer getCategoryId() { + return editObject.getCategoryId(); + } + + public Caracteristic getCaracteristic() { + return editObject.getCaracteristic(); + } + + public void setCaracteristic(Caracteristic caracteristic) { + Caracteristic oldValue = getCaracteristic(); + editObject.setCaracteristic(caracteristic); + editObject.setCategoryId(caracteristic.getIdAsInt()); + firePropertyChange(PROPERTY_CARACTERISTIC, oldValue, caracteristic); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelRowModel.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/config/EditSampleCategoryModelTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,78 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.data.SampleCategoryModelEntry; +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_; + +/** + * Model of table of {@link SampleCategoryModelEntry}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelTableModel extends AbstractTuttiTableModel<EditSampleCategoryModelRowModel> { + + private static final long serialVersionUID = 1L; + + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> CARACTERISTIC = ColumnIdentifier.newId( + EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, + n_("tutti.editSampleCategoryModel.table.header.caracteristic"), + n_("tutti.editSampleCategoryModel.table.header.caracteristic.tip")); + + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> LABEL = ColumnIdentifier.newId( + EditSampleCategoryModelRowModel.PROPERTY_LABEL, + n_("tutti.editSampleCategoryModel.table.header.label"), + n_("tutti.editSampleCategoryModel.table.header.label.tip")); + + public EditSampleCategoryModelTableModel(TableColumnModelExt columnModel) { + super(columnModel, false, false); + + setNoneEditableCols(CARACTERISTIC); + } + + @Override + public EditSampleCategoryModelRowModel createNewRow() { + EditSampleCategoryModelRowModel result = + new EditSampleCategoryModelRowModel(); + + // by default empty row is not valid + result.setValid(false); + return result; + } + + public void permuteEntry(int firstRow, int lastRow) { + EditSampleCategoryModelRowModel firstR = getRows().get(firstRow); + + getRows().remove(firstRow); + getRows().add(lastRow, firstR); + + fireTableRowsUpdated(firstRow, lastRow); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelTableModel.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/config/EditSampleCategoryModelUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.css 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,95 @@ +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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; +} + +#editSampleCategoryModelTopPanel { + _help: {"tutti.editSampleCategoryModel.help"}; +} + +#table { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; +} + +#availableCaracteristicsComboBox { + property: selectedCaracteristic; + enabled: {!availableCaracteristicsComboBox.isEmpty()}; +} + +#addRow { + actionIcon: add; + enabled: {availableCaracteristicsComboBox.getSelectedItem() != null}; +} + +#removeEntryMenu { + actionIcon: delete; + text: "tutti.editSampleCategoryModel.action.removeEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.removeEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.removeEntry.mnemonic"; + enabled: {model.isRemoveEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.removeEntry.help"}; +} + + +#moveUpEntryMenu { + actionIcon: up; + text: "tutti.editSampleCategoryModel.action.moveUpEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.moveUpEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.moveUpEntry.mnemonic"; + enabled: {model.isMoveUpEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.moveUpEntry.help"}; +} + +#moveDownEntryMenu { + actionIcon: down; + text: "tutti.editSampleCategoryModel.action.moveDownEntry"; + toolTipText: "tutti.editSampleCategoryModel.action.moveDownEntry.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.moveDownEntry.mnemonic"; + enabled: {model.isMoveDownEntryEnabled()}; + _help: {"tutti.editSampleCategoryModel.action.moveDownEntry.help"}; +} + +#closeButton { + actionIcon: cancel; + text: "tutti.editSampleCategoryModel.action.close"; + toolTipText: "tutti.editSampleCategoryModel.action.close.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.close.mnemonic"; + _tuttiAction: {fr.ifremer.tutti.ui.swing.content.SelectCruiseAction.class}; + _help: {"tutti.editSampleCategoryModel.action.close.help"}; +} + +#saveButton { + actionIcon: save; + text: "tutti.editSampleCategoryModel.action.save"; + toolTipText: "tutti.editSampleCategoryModel.action.save.tip"; + i18nMnemonic: "tutti.editSampleCategoryModel.action.save.mnemonic"; + enabled: {model.isModify() && model.isValid()}; + _tuttiAction: {SaveSampleCategoryModelAction.class}; + _help: {"tutti.editSampleCategoryModel.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/config/EditSampleCategoryModelUI.css ___________________________________________________________________ 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/config/EditSampleCategoryModelUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,109 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + 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% + --> +<JPanel id='editSampleCategoryModelTopPanel' layout='{new BorderLayout()}' + decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditSampleCategoryModelUIModel, EditSampleCategoryModelUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Caracteristic + + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.util.TuttiUI + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + + org.jdesktop.swingx.JXTable + + javax.swing.ListSelectionModel + + java.awt.Color + </import> + + <script><![CDATA[ + +public EditSampleCategoryModelUI(TuttiUI parentUI) { + JAXXUtil.initContext(this, parentUI); + TuttiUIContext context = parentUI.getHandler().getContext(); + EditSampleCategoryModelUIHandler handler = new EditSampleCategoryModelUIHandler(context, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +protected void $afterCompleteSetup() { handler.afterInitUI(); } + ]]></script> + + <!-- bean property --> + <EditSampleCategoryModelUIModel id='model' + initializer='getContextValue(EditSampleCategoryModelUIModel.class)'/> + + <EditSampleCategoryModelUIHandler id='handler' + initializer='getContextValue(EditSampleCategoryModelUIHandler.class)'/> + + <TuttiHelpBroker id='broker' + constructorParams='"tutti.editSampleCategoryModel.help"'/> + + <JPopupMenu id='tablePopup'> + <JMenuItem id='removeEntryMenu' + onActionPerformed='handler.removeEntry()'/> + <JMenuItem id='moveUpEntryMenu' + onActionPerformed='handler.moveUpEntry()'/> + <JMenuItem id='moveDownEntryMenu' + onActionPerformed='handler.moveDownEntry()'/> + </JPopupMenu> + + <Table> + + <row fill='both'> + <cell fill='both' weightx='1'> + <BeanFilterableComboBox id='availableCaracteristicsComboBox' + constructorParams='this' + genericType='Caracteristic'/> + </cell> + <cell fill='both'> + <JButton id='addRow' onActionPerformed='handler.addCaracteristic()'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='2'> + <JScrollPane id='tableScrollPane'> + <JXTable id='table' + 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='closeButton'/> + <JButton id='saveButton'/> + </JPanel> + </cell> + </row> + </Table> + +</JPanel> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUI.jaxx ___________________________________________________________________ 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/config/EditSampleCategoryModelUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,367 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.Cancelable; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; +import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.lang3.StringUtils; +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.JComponent; +import javax.swing.SwingUtilities; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * Handler of ui {@link EditSampleCategoryModelUI}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandler<EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel, EditSampleCategoryModelUI> implements Cancelable, CloseableUI { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(EditSampleCategoryModelUIHandler.class); + + protected PersistenceService persistenceService; + + public EditSampleCategoryModelUIHandler(TuttiUIContext context, EditSampleCategoryModelUI ui) { + super(context, ui, + EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, + EditSampleCategoryModelRowModel.PROPERTY_LABEL); + this.persistenceService = context.getPersistenceService(); + } + + //------------------------------------------------------------------------// + //-- Public methods --// + //------------------------------------------------------------------------// + + public void addCaracteristic() { + BeanFilterableComboBox<Caracteristic> keyCombo = ui.getAvailableCaracteristicsComboBox(); + Caracteristic selectedItem = (Caracteristic) keyCombo.getSelectedItem(); + + getModel().removeCaracteristic(selectedItem); + + EditSampleCategoryModelTableModel tableModel = getTableModel(); + + EditSampleCategoryModelRowModel row = tableModel.createNewRow(); + row.setCaracteristic(selectedItem); + + tableModel.addNewRow(row); + + recomputeRowValidState(row); + + getModel().setModify(true); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getTable().requestFocus(); + + int rowIndex = getTable().getRowCount() - 1; + + SwingUtil.editCell(getTable(), rowIndex, 1); + } + }); + } + + public void removeEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + + // get selected row + EditSampleCategoryModelRowModel entry = getTableModel().getEntry(selectedRow); + + // get his caracteristic + Caracteristic caracteristic = entry.getCaracteristic(); + + // push it back to model + getModel().addCaracteristic(caracteristic); + + // remove entry from table model + getTableModel().removeRow(selectedRow); + + getModel().setModify(true); + } + + public void moveUpEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + + int newRow = selectedRow - 1; + + getTableModel().permuteEntry(newRow, selectedRow); + getTable().getSelectionModel().setSelectionInterval(newRow, newRow); + getModel().setModify(true); + } + + public void moveDownEntry() { + int selectedRow = getTable().getSelectedRow(); + Preconditions.checkState(selectedRow > -1); + int newRow = selectedRow + 1; + + getTableModel().permuteEntry(selectedRow, newRow); + getTable().getSelectionModel().setSelectionInterval(newRow, newRow); + getModel().setModify(true); + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiTableUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + public EditSampleCategoryModelTableModel getTableModel() { + return (EditSampleCategoryModelTableModel) getTable().getModel(); + } + + @Override + protected JComponent getComponentToFocus() { + return ui.getAvailableCaracteristicsComboBox(); + } + + @Override + public JXTable getTable() { + return ui.getTable(); + } + + @Override + protected boolean isRowValid(EditSampleCategoryModelRowModel row) { + boolean result = StringUtils.isNotBlank(row.getLabel()); + + return result; + } + + @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, EditSampleCategoryModelRowModel oldRow, int newRowIndex, EditSampleCategoryModelRowModel newRow) { + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + recomputePopupActions(); + } + + @Override + protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EditSampleCategoryModelRowModel> rowMonitor, + EditSampleCategoryModelRowModel row) { + + } + + @Override + protected void onRowModified(int rowIndex, + EditSampleCategoryModelRowModel row, + String propertyName, + Object oldValue, + Object newValue) { + recomputeRowValidState(row); + saveSelectedRowIfNeeded(); + + // when row valid state has changed, recompute action enabled states + recomputePopupActions(); + getModel().setModify(true); + } + + //------------------------------------------------------------------------// + //-- CloseableUI methods --// + //------------------------------------------------------------------------// + + @Override + public boolean quitUI() { + boolean result = quitScreen( + getModel().isValid(), + getModel().isModify(), + _("tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel"), + _("tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel"), + ui.getSaveButton().getAction() + ); + return result; + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiUIHandler methods --// + //------------------------------------------------------------------------// + + @Override + public void beforeInitUI() { + + if (log.isDebugEnabled()) { + log.debug("for " + ui); + } + + List<Caracteristic> caracteristics = Lists.newArrayList( + persistenceService.getAllCaracteristicForSampleCategory()); + + SampleCategoryModel sampleCategoryModel = + getDataContext().getSampleCategoryModel(); + + EditSampleCategoryModelUIModel model = new EditSampleCategoryModelUIModel( + persistenceService.getEnumerationFile(), + sampleCategoryModel.getCategory(), + caracteristics); + + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + initUI(ui); + + EditSampleCategoryModelUIModel model = getModel(); + + initBeanFilterableComboBox(ui.getAvailableCaracteristicsComboBox(), + model.getCaracteristicList(), + null); + + model.addPropertyChangeListener(EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (log.isDebugEnabled()) { + log.debug("propertyChange " + EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST); + } + ui.getAvailableCaracteristicsComboBox().setData(null); + ui.getAvailableCaracteristicsComboBox().setData((List<Caracteristic>) evt.getNewValue()); + ui.getAvailableCaracteristicsComboBox().setSelectedItem(null); + } + }); + + JXTable table = getTable(); + + // create table column model + DefaultTableColumnModelExt columnModel = + new DefaultTableColumnModelExt(); + + { + // Category column + + addColumnToModel(columnModel, + null, + newTableCellRender(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY), + EditSampleCategoryModelTableModel.CARACTERISTIC); + + + } + + { // Label column + + addColumnToModel(columnModel, + null, + null, + EditSampleCategoryModelTableModel.LABEL); + } + + // create table model + EditSampleCategoryModelTableModel tableModel = + new EditSampleCategoryModelTableModel(columnModel); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + + initTable(table); + + List<EditSampleCategoryModelRowModel> rows = model.getRows(); + tableModel.setRows(rows); + + recomputePopupActions(); + + model.setModify(true); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getModel().setModify(false); + } + }); + + } + + @Override + protected void initTable(JXTable table) { + super.initTable(table); + installTableKeyListener(table.getColumnModel(), table); + } + + @Override + public void cancel() { + + if (log.isDebugEnabled()) { + log.debug("Cancel UI " + ui); + } + + // close dialog + closeUI(ui); + } + + @Override + public void onCloseUI() { + + } + + @Override + public SwingValidator<EditSampleCategoryModelUIModel> getValidator() { + return null; + } + + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected void recomputePopupActions() { + + int rowIndex = getTable().getSelectedRow(); + + boolean enableRemoveEntry = false; + boolean enableMoveUpEntry = false; + boolean enableMoveDownEntry = false; + + if (rowIndex != -1) { + + // there is a selected row + enableRemoveEntry = true; + + enableMoveUpEntry = rowIndex > 0; + + enableMoveDownEntry = rowIndex < getTable().getModel().getRowCount() - 1; + } + EditSampleCategoryModelUIModel model = getModel(); + model.setRemoveEntryEnabled(enableRemoveEntry); + model.setMoveUpEntryEnabled(enableMoveUpEntry); + model.setMoveDownEntryEnabled(enableMoveDownEntry); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIHandler.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/config/EditSampleCategoryModelUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,161 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.service.TuttiEnumerationFile; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.List; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<SampleCategoryModel, EditSampleCategoryModelRowModel, EditSampleCategoryModelUIModel> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_CARACTERISTIC_LIST = "caracteristicList"; + + public static final String PROPERTY_REMOVE_ENTRY_ENABLED = "removeEntryEnabled"; + + public static final String PROPERTY_MOVE_UP_ENTRY_ENABLED = "moveUpEntryEnabled"; + + public static final String PROPERTY_MOVE_DOWN_ENTRY_ENABLED = "moveDownEntryEnabled"; + + protected final SampleCategoryModelEntry firstCategory; + + protected final List<Caracteristic> caracteristicList; + + protected static Binder<SampleCategoryModel, EditSampleCategoryModelUIModel> fromBeanBinder = + BinderFactory.newBinder(SampleCategoryModel.class, + EditSampleCategoryModelUIModel.class); + + protected static Binder<EditSampleCategoryModelUIModel, SampleCategoryModel> toBeanBinder = + BinderFactory.newBinder(EditSampleCategoryModelUIModel.class, SampleCategoryModel.class); + + private boolean removeEntryEnabled; + + private boolean moveUpEntryEnabled; + + private boolean moveDownEntryEnabled; + + public EditSampleCategoryModelUIModel(TuttiEnumerationFile enumerationFile, + List<SampleCategoryModelEntry> category, + List<Caracteristic> caracteristicList) { + + super(SampleCategoryModel.class, fromBeanBinder, toBeanBinder); + + Preconditions.checkNotNull(caracteristicList, "need a not null caracteristicList"); + Preconditions.checkNotNull(enumerationFile, "need a not null enumerationFile"); + Preconditions.checkNotNull(category, "need a not null category list"); + Preconditions.checkArgument(!category.isEmpty(), "need at least one first category (sorted-unsorted)"); + this.caracteristicList = caracteristicList; + this.firstCategory = category.get(0); + Preconditions.checkArgument(enumerationFile.PMFM_ID_SORTED_UNSORTED.equals(firstCategory.getCategoryId()), "first category must be sorted-unsorted caracteristic but was: " + firstCategory.getCategoryId()); + + List<EditSampleCategoryModelRowModel> rows = Lists.newArrayList(); + + for (SampleCategoryModelEntry sampleCategoryModelEntry : category) { + caracteristicList.remove(sampleCategoryModelEntry.getCaracteristic()); + if (firstCategory.equals(sampleCategoryModelEntry)) { + continue; + } + EditSampleCategoryModelRowModel row = new EditSampleCategoryModelRowModel(); + row.setCaracteristic(sampleCategoryModelEntry.getCaracteristic()); + row.setLabel(sampleCategoryModelEntry.getLabel()); + row.setValid(true); + rows.add(row); + } + setRows(rows); + } + + @Override + protected SampleCategoryModel newEntity() { + List<SampleCategoryModelEntry> entries = Lists.newArrayList(firstCategory); + int order = 1; + for (EditSampleCategoryModelRowModel row : getRows()) { + SampleCategoryModelEntry entry = new SampleCategoryModelEntry(); + entry.setCategoryId(row.getCategoryId()); + entry.setLabel(row.getLabel()); + entry.setOrder(order++); + entries.add(entry); + } + return new SampleCategoryModel(entries); + } + + public List<Caracteristic> getCaracteristicList() { + return caracteristicList; + } + + public boolean isRemoveEntryEnabled() { + return removeEntryEnabled; + } + + public void setRemoveEntryEnabled(boolean removeEntryEnabled) { + boolean oldValue = isRemoveEntryEnabled(); + this.removeEntryEnabled = removeEntryEnabled; + firePropertyChange(PROPERTY_REMOVE_ENTRY_ENABLED, oldValue, removeEntryEnabled); + } + + public boolean isMoveUpEntryEnabled() { + return moveUpEntryEnabled; + } + + public void setMoveUpEntryEnabled(boolean moveUpEntryEnabled) { + boolean oldValue = isMoveUpEntryEnabled(); + this.moveUpEntryEnabled = moveUpEntryEnabled; + firePropertyChange(PROPERTY_MOVE_UP_ENTRY_ENABLED, oldValue, moveUpEntryEnabled); + } + + public boolean isMoveDownEntryEnabled() { + return moveDownEntryEnabled; + } + + public void setMoveDownEntryEnabled(boolean moveDownEntryEnabled) { + boolean oldValue = isMoveDownEntryEnabled(); + this.moveDownEntryEnabled = moveDownEntryEnabled; + firePropertyChange(PROPERTY_MOVE_DOWN_ENTRY_ENABLED, oldValue, moveDownEntryEnabled); + } + + public void addCaracteristic(Caracteristic caracteristic) { + caracteristicList.add(caracteristic); + firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); + } + + public void removeCaracteristic(Caracteristic caracteristic) { + caracteristicList.remove(caracteristic); + firePropertyChange(PROPERTY_CARACTERISTIC_LIST, null, caracteristicList); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/EditSampleCategoryModelUIModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -1,139 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * 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.referential.Caracteristic; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import jaxx.runtime.SwingUtil; - -import javax.swing.JToggleButton; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.Point; -import java.awt.event.HierarchyBoundsAdapter; -import java.awt.event.HierarchyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.List; - -import static org.nuiton.i18n.I18n._; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public class SampleOrderButton extends JToggleButton { - - private static final long serialVersionUID = 1L; - - protected final SampleOrderEditorUI popup; - - protected Point popupPosition = null; - - protected boolean popupMoving; - - public SampleOrderButton(TuttiUIContext context, - List<Caracteristic> model) { - - setIcon(SwingUtil.createActionIcon("sampleOrder")); - setToolTipText(_("tutti.config.action.sampleOrder.tip")); - - popup = new SampleOrderEditorUI(context); - - popup.addWindowListener(new WindowAdapter() { - - @Override - public void windowOpened(WindowEvent e) { - setSelected(true); - } - - @Override - public void windowClosing(WindowEvent e) { - setSelected(false); - } - - @Override - public void windowClosed(WindowEvent e) { - setSelected(false); - } - }); - - addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (isSelected()) { - if (!popup.isVisible()) { - popup.openEditor(SampleOrderButton.this); - } - } else { - popup.closeEditor(); - } - } - }); - - addHierarchyBoundsListener(new HierarchyBoundsAdapter() { - - @Override - public void ancestorMoved(HierarchyEvent e) { - if (popup.isShowing()) { - - // place dialog just under the button - Point point = new Point(getLocationOnScreen()); - point.translate(-popup.getWidth() + getWidth(), getHeight()); - popupMoving = true; - try { - popup.setLocation(point); - } finally { - popupMoving = false; - } - } - } - }); - setBean(model); - } - - public void init() { - popup.getHandler().init(); - } - - public void init(List<Caracteristic> model) { - setBean(model); - init(); - } - - public void onCloseUI() { - setSelected(false); - } - - public List<Caracteristic> getBean() { - return popup.getListModel().toList(); - } - - protected void setBean(List<Caracteristic> model) { - popup.setBean(model); - init(); - } - -} \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css 2013-07-27 13:48:21 UTC (rev 1158) @@ -1,36 +0,0 @@ -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * 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% - */ -#samplingOrderEditorDialog { - undecorated: true; - alwaysOnTop: true; -} - -#sampleOrderEditorTopPanel { - title: "tutti.config.sampleOrder.title"; -} - -#list { - model: {listModel}; - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; -} Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx 2013-07-27 13:48:21 UTC (rev 1158) @@ -1,77 +0,0 @@ -<!-- - #%L - Tutti :: UI - $Id$ - $HeadURL$ - %% - 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% - --> -<JDialog id='samplingOrderEditorDialog' layout='{new BorderLayout()}'> - - <import> - fr.ifremer.tutti.persistence.entities.referential.Caracteristic - fr.ifremer.tutti.ui.swing.TuttiUIContext - - jaxx.runtime.swing.model.JaxxDefaultListModel - - org.jdesktop.swingx.JXTitledPanel - javax.swing.JComponent - javax.swing.ListSelectionModel - </import> - - <script><![CDATA[ - -public SampleOrderEditorUI(TuttiUIContext context) { - super(context.getMainUI()); - setContextValue(context); - SampleOrderEditorUIHandler handler = new SampleOrderEditorUIHandler(context, this); - setContextValue(handler); - handler.beforeInitUI(); -} - -protected void $afterCompleteSetup() { - getHandler().afterInitUI(); -} - -public void openEditor(JComponent component) { - handler.openEditor(component); -} - -public void closeEditor() { - handler.closeEditor(); -} - - ]]></script> - - <!-- bean property --> - <java.util.List id='bean' genericType='Caracteristic' javaBean='null'/> - - <SampleOrderEditorUIHandler id='handler' - initializer='getContextValue(SampleOrderEditorUIHandler.class)'/> - - <JaxxDefaultListModel id='listModel' genericType='Caracteristic'/> - - <JXTitledPanel id='sampleOrderEditorTopPanel' - constraints='BorderLayout.CENTER'> - - <JScrollPane> - <JList id='list'/> - </JScrollPane> - - </JXTitledPanel> -</JDialog> \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -1,240 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * 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.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicBean; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.ComponentMover; -import jaxx.runtime.swing.ComponentResizer; -import jaxx.runtime.swing.model.JaxxDefaultListModel; -import jaxx.runtime.swing.renderer.MultiDecoratorListCellRenderer; -import org.nuiton.decorator.JXPathDecorator; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JList; -import javax.swing.JRootPane; -import javax.swing.JToolBar; -import javax.swing.KeyStroke; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.util.List; - -import static org.nuiton.i18n.I18n._; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public class SampleOrderEditorUIHandler { - - private static final int DEFAULT_EDITOR_WIDTH = 300; - - private static final int DEFAULT_EDITOR_HEIGHT = 200; - - public static final String CLOSE_DIALOG_ACTION = "closeDialog"; - - public static final String SHOW_DIALOG_ACTION = "showDialog"; - - protected final TuttiUIContext context; - - private final SampleOrderEditorUI ui; - - public SampleOrderEditorUIHandler(TuttiUIContext context, - SampleOrderEditorUI ui) { - this.context = context; - this.ui = ui; - } - - protected void beforeInitUI() { - } - - protected void afterInitUI() { - - ui.setResizable(true); - - ui.setSize(DEFAULT_EDITOR_WIDTH, DEFAULT_EDITOR_HEIGHT); - ui.pack(); - - ComponentResizer cr = new ComponentResizer(); - cr.registerComponent(ui); - ComponentMover cm = new ComponentMover(); - cm.setDragInsets(cr.getDragInsets()); - cm.registerComponent(ui); - - JRootPane rootPane = ui.getRootPane(); - - KeyStroke shortcutClosePopup = - KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); - - rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( - shortcutClosePopup, CLOSE_DIALOG_ACTION); - - closeAction = new AbstractAction() { - private static final long serialVersionUID = 1L; - - @Override - public void actionPerformed(ActionEvent e) { - ui.dispose(); - ui.setVisible(false); - } - }; - - openAction = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - @Override - public void actionPerformed(ActionEvent e) { - ui.setVisible(true); - } - }; - - ImageIcon actionIcon = SwingUtil.createActionIcon("close-dialog"); - closeAction.putValue(Action.SMALL_ICON, actionIcon); - closeAction.putValue(Action.LARGE_ICON_KEY, actionIcon); - closeAction.putValue(Action.ACTION_COMMAND_KEY, "close"); - closeAction.putValue(Action.NAME, "close"); - closeAction.putValue(Action.SHORT_DESCRIPTION, _("tutti.commentEditor.action.close.tip")); - - rootPane.getActionMap().put(CLOSE_DIALOG_ACTION, closeAction); - rootPane.getActionMap().put(SHOW_DIALOG_ACTION, openAction); - - JButton closeButton = new JButton(closeAction); - closeButton.setText(null); - closeButton.setFocusPainted(false); - closeButton.setRequestFocusEnabled(false); - closeButton.setFocusable(false); - - JToolBar jToolBar = new JToolBar(); - jToolBar.setOpaque(false); - jToolBar.add(closeAction); - jToolBar.setBorderPainted(false); - jToolBar.setFloatable(false); - ui.getSampleOrderEditorTopPanel().setRightDecoration(jToolBar); - - JXPathDecorator<CaracteristicBean> decorator = - (JXPathDecorator<CaracteristicBean>) context.getDecoratorService().getDecoratorByType( - CaracteristicBean.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY); - ui.getList().setCellRenderer(new MultiDecoratorListCellRenderer(decorator)); - - ui.getList().addKeyListener(new KeyAdapter() { - - JaxxDefaultListModel<Caracteristic> listModel = ui.getListModel(); - - @Override - public void keyReleased(KeyEvent e) { - super.keyReleased(e); - JList list = (JList) e.getSource(); - - if (!list.isSelectionEmpty()) { - - int selectedIndex = list.getSelectedIndex(); - - Integer newSelectedIndex = null; - - if (e.getKeyCode() == KeyEvent.VK_DOWN) { - - if (selectedIndex < listModel.size()) { - - // can move to down - newSelectedIndex = selectedIndex - 1; - - Caracteristic remove = listModel.remove(newSelectedIndex); - - listModel.insertElementAt(remove, selectedIndex); - } - } else if (e.getKeyCode() == KeyEvent.VK_UP) { - - if (selectedIndex >= 0) { - - // can move to up - newSelectedIndex = selectedIndex + 1; - - Caracteristic remove = listModel.remove(newSelectedIndex); - listModel.insertElementAt(remove, selectedIndex); - } - } - - if (newSelectedIndex != null) { - list.setSelectedIndex(selectedIndex); - } - } - - } - }); - } - - protected Action closeAction; - - protected Action openAction; - - public void closeEditor() { - - closeAction.actionPerformed(null); - } - - public void openEditor(JComponent component) { - - if (component != null) { - place(component); - } - openAction.actionPerformed(null); - } - - public void init() { - - List<Caracteristic> bean = ui.getBean(); - ui.getListModel().setAllElements(bean); - } - - public void place(JComponent component) { - // Computes the location of bottom left corner of the cell - Component comp = component; - int x = 0; - int y = component.getHeight(); - while (comp != null) { - x += comp.getX(); - y += comp.getY(); - comp = comp.getParent(); - } - -// ui.pack(); - // if the editor is too big on the right, - // then align its right side to the right side of the cell - if (x + ui.getWidth() > ui.getOwner().getX() + ui.getOwner().getWidth()) { - x = x - ui.getWidth() + component.getWidth(); - } - ui.setLocation(x, y); - } -} \ No newline at end of file Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -1,200 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * 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.Joiner; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import fr.ifremer.tutti.TuttiTechnicalException; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicBean; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import org.nuiton.decorator.Decorator; - -import javax.swing.AbstractCellEditor; -import javax.swing.JTable; -import javax.swing.border.LineBorder; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; -import java.awt.Color; -import java.awt.Component; -import java.util.List; -import java.util.Map; - -import static org.nuiton.i18n.I18n._; - -/** - * To edit sampling oder ids in a table cell. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ -public class SampleOrderIdsTableCell { - - protected final Decorator<CaracteristicBean> decorator; - - protected final Map<Integer, Object> mapping; - - protected final Map<Integer, Caracteristic> caracteristicMap; - - private final TuttiUIContext context; - - public SampleOrderIdsTableCell(TuttiUIContext context) { - - this.context = context; - this.mapping = null; - this.caracteristicMap = Maps.newTreeMap(); - - PersistenceService persistenceService = context.getPersistenceService(); -// this.caracteristicMap.put(SampleCategoryEnum.size.getFieldValue(), persistenceService.getSizeCategoryCaracteristic()); -// this.caracteristicMap.put(SampleCategoryEnum.sex.getFieldValue(), persistenceService.getSexCaracteristic()); -// this.caracteristicMap.put(SampleCategoryEnum.maturity.getFieldValue(), persistenceService.getMaturityCaracteristic()); -// this.caracteristicMap.put(SampleCategoryEnum.age.getFieldValue(), persistenceService.getAgeCaracteristic()); - - this.decorator = context.getDecoratorService().getDecoratorByType( - CaracteristicBean.class, - DecoratorService.CARACTERISTIC_PARAMETER_ONLY); - } - - public TableCellEditor getNewTableCellEditor() { - return new SampleOrderCellEditor(context); - } - - public TableCellRenderer getNewTableCellRenderer() { - return new SamplingOrderIdsTableCellRenderer(); - } - - protected class SamplingOrderIdsTableCellRenderer extends DefaultTableCellRenderer { - - private static final long serialVersionUID = 1L; - - @Override - public Component getTableCellRendererComponent(JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, int column) { - - Integer[] ids = (Integer[]) value; - List<String> texts = Lists.newArrayListWithCapacity(ids.length); - for (Integer id : ids) { - Caracteristic caracteristic = caracteristicMap.get(id); - texts.add(decorator.toString(caracteristic)); - } - String text = Joiner.on(",").join(texts); - return super.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); - } - } - - /** - * @author tchemit <chemit@codelutin.com> - * @since 1.1 - */ - public class SampleOrderCellEditor extends AbstractCellEditor implements TableCellEditor { - - private static final long serialVersionUID = 1L; - - protected Integer rowIndex; - - protected Integer columnIndex; - - protected final SampleOrderButton editorButton; - - protected SampleOrderCellEditor(TuttiUIContext context) { - - this.editorButton = new SampleOrderButton(context, null); - this.editorButton.setBorder(new LineBorder(Color.BLACK)); - addCellEditorListener(new CellEditorListener() { - @Override - public void editingStopped(ChangeEvent e) { - editorButton.setSelected(false); - } - - @Override - public void editingCanceled(ChangeEvent e) { - editorButton.setSelected(false); - } - }); - } - - @Override - public Component getTableCellEditorComponent(JTable table, - Object value, - boolean isSelected, - int row, - int column) { - Integer[] ids = (Integer[]) value; - - rowIndex = row; - columnIndex = column; - - List<Caracteristic> result = Lists.newArrayList(); - for (Integer id : ids) { - Object sampleCategoryEnum = mapping.get(id); - if (sampleCategoryEnum == null) { - throw new TuttiTechnicalException(_("tutti.sampleOrder.caracteristicNotFound", id)); - } - Caracteristic caracteristic = caracteristicMap.get(id); - result.add(caracteristic); - } - - editorButton.init(result); - - return editorButton; - } - - @Override - public Object getCellEditorValue() { - - List<Integer> l = Lists.newArrayList(); - List<Caracteristic> model = editorButton.getBean(); - for (Caracteristic caracteristic : model) { - String id = caracteristic.getId(); - l.add(Integer.valueOf(id)); - } - return l.toArray(new Integer[l.size()]); - } - - @Override - public boolean stopCellEditing() { - boolean b = super.stopCellEditing(); - if (b) { - editorButton.setSelected(false); - } - return b; - } - - @Override - public void cancelCellEditing() { - editorButton.setSelected(false); - super.cancelCellEditing(); - } - } -} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -0,0 +1,66 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * 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.data.SampleCategoryModel; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To save the sample category model. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampleCategoryModelUIModel, EditSampleCategoryModelUI, EditSampleCategoryModelUIHandler> { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(SaveSampleCategoryModelAction.class); + + public SaveSampleCategoryModelAction(EditSampleCategoryModelUIHandler handler) { + super(handler, true); + } + + @Override + protected void doAction() throws Exception { + EditSampleCategoryModelUIModel model = getModel(); + + SampleCategoryModel bean = model.toBean(); + + if (log.isInfoEnabled()) { + log.info("Will save sampleCategoryModel: " + bean); + } + getConfig().getServiceConfig().getPersistenceConfig().setSampleCategoryModel(bean); + + getConfig().save(); + + getDataContext().loadSampleCategoryModel(bean); + + model.setModify(false); + + } +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SaveSampleCategoryModelAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -45,7 +45,6 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; -import javax.swing.table.TableCellEditor; import java.awt.BorderLayout; import static org.nuiton.i18n.I18n.n_; @@ -143,13 +142,6 @@ helper.addOption(TuttiServiceConfigOption.EXPORT_COUNTRY_ID) .setOptionEditor(tuttiLocationTableCellComponent.getNewTableCellEditor()) .setOptionRenderer(tuttiLocationTableCellComponent.getNewTableCellRenderer()); - - SampleOrderIdsTableCell comp = new SampleOrderIdsTableCell(context); - - TableCellEditor sampleOrderEditor = comp.getNewTableCellEditor(); - helper.addOption(TuttiServiceConfigOption.SAMPLING_CATEGORY_ORDER_IDS) - .setOptionEditor(sampleOrderEditor) - .setOptionRenderer(comp.getNewTableCellRenderer()); } // UI Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -27,16 +27,19 @@ import com.google.common.base.Preconditions; import fr.ifremer.tutti.TuttiBusinessException; import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import jaxx.runtime.FileChooserUtil; import jaxx.runtime.JAXXBinding; import jaxx.runtime.JAXXObject; import jaxx.runtime.SwingUtil; import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; +import org.nuiton.util.StringUtil; import javax.swing.JOptionPane; import javax.swing.UIManager; @@ -372,4 +375,38 @@ float result = intValue / 10f; return result; } + + + public static boolean askAdminPassword(Component container, + TuttiApplicationConfig config, + String askMessage, + String askMessageTitle, + String errorMessage, + String errorMessageTitle) { + String answer; + boolean result; + do { + answer = JOptionPane.showInputDialog(container, + askMessage, + askMessageTitle, + JOptionPane.WARNING_MESSAGE); + if (answer != null) { + String cryptedAnswer = StringUtil.encodeMD5(answer); + String correctAnswer = config.getAdminPassword(); + result = StringUtils.equals(cryptedAnswer, correctAnswer); + + if (!result) { + JOptionPane.showMessageDialog(container, + errorMessage, + errorMessageTitle, + JOptionPane.ERROR_MESSAGE); + } + + } else { + result = false; + } + + } while (!result && answer != null); + return result; + } } Modified: 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/util/caracteristics/CaracteristicMapEditorUIHandler.java 2013-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java 2013-07-27 13:48:21 UTC (rev 1158) @@ -118,7 +118,7 @@ @Override public void beforeInitUI() { - CaracteristicMapEditorUIModel model = createModel(); + CaracteristicMapEditorUIModel model = new CaracteristicMapEditorUIModel(); getUI().setContextValue(model); } @@ -195,10 +195,6 @@ return ui.getNewRowKey(); } - protected CaracteristicMapEditorUIModel createModel() { - return new CaracteristicMapEditorUIModel(); - } - protected void saveRow(CaracteristicMapEditorRowModel row) { if (row.isValid()) { 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-07-27 13:48:21 UTC (rev 1158) @@ -92,6 +92,8 @@ tutti.config.application= tutti.config.category.applications= tutti.config.category.applications.description= +tutti.config.category.sampleCategoryModel= +tutti.config.category.sampleCategoryModel.description= tutti.config.category.technical= tutti.config.category.technical.description= tutti.config.category.ui= @@ -119,6 +121,11 @@ tutti.config.option.update.url.description= tutti.config.option.weights.rate.difference.totalAndSorted.description= tutti.config.parse.error= +tutti.config.sampleCategoryModel.passwordDialog.error.message= +tutti.config.sampleCategoryModel.passwordDialog.error.title= +tutti.config.sampleCategoryModel.passwordDialog.message= +tutti.config.sampleCategoryModel.passwordDialog.title= +tutti.config.sampleCategoryModel.title= tutti.config.sampleOrder.title= tutti.config.save.error= tutti.config.title= @@ -746,7 +753,9 @@ tutti.editProtocol.action.selectOtherSpecies.mnemonic= tutti.editProtocol.action.selectOtherSpecies.tip= tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveProtocol= +tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel= tutti.editProtocol.askSaveBeforeLeaving.saveProtocol= +tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel= tutti.editProtocol.field.benthos.tip= tutti.editProtocol.field.comment= tutti.editProtocol.field.comment.tip= @@ -782,6 +791,29 @@ tutti.editProtocol.title.edit.protocol= tutti.editProtocol.warn.clone= tutti.editProtocol.warn.import= +tutti.editSampleCategoryModel.action.cancel= +tutti.editSampleCategoryModel.action.cancel.mnemonic= +tutti.editSampleCategoryModel.action.cancel.tip= +tutti.editSampleCategoryModel.action.close= +tutti.editSampleCategoryModel.action.close.mnemonic= +tutti.editSampleCategoryModel.action.close.tip= +tutti.editSampleCategoryModel.action.moveDownEntry= +tutti.editSampleCategoryModel.action.moveDownEntry.mnemonic= +tutti.editSampleCategoryModel.action.moveDownEntry.tip= +tutti.editSampleCategoryModel.action.moveUpEntry= +tutti.editSampleCategoryModel.action.moveUpEntry.mnemonic= +tutti.editSampleCategoryModel.action.moveUpEntry.tip= +tutti.editSampleCategoryModel.action.removeEntry= +tutti.editSampleCategoryModel.action.removeEntry.mnemonic= +tutti.editSampleCategoryModel.action.removeEntry.tip= +tutti.editSampleCategoryModel.action.save= +tutti.editSampleCategoryModel.action.save.mnemonic= +tutti.editSampleCategoryModel.action.save.tip= +tutti.editSampleCategoryModel.table.header.caracteristic= +tutti.editSampleCategoryModel.table.header.caracteristic.tip= +tutti.editSampleCategoryModel.table.header.label= +tutti.editSampleCategoryModel.table.header.label.tip= +tutti.editSampleCategoryModel.title= tutti.editSpeciesBatch.action.createBatch= tutti.editSpeciesBatch.action.createBatch.mnemonic= tutti.editSpeciesBatch.action.createBatch.tip= @@ -1000,6 +1032,9 @@ tutti.main.action.editCatches.mnemonic= tutti.main.action.editCatches.tip= tutti.main.action.editProgram.tip= +tutti.main.action.editSampleCategoryModel= +tutti.main.action.editSampleCategoryModel.mnemonic= +tutti.main.action.editSampleCategoryModel.tip= tutti.main.action.editSelectedCruise= tutti.main.action.editSelectedCruise.mnemonic= tutti.main.action.editSelectedCruise.tip= @@ -1123,6 +1158,10 @@ tutti.multiPostImportLog.totalWeight= tutti.property.get.error= tutti.property.set.error= +tutti.sampleCategoryModel.passwordDialog.error.message= +tutti.sampleCategoryModel.passwordDialog.error.title= +tutti.sampleCategoryModel.passwordDialog.message= +tutti.sampleCategoryModel.passwordDialog.title= tutti.sampleOrder.caracteristicNotFound= tutti.selectBenthos.title= tutti.selectCruise.action.chooseCruiseExportFile= 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-07-26 09:37:07 UTC (rev 1157) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-07-27 13:48:21 UTC (rev 1158) @@ -92,6 +92,8 @@ tutti.config.application=Configuration de l'application Tutti tutti.config.category.applications=Application tutti.config.category.applications.description=Application +tutti.config.category.sampleCategoryModel=Catégories de captures +tutti.config.category.sampleCategoryModel.description=Configurer les catégories de captures tutti.config.category.technical=Technique tutti.config.category.technical.description=Informations techniques tutti.config.category.ui=Interface utilisateur @@ -119,6 +121,11 @@ tutti.config.option.update.url.description=URL de mise à jour tutti.config.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie tutti.config.parse.error=Erreur de parsing du fichier de configuration +tutti.config.sampleCategoryModel.passwordDialog.error.message=Le mot de passe que vous avez entré est incorrect +tutti.config.sampleCategoryModel.passwordDialog.error.title=Mot de passe incorrect +tutti.config.sampleCategoryModel.passwordDialog.message=Vous souhaitez entrer dans une partie sensible de l'application +tutti.config.sampleCategoryModel.passwordDialog.title=Zone sensible +tutti.config.sampleCategoryModel.title= tutti.config.sampleOrder.title=Catégorie d'échantillonnage tutti.config.save.error=Erreur lors de la sauvegarde de la configuration dans le fichier %s tutti.config.title=Configuration @@ -746,7 +753,9 @@ tutti.editProtocol.action.selectOtherSpecies.mnemonic=. tutti.editProtocol.action.selectOtherSpecies.tip=Sélectionner une autre espèce (dans les synonymes) tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveProtocol=Le protocole n'est pas valide et ne peut pas être enregistré +tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel=La catégorisation n'est pas valide et ne peut pas être enregistré tutti.editProtocol.askSaveBeforeLeaving.saveProtocol=Des modifications sur le protocole n'ont pas été enregistrées +tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel=Des modifications sur la catégorisation n'ont pas été enregistrées tutti.editProtocol.field.benthos.tip=Benthos tutti.editProtocol.field.comment=Commentaire tutti.editProtocol.field.comment.tip=Commentaire @@ -782,6 +791,26 @@ tutti.editProtocol.title.edit.protocol=Éditer un protocole de saisie existant tutti.editProtocol.warn.clone=Le protocole que vous venez de cloner ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". tutti.editProtocol.warn.import=Le protocole que vous venez d'importer ne sera sauvegardé que lorsque vous cliquerez sur le bouton "Enregistrer". +tutti.editSampleCategoryModel.action.close=Fermer +tutti.editSampleCategoryModel.action.close.mnemonic=F +tutti.editSampleCategoryModel.action.close.tip=Fermer l'édition des catégories +tutti.editSampleCategoryModel.action.moveDownEntry=Descendre +tutti.editSampleCategoryModel.action.moveDownEntry.mnemonic=D +tutti.editSampleCategoryModel.action.moveDownEntry.tip=Descendre l'entrée sélectionnée +tutti.editSampleCategoryModel.action.moveUpEntry=Monter +tutti.editSampleCategoryModel.action.moveUpEntry.mnemonic=M +tutti.editSampleCategoryModel.action.moveUpEntry.tip=Monter l'entrée sélectionnée +tutti.editSampleCategoryModel.action.removeEntry=Supprimer +tutti.editSampleCategoryModel.action.removeEntry.mnemonic=S +tutti.editSampleCategoryModel.action.removeEntry.tip=Supprimer l'entrée sélectionnée +tutti.editSampleCategoryModel.action.save=Enregistrer +tutti.editSampleCategoryModel.action.save.mnemonic=E +tutti.editSampleCategoryModel.action.save.tip=Enregistrer les modifications +tutti.editSampleCategoryModel.table.header.caracteristic=Caractéristique +tutti.editSampleCategoryModel.table.header.caracteristic.tip=Caractéristique de la catégorie +tutti.editSampleCategoryModel.table.header.label=Label +tutti.editSampleCategoryModel.table.header.label.tip=Label de la catéogire (sera utilisée dans les entêtes de tableau) +tutti.editSampleCategoryModel.title=Configurer les catégorisations tutti.editSpeciesBatch.action.createBatch=Créer un lot pour une espèce tutti.editSpeciesBatch.action.createBatch.mnemonic=C tutti.editSpeciesBatch.action.createBatch.tip=Créer un nouveau lot pour une espèce @@ -1000,6 +1029,9 @@ tutti.main.action.editCatches.mnemonic=S tutti.main.action.editCatches.tip=Éditer les captures tutti.main.action.editProgram.tip=Éditer la série de campagne +tutti.main.action.editSampleCategoryModel=Configurer les catégorisations +tutti.main.action.editSampleCategoryModel.mnemonic=o +tutti.main.action.editSampleCategoryModel.tip=Configurer les catégorisations possibles tutti.main.action.editSelectedCruise=Campagne tutti.main.action.editSelectedCruise.mnemonic=C tutti.main.action.editSelectedCruise.tip=Éditer la campagne sélectionnée @@ -1123,6 +1155,10 @@ tutti.multiPostImportLog.totalWeight=Poids total \: %s kg tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s +tutti.sampleCategoryModel.passwordDialog.error.message= +tutti.sampleCategoryModel.passwordDialog.error.title= +tutti.sampleCategoryModel.passwordDialog.message= +tutti.sampleCategoryModel.passwordDialog.title= tutti.sampleOrder.caracteristicNotFound=La caractéristique d'id %s n'est pas prévue pour l’échantillonnage tutti.selectBenthos.title=Choisissez une espèce du benthos tutti.selectCruise.action.chooseCruiseExportFile=Exporter Added: trunk/tutti-ui-swing/src/main/resources/icons/action-down.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-down.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/tutti-ui-swing/src/main/resources/icons/action-up.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-up.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL