Author: tchemit Date: 2013-11-12 10:08:02 +0100 (Tue, 12 Nov 2013) New Revision: 1343 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1343 Log: refs #3624: [Rapport] Int?\195?\169gration de rapports g?\195?\169n?\195?\169r?\195?\169s par Birt (mise en place ui + service) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowReportAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/GenerateReportAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml trunk/tutti-ui-swing/src/main/resources/icons/action-report.png trunk/tutti-ui-swing/src/main/resources/icons/action-update-report.png Modified: trunk/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-service/src/main/resources/validators.xml trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/BeanValidatorDetectorTest.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/pom.xml 2013-11-12 09:08:02 UTC (rev 1343) @@ -27,7 +27,7 @@ <parent> <groupId>org.nuiton</groupId> <artifactId>mavenpom4redmine</artifactId> - <version>4.1</version> + <version>4.3</version> </parent> <groupId>fr.ifremer</groupId> @@ -131,7 +131,7 @@ <eugenePluginVersion>2.7.2</eugenePluginVersion> <hibernateVersion>3.6.10.Final</hibernateVersion> - <jaxxVersion>2.5.29</jaxxVersion> + <jaxxVersion>2.5.30-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.15.1</xworkVersion> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/config/TuttiPersistenceConfigOption.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -69,7 +69,7 @@ "tutti.persistence.db.backup.directory", n_("tutti.config.option.persistence.db.backup.directory.description"), "${tutti.data.directory}/dbbackup", - File.class), + File.class, false, false), DB_CONFIGURATION_PATH( "tutti.persistence.db.configurationPath", Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -43,6 +43,8 @@ import org.nuiton.decorator.Decorator; import org.nuiton.decorator.DecoratorProvider; +import java.io.File; + import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; @@ -115,6 +117,7 @@ registerTuttiDecorator(SpeciesProtocol.class, "${speciesReferenceTaxonId}", SEPARATOR, " - "); registerTuttiDecorator(Attachment.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(LabelAware.class, "${label}$s", SEPARATOR, " - "); + registerTuttiDecorator(File.class, "${absolutePath}$s", SEPARATOR, " - "); registerDecorator(new Decorator<Float>(Float.class) { private static final long serialVersionUID = 1L; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfig.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -106,6 +106,12 @@ return result; } + /** @return {@link TuttiServiceConfigOption#REPORT_BACKUP_DIRECTORY} value */ + public File getReportBackupDirectory() { + File result = applicationConfig.getOptionAsFile(TuttiServiceConfigOption.REPORT_DIRECTORY.getKey()); + return result; + } + public File getTmpDirectory() { File result = applicationConfig.getOptionAsFile(TuttiServiceConfigOption.TMP_DIRECTORY.getKey()); return result; @@ -167,6 +173,10 @@ TuttiIOUtil.forceMkdir( tmpDirectory, _("tutti.service.mkDir.error", tmpDirectory)); + + TuttiIOUtil.forceMkdir( + getReportBackupDirectory(), + _("tutti.service.mkDir.error", getReportBackupDirectory())); } public void setCsvSeparator(char c) { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/config/TuttiServiceConfigOption.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -25,8 +25,8 @@ */ import fr.ifremer.tutti.service.WeightUnit; +import org.nuiton.config.ConfigOptionDef; import org.nuiton.util.Version; -import org.nuiton.config.ConfigOptionDef; import java.io.File; import java.net.URL; @@ -41,6 +41,35 @@ */ public enum TuttiServiceConfigOption implements ConfigOptionDef { + // TRANSIENT CONFIG + VERSION( + "tutti.version", + n_("tutti.config.option.version.description"), + "", + Version.class, + true, + true), + SITE_URL( + "tutti.site.url", + n_("tutti.config.option.site.url.description"), + "http://maven-site.forge.codelutin.com/tutti", + URL.class, + true, + true), + ORGANIZATION_NAME( + "tutti.organizationName", + n_("tutti.config.option.organizationName.description"), + "", + String.class, + true, + true), + INCEPTION_YEAR( + "tutti.inceptionYear", + n_("tutti.config.option.inceptionYear.description"), + "2012", + Integer.class, + true, + true), BASEDIR( "tutti.basedir", n_("tutti.config.option.basedir.description"), @@ -66,10 +95,18 @@ REPORT_DIRECTORY( "tutti.report.directory", n_("tutti.config.option.report.directory.description"), - "${tutti.data.basedir}/report", + "${tutti.basedir}/report", File.class, true, true), + + // NOT TRANSIENT CONFIG + + REPORT_BACKUP_DIRECTORY( + "tutti.report.backup.directory", + n_("tutti.config.option.report.backup.directory.description"), + "${tutti.data.directory}/reportbackup", + File.class), CSV_SEPARATOR( "tutti.csv.separator", n_("tutti.config.option.csv.separator.description"), @@ -87,35 +124,6 @@ Integer[].class ), - // TRANSIENT CONFIG - VERSION( - "tutti.version", - n_("tutti.config.option.version.description"), - "", - Version.class, - true, - true), - SITE_URL( - "tutti.site.url", - n_("tutti.config.option.site.url.description"), - "http://maven-site.forge.codelutin.com/tutti", - URL.class, - true, - true), - ORGANIZATION_NAME( - "tutti.organizationName", - n_("tutti.config.option.organizationName.description"), - "", - String.class, - true, - true), - INCEPTION_YEAR( - "tutti.inceptionYear", - n_("tutti.config.option.inceptionYear.description"), - "2012", - Integer.class, - true, - true), WEIGHT_UNIT_SPECIES( "tutti.weight.unit.species", n_("tutti.config.option.weight.unit.species.description"), Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportModel.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -41,7 +41,7 @@ protected File report; /** Input data file. */ - protected File dataFile; + protected File inputFile; /** Where to generate the report. */ protected File outputFile; @@ -54,12 +54,12 @@ this.report = report; } - public File getDataFile() { - return dataFile; + public File getInputFile() { + return inputFile; } - public void setDataFile(File dataFile) { - this.dataFile = dataFile; + public void setInputFile(File inputFile) { + this.inputFile = inputFile; } public File getOutputFile() { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/report/ReportService.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -24,10 +24,18 @@ * #L% */ +import com.google.common.collect.Lists; import fr.ifremer.tutti.service.AbstractTuttiService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; +import java.io.FileFilter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.List; + /** * To generate some reports. * @@ -39,13 +47,39 @@ private static final Log log = LogFactory.getLog(ReportService.class); + public static final FileFilter REPORT_FILTER = new FileFilter() { + @Override + public boolean accept(File pathname) { + return pathname.isFile() && + pathname.getName().endsWith(".rptdesign"); + } + }; + public static final String REPORT_FILENAME_PATTERN = "tutti-report-%s.pdf"; + + public static final DateFormat df = new SimpleDateFormat("yyy-MM-dd_HH-mm"); + public void generateReport(ReportModel model) { - // TODO if (log.isInfoEnabled()) { - log.info("Will generate report using "); + log.info("Will generate report using report " + model.getReport()); } + // TODO } + public List<File> getAvailableReports() { + List<File> result = Lists.newArrayList(); + File reportDirectory = context.getConfig().getReportDirectory(); + File[] files = reportDirectory.listFiles(REPORT_FILTER); + if (files != null) { + result.addAll(Arrays.asList(files)); + } + return result; + } + + public File getDefaultOutputFile() { + String filename = String.format(REPORT_FILENAME_PATTERN, df.format(context.currentDate())); + File result = new File(context.getConfig().getReportBackupDirectory(), filename); + return result; + } } Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -9,6 +9,7 @@ tutti.config.option.export.countryId.description= tutti.config.option.inceptionYear.description= tutti.config.option.organizationName.description= +tutti.config.option.report.backup.directory.description= tutti.config.option.report.directory.description= tutti.config.option.samplingCategoryOrderIds.description= tutti.config.option.site.url.description= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -9,7 +9,8 @@ tutti.config.option.export.countryId.description=L'id du pays à utiliser pour les exports (il s'agit de la valeur LOCATION.ID). tutti.config.option.inceptionYear.description=Année de démarrage du projet tutti.config.option.organizationName.description=Nom de l'organisation dans la licence -tutti.config.option.report.directory.description= +tutti.config.option.report.backup.directory.description=Répertoire contenant les rapports générés +tutti.config.option.report.directory.description=Répertoire contenant les modèles de rapports tutti.config.option.samplingCategoryOrderIds.description=Ordre des catégories d'échantillonnage tutti.config.option.site.url.description=Url du site internet de l'application tutti.config.option.tmp.directory.description=Répertoire temporaire utilisée par l'application (est nettoyé à chaque démarrage de l'application). Modified: trunk/tutti-service/src/main/resources/validators.xml =================================================================== --- trunk/tutti-service/src/main/resources/validators.xml 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-service/src/main/resources/validators.xml 2013-11-12 09:08:02 UTC (rev 1343) @@ -46,5 +46,6 @@ <validator name="collectionUniqueKey" class="org.nuiton.validator.xwork2.field.CollectionUniqueKeyValidator"/> <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> <validator name="skipablefieldexpression" class="org.nuiton.validator.xwork2.field.NuitonFieldExpressionValidator"/> + <validator name="existingFile" class="org.nuiton.validator.xwork2.field.ExistingFileFieldValidator"/> </validators> Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sun Nov 10 14:15:34 CET 2013 +#Mon Nov 11 09:59:58 CET 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -302,6 +302,7 @@ tutti.main.menu.action.exit.help=menu.html\#menu_fichier tutti.main.menu.action.importTemporaryReferential.help=menu.html\#menu_administration tutti.main.menu.action.manageDb.help=menu.html\#menu_fichier +tutti.main.menu.action.report.help= tutti.main.menu.action.selectCruise.help=menu.html\#menu_action tutti.main.menu.action.showHelp.help=menu.html\#menu_aide tutti.main.menu.action.site.help=menu.html\#menu_aide @@ -317,6 +318,15 @@ tutti.manageTemporaryReferential.action.importTemporarySpecies.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.importTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.help=menu.html\#menu_administration_referentiel +tutti.report.action.cancel.help= +tutti.report.action.chooseInputFile.help= +tutti.report.action.chooseOutputFile.help= +tutti.report.action.generate.help= +tutti.report.action.showOutputFile.help= +tutti.report.field.inputFile.help= +tutti.report.field.outputFile.help= +tutti.report.field.report.help= +tutti.report.help= tutti.selectCruise.action.cloneProtocol.help=selectCruise.html\#actions tutti.selectCruise.action.deleteProtocol.help=selectCruise.html\#actions tutti.selectCruise.action.editCatches.help=selectCruise.html\#actions Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sun Nov 10 14:15:34 CET 2013 +#Mon Nov 11 09:59:58 CET 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -302,6 +302,7 @@ tutti.main.menu.action.exit.help=menu.html\#menu_fichier tutti.main.menu.action.importTemporaryReferential.help=menu.html\#menu_administration tutti.main.menu.action.manageDb.help=menu.html\#menu_fichier +tutti.main.menu.action.report.help= tutti.main.menu.action.selectCruise.help=menu.html\#menu_action tutti.main.menu.action.showHelp.help=menu.html\#menu_aide tutti.main.menu.action.site.help=menu.html\#menu_aide @@ -317,6 +318,15 @@ tutti.manageTemporaryReferential.action.importTemporarySpecies.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.action.importTemporaryVessel.help=menu.html\#menu_administration_referentiel tutti.manageTemporaryReferential.help=menu.html\#menu_administration_referentiel +tutti.report.action.cancel.help= +tutti.report.action.chooseInputFile.help= +tutti.report.action.chooseOutputFile.help= +tutti.report.action.generate.help= +tutti.report.action.showOutputFile.help= +tutti.report.field.inputFile.help= +tutti.report.field.outputFile.help= +tutti.report.field.report.help= +tutti.report.help= tutti.selectCruise.action.cloneProtocol.help=selectCruise.html\#actions tutti.selectCruise.action.deleteProtocol.help=selectCruise.html\#actions tutti.selectCruise.action.editCatches.help=selectCruise.html\#actions Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -99,5 +99,11 @@ * * @since 1.4 */ - VALIDATE_CRUISE + VALIDATE_CRUISE, + /** + * To run reports. + * + * @since 2.9 + */ + REPORT } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -49,6 +49,7 @@ import fr.ifremer.tutti.service.pupitri.PupitriImportExportService; import fr.ifremer.tutti.service.referential.ReferentialImportExportService; import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; +import fr.ifremer.tutti.service.report.ReportService; import fr.ifremer.tutti.service.sumatra.CatchesSumatraExportService; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.MainUI; @@ -582,6 +583,10 @@ return serviceContext.getService(MultiPostExportService.class); } + public ReportService getReportService() { + return serviceContext.getService(ReportService.class); + } + public boolean useRealPersistenceService() { return isDbExist() && isDbLoaded(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-11-12 09:08:02 UTC (rev 1343) @@ -37,6 +37,7 @@ #menuFile { text: "tutti.main.menu.file"; toolTipText: "tutti.main.menu.file.tip"; + toolTipText: "tutti.main.menu.file.tip"; i18nMnemonic: "tutti.main.menu.file.mnemonic"; } @@ -60,6 +61,16 @@ _help: {"tutti.main.menu.action.editSampleCategoryModel.help"}; } +#menuFileReport { + actionIcon: report; + text: "tutti.main.action.report"; + toolTipText: "tutti.main.action.report.tip"; + i18nMnemonic: "tutti.main.action.report.mnemonic"; + enabled: {model.getScreen() != TuttiScreen.REPORT}; + _tuttiAction: {ShowReportAction.class}; + _help: {"tutti.main.menu.action.report.help"}; +} + #menuFileExit { actionIcon: exit; text: "tutti.main.action.exit"; @@ -69,7 +80,7 @@ _help: {"tutti.main.menu.action.exit.help"}; } -#menuActionUpdateApplication { +#menuFileUpdateApplication { actionIcon: update-application; text: "tutti.main.action.updateApplication"; toolTipText: "tutti.main.action.updateApplication.tip"; @@ -78,8 +89,8 @@ _help: {"tutti.main.menu.action.updateApplication.help"}; } -#menuActionUpdateReport { - actionIcon: update-application; +#menuFileUpdateReport { + actionIcon: update-report; text: "tutti.main.action.updateReport"; toolTipText: "tutti.main.action.updateReport.tip"; i18nMnemonic: "tutti.main.action.updateReport.mnemonic"; @@ -87,7 +98,7 @@ _help: {"tutti.main.menu.action.updateReport.help"}; } -#menuActionManageDb { +#menuFileManageDb { actionIcon: manage-db; text: "tutti.main.action.manageDb"; toolTipText: "tutti.main.action.manageDb.tip"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-11-12 09:08:02 UTC (rev 1343) @@ -66,11 +66,13 @@ <JMenuBar id='menu'> <JMenu id='menuFile'> <JMenuItem id='menuFileConfiguration'/> - <JMenuItem id='menuActionUpdateApplication'/> - <JMenuItem id='menuActionUpdateReport'/> + <JMenuItem id='menuFileUpdateApplication'/> + <JMenuItem id='menuFileUpdateReport'/> <JSeparator/> - <JMenuItem id='menuActionManageDb'/> + <JMenuItem id='menuFileManageDb'/> <JSeparator/> + <JMenuItem id='menuFileReport'/> + <JSeparator/> <JMenuItem id='menuFileExit'/> </JMenu> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -48,6 +48,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; +import fr.ifremer.tutti.ui.swing.content.report.ReportUI; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.RemoveablePropertyChangeListener; @@ -446,7 +447,7 @@ screenUI = new DbManagerUI(ui); screenTitle = _("tutti.dbMabager.title"); - icon = ui.getMenuActionManageDb().getIcon(); + icon = ui.getMenuFileManageDb().getIcon(); break; case SELECT_CRUISE: @@ -486,7 +487,6 @@ case EDIT_FISHING_OPERATION: - // edit operations screenTitle = _("tutti.fishingOperations.title.edit.operations", getSelectedCruiseTitle()); icon = ui.getMenuActionEditCatches().getIcon(); screenUI = new FishingOperationsUI(ui); @@ -494,16 +494,25 @@ break; case IMPORT_TEMPORARY_REFERENTIAL: + screenTitle = _("tutti.manageTemporaryReferential.title"); screenUI = new ManageTemporaryReferentialUI(ui); icon = ui.getMenuImportTemporaryReferential().getIcon(); break; case VALIDATE_CRUISE: + screenUI = new ValidateCruiseUI(ui); screenTitle = _("tutti.fishingOperations.title.validate.operations", getSelectedCruiseTitle()); icon = ui.getMenuActionValidateCatches().getIcon(); break; + + case REPORT: + + screenUI = new ReportUI(ui); + screenTitle = _("tutti.report.title"); + icon = ui.getMenuFileReport().getIcon(); + break; } JButton showHelp = ui.getShowHelp(); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowReportAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowReportAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowReportAction.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing.content; + +import fr.ifremer.tutti.ui.swing.TuttiScreen; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To show report screen. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.9 + */ +public class ShowReportAction extends AbstractChangeScreenAction { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ShowReportAction.class); + + public ShowReportAction(MainUIHandler handler) { + super(handler, true, TuttiScreen.REPORT); + } + + @Override + public void doAction() throws Exception { + if (log.isDebugEnabled()) { + log.debug("Show report screen"); + } + super.doAction(); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowReportAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx 2013-11-12 09:08:02 UTC (rev 1343) @@ -28,9 +28,6 @@ fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.util.ActionListCellRenderer - - static org.nuiton.i18n.I18n._ </import> <script><![CDATA[ Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -229,6 +229,9 @@ .addOption(TuttiApplicationConfigOption.TUTTI_HELP_DIRECTORY) .setOptionShortLabel(_("tutti.config.option.help.directory.shortLabel")) + .addOption(TuttiServiceConfigOption.REPORT_DIRECTORY) + .setOptionShortLabel(_("tutti.config.option.service.report.directory.shortLabel")) + .addOption(TuttiPersistenceConfigOption.DB_DIRECTORY) .setOptionShortLabel(_("tutti.config.option.persistence.db.directory.shortLabel")) @@ -241,9 +244,6 @@ .addOption(TuttiPersistenceConfigOption.DB_CACHE_DIRECTORY) .setOptionShortLabel(_("tutti.config.option.persistence.db.cache.directory.shortLabel")) - .addOption(TuttiPersistenceConfigOption.DB_BACKUP_DIRECTORY) - .setOptionShortLabel(_("tutti.config.option.persistence.db.backup.directory.shortLabel")) - .addOption(TuttiPersistenceConfigOption.DB_CONFIGURATION_PATH) .setOptionShortLabel(_("tutti.config.option.persistence.db.configurationPath.shortLabel")) @@ -256,6 +256,12 @@ .addOption(TuttiServiceConfigOption.SITE_URL) .setOptionShortLabel(_("tutti.config.option.site.url.shortLabel")) + .addOption(TuttiPersistenceConfigOption.DB_BACKUP_DIRECTORY) + .setOptionShortLabel(_("tutti.config.option.persistence.db.backup.directory.shortLabel")) + + .addOption(TuttiServiceConfigOption.REPORT_BACKUP_DIRECTORY) + .setOptionShortLabel(_("tutti.config.option.service.report.backup.directory.shortLabel")) + .addOption(TuttiApplicationConfigOption.TUTTI_UPDATE_APPLICATION_URL) .setOptionShortLabel(_("tutti.config.option.update.application.url.shortLabel")) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -65,8 +65,7 @@ } protected void resetFields() { - ui.getTrunkFile().setSelectedFile((String) null); - ui.getCarrouselFile().setSelectedFile((String) null); + ui.getTrunkFile().setSelectedFilePath( null); } public void open() { Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/GenerateReportAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/GenerateReportAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/GenerateReportAction.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,49 @@ +package fr.ifremer.tutti.ui.swing.content.report; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.service.report.ReportModel; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; + +import static org.nuiton.i18n.I18n._; + +/** + * To generate the selected report. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.9 + */ +public class GenerateReportAction extends AbstractTuttiAction<ReportUIModel, ReportUI, ReportUIHandler> { + + public GenerateReportAction(ReportUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + boolean doAction = super.prepareAction(); + + if (doAction) { + + // ask user to confirm overwrite if required + doAction = askOverwriteFile(getModel().getOutputFile()); + } + return doAction; + } + + @Override + public void doAction() throws Exception { + Preconditions.checkState(getModel().isValid()); + + ReportModel reportModel = getModel().toBean(); + getContext().getReportService().generateReport(reportModel); + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + sendMessage(_("tutti.report.generated", getModel().getOutputFile())); + + getModel().reloadOuputFile(); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/GenerateReportAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,85 @@ +BeanFilterableComboBox { + showReset: true; + bean: {model}; +} + +JTextField { + _selectOnFocus: {true}; +} + +FileEditor { + showReset: true; +} + +#outputFileActionToolbar { + borderPainted: false; + floatable: false; +} + +#reportTopPanel { + _help: {"tutti.report.help"}; +} + +#reportLabel { + text: "tutti.report.field.report"; + labelFor: {reportComboBox}; + toolTipText: "tutti.report.field.report.tip"; + _help: {"tutti.report.field.report.help"}; +} + +#reportComboBox { + property: report; + selectedItem: {model.getReport()}; + _validatorLabel: {_("tutti.report.field.report")}; +} + +#inputFileLabel { + text: "tutti.report.field.inputFile"; + labelFor: {inputFileField}; + toolTipText: "tutti.report.field.inputFile.tip"; + _help: {"tutti.report.field.inputFile.help"}; +} + +#inputFileField { + selectedFile: {model.getInputFile()}; + _validatorLabel: {_("tutti.report.field.inputFile")}; +} + +#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: {_("tutti.report.field.outputFile")}; +} + +#showOutputFileButton { + actionIcon: open-file; + toolTipText: "tutti.report.action.showOutputFile.tip"; + i18nMnemonic: "tutti.report.action.showOutputFile.mnemonic"; + _help: {"tutti.report.action.showOutputFile.help"}; + enabled: {model.isOutputFileExists()}; +} + +#closeButton { + actionIcon: cancel; + text: "tutti.report.action.cancel"; + toolTipText: "tutti.report.action.cancel.tip"; + i18nMnemonic: "tutti.report.action.cancel.mnemonic"; + _tuttiAction: {GoToPreviousScreenAction.class}; + _help: {"tutti.report.action.cancel.help"}; +} + +#generateButton { + actionIcon: generate; + text: "tutti.report.action.generate"; + toolTipText: "tutti.report.action.generate.tip"; + i18nMnemonic: "tutti.report.action.generate.mnemonic"; + _tuttiAction: {GenerateReportAction.class}; + enabled: {model.isValid()}; + _help: {"tutti.report.action.generate.help"}; +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUI.jaxx 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,100 @@ +<JPanel id='reportTopPanel' layout='{new BorderLayout()}' decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ReportUIModel, ReportUIHandler>'> + + <import> + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.content.GoToPreviousScreenAction + fr.ifremer.tutti.ui.swing.util.TuttiUI + + jaxx.runtime.swing.editor.FileEditor + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + + java.io.File + + static org.nuiton.i18n.I18n._ + static jaxx.runtime.SwingUtil.getStringValue + </import> + + <script><![CDATA[ + + public ReportUI(TuttiUI parentUI) { + JAXXUtil.initContext(this, parentUI); + ReportUIHandler handler = new ReportUIHandler(parentUI, this); + setContextValue(handler); + handler.beforeInitUI(); + } + + protected void $afterCompleteSetup() { + handler.afterInitUI(); + } + ]]></script> + + <ReportUIHandler id='handler' + initializer='getContextValue(ReportUIHandler.class)'/> + + <ReportUIModel id='model' + initializer='getContextValue(ReportUIModel.class)'/> + + <TuttiHelpBroker id='broker' constructorParams='"tutti.report.help"'/> + + <BeanValidator id='validator' bean='model' + uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> + <field name='report' component='reportComboBox'/> + <field name='inputFile' component='inputFileField'/> + <field name='outputFile' component='outputFileField'/> + </BeanValidator> + + <Table id='form' fill='both'> + + <!-- report name --> + <row> + <cell anchor='west'> + <JLabel id='reportLabel'/> + </cell> + <cell weightx='1.0'> + <BeanFilterableComboBox id='reportComboBox' constructorParams='this' + genericType='File'/> + </cell> + </row> + + <!-- input file --> + <row> + <cell> + <JLabel id='inputFileLabel'/> + </cell> + <cell> + <FileEditor id='inputFileField' + onActionPerformed='handler.setFile(event, "inputFile")'/> + </cell> + </row> + + <!-- output file --> + <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' + onActionPerformed='handler.showReport()'/> + </JToolBar> + </JPanel> + </cell> + </row> + + <!-- actions --> + <row anchor='south'> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='closeButton'/> + <JButton id='generateButton'/> + </JPanel> + </cell> + </row> + </Table> + +</JPanel> \ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,134 @@ +package fr.ifremer.tutti.ui.swing.content.report; + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.service.report.ReportService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.CloseableUI; +import fr.ifremer.tutti.ui.swing.util.TuttiUI; +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 javax.swing.JComponent; +import java.awt.Desktop; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * Handler of {@link ReportUI}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.9 + */ +public class ReportUIHandler extends AbstractTuttiUIHandler<ReportUIModel, ReportUI> implements CloseableUI { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ReportUIHandler.class); + + /** + * Persistence service. + * + * @since 0.1 + */ + private final ReportService reportService; + + public ReportUIHandler(TuttiUI parentUi, ReportUI ui) { + super(parentUi.getHandler().getContext(), ui); + this.reportService = context.getReportService(); + } + + @Override + public void beforeInitUI() { + + getDataContext().resetValidationDataContext(); + + ReportUIModel model = new ReportUIModel(); + + // get all report availables + List<File> reports = reportService.getAvailableReports(); + model.setReports(reports); + + // get default output file name + File outputFile = reportService.getDefaultOutputFile(); + model.setOutputFile(outputFile); + + listModelIsModify(model); + + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + + initUI(ui); + + ReportUIModel model = getModel(); + + initBeanFilterableComboBox(ui.getReportComboBox(), + Lists.newArrayList(model.getReports()), + model.getReport()); + + FileEditor inputFileField = ui.getInputFileField(); + inputFileField.setDirectoryEnabled(false); + inputFileField.setFileEnabled(true); + inputFileField.setExts(".csv"); + inputFileField.setExtsDescription("Fichier csv"); + + FileEditor outputFileField = ui.getOutputFileField(); + outputFileField.setDirectoryEnabled(false); + outputFileField.setFileEnabled(true); + outputFileField.setExts(".pdf"); + outputFileField.setExtsDescription("Fichier pdf"); + + SwingValidator validator = ui.getValidator(); + listenValidatorValid(validator, model); + + registerValidators(validator); + } + + @Override + protected JComponent getComponentToFocus() { + return getUI().getReportComboBox(); + } + + @Override + public void onCloseUI() { + if (log.isDebugEnabled()) { + log.debug("closing: " + ui); + } + clearValidators(); + } + + @Override + public boolean quitUI() { + return true; + } + + @Override + public SwingValidator<ReportUIModel> getValidator() { + 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) { + TuttiUIContext.getErrorHelper().showErrorDialog(_("swing.error.cannot.open.file")); + } + } + +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,95 @@ +package fr.ifremer.tutti.ui.swing.content.report; + +import fr.ifremer.tutti.service.report.ReportModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.io.File; +import java.util.List; + +/** + * Model of {@link ReportUI} screen. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.9 + */ +public class ReportUIModel extends AbstractTuttiBeanUIModel<ReportModel, ReportUIModel> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_REPORTS = "reports"; + + public static final String PROPERTY_REPORT = "report"; + + public static final String PROPERTY_INPUT_FILE = "inputFile"; + + public static final String PROPERTY_OUTPUT_FILE = "outputFile"; + public static final String PROPERTY_OUTPUT_FILE_EXISTS = "outputFileExists"; + + protected static Binder<ReportUIModel, ReportModel> toBeanBinder = + BinderFactory.newBinder(ReportUIModel.class, + ReportModel.class); + + protected List<File> reports; + + protected final ReportModel editObject = new ReportModel(); + + public ReportUIModel() { + super(ReportModel.class, null, toBeanBinder); + } + + public List<File> getReports() { + return reports; + } + + public void setReports(List<File> reports) { + Object oldValue = getReports(); + this.reports = reports; + firePropertyChange(PROPERTY_REPORTS, oldValue, reports); + } + + public File getReport() { + return editObject.getReport(); + } + + public void setReport(File report) { + Object oldValue = getReport(); + editObject.setReport(report); + firePropertyChange(PROPERTY_REPORT, oldValue, report); + } + + public File getInputFile() { + return editObject.getInputFile(); + } + + public void setInputFile(File inputFile) { + Object oldValue = getInputFile(); + editObject.setInputFile(inputFile); + firePropertyChange(PROPERTY_INPUT_FILE, oldValue, inputFile); + } + + 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 reloadOuputFile() { + + firePropertyChange(PROPERTY_OUTPUT_FILE_EXISTS, null, isOutputFileExists()); + } + public boolean isOutputFileExists() { + return getOutputFile() != null && getOutputFile().exists(); + } + + @Override + protected ReportModel newEntity() { + return new ReportModel(); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -51,6 +51,7 @@ import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.JAXXWidgetUtil; +import jaxx.runtime.swing.editor.FileEditor; import jaxx.runtime.swing.editor.NumberEditor; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; @@ -129,6 +130,7 @@ import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.io.File; import java.io.Serializable; import java.text.ParseException; import java.util.Date; @@ -216,6 +218,12 @@ TuttiUIUtil.setProperty(getModel(), property, value); } + public void setFile(ActionEvent event, String property) { + FileEditor field = (FileEditor) event.getSource(); + File value = field.getSelectedFile(); + TuttiUIUtil.setProperty(getModel(), property, value); + } + public void setBoolean(ItemEvent event, String property) { boolean value = event.getStateChange() == ItemEvent.SELECTED; TuttiUIUtil.setProperty(getModel(), property, value); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/AbstractTuttiAction.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -290,7 +290,7 @@ return file; } - private boolean askOverwriteFile(File file) { + protected boolean askOverwriteFile(File file) { boolean result; if (file.exists()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -249,8 +249,7 @@ } protected void resetFields() { - ui.getFile().setSelectedFile((File) null); - ui.getFile().setSelectedFile((String) null); + ui.getFile().setSelectedFilePath(null); ui.getFileName().setText(""); ui.getFileComment().setText(""); } Added: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml 2013-11-12 09:08:02 UTC (rev 1343) @@ -0,0 +1,27 @@ +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="report"> + <field-validator type="required" short-circuit="true"> + <message>tutti.validator.error.report.report.required</message> + </field-validator> + </field> + + <field name="inputFile"> + <field-validator type="required" short-circuit="true"> + <message>tutti.validator.error.report.inputFile.required</message> + </field-validator> + <field-validator type="existingFile" short-circuit="true"> + <message>tutti.validator.error.report.inputFile.notExists</message> + </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> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/report/ReportUIModel-error-validation.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -130,6 +130,8 @@ tutti.config.option.persistence.jdbc.url.shortLabel= tutti.config.option.programId.description= tutti.config.option.protocolId.description= +tutti.config.option.service.report.backup.directory.shortLabel= +tutti.config.option.service.report.directory.shortLabel= tutti.config.option.site.url.shortLabel= tutti.config.option.startActionFile.description= tutti.config.option.tmp.directory.shortLabel= @@ -1274,6 +1276,9 @@ tutti.main.action.manageDb.mnemonic= tutti.main.action.manageDb.tip= tutti.main.action.reloadTutti= +tutti.main.action.report= +tutti.main.action.report.mnemonic= +tutti.main.action.report.tip= tutti.main.action.selectCruise= tutti.main.action.selectCruise.mnemonic= tutti.main.action.selectCruise.tip= @@ -1404,6 +1409,29 @@ tutti.reinstallDb.step.backupDb= tutti.reinstallDb.step.closeDb= tutti.reinstallDb.step.reloadApplication= +tutti.report.action.cancel= +tutti.report.action.cancel.mnemonic= +tutti.report.action.cancel.tip= +tutti.report.action.chooseInputFile= +tutti.report.action.chooseInputFile.mnemonic= +tutti.report.action.chooseInputFile.tip= +tutti.report.action.chooseOutputFile= +tutti.report.action.chooseOutputFile.mnemonic= +tutti.report.action.chooseOutputFile.tip= +tutti.report.action.generate= +tutti.report.action.generate.mnemonic= +tutti.report.action.generate.tip= +tutti.report.action.showOutputFile= +tutti.report.action.showOutputFile.mnemonic= +tutti.report.action.showOutputFile.tip= +tutti.report.field.inputFile= +tutti.report.field.inputFile.tip= +tutti.report.field.outputFile= +tutti.report.field.outputFile.tip= +tutti.report.field.report= +tutti.report.field.report.tip= +tutti.report.generated= +tutti.report.title= tutti.selectBenthos.title= tutti.selectCruise.action.chooseCruiseExportFile= tutti.selectCruise.action.chooseProgramExportFile= @@ -1563,6 +1591,10 @@ tutti.validator.error.longitude.second.outOfBounds= tutti.validator.error.longitude.start.required= tutti.validator.error.program.zone.required= +tutti.validator.error.report.inputFile.notExists= +tutti.validator.error.report.inputFile.required= +tutti.validator.error.report.outputFile.required= +tutti.validator.error.report.report.required= tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required= tutti.validator.error.speciesFrequency.oneRowRequired= tutti.validator.error.speciesFrequency.step.positiveValue= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-11-12 09:08:02 UTC (rev 1343) @@ -118,15 +118,17 @@ tutti.config.option.i18n.locale.description=Langue utilisée dans l'application tutti.config.option.launch.mode.description=Mode de démarrage de l'application tutti.config.option.persistence.db.attachment.directory.shortLabel=Répertoire des pieèces-jointes -tutti.config.option.persistence.db.backup.directory.shortLabel=Répertoire des sauvegardes +tutti.config.option.persistence.db.backup.directory.shortLabel=Répertoire des sauvegardes de base tutti.config.option.persistence.db.cache.directory.shortLabel=Répertoire du cache de base -tutti.config.option.persistence.db.configurationPath.shortLabel=Chemin vers la configuration +tutti.config.option.persistence.db.configurationPath.shortLabel=Chemin vers la configuration adagio tutti.config.option.persistence.db.directory.shortLabel=Répertoire de la base de données -tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fichier constantes +tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fichier constantes adagio 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.programId.description=Identifiant de la dernière série de campagne utilisée tutti.config.option.protocolId.description=Identifiant du dernier protocole utilisé +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.site.url.shortLabel=URL du site technique tutti.config.option.startActionFile.description=Fichier tutti.config.option.tmp.directory.shortLabel=Répertoire temporaire @@ -1270,6 +1272,9 @@ tutti.main.action.manageDb.mnemonic=G tutti.main.action.manageDb.tip=Gérer la base de données utilisée par l'application tutti.main.action.reloadTutti=Redémarrer l'application +tutti.main.action.report=Rapport +tutti.main.action.report.mnemonic=R +tutti.main.action.report.tip=Générer des rapports tutti.main.action.selectCruise=Sélectionner une campagne tutti.main.action.selectCruise.mnemonic=S tutti.main.action.selectCruise.tip=Sélectionner la campagne à utiliser @@ -1400,6 +1405,23 @@ tutti.reinstallDb.step.backupDb=Sauvegarde de la base dans l'archive %s tutti.reinstallDb.step.closeDb=Fermeture de la base <strong>%s</strong> tutti.reinstallDb.step.reloadApplication=Redémarrage de l'application... +tutti.report.action.cancel=Quitter +tutti.report.action.cancel.mnemonic=Q +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.showOutputFile=Voir +tutti.report.action.showOutputFile.mnemonic=V +tutti.report.action.showOutputFile.tip=Voir le rapport +tutti.report.field.inputFile=Fichier de données +tutti.report.field.inputFile.tip=Chemin vers le fichier de données +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.title=Rapports tutti.selectBenthos.title=Choisissez une espèce du benthos tutti.selectCruise.action.chooseCruiseExportFile=Exporter tutti.selectCruise.action.chooseProgramExportFile=Exporter @@ -1560,6 +1582,10 @@ tutti.validator.error.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 59 tutti.validator.error.longitude.start.required=La longitude de début de traîne est obligatoire tutti.validator.error.program.zone.required=La zone de la série est obligatoire +tutti.validator.error.report.inputFile.notExists=Le fichier d'entrée n'eixste pas +tutti.validator.error.report.inputFile.required=Le fichier d'entrée est obligatoire +tutti.validator.error.report.outputFile.required=Le fichier de sortie est obligatoire +tutti.validator.error.report.report.required=Un modèle de rapport doit être sélectionné tutti.validator.error.speciesFrequency.lengthStepCaracteristic.required=La classe de taille est obligatoire tutti.validator.error.speciesFrequency.oneRowRequired=Au moins une classe de taille doit être observée tutti.validator.error.speciesFrequency.step.positiveValue=Le pas de la classe de taille doit être strictement positif Added: trunk/tutti-ui-swing/src/main/resources/icons/action-report.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-report.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/tutti-ui-swing/src/main/resources/icons/action-update-report.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-update-report.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/BeanValidatorDetectorTest.java =================================================================== --- trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/BeanValidatorDetectorTest.java 2013-11-10 14:11:26 UTC (rev 1342) +++ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/BeanValidatorDetectorTest.java 2013-11-12 09:08:02 UTC (rev 1343) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.create.CreateSpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUIModel; +import fr.ifremer.tutti.ui.swing.content.report.ReportUIModel; import org.junit.BeforeClass; import org.junit.Test; import org.nuiton.validator.AbstractValidatorDetectorTest; @@ -74,6 +75,7 @@ SplitSpeciesBatchUIModel.class, BenthosFrequencyUIModel.class, SpeciesFrequencyUIModel.class, + ReportUIModel.class, }; } @@ -88,7 +90,7 @@ SortedSet<NuitonValidator<?>> validators = detectValidators(ALL_TYPES); assertFalse(validators.isEmpty()); - assertEquals(9, validators.size()); + assertEquals(10, validators.size()); } @Test @@ -103,6 +105,7 @@ CreateBenthosBatchUIModel.class, CreateSpeciesBatchUIModel.class, EditCruiseUIModel.class, + ReportUIModel.class, SpeciesFrequencyUIModel.class, SplitBenthosBatchUIModel.class, SplitSpeciesBatchUIModel.class