Author: chatellier Date: 2010-12-15 15:35:37 +0000 (Wed, 15 Dec 2010) New Revision: 417 Log: Modification des rapports (controle/selection) Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties trunk/coser-business/src/test/java/fr/ifremer/coser/services/PublicationServiceTest.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2010-12-15 15:35:37 UTC (rev 417) @@ -65,7 +65,9 @@ import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConstants.Category; import fr.ifremer.coser.bean.AbstractDataContainer; +import fr.ifremer.coser.bean.Control; import fr.ifremer.coser.bean.Project; +import fr.ifremer.coser.bean.Selection; import fr.ifremer.coser.command.Command; import fr.ifremer.coser.control.ControlError; import fr.ifremer.coser.control.ControlErrorGroup; @@ -417,7 +419,7 @@ } /** - * Extrait les logs des modifications faites sur un conteneur au format html. + * Extrait les logs des modifications faites sur un control au format html. * * @param project project * @param container data container @@ -426,7 +428,7 @@ * * @see AbstractDataContainer#getHistoryCommand() */ - public File extractLogAsHTML(Project project, AbstractDataContainer container) throws CoserBusinessException { + public File extractControlLogAsHTML(Project project, Control container) throws CoserBusinessException { File exportHtmlFile = null; PrintStream out = null; try { @@ -438,13 +440,15 @@ out = new PrintStream(exportHtmlFile, "utf-8"); out.println("<html><head>"); - out.println("<title>" + _("coser.business.publication.logexporttitle", project.getName())+ "</title>"); + out.println("<title>" + _("coser.business.publication.controllogexporttitle", project.getName())+ "</title>"); out.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); out.println("</head><body>"); - out.println("<h1 style='text-align:center'>" + _("coser.business.publication.logexporttitle", project.getName()) + "</h1>"); + // header + out.println("<h1 style='text-align:center'>" + _("coser.business.publication.controllogexporttitle", project.getName()) + "</h1>"); // partie specific : commandes + out.println("<h2>" + _("coser.business.publication.datamodification") + "</h2>"); out.println("<ol>"); for (Command command : container.getHistoryCommand()) { out.println("<li>" + command.getLogString(container) + "</li>"); @@ -460,4 +464,59 @@ } return exportHtmlFile; } + + /** + * Extrait les logs des modifications faites sur une selection au format html. + * + * @param project project + * @param selection data container + * @return extractedFile + * @throws CoserBusinessException + * + * @see AbstractDataContainer#getHistoryCommand() + */ + public File extractSelectionLogAsHTML(Project project, Selection selection) throws CoserBusinessException { + File exportHtmlFile = null; + PrintStream out = null; + try { + exportHtmlFile = File.createTempFile("log-", ".html"); + if (log.isInfoEnabled()) { + log.info("Generating HTML report to " + exportHtmlFile.getAbsolutePath()); + } + + out = new PrintStream(exportHtmlFile, "utf-8"); + + out.println("<html><head>"); + out.println("<title>" + _("coser.business.publication.selectionlogexporttitle", selection.getName(), project.getName())+ "</title>"); + out.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); + out.println("</head><body>"); + + // header + out.println("<h1 style='text-align:center'>" + _("coser.business.publication.selectionlogexporttitle", selection.getName(), project.getName()) + "</h1>"); + + // partie resumé de selection + out.println("<h2>" + _("coser.business.publication.selectionchoices") + "</h2>"); + out.println("<ul>"); + out.println("<li>" + _("coser.business.common.years") + " : " + StringUtils.join(selection.getSelectedYears(), " ,") + "</li>"); + out.println("<li>" + _("coser.business.common.strata") + " : " + StringUtils.join(selection.getSelectedStrata(), " ,") + "</li>"); + out.println("<li>" + _("coser.business.common.species") + " : " + StringUtils.join(selection.getSelectedSpecies(), " ,") + "</li>"); + out.println("</ul>"); + + // partie specific : commandes + out.println("<h2>" + _("coser.business.publication.datamodification") + "</h2>"); + out.println("<ol>"); + for (Command command : selection.getHistoryCommand()) { + out.println("<li>" + command.getLogString(selection) + "</li>"); + } + out.println("</ol>"); + out.println("</body></html>"); + } + catch (IOException ex) { + throw new CoserBusinessException("Can't export logs", ex); + } + finally { + IOUtils.closeQuietly(out); + } + return exportHtmlFile; + } } Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2010-12-15 15:35:37 UTC (rev 417) @@ -71,11 +71,14 @@ coser.business.matrix.lengthstructure=Length structures coser.business.matrix.occurrence=Occurrence coser.business.matrix.samplingeffort=Sampling effort +coser.business.publication.controllogexporttitle=Selection report for %s (project %s) +coser.business.publication.datamodification=Data modifications coser.business.publication.errorexportlines=Lines coser.business.publication.errorexporttitle=Error report for project %s coser.business.publication.errorgraph=Graph coser.business.publication.errorgraphs=Graphs -coser.business.publication.logexporttitle=Modifications list for project %s +coser.business.publication.selectionchoices=Selection choices +coser.business.publication.selectionlogexporttitle= coser.business.result.rsufiResultAlreadyExists=Result %s already exists \! coser.business.selection.notValidatedControl=Not validated control \! coser.config.control.diffcatchlength.description=Percentage difference allowed between catch and length (in percent, for example 5% set 5.0) Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2010-12-15 15:35:37 UTC (rev 417) @@ -71,11 +71,14 @@ coser.business.matrix.lengthstructure=Structures en taille coser.business.matrix.occurrence=Occurrence coser.business.matrix.samplingeffort=Effort d'\u00E9chantillonnage +coser.business.publication.controllogexporttitle=Rapport de contr\u00F4le (projet %s) +coser.business.publication.datamodification=Modifications sur les donn\u00E9es coser.business.publication.errorexportlines=Lignes coser.business.publication.errorexporttitle=Rapport d'erreur pour le projet %s coser.business.publication.errorgraph=Graphique coser.business.publication.errorgraphs=Graphiques -coser.business.publication.logexporttitle=Liste des modifications pour le projet %s +coser.business.publication.selectionchoices=Choix de s\u00E9lections +coser.business.publication.selectionlogexporttitle=Rapport de la s\u00E9lection %s (projet %s) coser.business.result.rsufiResultAlreadyExists=Le r\u00E9sultat %D existe d\u00E9j\u00E0 \! coser.business.selection.notValidatedControl=Contr\u00F4le non valid\u00E9 \! coser.config.control.diffcatchlength.description=Pourcentage d'\u00E9cart tol\u00E9r\u00E9 entre les captures et les tailles (en pourcent, par exemple pour 5% mettre 5.0) Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/PublicationServiceTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/services/PublicationServiceTest.java 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/PublicationServiceTest.java 2010-12-15 15:35:37 UTC (rev 417) @@ -30,6 +30,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -47,7 +48,9 @@ import fr.ifremer.coser.CoserConstants.Category; import fr.ifremer.coser.CoserConstants.ValidationLevel; import fr.ifremer.coser.bean.Project; +import fr.ifremer.coser.bean.Selection; import fr.ifremer.coser.command.DeleteLineCommand; +import fr.ifremer.coser.command.MergeSpeciesCommand; import fr.ifremer.coser.command.ModifyFieldCommand; import fr.ifremer.coser.control.DiffCatchLengthControlError; import fr.ifremer.coser.control.ControlError; @@ -140,16 +143,15 @@ } /** - * Test le rapport de log en html. + * Test le rapport de control en html. * * @throws CoserBusinessException * @throws IOException */ @Test - public void testLogExportHtml() throws CoserBusinessException, IOException { + public void testControlLogExportHtml() throws CoserBusinessException, IOException { Project project = createTestProject(projectService, false); - Assert.assertEquals(30, project.getControl().getLength().size()); // delete line 2 DeleteLineCommand command = new DeleteLineCommand(); @@ -166,7 +168,7 @@ commandService.doAction(command2, project, project.getControl()); - File htmlExport = publicationService.extractLogAsHTML(project, project.getControl()); + File htmlExport = publicationService.extractControlLogAsHTML(project, project.getControl()); // some asserts String fileContent = FileUtils.readFileToString(htmlExport); @@ -175,6 +177,45 @@ Assert.assertTrue(fileContent.indexOf("from \"251.86\" to \"392.98\"") > 0); // clean all + //htmlExport.delete(); + } + + /** + * Test le rapport de selection en html. + * + * @throws CoserBusinessException + * @throws IOException + */ + @Test + public void testSelectionLogExportHtml() throws CoserBusinessException, IOException { + + Project project = createTestProject(projectService, true); + Selection selection = projectService.initProjectSelection(project); + selection.setSelectedYears(Collections.singletonList("2010")); + selection.setSelectedStrata(Collections.singletonList("EG34EB")); + selection.setSelectedSpecies(Collections.singletonList("COSER_SPECIES1")); + + // merge species + MergeSpeciesCommand command = new MergeSpeciesCommand(); + command.setComment("marged because i wanted to !"); + command.setNewSpecyName("TESTMERGE"); + command.setSpeciesNames(new String[]{"COSER_SPECIES2","COSER_SPECIES3"}); + commandService.doAction(command, project, selection); + + commandService.doAction(command, project, selection); + + File htmlExport = publicationService.extractSelectionLogAsHTML(project, selection); + + // some asserts + String fileContent = FileUtils.readFileToString(htmlExport); + Assert.assertTrue(fileContent.indexOf("COSER_SPECIES1") > 0); + Assert.assertTrue(fileContent.indexOf("2010") > 0); + Assert.assertTrue(fileContent.indexOf("EG34EB") > 0); + Assert.assertTrue(fileContent.indexOf("TESTMERGE") > 0); + Assert.assertTrue(fileContent.indexOf("COSER_SPECIES2") > 0); + Assert.assertTrue(fileContent.indexOf("COSER_SPECIES3") > 0); + + // clean all htmlExport.delete(); } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlHandler.java 2010-12-15 15:35:37 UTC (rev 417) @@ -1045,7 +1045,7 @@ File htmlFile = null; try { - htmlFile = publicationService.extractLogAsHTML(project, project.getControl()); + htmlFile = publicationService.extractControlLogAsHTML(project, project.getControl()); browseFile(controlView, htmlFile); } catch (CoserBusinessException ex) { throw new CoserException("Can't generate html report", ex); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/control/ControlView.jaxx 2010-12-15 15:35:37 UTC (rev 417) @@ -60,7 +60,7 @@ onActionPerformed="getHandler().displayLengthStructureGraph(this)"/> <JToolBar.Separator /> <JButton icon="report.png" onActionPerformed="getHandler().displayLogReport(this)" - text="coser.ui.control.logreport" /> + text="coser.ui.control.controlreport" /> <JToolBar.Separator /> <JButton icon="accept.png" onActionPerformed="getHandler().validControl(this)" text="coser.ui.control.validcontrol" toolTipText="coser.ui.control.validcontroltip" Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionDetailsView.jaxx 2010-12-15 15:35:37 UTC (rev 417) @@ -59,7 +59,7 @@ <JButton id="saveSelectionButton" text="coser.ui.selection.details.saveSelection" icon="disk.png" onActionPerformed="getHandler().saveSelection(this)" /> <JButton icon="report.png" onActionPerformed="getHandler().displayLogReport(this)" - text="coser.ui.selection.logreport" /> + text="coser.ui.selection.selectionreport" /> <JToolBar.Separator /> <JButton icon="arrow_rotate_clockwise.png" onActionPerformed="getHandler().reloadControlData(this)" text="coser.ui.selection.reloadcontroldata" /> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-12-15 15:35:37 UTC (rev 417) @@ -1180,7 +1180,7 @@ File htmlFile = null; try { - htmlFile = publicationService.extractLogAsHTML(project, selection); + htmlFile = publicationService.extractSelectionLogAsHTML(project, selection); browseFile(view, htmlFile); } catch (CoserBusinessException ex) { throw new CoserException("Can't generate html report", ex); Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2010-12-15 15:35:37 UTC (rev 417) @@ -28,6 +28,7 @@ coser.ui.control.controlSaved=Control saved. coser.ui.control.controlTitle=Control coser.ui.control.controlValidated=Control validated and saved. +coser.ui.control.controlreport=Control report coser.ui.control.dataMenuDeleteSelected=Deleted selected lines coser.ui.control.dataMenuLabel=Data menu coser.ui.control.dataMenuReplace=Replace in %s for selection @@ -39,7 +40,6 @@ coser.ui.control.globalErrorMenuGenerateHTML=Export as HTML coser.ui.control.globalErrorMenuSelectAll=Select all lines coser.ui.control.graph.species=Species \: -coser.ui.control.logreport=Modification report coser.ui.control.progressStep=Step %d/%d \: %s coser.ui.control.project.requiredauthor=Author field is required coser.ui.control.project.requiredcatchFile=Catch file is required @@ -184,7 +184,6 @@ coser.ui.selection.fusion.title=Merge coser.ui.selection.fusionError=Merge error coser.ui.selection.invalidFusionName=Selection fusion name not found in referential \! -coser.ui.selection.logreport=Modification report coser.ui.selection.maturitySpecies=L4 \: Species with maturity (%d/%d) coser.ui.selection.nonJustifiedMaturity=Maturity species list is not all selected.\nYou must justify this selection with a comment. coser.ui.selection.nonJustifiedOccurenceDensity=Filtered list selection doesn't match filter selection.\nYou must justify this selection with a comment. @@ -203,6 +202,7 @@ coser.ui.selection.selectionSaved=Selection saved. coser.ui.selection.selectionTitle=Selection coser.ui.selection.selectionValidated=Selection validated and saved. +coser.ui.selection.selectionreport=Selection report coser.ui.selection.sizeAllYearSpecies=L3 \: Species with size all year (%d/%d) coser.ui.selection.speciesMenuFusion=Merge coser.ui.selection.speciesMerged=Species merged. Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-12-15 15:01:13 UTC (rev 416) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2010-12-15 15:35:37 UTC (rev 417) @@ -28,6 +28,7 @@ coser.ui.control.controlSaved=Contr\u00F4le sauv\u00E9. coser.ui.control.controlTitle=Contr\u00F4le coser.ui.control.controlValidated=Contr\u00F4le valid\u00E9 et sauv\u00E9. +coser.ui.control.controlreport=Rapport de contr\u00F4le coser.ui.control.dataMenuDeleteSelected=Supprimer les lignes s\u00E9lectionn\u00E9es coser.ui.control.dataMenuLabel=Menu des donn\u00E9es coser.ui.control.dataMenuReplace=Remplacer dans %s pour la s\u00E9lection @@ -39,7 +40,6 @@ coser.ui.control.globalErrorMenuGenerateHTML=Exporter en HTML coser.ui.control.globalErrorMenuSelectAll=S\u00E9lectionner toutes les lignes coser.ui.control.graph.species=Esp\u00E8ces \: -coser.ui.control.logreport=Rapport des modifications coser.ui.control.progressStep=\u00C9tape %d/%d \: %s coser.ui.control.project.requiredauthor=Le champ 'auteur' est requis coser.ui.control.project.requiredcatchFile=Le fichier 'capture' est requis @@ -184,7 +184,6 @@ coser.ui.selection.fusion.title=Fusion coser.ui.selection.fusionError=Erreur de fusion coser.ui.selection.invalidFusionName=Le nom de fusion choisit n'est pas pr\u00E9sent de le r\u00E9f\u00E9rentiel \! -coser.ui.selection.logreport=Rapport des modifications coser.ui.selection.maturitySpecies=L4 \: Esp\u00E8ces avec maturit\u00E9 (%d/%d) coser.ui.selection.nonJustifiedMaturity=La liste esp\u00E8ces avec maturit\u00E9 n'est pas enti\u00E8rement s\u00E9lectionn\u00E9e.\nVous devez justifier cette s\u00E9lection par un commentaire. coser.ui.selection.nonJustifiedOccurenceDensity=La s\u00E9lection de la liste filtr\u00E9e ne correspond pas \u00E0 la s\u00E9lection op\u00E9r\u00E9e par le filtre.\nVous devez justifier cette s\u00E9lection par un commentaire. @@ -203,6 +202,7 @@ coser.ui.selection.selectionSaved=S\u00E9lection sauv\u00E9e. coser.ui.selection.selectionTitle=S\u00E9lection coser.ui.selection.selectionValidated=S\u00E9lection valid\u00E9e et sauv\u00E9e. +coser.ui.selection.selectionreport=Rapport de la s\u00E9lection coser.ui.selection.sizeAllYearSpecies=L3 \: Esp\u00E8ces avec taille pour toutes les ann\u00E9es (%d/%d) coser.ui.selection.speciesMenuFusion=Fusion coser.ui.selection.speciesMerged=Esp\u00E8ces fusionn\u00E9es.