This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 11bdb672f87547e4b2691267c573a3e638cd4fe6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Feb 25 10:03:11 2015 +0100 ecran d'import au format generique --- .../filtered-resources/tutti-help-fr.properties | 37 ++-- .../fr/ifremer/tutti/ui/swing/TuttiScreen.java | 8 +- .../action/OpenGenericFormatImportScreen.java | 18 ++ .../fr/ifremer/tutti/ui/swing/content/MainUI.css | 10 + .../fr/ifremer/tutti/ui/swing/content/MainUI.jaxx | 1 + .../tutti/ui/swing/content/MainUIHandler.java | 8 + .../genericformat/GenericFormatImportUI.css | 154 ++++++++++++++ .../genericformat/GenericFormatImportUI.jaxx | 156 ++++++++++++++ .../GenericFormatImportUIHandler.java | 135 ++++++++++++ .../genericformat/GenericFormatImportUIModel.java | 234 +++++++++++++++++++++ .../actions/GenericFormatImportAction.java | 186 ++++++++++++++++ .../actions/GenericFormatValidateAction.java | 138 ++++++++++++ .../OpenGenericFormatImportReportAction.java | 55 +++++ .../OpenGenericFormatValidateReportAction.java | 55 +++++ .../SaveGenericFormatImportReportAction.java | 78 +++++++ .../SaveGenericFormatValidateReportAction.java | 78 +++++++ .../tutti/ui/swing/content/home/SelectCruiseUI.css | 2 +- .../resources/i18n/tutti-ui-swing_en_GB.properties | 86 ++++++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 81 ++++++- 19 files changed, 1498 insertions(+), 22 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 7a68687..4de27c2 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Wed Feb 25 08:38:59 CET 2015 +#Wed Feb 25 09:28:15 CET 2015 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -308,23 +308,24 @@ tutti.fishingOperations.action.deleteFishingOperation.help=editFishingOperation. tutti.fishingOperations.action.newFishingOperation.help=editFishingOperation.html\#traitActions tutti.fishingOperations.field.fishingOperation.help=editFishingOperation.html\#fields tutti.fishingOperations.help=editFishingOperation.html -tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.generateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.import.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.openImportReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.showReport.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.action.validate.help=genericFormat.html#generic_format_import_actions -tutti.genericFormatImport.field.checkWeights.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.importResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.overrideData.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.program.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.validateResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.field.validationResult.help=genericFormat.html#generic_format_import_fields -tutti.genericFormatImport.help=genericFormat.html#generic_format_import +tutti.genericFormatImport.action.closeGenericFormatImport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.generateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.import.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.openImportReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.openValidateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.saveImportReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.saveValidateReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.showReport.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.action.validate.help=genericFormat.html\#generic_format_import_actions +tutti.genericFormatImport.field.checkWeights.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.cleanWeights.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.importResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.overrideData.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.program.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.validateResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.field.validationResult.help=genericFormat.html\#generic_format_import_fields +tutti.genericFormatImport.help=genericFormat.html\#generic_format_import +tutti.genericFormatValidate.action.saveValidateReport.help= tutti.index.help=index.html tutti.main.action.changeLocale.help=menu.html\#menu_aide tutti.main.action.changeLocaleFR.help=menu.html\#menu_aide diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java index d53f65a..76801dc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java @@ -103,5 +103,11 @@ public enum TuttiScreen { * * @since 2.9 */ - REPORT + REPORT, + /** + * To perform a generic format import. + * + * @since 3.14 + */ + GENERIC_FORMAT_IMPORT, } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java new file mode 100644 index 0000000..5c89de6 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/OpenGenericFormatImportScreen.java @@ -0,0 +1,18 @@ +package fr.ifremer.tutti.ui.swing.action; + +import fr.ifremer.tutti.ui.swing.TuttiScreen; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatImportScreen extends AbstractChangeScreenAction { + + public OpenGenericFormatImportScreen(MainUIHandler handler) { + super(handler, true, TuttiScreen.GENERIC_FORMAT_IMPORT); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css index b833804..48d66be 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css @@ -220,6 +220,16 @@ _help: {"tutti.main.menu.action.validateCatches.help"}; } +#menuActionGenericFormatImport { + actionIcon: import; + text: "tutti.main.action.genericFormatImport"; + toolTipText: "tutti.main.action.genericFormatImport.tip"; + i18nMnemonic: "tutti.main.action.genericFormatImport.mnemonic"; + enabled: {model.getScreen() != TuttiScreen.GENERIC_FORMAT_IMPORT}; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.OpenGenericFormatImportScreen.class}; + _help: {"tutti.main.menu.action.genericFormatImport.help"}; +} + #menuAdministration { text: "tutti.main.menu.administration"; toolTipText: "tutti.main.menu.administration.tip"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx index 70110f0..a9000b5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx @@ -76,6 +76,7 @@ <JMenuItem id='menuActionEditCatches'/> <JMenuItem id='menuActionValidateCatches'/> <JMenuItem id='menuActionGenerateCruiseReport'/> + <JMenuItem id='menuActionGenericFormatImport'/> </JMenu> <JMenu id='menuAdministration'> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java index fdd7c8c..6c16ea9 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java @@ -35,6 +35,7 @@ import fr.ifremer.tutti.ui.swing.content.category.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; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; import fr.ifremer.tutti.ui.swing.content.validation.ValidateCruiseUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUI; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUIHandler; @@ -455,6 +456,13 @@ public class MainUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, MainUI screenTitle = t("tutti.report.title"); icon = ui.getMenuActionGenerateCruiseReport().getIcon(); break; + + case GENERIC_FORMAT_IMPORT: + + screenUI = new GenericFormatImportUI(ui); + screenTitle = t("tutti.genericFormatImport.title"); + icon = ui.getMenuActionGenericFormatImport().getIcon(); + break; } JButton showHelp = ui.getShowHelp(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css new file mode 100644 index 0000000..eae2dd6 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.css @@ -0,0 +1,154 @@ +FileEditor { + showReset:true; + directoryEnabled: false; + acceptAllFileFilterUsed: false; +} + +BeanFilterableComboBox { + showReset: true; + bean: {model}; +} + +JToolBar { + borderPainted: false; + floatable: false; +} + +JTextField { + _selectOnFocus: {true}; +} + +#genericFormatImportTopPanel { + _help: {"tutti.genericFormatImport.help"}; +} + +#validateFilePanel { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.validateImport.legend"))}; +} + +#programLabel { + text: "tutti.genericFormatImport.field.program"; + labelFor: {programComboBox}; + toolTipText: "tutti.genericFormatImport.field.program.tip"; + _help: {"tutti.genericFormatImport.field.program.help"}; +} + +#programComboBox { + property: program; + selectedItem: {model.getProgram()}; + _validatorLabel: {t("tutti.genericFormatImport.field.program")}; + _help: {"tutti.genericFormatImport.field.program.help"}; +} + +#importFileLabel { + text: "tutti.genericFormatImport.field.importFile"; + labelFor: {importFile}; + toolTipText: "tutti.genericFormatImport.field.importFile.tip"; +} + +#importFile { + exts: {t("tutti.genericFormatImport.importFile.extension")}; + extsDescription: {t("tutti.genericFormatImport.importFile.extension.description")}; + selectedFile: {model.getImportFile()}; +} + +#overrideDataCheckBox { + text: "tutti.genericFormatImport.field.overrideData"; + selected: {model.isOverrideData()}; + toolTipText: "tutti.genericFormatImport.field.overrideData.tip"; + _help: {"tutti.genericFormatImport.field.overrideData.help"}; +} + +#validateButton { + actionIcon: validate; + text: "tutti.genericFormatImport.action.validate"; + toolTipText: "tutti.genericFormatImport.action.validate.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.validate.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.GenericFormatValidateAction.class}; + enabled: {model.isCanValidate()}; + _help: {"tutti.genericFormatImport.action.validate.help"}; +} + +#validateResultPanel { + visible: false; + _help: {"tutti.genericFormatImport.field.validateResult.help"}; +} + +#validateResultText { + _help: {"tutti.genericFormatImport.field.validateResult.help"}; +} + +#openValidateReportButton { + actionIcon: open-file; + toolTipText: "tutti.genericFormatImport.action.openValidateReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.OpenGenericFormatValidateReportAction.class}; + _help: {"tutti.genericFormatImport.action.openValidateReport.help"}; +} + +#saveValidateReportButton { + actionIcon: save; + toolTipText: "tutti.genericFormatImport.action.saveValidateReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.SaveGenericFormatValidateReportAction.class}; + _help: {"tutti.genericFormatValidate.action.saveValidateReport.help"}; +} + +#importPanel { + border: {BorderFactory.createTitledBorder(t("tutti.genericFormatImport.import.legend"))}; + visible: {model.isValidateDone() && model.isValidateValid()}; +} + +#cleanWeightsCheckBox { + text: "tutti.genericFormatImport.field.cleanWeights"; + selected: {model.isCleanWeights()}; + toolTipText: "tutti.genericFormatImport.field.cleanWeights.tip"; + _help: {"tutti.genericFormatImport.field.cleanWeights.help"}; +} + +#checkWeightsCheckBox { + text: "tutti.genericFormatImport.field.checkWeights"; + selected: {model.isCheckWeights()}; + toolTipText: "tutti.genericFormatImport.field.checkWeights.tip"; + _help: {"tutti.genericFormatImport.field.checkWeights.help"}; +} + +#importButton { + actionIcon: import; + text: "tutti.genericFormatImport.action.import"; + toolTipText: "tutti.genericFormatImport.action.import.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.import.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.GenericFormatImportAction.class}; + enabled: {model.isCanImport()}; + _help: {"tutti.genericFormatImport.action.import.help"}; +} + +#importResultPanel { + visible: false; + _help: {"tutti.genericFormatImport.field.importResult.help"}; +} + +#importResultText { + _help: {"tutti.genericFormatImport.field.importResult.help"}; +} + +#openImportReportButton { + actionIcon: open-file; + toolTipText: "tutti.genericFormatImport.action.openImportReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.OpenGenericFormatImportReportAction.class}; + _help: {"tutti.genericFormatImport.action.openImportReport.help"}; +} + +#saveImportReportButton { + actionIcon: save; + toolTipText: "tutti.genericFormatImport.action.saveImportReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.genericformat.actions.SaveGenericFormatImportReportAction.class}; + _help: {"tutti.genericFormatImport.action.saveImportReport.help"}; +} + +#closeButton { + actionIcon: cancel; + text: "tutti.genericFormatImport.action.closeGenericFormatImport"; + toolTipText: "tutti.genericFormatImport.action.closeGenericFormatImport.tip"; + i18nMnemonic: "tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.SelectCruiseAction.class}; + _help: {"tutti.genericFormatImport.action.closeGenericFormatImport.help"}; +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx new file mode 100644 index 0000000..1a3ebc0 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUI.jaxx @@ -0,0 +1,156 @@ +<!-- + #%L + Tutti :: UI + %% + Copyright (C) 2012 - 2014 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='genericFormatImportTopPanel' layout='{new BorderLayout()}' decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<GenericFormatImportUIModel, GenericFormatImportUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.data.Program + + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + jaxx.runtime.swing.editor.FileEditor + + static org.nuiton.i18n.I18n.t + static jaxx.runtime.SwingUtil.getStringValue + </import> + + <script><![CDATA[ + + public GenericFormatImportUI(TuttiUI parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); + } + ]]></script> + + <GenericFormatImportUIModel id='model' initializer='getContextValue(GenericFormatImportUIModel.class)'/> + + <TuttiHelpBroker id='broker' constructorParams='"tutti.genericFormatimport.help"'/> + + <BeanValidator id='validator' bean='model' context='edit' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='program' component='programComboBox'/> + <field name='importFile' component='importFile'/> + </BeanValidator> + + <Table id='validateFilePanel' fill='both' constraints='BorderLayout.NORTH'> + + <!-- program --> + <row> + <cell> + <JLabel id='programLabel'/> + </cell> + <cell> + <BeanFilterableComboBox id='programComboBox' constructorParams='this' genericType='Program'/> + </cell> + </row> + + <!-- Import file --> + <row> + <cell anchor='west'> + <JLabel id='importFileLabel'/> + </cell> + <cell fill='both' weightx='1'> + <FileEditor id='importFile' onActionPerformed='handler.setFile(event, "importFile")'/> + </cell> + </row> + + <!-- Import options --> + <row> + <cell fill='both' columns="2"> + <JPanel layout='{new GridLayout(0, 1)}'> + <JCheckBox id='overrideDataCheckBox' onItemStateChanged='handler.setBoolean(event, "overrideData")'/> + </JPanel> + </cell> + </row> + + <!-- validate action --> + <row> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='validateButton'/> + </JPanel> + </cell> + </row> + + <!-- Validate result --> + <row> + <cell columns='2'> + <JPanel id='validateResultPanel' layout='{new BorderLayout()}'> + <JLabel id='validateResultText' constraints='BorderLayout.WEST'/> + <JToolBar constraints='BorderLayout.EAST'> + <JButton id='openValidateReportButton'/> + <JButton id='saveValidateReportButton'/> + </JToolBar> + </JPanel> + </cell> + </row> + + </Table> + + <Table id='importPanel' fill='both' constraints='BorderLayout.CENTER'> + + <!-- Import options --> + <row fill='both'> + <cell fill='both' columns="2"> + <JPanel layout='{new GridLayout(0, 1)}'> + <JCheckBox id='cleanWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "cleanWeights")'/> + <JCheckBox id='checkWeightsCheckBox' onItemStateChanged='handler.setBoolean(event, "checkWeights")'/> + </JPanel> + </cell> + </row> + + <!-- Import actions --> + <row anchor='south'> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='importButton'/> + </JPanel> + </cell> + </row> + + <!-- import result --> + <row> + <cell columns='2'> + <JPanel id='importResultPanel' layout='{new BorderLayout()}'> + <JLabel id='importResultText' constraints='BorderLayout.WEST'/> + <JToolBar constraints='BorderLayout.EAST'> + <JButton id='openImportReportButton'/> + <JButton id='saveImportReportButton'/> + </JToolBar> + </JPanel> + </cell> + </row> + + </Table> + + <Table fill='both' constraints='BorderLayout.SOUTH'> + <row> + <cell fill='both' weightx="1"> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='closeButton'/> + </JPanel> + </cell> + </row> + </Table> + +</JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java new file mode 100644 index 0000000..90eda64 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIHandler.java @@ -0,0 +1,135 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.swing.util.CloseableUI; + +import javax.swing.JComponent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Set; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<GenericFormatImportUIModel, GenericFormatImportUI> implements CloseableUI { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatImportUIHandler.class); + + @Override + public void beforeInit(GenericFormatImportUI ui) { + + super.beforeInit(ui); + + getDataContext().resetValidationDataContext(); + + GenericFormatImportUIModel model = new GenericFormatImportUIModel(); + + if (getContext().isProgramFilled()) { + + String programId = getContext().getProgramId(); + + if (log.isInfoEnabled()) { + log.info("Using selected program " + programId); + } + // load existing program + Program program = getPersistenceService().getProgram(programId); + + model.setProgram(program); + } + + ui.setContextValue(model); + + model.addPropertyChangeListener(new PropertyChangeListener() { + + final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); + + final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE, GenericFormatImportUIModel.PROPERTY_PROGRAM, GenericFormatImportUIModel.PROPERTY_OVERRIDE_DATA); + + @Override + public void propertyChange(PropertyChangeEvent evt) { + GenericFormatImportUIModel source = (GenericFormatImportUIModel) evt.getSource(); + String propertyName = evt.getPropertyName(); + + if (propertyNamesToCanValidate.contains(propertyName)) { + + boolean canValidate = source.computeIsCanValidate(); + source.setCanValidate(canValidate); + + } + + if (propertyNamesToCanImport.contains(propertyName)) { + + boolean canImport = source.computeIsCanImport(); + source.setCanImport(canImport); + + } + + if (GenericFormatImportUIModel.PROPERTY_CAN_VALIDATE.equals(propertyName)) { + + if (!(boolean) evt.getNewValue()) { + getUI().getValidateResultPanel().setVisible(false); + } + } + + if (GenericFormatImportUIModel.PROPERTY_CAN_IMPORT.equals(propertyName)) { + + if (!(boolean) evt.getNewValue()) { + getUI().getImportResultPanel().setVisible(false); + } + } + + } + }); + + } + + @Override + public void afterInit(GenericFormatImportUI ui) { + + initUI(ui); + + GenericFormatImportUIModel model = getModel(); + initBeanFilterableComboBox(ui.getProgramComboBox(), + Lists.newArrayList(getPersistenceService().getAllProgram()), + model.getProgram()); + + SwingValidator validator = ui.getValidator(); + + registerValidators(validator); + + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getProgramComboBox(); + } + + @Override + public void onCloseUI() { + if (log.isDebugEnabled()) { + log.debug("closing: " + ui); + } + clearValidators(); + } + + @Override + public boolean quitUI() { + return true; + } + + @Override + public SwingValidator<GenericFormatImportUIModel> getValidator() { + return ui.getValidator(); + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java new file mode 100644 index 0000000..9654271 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/GenericFormatImportUIModel.java @@ -0,0 +1,234 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.io.File; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportUIModel extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_PROGRAM = "program"; + + public static final String PROPERTY_IMPORT_FILE = "importFile"; + + public static final String PROPERTY_BACKUP_FILE = "backupFile"; + + public static final String PROPERTY_CLEAN_WEIGHTS = "cleanWeights"; + + public static final String PROPERTY_CHECK_WEIGHTS = "checkWeights"; + + public static final String PROPERTY_OVERRIDE_DATA = "overrideData"; + + public static final String PROPERTY_CAN_VALIDATE = "canValidate"; + + public static final String PROPERTY_VALIDATE_RESULT = "validateResult"; + + public static final String PROPERTY_VALIDATE_VALID = "validateValid"; + + public static final String PROPERTY_VALIDATE_DONE = "validateDone"; + + public static final String PROPERTY_CAN_IMPORT = "canImport"; + + public static final String PROPERTY_IMPORT_RESULT = "importResult"; + + public static final String PROPERTY_IMPORT_DONE = "importDone"; + + public static final String PROPERTY_IMPORT_VALID = "importValid"; + + private Program program; + + private File importFile; + + private boolean cleanWeights; + + private boolean checkWeights; + + private boolean overrideData; + + private boolean canValidate; + + private File validateReportFile; + + private GenericFormatValidateFileResult validateResult; + + private boolean canImport; + + private File importReportFile; + + private GenericFormatImportResult importResult; + + public GenericFormatImportConfiguration toValidateImportFileConfiguration() { + + GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + + configuration.setCleanWeights(cleanWeights); + configuration.setCheckWeights(checkWeights); + configuration.setOverrideData(overrideData); + configuration.setImportFile(importFile); + configuration.setReportFile(validateReportFile); + configuration.setProgramId(program.getId()); + + return configuration; + + } + + public GenericFormatImportConfiguration toImportConfiguration() { + + GenericFormatImportConfiguration configuration = new GenericFormatImportConfiguration(); + + configuration.setCleanWeights(cleanWeights); + configuration.setCheckWeights(checkWeights); + configuration.setOverrideData(overrideData); + configuration.setImportFile(importFile); + configuration.setReportFile(importReportFile); + configuration.setProgramId(program.getId()); + + return configuration; + + } + + public Program getProgram() { + return program; + } + + public void setProgram(Program program) { + Object oldValue = getProgram(); + this.program = program; + firePropertyChange(PROPERTY_PROGRAM, oldValue, program); + } + + public File getImportFile() { + return importFile; + } + + public void setImportFile(File importFile) { + Object oldValue = getImportFile(); + this.importFile = importFile; + firePropertyChange(PROPERTY_IMPORT_FILE, oldValue, importFile); + firePropertyChange(PROPERTY_VALIDATE_VALID, null, isValidateValid()); + } + + public boolean isCleanWeights() { + return cleanWeights; + } + + public void setCleanWeights(boolean cleanWeights) { + this.cleanWeights = cleanWeights; + firePropertyChange(PROPERTY_CLEAN_WEIGHTS, null, cleanWeights); + } + + public boolean isCheckWeights() { + return checkWeights; + } + + public void setCheckWeights(boolean checkWeights) { + this.checkWeights = checkWeights; + firePropertyChange(PROPERTY_CHECK_WEIGHTS, null, checkWeights); + } + + public boolean isOverrideData() { + return overrideData; + } + + public void setOverrideData(boolean overrideData) { + this.overrideData = overrideData; + firePropertyChange(PROPERTY_OVERRIDE_DATA, null, overrideData); + } + + public File getValidateReportFile() { + return validateReportFile; + } + + public void setValidateReportFile(File validateReportFile) { + this.validateReportFile = validateReportFile; + } + + public boolean isCanValidate() { + return canValidate; + } + + public void setCanValidate(boolean canValidate) { + this.canValidate = canValidate; + firePropertyChange(PROPERTY_CAN_VALIDATE, null, canValidate); + } + + public GenericFormatValidateFileResult getValidateResult() { + return validateResult; + } + + public void setValidateResult(GenericFormatValidateFileResult validateResult) { + this.validateResult = validateResult; + firePropertyChange(PROPERTY_VALIDATE_RESULT, null, validateResult); + firePropertyChange(PROPERTY_VALIDATE_DONE, null, isValidateDone()); + firePropertyChange(PROPERTY_VALIDATE_VALID, null, isValidateValid()); + } + + public boolean isValidateDone() { + return validateResult != null; + } + + public boolean isValidateValid() { + return validateResult != null && validateResult.isValid(); + } + + public boolean isCanImport() { + return canImport; + } + + public void setCanImport(boolean canImport) { + this.canImport = canImport; + firePropertyChange(PROPERTY_CAN_IMPORT, null, canImport); + } + + public File getImportReportFile() { + return importReportFile; + } + + public void setImportReportFile(File importReportFile) { + this.importReportFile = importReportFile; + } + + public GenericFormatImportResult getImportResult() { + return importResult; + } + + public void setImportResult(GenericFormatImportResult importResult) { + this.importResult = importResult; + firePropertyChange(PROPERTY_IMPORT_RESULT, null, importResult); + firePropertyChange(PROPERTY_IMPORT_DONE, null, isImportDone()); + firePropertyChange(PROPERTY_IMPORT_VALID, null, isImportValid()); + } + + public boolean isImportDone() { + return importResult != null; + } + + public boolean isImportValid() { + return importResult != null && importResult.isValid(); + } + + + public boolean computeIsCanValidate() { + + return canValidate = program != null && importFile != null && importFile.exists(); + + } + + public boolean computeIsCanImport() { + + return isValidateDone() && isValidateValid(); + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java new file mode 100644 index 0000000..7584ebc --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatImportAction.java @@ -0,0 +1,186 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportResult; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.Icon; +import javax.swing.JLabel; +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatImportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatImportAction.class); + + public static final DateFormat df = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File backupFile; + + private GenericFormatImportResult importResult; + + public GenericFormatImportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().isCanValidate(); + + } + + // Do a backup before import + + if (doAction) { + + // choose file to export + backupFile = saveFileWithStartDirectory( + getConfig().getDbBackupDirectory(), + false, + "tutti-db-" + df.format(new Date()), + t("tutti.genericFormat.title.choose.dbBackupFile"), + t("tutti.genericFormat.action.chooseDbBackupFile"), + "^.+\\.zip$", t("tutti.common.file.zip") + ); + + if (backupFile == null) { + + displayWarningMessage( + t("tutti.dbManager.title.backup.db"), + t("tutti.dbManager.action.importdb.no.backup.db.choosen") + ); + + doAction = false; + } + + } + + if (doAction) { + + // Remove any previous import result + updateResult(null); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + getModel().setImportReportFile(getConfig().newTempFile("genericFormatImportReport", "pdf")); + + GenericFormatImportConfiguration configuration = getModel().toImportConfiguration(); + + GenericFormatImportService service = getContext().getGenericFormatImportService(); + + int nbSteps = 3 + service.getImportProgramNbSteps(configuration); + + if (log.isInfoEnabled()) { + log.info("Import nb steps: " + nbSteps); + } + createProgressionModelIfRequired(nbSteps); + + // close db + getProgressionModel().increments(t("tutti.genericFormatImport.step.closeDb")); + getContext().closePersistenceService(); + + // backup db + getProgressionModel().increments(t("tutti.genericFormatImport.step.backupDb", backupFile)); + getContext().getPersistenceService().exportDb(backupFile); + + // reopen db + getProgressionModel().increments(t("tutti.genericFormatImport.step.reopenDb", backupFile)); + getContext().openPersistenceService(); + + Program program = getModel().getProgram(); + + File importFile = getModel().getImportFile(); + + if (log.isInfoEnabled()) { + log.info("Do generic format import for program: " + program.getName() + " from file: " + importFile); + } + + importResult = service.importProgram(configuration, getProgressionModel()); + + } + + @Override + public void postSuccessAction() { + + updateResult(importResult); + + } + + @Override + public void releaseAction() { + backupFile = null; + importResult = null; + super.releaseAction(); + } + + protected void updateResult(GenericFormatImportResult result) { + + getModel().setImportResult(result); + + if (result == null) { + + // result removed + getUI().getImportResultPanel().setVisible(false); + + } else { + + // result added + getUI().getImportResultPanel().setVisible(true); + + Icon icon; + String text; + String tip; + if (result.isValid()) { + + icon = SwingUtil.createActionIcon("accept"); + text = t("tutti.genericFormat.import.success"); + tip = t("tutti.genericFormat.import.success.tip"); + + } else { + + icon = SwingUtil.createActionIcon("cancel"); + text = t("tutti.genericFormat.import.error"); + tip = t("tutti.genericFormat.import.error.tip"); + + } + + JLabel resultText = getUI().getImportResultText(); + resultText.setIcon(icon); + resultText.setText(text); + resultText.setToolTipText(tip); + + } + + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java new file mode 100644 index 0000000..5281eb4 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/GenericFormatValidateAction.java @@ -0,0 +1,138 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportConfiguration; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportService; +import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult; +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.Icon; +import javax.swing.JLabel; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatValidateAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(GenericFormatValidateAction.class); + + GenericFormatValidateFileResult validateFileResult; + + public GenericFormatValidateAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().isCanValidate(); + + } + + if (doAction) { + + // Remove any previous validate result + updateResult(null); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + getModel().setValidateReportFile(getConfig().newTempFile("genericFormatValidateReport", "pdf")); + + GenericFormatImportConfiguration configuration = getModel().toValidateImportFileConfiguration(); + + GenericFormatImportService service = getContext().getGenericFormatImportService(); + + int nbSteps = service.getValidateImportFileNbSteps(configuration); + + if (log.isInfoEnabled()) { + log.info("validate import file nb steps: " + nbSteps); + } + createProgressionModelIfRequired(nbSteps); + + Program program = getModel().getProgram(); + + if (log.isInfoEnabled()) { + log.info("Validate generic format import file for program: " + program.getName() + " from file: " + configuration.getImportFile()); + } + + validateFileResult = service.validateImportFile(configuration, getProgressionModel()); + + } + + @Override + public void postSuccessAction() { + + updateResult(validateFileResult); + + } + + @Override + protected void releaseAction() { + validateFileResult = null; + super.releaseAction(); + } + + protected void updateResult(GenericFormatValidateFileResult result) { + + getModel().setValidateResult(result); + + if (result == null) { + + // result removed + getUI().getValidateResultPanel().setVisible(false); + + } else { + + // result added + getUI().getValidateResultPanel().setVisible(true); + + Icon icon; + String text; + String tip; + if (result.isValid()) { + + icon = SwingUtil.createActionIcon("accept"); + text = t("tutti.genericFormat.validate.success"); + tip = t("tutti.genericFormat.validate.success.tip"); + + } else { + + icon = SwingUtil.createActionIcon("cancel"); + text = t("tutti.genericFormat.validate.error"); + tip = t("tutti.genericFormat.validate.error.tip"); + + } + + JLabel resultText = getUI().getValidateResultText(); + resultText.setIcon(icon); + resultText.setText(text); + resultText.setToolTipText(tip); + + } + + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java new file mode 100644 index 0000000..a136c51 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatImportReportAction.java @@ -0,0 +1,55 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + +import java.awt.Desktop; +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatImportReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + public OpenGenericFormatImportReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getImportReportFile() != null && getModel().getImportReportFile().exists(); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + Desktop desktop = TuttiUIUtil.getDesktopForBrowse(); + try { + + desktop.browse(getModel().getImportReportFile().toURI()); + + } catch (IOException e) { + getContext().getErrorHelper().showErrorDialog(t("swing.error.cannot.open.file")); + } + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java new file mode 100644 index 0000000..d704030 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/OpenGenericFormatValidateReportAction.java @@ -0,0 +1,55 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + +import java.awt.Desktop; +import java.io.IOException; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/24/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class OpenGenericFormatValidateReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + public OpenGenericFormatValidateReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getValidateReportFile() != null && getModel().getValidateReportFile().exists(); + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + Desktop desktop = TuttiUIUtil.getDesktopForBrowse(); + try { + + desktop.browse(getModel().getValidateReportFile().toURI()); + + } catch (IOException e) { + getContext().getErrorHelper().showErrorDialog(t("swing.error.cannot.open.file")); + } + + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java new file mode 100644 index 0000000..813f715 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatImportReportAction.java @@ -0,0 +1,78 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import org.nuiton.jaxx.application.ApplicationIOUtil; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class SaveGenericFormatImportReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + private static final DateFormat DF = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File targetFile; + + public SaveGenericFormatImportReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getImportReportFile() != null && getModel().getImportReportFile().exists(); + + } + + if (doAction) { + + targetFile = saveFileWithStartDirectory( + getConfig().getGenericFormatReportBackupDirectory(), + false, + "import-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), + "zip", + t("tutti.genericFormat.title.choose.saveImportReportfile"), + t("tutti.genericFormat.action.chooseImportReportFile"), + "^.+\\.zip$", t("tutti.common.file.zip")); + + doAction = targetFile != null; + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + File reportFile = getModel().getImportReportFile(); + ApplicationIOUtil.copyFile(reportFile, targetFile, t("tutti.io.error.copyFile")); + sendMessage(t("tutti.genericFormat.importReportFile.saved", targetFile)); + + } + + @Override + protected void releaseAction() { + + targetFile = null; + super.releaseAction(); + + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java new file mode 100644 index 0000000..fdbe4b4 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/genericformat/actions/SaveGenericFormatValidateReportAction.java @@ -0,0 +1,78 @@ +package fr.ifremer.tutti.ui.swing.content.genericformat.actions; + +import fr.ifremer.tutti.ui.swing.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUI; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIHandler; +import fr.ifremer.tutti.ui.swing.content.genericformat.GenericFormatImportUIModel; +import org.nuiton.jaxx.application.ApplicationIOUtil; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class SaveGenericFormatValidateReportAction extends AbstractTuttiAction<GenericFormatImportUIModel, GenericFormatImportUI, GenericFormatImportUIHandler> { + + private static final DateFormat DF = new SimpleDateFormat("yyy-MM-dd-hh-mm"); + + private File targetFile; + + public SaveGenericFormatValidateReportAction(GenericFormatImportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + doAction = getModel().getValidateReportFile() != null && getModel().getValidateReportFile().exists(); + + } + + if (doAction) { + + targetFile = saveFileWithStartDirectory( + getConfig().getGenericFormatReportBackupDirectory(), + false, + "validate-report-" + getModel().getProgram().getId() + "-" + DF.format(new Date()), + "zip", + t("tutti.genericFormat.title.choose.saveValidateReportfile"), + t("tutti.genericFormat.action.chooseValidateReportFile"), + "^.+\\.zip$", t("tutti.common.file.zip")); + + doAction = targetFile != null; + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + File reportFile = getModel().getValidateReportFile(); + ApplicationIOUtil.copyFile(reportFile, targetFile, t("tutti.io.error.copyFile")); + sendMessage(t("tutti.genericFormat.validateReportFile.saved", targetFile)); + + } + + @Override + protected void releaseAction() { + + targetFile = null; + super.releaseAction(); + + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css index f6d18d1..21d27ec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css @@ -80,7 +80,7 @@ BeanFilterableComboBox { #importProgramButton { actionIcon: import; text: "tutti.selectCruise.action.importProgram"; - _applicationAction: {fr.ifremer.tutti.ui.swing.action.ImportGenericFormatProgramCruisesAction.class}; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.OpenGenericFormatImportScreen.class}; toolTipText: "tutti.selectCruise.action.importProgram.tip"; _help: {"tutti.selectCruise.action.importProgram.help"}; } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 49fc205..f01a330 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -142,6 +142,7 @@ tutti.config.option.persistence.db.enumerationPath.shortLabel= tutti.config.option.persistence.db.protocol.directory.shortLabel= tutti.config.option.persistence.jdbc.url.shortLabel= tutti.config.option.service.export.backup.directory.shortLabel= +tutti.config.option.service.genericFormat.export.backup.directory.shortLabel= tutti.config.option.service.report.backup.directory.shortLabel= tutti.config.option.service.report.directory.shortLabel= tutti.config.option.service.report.log.directory.shortLabel= @@ -1404,6 +1405,87 @@ tutti.gearUseFeatureTable.action.removeCaracteristic.tip= tutti.gearUseFeatureTable.table.header.key= tutti.gearUseFeatureTable.table.header.value= tutti.gearUseFeatureTable.title= +tutti.genericFormat.action.chooseDbBackupFile= +tutti.genericFormat.action.chooseImportReportFile= +tutti.genericFormat.action.chooseValidateReportFile= +tutti.genericFormat.import.error= +tutti.genericFormat.import.error.tip= +tutti.genericFormat.import.success= +tutti.genericFormat.import.success.tip= +tutti.genericFormat.importReportFile.saved= +tutti.genericFormat.title.choose.dbBackupFile= +tutti.genericFormat.title.choose.exportImportReportfile= +tutti.genericFormat.title.choose.exportValidateReportfile= +tutti.genericFormat.title.choose.saveImportReportfile= +tutti.genericFormat.title.choose.saveValidateReportfile= +tutti.genericFormat.validate.error= +tutti.genericFormat.validate.error.tip= +tutti.genericFormat.validate.success= +tutti.genericFormat.validate.success.tip= +tutti.genericFormat.validateReportFile.saved= +tutti.genericFormatImport.action.closeGenericFormatImport= +tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic= +tutti.genericFormatImport.action.closeGenericFormatImport.tip= +tutti.genericFormatImport.action.error= +tutti.genericFormatImport.action.generateReport= +tutti.genericFormatImport.action.generateReport.mnemonic= +tutti.genericFormatImport.action.generateReport.tip= +tutti.genericFormatImport.action.import= +tutti.genericFormatImport.action.import.mnemonic= +tutti.genericFormatImport.action.import.tip= +tutti.genericFormatImport.action.importErrors= +tutti.genericFormatImport.action.openImportReport= +tutti.genericFormatImport.action.openImportReport.mnemonic= +tutti.genericFormatImport.action.openImportReport.tip= +tutti.genericFormatImport.action.openValidateReport= +tutti.genericFormatImport.action.openValidateReport.mnemonic= +tutti.genericFormatImport.action.openValidateReport.tip= +tutti.genericFormatImport.action.saveImportReport.tip= +tutti.genericFormatImport.action.saveValidateReport.tip= +tutti.genericFormatImport.action.showReport= +tutti.genericFormatImport.action.showReport.mnemonic= +tutti.genericFormatImport.action.showReport.tip= +tutti.genericFormatImport.action.success= +tutti.genericFormatImport.action.validate= +tutti.genericFormatImport.action.validate.mnemonic= +tutti.genericFormatImport.action.validate.tip= +tutti.genericFormatImport.action.validateImportFile= +tutti.genericFormatImport.action.validateImportFile.mnemonic= +tutti.genericFormatImport.action.validateImportFile.tip= +tutti.genericFormatImport.backupFile.extension= +tutti.genericFormatImport.backupFile.extension.description= +tutti.genericFormatImport.field.backupFile= +tutti.genericFormatImport.field.backupFile.tip= +tutti.genericFormatImport.field.checkWeights= +tutti.genericFormatImport.field.checkWeights.tip= +tutti.genericFormatImport.field.cleanWeights= +tutti.genericFormatImport.field.cleanWeights.tip= +tutti.genericFormatImport.field.importFile= +tutti.genericFormatImport.field.importFile.tip= +tutti.genericFormatImport.field.overrideData= +tutti.genericFormatImport.field.overrideData.tip= +tutti.genericFormatImport.field.program= +tutti.genericFormatImport.field.program.tip= +tutti.genericFormatImport.field.reportFile= +tutti.genericFormatImport.field.reportFile.tip= +tutti.genericFormatImport.import.legend= +tutti.genericFormatImport.importConfiguration.legend= +tutti.genericFormatImport.importFile.extension= +tutti.genericFormatImport.importFile.extension.description= +tutti.genericFormatImport.importResult.description= +tutti.genericFormatImport.importResult.description.tip= +tutti.genericFormatImport.importResult.legend= +tutti.genericFormatImport.reportConfiguration.legend= +tutti.genericFormatImport.reportFile.extension= +tutti.genericFormatImport.reportFile.extension.description= +tutti.genericFormatImport.step.backupDb= +tutti.genericFormatImport.step.closeDb= +tutti.genericFormatImport.step.reopenDb= +tutti.genericFormatImport.title= +tutti.genericFormatImport.validateImport.legend= +tutti.genericFormatImport.validationResult.description= +tutti.genericFormatImport.validationResult.description.tip= +tutti.genericFormatImport.validationResult.legend= tutti.help.mkDir.error= tutti.i18n.deleteCache.error= tutti.i18n.mkDir.error= @@ -1440,6 +1522,7 @@ tutti.importPupitri.field.trunkFile= tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= +tutti.io.error.copyFile= tutti.label.tab.accidental= tutti.label.tab.benthos= tutti.label.tab.catches= @@ -1493,6 +1576,9 @@ tutti.main.action.exit.tip= tutti.main.action.generateSelectedCruiseReport= tutti.main.action.generateSelectedCruiseReport.mnemonic= tutti.main.action.generateSelectedCruiseReport.tip= +tutti.main.action.genericFormatImport= +tutti.main.action.genericFormatImport.mnemonic= +tutti.main.action.genericFormatImport.tip= tutti.main.action.goto.previousScreen.tip= tutti.main.action.importTemporaryReferential= tutti.main.action.importTemporaryReferential.mnemonic= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 144bca3..5611602 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -124,6 +124,7 @@ tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fic tutti.config.option.persistence.db.protocol.directory.shortLabel=Répertoire des protocoles tutti.config.option.persistence.jdbc.url.shortLabel=Url jdbc de connexion tutti.config.option.service.export.backup.directory.shortLabel=Répertoire des sauvegardes d'export générique +tutti.config.option.service.genericFormat.export.backup.directory.shortLabel=Répertoire des sauvegardes de rapport d'import générique tutti.config.option.service.report.backup.directory.shortLabel=Répertoire des sauvegardes de rapport tutti.config.option.service.report.directory.shortLabel=Répertoire des modèles de rapport tutti.config.option.service.report.log.directory.shortLabel=Répertoire des log de génération des rapports @@ -1348,6 +1349,79 @@ tutti.gearUseFeatureTable.action.removeCaracteristic.tip=Supprimer la caractéri tutti.gearUseFeatureTable.table.header.key=Caractéristique tutti.gearUseFeatureTable.table.header.value=Valeur tutti.gearUseFeatureTable.title=Mise en œuvre de l'engin +tutti.genericFormat.action.chooseDbBackupFile=Sauvegarder la base de données +tutti.genericFormat.action.chooseImportReportFile=Enregistrer +tutti.genericFormat.action.chooseValidateReportFile=Enregistrer +tutti.genericFormat.import.error=Des erreurs ont été détectées lors de l'import +tutti.genericFormat.import.error.tip=Vous pouvez consulter le rapport d'import pour les corriger +tutti.genericFormat.import.success=L'import s'est déroulé avec succès +tutti.genericFormat.import.success.tip=Vous pouvez consulter le rapport d'import (%s) +tutti.genericFormat.importReportFile.saved=Le rapport d'import a été enregistré <strong>%s</strong> +tutti.genericFormat.title.choose.dbBackupFile=Sauvegarder la base de données +tutti.genericFormat.title.choose.saveImportReportfile=Enregisrer le rapport d'import +tutti.genericFormat.title.choose.saveValidateReportfile=Enregisrer le rapport de validation +tutti.genericFormat.validate.error=Des erreurs ont été détectées lors de la validation +tutti.genericFormat.validate.error.tip=Vous pouvez consulter le rapport de validation pour les corriger +tutti.genericFormat.validate.success=La validation s'est déroulée avec succès +tutti.genericFormat.validate.success.tip=Vous pouvez consulter le rapport de validation (%s) +tutti.genericFormat.validateReportFile.saved=Le rapport de validation a été enregistré <strong>%s</strong> +tutti.genericFormatImport..extension=zip +tutti.genericFormatImport..extension.description=Archive d'import générique (.zip) +tutti.genericFormatImport.action.closeGenericFormatImport=Quitter +tutti.genericFormatImport.action.closeGenericFormatImport.mnemonic=Q +tutti.genericFormatImport.action.closeGenericFormatImport.tip=Quitter +tutti.genericFormatImport.action.error=L'import depuis le fichier <strong>%s</strong> a échoué. +tutti.genericFormatImport.action.generateReport=Générer le rapport +tutti.genericFormatImport.action.generateReport.mnemonic=G +tutti.genericFormatImport.action.generateReport.tip=Générer le rapport de l'import +tutti.genericFormatImport.action.import=Importer +tutti.genericFormatImport.action.import.mnemonic=I +tutti.genericFormatImport.action.import.tip=Lancer l'import générique +tutti.genericFormatImport.action.importErrors= +tutti.genericFormatImport.action.openImportReport.tip=Ouvrir le rapport d'import +tutti.genericFormatImport.action.openValidateReport.tip=Ouvrir le rapport de validation +tutti.genericFormatImport.action.saveImportReport.tip=Enregistrer le rapport d'import +tutti.genericFormatImport.action.saveValidateReport.tip=Enregistrer le rapport de validation +tutti.genericFormatImport.action.showReport=Visualiser +tutti.genericFormatImport.action.showReport.mnemonic=V +tutti.genericFormatImport.action.showReport.tip=Visualiser le rapport +tutti.genericFormatImport.action.success=L'import depuis le fichier <strong>%s</strong> s'est bien déroulé. +tutti.genericFormatImport.action.validate=Valider l'import +tutti.genericFormatImport.action.validate.mnemonic=V +tutti.genericFormatImport.action.validate.tip=Valider l'archive d'import +tutti.genericFormatImport.backupFile.extension=zip +tutti.genericFormatImport.backupFile.extension.description=Sauvegarde de la base (.zip) +tutti.genericFormatImport.field.backupFile=Fichier de sauvegarde +tutti.genericFormatImport.field.backupFile.tip=Fichier de sauvegarde de la base avant import +tutti.genericFormatImport.field.checkWeights=Vérifier les poids (élévation) +tutti.genericFormatImport.field.checkWeights.tip=Vérifier les poids via l'élévation des poids +tutti.genericFormatImport.field.cleanWeights=Supprimer les poids en double +tutti.genericFormatImport.field.cleanWeights.tip=Supprimer les poids en double +tutti.genericFormatImport.field.importFile=Fichier d'import +tutti.genericFormatImport.field.importFile.tip=Fichier d'import au format générique +tutti.genericFormatImport.field.overrideData=Autoriser l'écrasement des données +tutti.genericFormatImport.field.overrideData.tip=Autorise l'écrasement des données existantes +tutti.genericFormatImport.field.program=Série de campagne +tutti.genericFormatImport.field.program.tip=Série de campagne où importer les campagne +tutti.genericFormatImport.field.reportFile=Rapport +tutti.genericFormatImport.field.reportFile.tip=Chemin du fichier de rapport +tutti.genericFormatImport.import.legend=Import +tutti.genericFormatImport.importFile.extension=zip +tutti.genericFormatImport.importFile.extension.description=Import générique (.zip) +tutti.genericFormatImport.importReportFile.extension=pdf +tutti.genericFormatImport.importReportFile.extension.description=Rapport d'import (.pdf) +tutti.genericFormatImport.importResult.description=Résultats +tutti.genericFormatImport.importResult.description.tip=Résultat de l'import +tutti.genericFormatImport.importResult.legend=Résultats de l'import +tutti.genericFormatImport.step.backupDb=Sauvegarde de la base de données (<strong>%s</strong>) +tutti.genericFormatImport.step.closeDb=Fermeture de la base de données avant la sauvegarde +tutti.genericFormatImport.step.reopenDb=Réouverture de la base de données +tutti.genericFormatImport.title=Import générique +tutti.genericFormatImport.validateImport.legend=Préparation de l'import +tutti.genericFormatImport.validateReportFile.extension=pdf +tutti.genericFormatImport.validateReportFile.extension.description=Rapport de validation (.pdf) +tutti.genericFormatImport.validationResult.description=Résultat de la validation +tutti.genericFormatImport.validationResult.description.tip=Résultat de la validation tutti.help.mkDir.error=Erreur à la création du dossier d'aide tutti.i18n.deleteCache.error=Erreur à la suppression du cache de l'internationalisation tutti.i18n.mkDir.error=Erreur à la création du dossier d'internationalisation @@ -1381,6 +1455,7 @@ tutti.importPupitri.field.trunkFile=Fichier du trémie tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) +tutti.io.error.copyFile=Impossible de copier le fichier tutti.label.tab.accidental=Captures accidentelles tutti.label.tab.benthos=Benthos tutti.label.tab.catches=Captures @@ -1434,6 +1509,9 @@ tutti.main.action.exit.tip=Quitter l'application tutti.main.action.generateSelectedCruiseReport=Rapport tutti.main.action.generateSelectedCruiseReport.mnemonic=R tutti.main.action.generateSelectedCruiseReport.tip=Générer des rapports +tutti.main.action.genericFormatImport=Import générique +tutti.main.action.genericFormatImport.mnemonic=BirtSample +tutti.main.action.genericFormatImport.tip=Importer des campagnes au format générique tutti.main.action.goto.previousScreen.tip=Retour à l'écran précédent tutti.main.action.importTemporaryReferential=Référentiels temporaires tutti.main.action.importTemporaryReferential.mnemonic=R @@ -1765,9 +1843,8 @@ tutti.splitSpeciesBatch.table.header.category=Catégorie tutti.splitSpeciesBatch.table.header.selected=Sélection tutti.splitSpeciesBatch.table.header.weight=Poids tutti.splitSpeciesBatch.title=Catégorisation du lot -tutti.title.openReplaceTecmporaryUI.noTarget=Pas de référentiel officiel de type %s dans la base tutti.title.openReplaceTemporaryUI.noSource=Pas de référentiel temporaire de type %s dans la base -tutti.title.openReplaceTemporaryUI.noTarget= +tutti.title.openReplaceTemporaryUI.noTarget=Pas de référentiel officiel de type %s dans la base tutti.toolbar.menu.action=Actions tutti.toolbar.menu.action.mnemonic=A tutti.toolbar.menu.action.tip=Actions possibles pour cet onglet -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.