diff --git a/src/fr/devinsy/statoolinfos/core/Organization.java b/src/fr/devinsy/statoolinfos/core/Organization.java index b09dd5f..e8c898f 100644 --- a/src/fr/devinsy/statoolinfos/core/Organization.java +++ b/src/fr/devinsy/statoolinfos/core/Organization.java @@ -43,9 +43,6 @@ public class Organization extends PathPropertyList { private static final long serialVersionUID = -2709210934548224213L; - /** - * The Enum Status. - */ public enum Status { ACTIVE, @@ -53,6 +50,17 @@ public class Organization extends PathPropertyList AWAY } + public enum Type + { + ASSOCIATION, + COMPANY, + COOPERATIVE, + INDIVIDUAL, + INFORMAL, + MICROCOMPANY, + OTHER + } + private Federation federation; private Services services; private File inputFile; @@ -813,6 +821,49 @@ public class Organization extends PathPropertyList return result; } + public Type getType() + { + Type result; + + String value = get("organization.type"); + + if (StringUtils.isBlank(value)) + { + result = null; + } + else if (StringUtils.equalsIgnoreCase(value, "ASSOCIATION")) + { + result = Type.ASSOCIATION; + } + else if (StringUtils.equalsIgnoreCase(value, "COOPERATIVE")) + { + result = Type.COOPERATIVE; + } + else if (StringUtils.equalsIgnoreCase(value, "MICROCOMPANY")) + { + result = Type.MICROCOMPANY; + } + else if (StringUtils.equalsIgnoreCase(value, "COMPANY")) + { + result = Type.COMPANY; + } + else if (StringUtils.equalsIgnoreCase(value, "INDIVIDUAL")) + { + result = Type.INDIVIDUAL; + } + else if (StringUtils.equalsIgnoreCase(value, "OTHER")) + { + result = Type.OTHER; + } + else + { + result = null; + } + + // + return result; + } + /** * Gets the URL all. * diff --git a/src/fr/devinsy/statoolinfos/htmlize/ChartHtmlizer.java b/src/fr/devinsy/statoolinfos/htmlize/ChartHtmlizer.java index e55456e..8483a1c 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/ChartHtmlizer.java +++ b/src/fr/devinsy/statoolinfos/htmlize/ChartHtmlizer.java @@ -60,6 +60,7 @@ import fr.devinsy.statoolinfos.stats.categories.CategoryStat; import fr.devinsy.statoolinfos.stats.categories.CategoryStats; import fr.devinsy.statoolinfos.stats.country.CountryStats; import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats; +import fr.devinsy.statoolinfos.stats.organizations.OrganizationTypeStats; import fr.devinsy.statoolinfos.stats.services.HostProviderTypeStats; import fr.devinsy.statoolinfos.stats.services.HostServerTypeStats; import fr.devinsy.statoolinfos.stats.services.RegistrationStats; @@ -1074,6 +1075,40 @@ public class ChartHtmlizer return result; } + /** + * Htmlize organization type chart. + * + * @param services + * the services + * @return the string + * @throws StatoolInfosException + * the statool infos exception + */ + public static String htmlizeOrganizationTypeChart(final Organizations organizations) throws StatoolInfosException + { + String result; + + OrganizationTypeStats stats = StatAgent.statOrganizationType(organizations); + + // {ASSOCIATION, INFORMAL, COOPERATIVE, MICROCOMPANY, COMPANY, + // INDIVIDUAL, OTHER}, obligatoire). + PieChart pie = new PieChart("Types d'organisations"); + pie.add("Association", stats.getAssociationCount(), ChartColor.GREEN); + pie.add("Informel", stats.getInformalCount(), ChartColor.YELLOW); + pie.add("Coopérative", stats.getCooperativeCount(), ChartColor.ORANGE); + pie.add("Micro-entreprise", stats.getMicrocompanyCount(), ChartColor.RED); + pie.add("Entreprise", stats.getCompanyCount(), ChartColor.VIOLET); + pie.add("Individu", stats.getIndividualCount(), ChartColor.PURPLE); + pie.add("Autre", stats.getOtherCount(), ChartColor.GREY); + pie.add("Inconnu", stats.getUnknownCount(), ChartColor.BLUE); + pie.setLegendPosition(Position.RIGHT); + + result = DoughnutChartView.build(pie); + + // + return result; + } + /** * Htmlize registration chart. * diff --git a/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java b/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java index 575156f..9ac717b 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java @@ -96,11 +96,14 @@ public class FederationStatsPage } data.setContent("serviceDateStatusChart", ChartHtmlizer.htmlizeServiceDateStatusChart(services)); + data.setContent("organisationTypeChart", ChartHtmlizer.htmlizeOrganizationTypeChart(organizations)); + + data.setContent("softwareDistributionPieChart", ChartHtmlizer.htmlizeSoftwareDistributionPieChart(services)); + data.setContent("categoryDistributionPieChart", ChartHtmlizer.htmlizeCatergoryDistributionPieChart(services)); data.setContent("softwareDistributionChart", ChartHtmlizer.htmlizeSoftwareDistributionChart()); - data.setContent("softwareDistributionPieChart", ChartHtmlizer.htmlizeSoftwareDistributionPieChart(services)); + data.setContent("categoryDistributionChart", ChartHtmlizer.htmlizeCategoryDistributionChart()); - data.setContent("categoryDistributionPieChart", ChartHtmlizer.htmlizeCatergoryDistributionPieChart(services)); // String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml", data).toString(); diff --git a/src/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml b/src/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml index 877f571..f858b04 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml @@ -50,6 +50,7 @@
+
diff --git a/src/fr/devinsy/statoolinfos/stats/StatAgent.java b/src/fr/devinsy/statoolinfos/stats/StatAgent.java index b973cdd..59ce591 100644 --- a/src/fr/devinsy/statoolinfos/stats/StatAgent.java +++ b/src/fr/devinsy/statoolinfos/stats/StatAgent.java @@ -44,6 +44,7 @@ import fr.devinsy.statoolinfos.stats.categories.CategoryStat; import fr.devinsy.statoolinfos.stats.categories.CategoryStats; import fr.devinsy.statoolinfos.stats.country.CountryStats; import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats; +import fr.devinsy.statoolinfos.stats.organizations.OrganizationTypeStats; import fr.devinsy.statoolinfos.stats.properties.PropertyStats; import fr.devinsy.statoolinfos.stats.propertyfiles.PropertiesFileStats; import fr.devinsy.statoolinfos.stats.services.HostProviderTypeStats; @@ -328,6 +329,29 @@ public class StatAgent return result; } + /** + * Stat organization type. + * + * @param organization + * the organization + * @return the organization type stats + */ + public static OrganizationTypeStats statOrganizationType(final Organizations organizations) + { + OrganizationTypeStats result; + + result = new OrganizationTypeStats(); + + // + for (Organization organization : organizations) + { + result.inc(organization.getType()); + } + + // + return result; + } + /** * Stat registration types. * diff --git a/src/fr/devinsy/statoolinfos/stats/organizations/OrganizationTypeStats.java b/src/fr/devinsy/statoolinfos/stats/organizations/OrganizationTypeStats.java new file mode 100644 index 0000000..44fcf34 --- /dev/null +++ b/src/fr/devinsy/statoolinfos/stats/organizations/OrganizationTypeStats.java @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2022 Christian Pierre MOMON + * + * 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.stats.organizations; + +import fr.devinsy.statoolinfos.core.Organization; + +/** + * The Class OrganizationTypeStats. + */ +public class OrganizationTypeStats +{ + private long associationCount; + private long informalCount; + private long cooperativeCount; + private long microcompanyCount; + private long companyCount; + private long individualCount; + private long otherCount; + private long unknownCount; + + /** + * Instantiates a new organization type stats. + */ + public OrganizationTypeStats() + { + this.associationCount = 0; + this.informalCount = 0; + this.cooperativeCount = 0; + this.microcompanyCount = 0; + this.companyCount = 0; + this.individualCount = 0; + this.otherCount = 0; + this.unknownCount = 0; + } + + public long getAssociationCount() + { + return this.associationCount; + } + + public long getCompanyCount() + { + return this.companyCount; + } + + public long getCooperativeCount() + { + return this.cooperativeCount; + } + + public long getIndividualCount() + { + return this.individualCount; + } + + public long getInformalCount() + { + return this.informalCount; + } + + public long getMicrocompanyCount() + { + return this.microcompanyCount; + } + + public long getOtherCount() + { + return this.otherCount; + } + + public long getUnknownCount() + { + return this.unknownCount; + } + + /** + * Inc. + * + * @param type + * the type + */ + public void inc(final Organization.Type type) + { + if (type == null) + { + this.unknownCount += 1; + } + else + { + switch (type) + { + case ASSOCIATION: + this.associationCount += 1; + break; + case COMPANY: + this.companyCount += 1; + break; + case COOPERATIVE: + this.cooperativeCount += 1; + break; + case INDIVIDUAL: + this.individualCount += 1; + break; + case INFORMAL: + this.informalCount += 1; + break; + case MICROCOMPANY: + this.microcompanyCount += 1; + break; + case OTHER: + this.otherCount += 1; + break; + default: + this.unknownCount += 1; + } + } + } +}