This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit dba2541f66d4aee12c386d95555a75779e49048b Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 11 11:04:21 2015 +0100 utilisation nouveau service de generation de rapport + fixes #6589: [RAPPORT] inclure les identifiants du trait dans le nom du rapport généré (rapport Birt) --- tutti-report-generator/pom.xml | 2 +- .../service/report/ReportGenerationService.java | 6 +- .../filtered-resources/tutti-help-fr.properties | 25 ++++++ .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 3 +- .../tutti/ui/swing/content/report/ReportUI.css | 44 +++++----- .../tutti/ui/swing/content/report/ReportUI.jaxx | 28 ++----- .../ui/swing/content/report/ReportUIHandler.java | 63 +++++++------- .../ui/swing/content/report/ReportUIModel.java | 55 ++++++------ .../report/actions/GenerateReportAction.java | 27 ++++-- ...ShowReportAction.java => OpenReportAction.java} | 22 +++-- .../content/report/actions/SaveReportAction.java | 97 ++++++++++++++++++++++ .../report/ReportUIModel-error-validation.xml | 6 -- .../resources/i18n/tutti-ui-swing_en_GB.properties | 8 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 10 ++- 14 files changed, 256 insertions(+), 140 deletions(-) diff --git a/tutti-report-generator/pom.xml b/tutti-report-generator/pom.xml index dc9fbf8..44417b4 100644 --- a/tutti-report-generator/pom.xml +++ b/tutti-report-generator/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>fr.ifremer</groupId> <artifactId>tutti</artifactId> - <version>3.13-SNAPSHOT</version> + <version>3.15-SNAPSHOT</version> </parent> <groupId>fr.ifremer.tutti</groupId> diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportGenerationService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportGenerationService.java index 8d39977..3434bb8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportGenerationService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportGenerationService.java @@ -7,7 +7,7 @@ import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.export.generic.TuttiExportService; +import fr.ifremer.tutti.service.genericformat.GenericFormatExportService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.ApplicationTechnicalException; @@ -64,7 +64,7 @@ public class ReportGenerationService extends AbstractTuttiService { // export fishing operation progressionModel.increments(t("tutti.report.step.export.fishingOperation")); - File exportDirectory = getService(TuttiExportService.class). + File exportDirectory = getService(GenericFormatExportService.class). exportFishingOperation(request.getCruiseId(), request.getFishingOperationId()); @@ -137,7 +137,7 @@ public class ReportGenerationService extends AbstractTuttiService { File reportJarPath = config.getReportJarPath(); - Preconditions.checkState(reportJarPath!=null, "No reportJarPath configured!"); + Preconditions.checkState(reportJarPath != null, "No reportJarPath configured!"); List<String> command = new ArrayList<>(); 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 af81ad6..3e7f55a 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,3 +1,26 @@ +### +# #%L +# Tutti :: UI +# $Id:$ +# $HeadURL:$ +# %% +# Copyright (C) 2012 - 2015 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% +### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo #Sat Mar 07 10:47:12 CET 2015 tutti.config.help=config.html @@ -394,6 +417,8 @@ tutti.replaceTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.report.action.cancel.help=report.html\#actions tutti.report.action.chooseOutputFile.help=report.html\#actions tutti.report.action.generate.help=report.html\#actions +tutti.report.action.openReport.help= +tutti.report.action.save.help= tutti.report.action.showOutputFile.help=report.html\#actions tutti.report.field.fishingOperation.help=report.html\#fields tutti.report.field.outputFile.help=report.html\#fields diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 1f04ba6..c16bdb4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -85,7 +85,6 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.listener.PropagatePropertyChangeListener; import org.nuiton.jaxx.application.swing.ApplicationUIContext; import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; -import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.util.ApplicationErrorHelper; @@ -980,7 +979,7 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage } @Override - public ApplicationActionFactory getActionFactory() { + public TuttiActionFactory getActionFactory() { return tuttiActionFactory; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css index b1adf05..f12b2d7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css @@ -69,28 +69,6 @@ FileEditor { _help: {"tutti.report.field.fishingOperation.help"}; } -#outputFileLabel { - text: "tutti.report.field.outputFile"; - labelFor: {outputFileField}; - toolTipText: "tutti.report.field.outputFile.tip"; - _help: {"tutti.report.field.outputFile.help"}; -} - -#outputFileField { - selectedFile: {model.getOutputFile()}; - _validatorLabel: {t("tutti.report.field.outputFile")}; - _help: {"tutti.report.field.outputFile.help"}; -} - -#showOutputFileButton { - actionIcon: open-file; - toolTipText: "tutti.report.action.showOutputFile.tip"; - i18nMnemonic: "tutti.report.action.showOutputFile.mnemonic"; - _help: {"tutti.report.action.showOutputFile.help"}; - _simpleAction: {fr.ifremer.tutti.ui.swing.content.report.actions.ShowReportAction.class}; - enabled: {model.isOutputFileExists()}; -} - #closeButton { actionIcon: cancel; text: "tutti.report.action.cancel"; @@ -109,3 +87,25 @@ FileEditor { enabled: {model.isValid()}; _help: {"tutti.report.action.generate.help"}; } + +#saveReportButton { + actionIcon: save; + text: "tutti.report.action.save"; + toolTipText: "tutti.report.action.save.tip"; + i18nMnemonic: "tutti.report.action.save.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.report.actions.SaveReportAction.class}; + enabled: {model.isReportDone()}; + _help: {"tutti.report.action.save.help"}; +} + +#displayReportButton { + actionIcon: open-file; + text: "tutti.report.action.openReport"; + toolTipText: "tutti.report.action.openReport.tip"; + i18nMnemonic: "tutti.report.action.openReport.mnemonic"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.report.actions.OpenReportAction.class}; + enabled: {model.isReportDone()}; + _help: {"tutti.report.action.openReport.help"}; +} + + diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx index 1914f34..2549373 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx @@ -29,7 +29,6 @@ fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - jaxx.runtime.swing.editor.FileEditor jaxx.runtime.swing.editor.bean.BeanFilterableComboBox java.io.File @@ -53,7 +52,6 @@ uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='fishingOperation' component='fishingOperationComboBox'/> <field name='report' component='reportComboBox'/> - <field name='outputFile' component='outputFileField'/> </BeanValidator> <Table id='form' fill='both'> @@ -81,32 +79,20 @@ </cell> </row> - <!-- Output file (Where) --> - <row> - <cell> - <JLabel id='outputFileLabel'/> - </cell> - <cell> - <JPanel id='outputFilePanel' layout='{new BorderLayout()}'> - <FileEditor id='outputFileField' constraints='BorderLayout.CENTER' - onActionPerformed='handler.setFile(event, "outputFile")'/> - <JToolBar id='outputFileActionToolbar' constraints='BorderLayout.EAST' - layout='{new GridLayout()}'> - <JButton id='showOutputFileButton'/> - </JToolBar> - </JPanel> - </cell> - </row> - <!-- Actions --> <row anchor='south'> <cell columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> - <JButton id='closeButton'/> + <JPanel layout='{new GridLayout(0, 1)}'> <JButton id='generateButton'/> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='displayReportButton'/> + <JButton id='saveReportButton'/> + </JPanel> + <JButton id='closeButton'/> </JPanel> </cell> </row> + </Table> </JPanel> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java index a8afb33..67e49a0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java @@ -22,25 +22,22 @@ package fr.ifremer.tutti.ui.swing.content.report; * #L% */ -import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import org.nuiton.jaxx.application.swing.util.CloseableUI; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.report.ReportService; +import fr.ifremer.tutti.service.report.ReportGenerationService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import jaxx.runtime.swing.editor.FileEditor; 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.awt.Desktop; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; -import java.io.IOException; import java.util.List; - -import static org.nuiton.i18n.I18n.t; +import java.util.Set; /** * Handler of {@link ReportUI}. @@ -58,7 +55,7 @@ public class ReportUIHandler extends AbstractTuttiUIHandler<ReportUIModel, Repor super.beforeInit(ui); - ReportService reportService = getContext().getReportService(); + ReportGenerationService reportService = getContext().getReportGenerationService(); ReportUIModel model = new ReportUIModel(); @@ -75,12 +72,29 @@ public class ReportUIHandler extends AbstractTuttiUIHandler<ReportUIModel, Repor getContext().getPersistenceService().getAllFishingOperation(cruiseId); model.setFishingOperations(fishingOperations); - // get default output file name - File outputFile = reportService.getDefaultOutputFile(); - model.setOutputFile(outputFile); - listModelIsModify(model); + model.addPropertyChangeListener(new PropertyChangeListener() { + + Set<String> removeReportProperties= ImmutableSet.of( + ReportUIModel.PROPERTY_FISHING_OPERATION, + ReportUIModel.PROPERTY_REPORT + ); + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + ReportUIModel source = (ReportUIModel) evt.getSource(); + + if (source .isReportDone() && removeReportProperties.contains(evt.getPropertyName())) { + + // there was a result and input has changed, remove result + source.setReportGenerationResult(null); + + } + + } + }); ui.setContextValue(model); } @@ -99,12 +113,6 @@ public class ReportUIHandler extends AbstractTuttiUIHandler<ReportUIModel, Repor Lists.newArrayList(model.getFishingOperations()), model.getFishingOperation()); - FileEditor outputFileField = ui.getOutputFileField(); - outputFileField.setDirectoryEnabled(false); - outputFileField.setFileEnabled(true); - outputFileField.setExts(".pdf"); - outputFileField.setExtsDescription(t("tutti.common.file.pdf")); - SwingValidator validator = ui.getValidator(); listenValidatorValid(validator, model); @@ -134,19 +142,4 @@ public class ReportUIHandler extends AbstractTuttiUIHandler<ReportUIModel, Repor return ui.getValidator(); } - public void showReport() { - - File file = getModel().getOutputFile(); - - Preconditions.checkState(file.exists()); - - Desktop desktop = TuttiUIUtil.getDesktopForBrowse(); - try { - desktop.browse(file.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/report/ReportUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java index 6f096f0..22ea0f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java @@ -23,7 +23,8 @@ package fr.ifremer.tutti.ui.swing.content.report; */ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.service.report.ReportModel; +import fr.ifremer.tutti.service.report.ReportGenerationRequest; +import fr.ifremer.tutti.service.report.ReportGenerationResult; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -37,7 +38,7 @@ import java.util.List; * @author tchemit <chemit@codelutin.com> * @since 2.9 */ -public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportModel, ReportUIModel> { +public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportGenerationRequest, ReportUIModel> { private static final long serialVersionUID = 1L; @@ -45,21 +46,24 @@ public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportModel, ReportU public static final String PROPERTY_REPORT = "report"; - public static final String PROPERTY_FISHING_OPERATION = "fishingOperationId"; + public static final String PROPERTY_FISHING_OPERATION = "fishingOperation"; - public static final String PROPERTY_OUTPUT_FILE = "outputFile"; + public static final String PROPERTY_REPORT_DONE = "reportDone"; - public static final String PROPERTY_OUTPUT_FILE_EXISTS = "outputFileExists"; - - protected static Binder<ReportUIModel, ReportModel> toBeanBinder = + protected static Binder<ReportUIModel, ReportGenerationRequest> toBeanBinder = BinderFactory.newBinder(ReportUIModel.class, - ReportModel.class); + ReportGenerationRequest.class); protected List<File> reports; protected List<FishingOperation> fishingOperations; - protected final ReportModel editObject = new ReportModel(); + protected ReportGenerationResult reportGenerationResult; + + /** Report to use. */ + protected File report; + + protected String cruiseId; protected FishingOperation fishingOperation; @@ -86,21 +90,21 @@ public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportModel, ReportU } public File getReport() { - return editObject.getReport(); + return report; } public void setReport(File report) { Object oldValue = getReport(); - editObject.setReport(report); + this.report = report; firePropertyChange(PROPERTY_REPORT, oldValue, report); } public String getCruiseId() { - return editObject.getCruiseId(); + return cruiseId; } public void setCruiseId(String cruiseId) { - editObject.setCruiseId(cruiseId); + this.cruiseId = cruiseId; } public String getFishingOperationId() { @@ -117,28 +121,21 @@ public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportModel, ReportU firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, fishingOperation); } - public File getOutputFile() { - return editObject.getOutputFile(); - } - - public void setOutputFile(File outputFile) { - Object oldValue = getOutputFile(); - editObject.setOutputFile(outputFile); - firePropertyChange(PROPERTY_OUTPUT_FILE, oldValue, outputFile); - reloadOuputFile(); + public void setReportGenerationResult(ReportGenerationResult reportGenerationResult) { + this.reportGenerationResult = reportGenerationResult; + firePropertyChange(PROPERTY_REPORT_DONE, null, isReportDone()); } - public void reloadOuputFile() { - - firePropertyChange(PROPERTY_OUTPUT_FILE_EXISTS, null, isOutputFileExists()); + public File getOutputFile() { + return reportGenerationResult.getOutputFile(); } - public boolean isOutputFileExists() { - return getOutputFile() != null && getOutputFile().exists(); + public boolean isReportDone() { + return reportGenerationResult != null; } @Override - protected ReportModel newEntity() { - return new ReportModel(); + protected ReportGenerationRequest newEntity() { + return new ReportGenerationRequest(); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java index bd55550..aee6fbf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/GenerateReportAction.java @@ -24,7 +24,8 @@ package fr.ifremer.tutti.ui.swing.content.report.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.service.report.ReportModel; +import fr.ifremer.tutti.service.report.ReportGenerationRequest; +import fr.ifremer.tutti.service.report.ReportGenerationResult; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.report.ReportUI; import fr.ifremer.tutti.ui.swing.content.report.ReportUIHandler; @@ -40,6 +41,8 @@ import static org.nuiton.i18n.I18n.t; */ public class GenerateReportAction extends LongActionSupport<ReportUIModel, ReportUI, ReportUIHandler> { + protected ReportGenerationResult reportGenerationResult; + public GenerateReportAction(ReportUIHandler handler) { super(handler, true); } @@ -50,9 +53,10 @@ public class GenerateReportAction extends LongActionSupport<ReportUIModel, Repor if (doAction) { - // ask user to confirm overwrite if required - doAction = askOverwriteFile(getModel().getOutputFile()); + getModel().setReportGenerationResult(null); + } + return doAction; } @@ -63,17 +67,24 @@ public class GenerateReportAction extends LongActionSupport<ReportUIModel, Repor ProgressionModel progressionModel = new ProgressionModel(); setProgressionModel(progressionModel); progressionModel.setTotal(4); // get data / export / generate - ReportModel reportModel = getModel().toBean(); - getContext().getReportService().generateReport( - reportModel, progressionModel); + ReportGenerationRequest reportGenerationRequest = getModel().toBean(); + + reportGenerationResult = getContext().getReportGenerationService().generateReport(reportGenerationRequest, progressionModel); + } @Override public void postSuccessAction() { + super.postSuccessAction(); + getModel().setReportGenerationResult(reportGenerationResult); + sendMessage(t("tutti.report.generated")); - sendMessage(t("tutti.report.generated", getModel().getOutputFile())); + } - getModel().reloadOuputFile(); + @Override + protected void releaseAction() { + super.releaseAction(); + reportGenerationResult = null; } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/ShowReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/OpenReportAction.java similarity index 58% rename from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/ShowReportAction.java rename to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/OpenReportAction.java index 5c13b31..b5223dc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/ShowReportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/OpenReportAction.java @@ -1,34 +1,32 @@ package fr.ifremer.tutti.ui.swing.content.report.actions; -import com.google.common.base.Preconditions; import fr.ifremer.tutti.ui.swing.content.report.ReportUI; -import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; import java.io.File; /** - * Created on 3/7/15. + * Created on 3/11/15. * * @author Tony Chemit - chemit@codelutin.com - * @since 3.15 + * @since 3.13.2 */ -public class ShowReportAction extends SimpleActionSupport<ReportUI> { +public class OpenReportAction extends SimpleActionSupport<ReportUI> { + private static final long serialVersionUID = 1L; - public ShowReportAction(ReportUI ui) { + public OpenReportAction(ReportUI ui) { super(ui); } - @Override protected void onActionPerformed(ReportUI ui) { - File file = ui.getModel().getOutputFile(); + File outputFile = ui.getModel().getOutputFile(); + TuttiUIUtil.browseFile(outputFile); - Preconditions.checkState(file.exists()); + } - TuttiUIUtil.openLink(file.toURI()); - } -} +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/SaveReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/SaveReportAction.java new file mode 100644 index 0000000..d22b999 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/actions/SaveReportAction.java @@ -0,0 +1,97 @@ +package fr.ifremer.tutti.ui.swing.content.report.actions; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.ui.swing.content.report.ReportUI; +import fr.ifremer.tutti.ui.swing.content.report.ReportUIHandler; +import fr.ifremer.tutti.ui.swing.content.report.ReportUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; +import org.nuiton.jaxx.application.ApplicationIOUtil; + +import java.io.File; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 3/11/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13.2 + */ +public class SaveReportAction extends LongActionSupport<ReportUIModel, ReportUI, ReportUIHandler> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SaveReportAction.class); + + protected File file; + + public SaveReportAction(ReportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { + + FishingOperation fishingOperation = getModel().getFishingOperation(); + + Preconditions.checkNotNull("Can't have a null fishing operation", fishingOperation); + Preconditions.checkState(getModel().isReportDone(), "Result must be done"); + + Decorator<FishingOperation> decorator = getDecorator(FishingOperation.class, null); + + String filename = "rapport-" + decorator.toString(fishingOperation) + ".pdf"; + filename = filename.replaceAll("/", "_").replaceAll("\\s", ""); + + if (log.isInfoEnabled()) { + log.info("Default save filename: " + filename); + } + + file = saveFileWithStartDirectory( + getConfig().getReportBackupDirectory(), + false, + filename, + null, + t("tutti.report.title.choose.saveReportFile"), + t("tutti.report.action.save"), + "^.+\\.pdf$", t("tutti.common.file.pdf")); + + doAction = file != null; + + } + + return doAction; + + } + + @Override + public void doAction() throws Exception { + + File outputFile = getModel().getOutputFile(); + ApplicationIOUtil.copyFile(outputFile, file, "Could not save file to " + file); + + } + + @Override + public void postSuccessAction() { + + super.postSuccessAction(); + sendMessage(t("tutti.report.saved", file)); + + } + + @Override + protected void releaseAction() { + + super.releaseAction(); + file = null; + + } + +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml index df7405a..070602b 100644 --- a/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml +++ b/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml @@ -42,10 +42,4 @@ </field-validator> </field> - <field name="outputFile"> - <field-validator type="required" short-circuit="true"> - <message>tutti.validator.error.report.outputFile.required</message> - </field-validator> - </field> - </validators> 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 cadb56e..5cb2587 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 @@ -1837,6 +1837,12 @@ tutti.report.action.cancel.tip= tutti.report.action.generate= tutti.report.action.generate.mnemonic= tutti.report.action.generate.tip= +tutti.report.action.openReport= +tutti.report.action.openReport.mnemonic= +tutti.report.action.openReport.tip= +tutti.report.action.save= +tutti.report.action.save.mnemonic= +tutti.report.action.save.tip= tutti.report.action.showOutputFile.mnemonic= tutti.report.action.showOutputFile.tip= tutti.report.field.fishingOperation= @@ -1846,7 +1852,9 @@ tutti.report.field.outputFile.tip= tutti.report.field.report= tutti.report.field.report.tip= tutti.report.generated= +tutti.report.saved= tutti.report.title= +tutti.report.title.choose.saveReportFile= tutti.resetCruise.action.cruiseReloaded= tutti.resetProgram.action.programReloaded= tutti.selectBenthos.title= 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 870c766..01355d5 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 @@ -1732,6 +1732,12 @@ tutti.report.action.cancel.tip=Quitter l'écran tutti.report.action.generate=Générer tutti.report.action.generate.mnemonic=G tutti.report.action.generate.tip=Générer le rapport +tutti.report.action.openReport=Ouvrir +tutti.report.action.openReport.mnemonic=O +tutti.report.action.openReport.tip=Ouvrir le dernier rapport généré +tutti.report.action.save=Enregistrer +tutti.report.action.save.mnemonic=S +tutti.report.action.save.tip=Enregistrer le dernier rapport généré tutti.report.action.showOutputFile.mnemonic=V tutti.report.action.showOutputFile.tip=Voir le rapport tutti.report.field.fishingOperation=Trait @@ -1740,8 +1746,10 @@ tutti.report.field.outputFile=Rapport tutti.report.field.outputFile.tip=Chemin où générer le rapport tutti.report.field.report=Modèle tutti.report.field.report.tip=Modèle de rapport à générer -tutti.report.generated=Le rapport a été généré dans le fichier <strong>%s</strong> +tutti.report.generated=Le rapport a été généré avec succès. +tutti.report.saved=Rapport enregistré \: <strong>%s</strong> tutti.report.title=Rapports +tutti.report.title.choose.saveReportFile=Enregistrer le rapport généré tutti.resetCruise.action.cruiseReloaded=<html><body>La campagne <strong>%s</strong> est rechargée</body></html>. tutti.resetProgram.action.programReloaded=<html><body>Le programme <strong>%s</strong> est rechargé</body></html>. tutti.selectBenthos.title=Choisissez une espèce du benthos -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.