Author: fdesbois Date: 2010-02-09 21:56:04 +0000 (Tue, 09 Feb 2010) New Revision: 341 Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/SynthesisID.java Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css Log: Prepare delegator (menu) for Synthesis Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java 2010-02-09 21:55:10 UTC (rev 340) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/components/Chart.java 2010-02-09 21:56:04 UTC (rev 341) @@ -82,16 +82,19 @@ public StreamResponse onChart(final String title, final int width, final int height) { // return the image return new StreamResponse() { + @Override public String getContentType() { return "image/png"; } + @Override public InputStream getStream() throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); ChartUtilities.writeChartAsPNG(output, currentChart, width, height); return new ByteArrayInputStream(output.toByteArray()); } + @Override public void prepareResponse(Response response) { } }; Added: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/SynthesisID.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/SynthesisID.java (rev 0) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/SynthesisID.java 2010-02-09 21:56:04 UTC (rev 341) @@ -0,0 +1,45 @@ +package fr.ifremer.suiviobsmer.ui.data; + +/** + * SynthesisID$ + * + * Created: 9 févr. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public enum SynthesisID { + + GRAPH_SAMPLING("graph1"), + GRAPH_BOARDING("graph2"), + IND_CONTACT_STATE("ind1"), + IND_NON_COMPLIANCE_BOARDING("ind2"), + IND_ALLEGRO_REACTIVITY("ind3"); + private String blockId; + + SynthesisID(String blockId) { + this.blockId = blockId; + } + + public String getBlockId() { + return blockId; + } + + public static SynthesisID getSynthesisID(String blockId) { + if (blockId.equals(GRAPH_SAMPLING.getBlockId())) { + return GRAPH_SAMPLING; + } else if (blockId.equals(GRAPH_BOARDING.getBlockId())) { + return GRAPH_BOARDING; + } else if (blockId.equals(IND_CONTACT_STATE.getBlockId())) { + return IND_CONTACT_STATE; + } else if (blockId.equals(IND_NON_COMPLIANCE_BOARDING.getBlockId())) { + return IND_NON_COMPLIANCE_BOARDING; + } else if (blockId.equals(IND_ALLEGRO_REACTIVITY.getBlockId())) { + return IND_ALLEGRO_REACTIVITY; + } + return null; + } +} Property changes on: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/data/SynthesisID.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-02-09 21:55:10 UTC (rev 340) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Synthesis.java 2010-02-09 21:56:04 UTC (rev 341) @@ -29,9 +29,11 @@ import fr.ifremer.suiviobsmer.services.ServiceSynthesis; import fr.ifremer.suiviobsmer.ui.base.AbstractFilteredPage; import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage; +import fr.ifremer.suiviobsmer.ui.components.Chart; import fr.ifremer.suiviobsmer.ui.data.BusinessUtils; import fr.ifremer.suiviobsmer.ui.data.ChartUtils; import fr.ifremer.suiviobsmer.ui.data.ChartUtils.ChartType; +import fr.ifremer.suiviobsmer.ui.data.SynthesisID; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -39,8 +41,11 @@ import java.util.List; import java.util.Map; import java.util.SortedMap; +import org.apache.tapestry5.Block; +import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; +import org.apache.tapestry5.annotations.Log; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.SessionState; @@ -80,11 +85,49 @@ @Property private WaoUser user; + @Persist + private SynthesisID activeSynthesis; + + @Inject + private ComponentResources resources; + + @InjectComponent + private Zone delegator; + void setupRender() throws SuiviObsmerException { initSelectFilters(true, false, true); //getFilter().setUnfinishedRowsOnly(false); } + public Block getActiveBlock() { + if (activeSynthesis == null) { + // Initialize default synthesis by Data Sampling + activeSynthesis = SynthesisID.GRAPH_SAMPLING; + } + return resources.getBlock(activeSynthesis.getBlockId()); + } + + public String getActionSynthesisId() { + return SynthesisID.class.getName(); + } + + public String getActionChartType() { + return ChartType.class.getName(); + } + + @Log + Object onAction(String actionType, String actionValue) { + // Delegator action (menu) + if (actionType.equals(SynthesisID.class.getName())) { + activeSynthesis = SynthesisID.valueOf(actionValue); + return delegator.getBody(); + // Change chart type for dataSampling + } else if (actionType.equals(ChartType.class.getName())) { + dataSamplingChartType = ChartType.valueOf(actionValue); + } + return this; + } + /********************* DYNAMICAL GRAPH : DATASAMPLING *********************/ @Persist @@ -147,19 +190,7 @@ } return dataSamplingChartType; } - - void onActionFromSetDataSamplingChartBarType() { - this.dataSamplingChartType = ChartType.BAR; - } - void onActionFromSetDataSamplingChartAreaType() { - this.dataSamplingChartType = ChartType.AREA; - } - - void onActionFromSetDataSamplingChartLineType() { - this.dataSamplingChartType = ChartType.LINE; - } - void onSelectedFromReset() { reset = true; } Modified: trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-02-09 21:55:10 UTC (rev 340) +++ trunk/suiviobsmer-ui/src/main/webapp/Synthesis.tml 2010-02-09 21:56:04 UTC (rev 341) @@ -42,77 +42,102 @@ lectus nunc. Proin molestie molestie augue aliquet suscipit. Sed id enim diam, sed rutrum libero. </p> </div>--> - - <div class="acenter" id="so-datasampling"> - <fieldset> - <legend>Filtres</legend> - <div t:type="zone" t:id="filtersZone" class="so-filters-form" id="so-datasampling-filters"> - <!--<div t:type="zone" t:id="dataSamplingFiltersZone" t:update="show" id="so-datasampling-filters">--> - <form t:type="form" t:id="filtersForm" t:zone="so-datasampling-filters"> - <t:errors /> - <div class="t-beaneditor"> - <div class="filterRow"> - <label>Période: </label> - <t:label t:for="periodBegin" />: - <input t:type="datefield" class="width70" t:id="periodBegin" t:value="period.fromDate" t:format="MM/yyyy"/> - <t:label t:for="periodEnd" />: - <input t:type="datefield" class="width70" t:id="periodEnd" t:value="period.thruDate" t:format="MM/yyyy" /> +<div class="clearfix"> + <div class="fleft" id="so-synthesis-menu"> + <ul> + <li> + <a t:type="actionlink" t:context="[actionSynthesisId,'GRAPH_SAMPLING']" t:zone="so-synthesis-main"> + Graph 1 + </a> + </li> + <li> + <a t:type="actionlink" t:context="[actionSynthesisId,'GRAPH_BOARDING']" t:zone="so-synthesis-main"> + Graph 2 + </a> + </li> + </ul> + </div> + <div t:type="zone" t:id="delegator" class="fleft" t:update="show" id="so-synthesis-main"> + <t:delegate t:to="activeBlock" /> + </div> +</div> + + <t:block t:id="graph1"> + <div class="acenter" id="so-datasampling"> + <fieldset> + <legend>Filtres</legend> + <div t:type="zone" t:id="filtersZone" class="so-filters-form" id="so-datasampling-filters"> + <!--<div t:type="zone" t:id="dataSamplingFiltersZone" t:update="show" id="so-datasampling-filters">--> + <form t:type="form" t:id="filtersForm" t:zone="so-datasampling-filters"> + <t:errors /> + <div class="t-beaneditor"> + <div class="filterRow"> + <label>Période: </label> + <t:label t:for="periodBegin" />: + <input t:type="datefield" class="width70" t:id="periodBegin" t:value="period.fromDate" t:format="MM/yyyy"/> + <t:label t:for="periodEnd" />: + <input t:type="datefield" class="width70" t:id="periodEnd" t:value="period.thruDate" t:format="MM/yyyy" /> + </div> + <div> + <t:if t:test="user.admin"> + <t:label t:for="company" />: + <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> + <input t:type="submit" class="ico22px refresh" t:id="refreshByCompany" value="Refresh" + title="Rafraîchir les filtres en fonction de la société sélectionnée"/> + </t:if> + <t:label t:for="programName" />: + <select t:type="select" t:id="programName" t:model="programSelectModel" value="filter.programName" /> + <input t:type="submit" class="ico22px refresh" t:id="refreshByProgram" value="Refresh" + title="Rafraîchir les secteurs de pêche et les métiers en fonction du programme sélectionné"/> + </div> + <div class="filterRow" t:type="zone" t:id="sampleRowZone" t:update="show"> + <t:label t:for="facadeName" />: + <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="filter.facadeName" /> + <input t:type="submit" class="ico22px refresh" t:id="refreshByFacade" value="Refresh" + title="Rafraîchir les zones et les métiers en fonction de la façade sélectionnée"/> + <t:label t:for="sectorName" />: + <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" value="filter.sectorName" /> + <input t:type="submit" class="ico22px refresh" t:id="refreshBySector" value="Refresh" + title="Rafraîchir les métiers en fonction de la zone sélectionnée"/> + <t:label t:for="sampleRow" />: + <input t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /> + <!--<t:label t:for="program" />: + <input t:type="select" t:id="program" t:model="programSelectModel" value="programId" />--> + </div> + <div class="t-beaneditor-row aright"> + <input t:type="submit" class="ico search-32px" t:id="search" value="Search" title="Création du graphique en fonction des filtres saisies"/> + <input t:type="submit" class="ico undo" t:id="reset" value="Reset" title="Remettre les filtres par défaut" /> + </div> </div> - <div> - <t:if t:test="user.admin"> - <t:label t:for="company" />: - <input t:type="select" t:id="company" t:model="companySelectModel" value="companyId"/> - <input t:type="submit" class="ico22px refresh" t:id="refreshByCompany" value="Refresh" - title="Rafraîchir les filtres en fonction de la société sélectionnée"/> - </t:if> - <t:label t:for="programName" />: - <select t:type="select" t:id="programName" t:model="programSelectModel" value="filter.programName" /> - <input t:type="submit" class="ico22px refresh" t:id="refreshByProgram" value="Refresh" - title="Rafraîchir les secteurs de pêche et les métiers en fonction du programme sélectionné"/> - </div> - <div class="filterRow" t:type="zone" t:id="sampleRowZone" t:update="show"> - <t:label t:for="facadeName" />: - <select t:type="select" t:id="facadeName" t:model="facadeSelectModel" value="filter.facadeName" /> - <input t:type="submit" class="ico22px refresh" t:id="refreshByFacade" value="Refresh" - title="Rafraîchir les zones et les métiers en fonction de la façade sélectionnée"/> - <t:label t:for="sectorName" />: - <select t:type="select" t:id="sectorName" t:model="sectorSelectModel" value="filter.sectorName" /> - <input t:type="submit" class="ico22px refresh" t:id="refreshBySector" value="Refresh" - title="Rafraîchir les métiers en fonction de la zone sélectionnée"/> - <t:label t:for="sampleRow" />: - <input t:type="select" t:id="sampleRow" t:model="sampleRowSelectModel" value="sampleRowId" /> - <!--<t:label t:for="program" />: - <input t:type="select" t:id="program" t:model="programSelectModel" value="programId" />--> - </div> - <div class="t-beaneditor-row aright"> - <input t:type="submit" class="ico search-32px" t:id="search" value="Search" title="Création du graphique en fonction des filtres saisies"/> - <input t:type="submit" class="ico undo" t:id="reset" value="Reset" title="Remettre les filtres par défaut" /> - </div> - </div> - </form> - <!--</div>--> - </div> - </fieldset> - <p class="so-chart-types"> - <a t:type="actionlink" t:id="setDataSamplingChartBarType"> - <img src="${asset:context:}/img/chart-bar.png" alt="Diagramme en bâtons" title="Diagramme en bâtons" /> - </a> - <a t:type="actionlink" t:id="setDataSamplingChartAreaType"> - <img src="${asset:context:}/img/chart-area.png" alt="Diagramme avec zones" title="Diagramme avec zones" /> - </a> - <a t:type="actionlink" t:id="setDataSamplingChartLineType"> - <img src="${asset:context:}/img/chart-line.png" alt="Diagramme linéaire (courbe)" title="Diagramme linéaire (courbe)" /> - </a> - </p> - <t:chart t:width="600" t:height="400" t:chart="dataSamplingChart" /> - </div> - <div class="acenter"> - <t:chart t:width="600" t:height="400" t:chart="boardingBoatsChart" /> - <t:if t:test="boardingResult.maxBoardingBoat"> - <p> - Navire le plus sollicité avec ${boardingResult.maxBoardingValue} embarquements : - ${boardingResult.maxBoardingBoat.name} (${boardingResult.maxBoardingBoat.immatriculation}) + </form> + <!--</div>--> + </div> + </fieldset> + <p class="so-chart-types"> + <a t:type="actionlink" t:context="[actionChartType,'BAR']"> + <img src="${asset:context:}/img/chart-bar.png" alt="Diagramme en bâtons" title="Diagramme en bâtons" /> + </a> + <a t:type="actionlink" t:context="[actionChartType,'AREA']"> + <img src="${asset:context:}/img/chart-area.png" alt="Diagramme avec zones" title="Diagramme avec zones" /> + </a> + <a t:type="actionlink" t:context="[actionChartType,'LINE']"> + <img src="${asset:context:}/img/chart-line.png" alt="Diagramme linéaire (courbe)" title="Diagramme linéaire (courbe)" /> + </a> </p> - </t:if> - </div> + <!--<t:zone t:id="dataSamplingZone" id="so-datasampling-chart" t:update="show">--> + <t:chart t:width="600" t:height="400" t:chart="dataSamplingChart" /> + <!--</t:zone>--> + </div> + </t:block> + <t:block t:id="graph2"> + <div class="acenter"> + <t:chart t:width="600" t:height="400" t:chart="boardingBoatsChart" /> + <t:if t:test="boardingResult.maxBoardingBoat"> + <p> + Navire le plus sollicité avec ${boardingResult.maxBoardingValue} embarquements : + ${boardingResult.maxBoardingBoat.name} (${boardingResult.maxBoardingBoat.immatriculation}) + </p> + </t:if> + </div> + </t:block> </t:layout> Modified: trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css 2010-02-09 21:55:10 UTC (rev 340) +++ trunk/suiviobsmer-ui/src/main/webapp/css/synthesis.css 2010-02-09 21:56:04 UTC (rev 341) @@ -59,6 +59,10 @@ text-indent: 30px; }*/ +div#so-synthesis-main { + width: 90%; +} + div#so-datasampling fieldset { width: 70%; margin-left: auto;