+ *
+ * This file is part of StatoolInfos, simple service statistics tool.
+ *
+ * StatoolInfos is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * StatoolInfos is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with StatoolInfos. If not, see .
+ */
+package fr.devinsy.statoolinfos.htmlize;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import fr.devinsy.statoolinfos.HtmlizerContext;
+import fr.devinsy.statoolinfos.core.Federation;
+import fr.devinsy.statoolinfos.core.Organization;
+import fr.devinsy.statoolinfos.core.StatoolInfosException;
+import fr.devinsy.statoolinfos.htmlize.charts.BarChart;
+import fr.devinsy.statoolinfos.htmlize.charts.BarChartView;
+import fr.devinsy.statoolinfos.htmlize.charts.ChartColor;
+import fr.devinsy.statoolinfos.htmlize.charts.DoughnutChartView;
+import fr.devinsy.statoolinfos.htmlize.charts.PieChart;
+import fr.devinsy.statoolinfos.stats.StatAgent;
+import fr.devinsy.statoolinfos.stats.services.RegistrationStats;
+import fr.devinsy.xidyn.XidynException;
+import fr.devinsy.xidyn.data.TagDataManager;
+import fr.devinsy.xidyn.presenters.PresenterUtils;
+
+/**
+ * The Class SocialNetworksPage.
+ */
+public class OrganizationStatsPage
+{
+ private static Logger logger = LoggerFactory.getLogger(OrganizationStatsPage.class);
+
+ /**
+ * Builds the.
+ *
+ * @throws StatoolInfosException
+ * the statool infos exception
+ * @throws IOException
+ * Signals that an I/O exception has occurred.
+ */
+ public static void buildAll() throws StatoolInfosException, IOException
+ {
+ Federation federation = HtmlizerContext.instance().getFederation();
+
+ for (Organization organization : federation.getOrganizations())
+ {
+ htmlize(organization);
+ }
+ }
+
+ /**
+ * Builds the.
+ *
+ * @throws StatoolInfosException
+ * the statool infos exception
+ * @throws IOException
+ * Signals that an I/O exception has occurred.
+ */
+ public static void htmlize(final Organization organization) throws StatoolInfosException, IOException
+ {
+ try
+ {
+ logger.debug("Building organization stats page {}…");
+
+ File htmlizeDirectory = HtmlizerContext.instance().getHtmlizeDirectory();
+
+ TagDataManager data = new TagDataManager();
+
+ data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(organization));
+ data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(organization.getServices()));
+ data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(organization.getServices()));
+
+ //
+ {
+ RegistrationStats stats = StatAgent.statRegistrationTypes(organization.getServices());
+
+ BarChart bar = Htmlizer.toBarChart(stats);
+ data.setContent("registrationTypeChart", BarChartView.build(bar));
+
+ PieChart pie = new PieChart("Sans");
+ pie.setLegendVisible(false);
+ pie.add("Sans", stats.getNoneCount(), ChartColor.GREEN);
+ pie.add("Autre", stats.getCount() - stats.getNoneCount(), ChartColor.BLUE);
+ data.setContent("registrationNoneTypeChart", DoughnutChartView.build(pie));
+
+ pie = new PieChart("Libre");
+ pie.setLegendVisible(false);
+ pie.add("Sans", stats.getFreeCount(), ChartColor.YELLOW);
+ pie.add("Libre", stats.getCount() - stats.getFreeCount(), ChartColor.BLUE);
+ data.setContent("registrationFreeTypeChart", DoughnutChartView.build(pie));
+
+ pie = new PieChart("Membre");
+ pie.setLegendVisible(false);
+ pie.add("Sans", stats.getMemberCount(), ChartColor.ORANGE);
+ pie.add("Membre", stats.getCount() - stats.getMemberCount(), ChartColor.BLUE);
+ data.setContent("registrationMemberTypeChart", DoughnutChartView.build(pie));
+
+ pie = new PieChart("Client");
+ pie.setLegendVisible(false);
+ pie.add("Sans", stats.getClientCount(), ChartColor.RED);
+ pie.add("Client", stats.getCount() - stats.getClientCount(), ChartColor.BLUE);
+ data.setContent("registrationClientTypeChart", DoughnutChartView.build(pie));
+ }
+
+ //
+ String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml", data).toString();
+
+ //
+ BreadcrumbTrail trail = new BreadcrumbTrail();
+ trail.add(organization.getName(), organization.getTechnicalName() + ".xhtml");
+ String page = WebCharterView.build(content, trail);
+
+ FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + "-stats.xhtml"), page, StandardCharsets.UTF_8);
+ }
+ catch (XidynException exception)
+ {
+ throw new StatoolInfosException("Error building organization stats page: " + exception.getMessage(), exception);
+ }
+ }
+}
diff --git a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java
index 6242e94..00563fe 100644
--- a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java
+++ b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java
@@ -127,6 +127,8 @@ public class ServicePage
data.setAttribute("rawLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + ".properties");
data.setAttribute("rawCheckLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + "-check.xhtml");
+ data.setAttribute("statsLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml");
+
if (StringUtils.isNotBlank(service.getLegalWebsite()))
{
data.setEscapedAttribute("legalLink", "href", service.getLegalWebsite());
diff --git a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml
index 72d2736..b27150b 100644
--- a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml
+++ b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml
@@ -32,6 +32,7 @@
+
Nombre de services : n/a
diff --git a/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml b/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml
new file mode 100644
index 0000000..493f174
--- /dev/null
+++ b/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml
@@ -0,0 +1,41 @@
+
+
+
+
+ StatoolInfos
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml
index a752d9a..4386d61 100644
--- a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml
+++ b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml
@@ -40,6 +40,7 @@
+
Logiciel :
diff --git a/src/fr/devinsy/statoolinfos/stats/StatAgent.java b/src/fr/devinsy/statoolinfos/stats/StatAgent.java
index e8ded18..156b3b3 100644
--- a/src/fr/devinsy/statoolinfos/stats/StatAgent.java
+++ b/src/fr/devinsy/statoolinfos/stats/StatAgent.java
@@ -294,14 +294,14 @@ public class StatAgent
* the federation
* @return the registration stats
*/
- public static RegistrationStats statRegistrationTypes(final Federation federation)
+ public static RegistrationStats statRegistrationTypes(final Services services)
{
RegistrationStats result;
result = new RegistrationStats();
//
- for (Service service : federation.getAllServices())
+ for (Service service : services)
{
if (service.isRegistrationNone())
{