From 377561027453a269e9fc2778d50082ae6bd72177 Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Sun, 18 Oct 2020 04:52:22 +0200 Subject: [PATCH] Added category logo management. --- src/fr/devinsy/statoolinfos/core/Category.java | 13 +++++++++++++ .../statoolinfos/htmlize/CategoriesPage.java | 3 ++- .../statoolinfos/htmlize/CategoryPage.java | 5 +++-- .../devinsy/statoolinfos/htmlize/Htmlizer.java | 6 ++++++ .../statoolinfos/htmlize/SoftwaresPage.java | 3 ++- .../statoolinfos/htmlize/categories.xhtml | 9 ++++++--- .../devinsy/statoolinfos/htmlize/category.xhtml | 12 ++++++++---- .../statoolinfos/htmlize/socialNetworks.xhtml | 2 +- .../devinsy/statoolinfos/htmlize/softwares.xhtml | 5 ++++- .../htmlize/stuff/categories/default.png | Bin 0 -> 8020 bytes 10 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 src/fr/devinsy/statoolinfos/htmlize/stuff/categories/default.png diff --git a/src/fr/devinsy/statoolinfos/core/Category.java b/src/fr/devinsy/statoolinfos/core/Category.java index c290a84..ec6711f 100644 --- a/src/fr/devinsy/statoolinfos/core/Category.java +++ b/src/fr/devinsy/statoolinfos/core/Category.java @@ -28,6 +28,7 @@ public class Category private String name; private String description; private StringList softwares; + private String logoPath; /** * Instantiates a new category. @@ -37,6 +38,7 @@ public class Category this.name = name; this.description = description; this.softwares = new StringList(); + this.logoPath = "categories/default.png"; } /** @@ -54,6 +56,7 @@ public class Category this.name = name; this.description = description; this.softwares = new StringList(softwares); + this.logoPath = "categories/default.png"; } public String getDescription() @@ -61,6 +64,11 @@ public class Category return this.description; } + public String getLogoPath() + { + return this.logoPath; + } + public String getName() { return this.name; @@ -115,6 +123,11 @@ public class Category this.description = description; } + public void setLogoPath(final String logoPath) + { + this.logoPath = logoPath; + } + public void setName(final String name) { this.name = name; diff --git a/src/fr/devinsy/statoolinfos/htmlize/CategoriesPage.java b/src/fr/devinsy/statoolinfos/htmlize/CategoriesPage.java index 7f6da06..85f7451 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/CategoriesPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/CategoriesPage.java @@ -59,9 +59,10 @@ public class CategoriesPage int index = 0; for (CategoryStat stat : stats) { - data.setEscapedContent("categoryListLine", index, "categoryListLineNameLink", stat.getCategory().getName()); + data.setEscapedContent("categoryListLine", index, "categoryListLineNameValue", stat.getCategory().getName()); data.setAttribute("categoryListLine", index, "categoryListLineNameLink", "href", "category-" + stat.getCategory().getTechnicalName() + ".xhtml"); data.setAttribute("categoryListLine", index, "categoryListLineNameLink", "title", stat.getCategory().getDescription()); + data.setAttribute("categoryListLine", index, "categoryListLineNameLogo", "src", stat.getCategory().getLogoPath()); data.setEscapedContent("categoryListLine", index, "categoryListLineSoftwares", stat.getCategory().getSoftwares().sort().toStringWithFrenchCommas()); data.setContent("categoryListLine", index, "categoryListLineOrganizationCount", stat.getOrganizationCount()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/CategoryPage.java b/src/fr/devinsy/statoolinfos/htmlize/CategoryPage.java index beb274d..ed363d5 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/CategoryPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/CategoryPage.java @@ -56,8 +56,9 @@ public class CategoryPage TagDataManager data = new TagDataManager(); - data.setContent("categoryName", category.getName()); - data.setContent("categoryDescription", category.getDescription()); + data.setAttribute("categoryLogo", "src", category.getLogoPath()); + data.setEscapedContent("categoryName", category.getName()); + data.setEscapedContent("categoryDescription", category.getDescription()); data.setContent("categorySoftwares", category.getSoftwares().sort().toStringWithFrenchCommas()); data.setContent("serviceCount", services.size()); data.setContent("serviceListView", ServiceListView.build(services.sortByName())); diff --git a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java index cc5c8b9..fc50974 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java +++ b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java @@ -195,6 +195,12 @@ public class Htmlizer StatoolInfosUtils.copyRessource(source + "circle-icons/color/tools.png", color); StatoolInfosUtils.copyRessource(source + "circle-icons/mono/tools.png", mono); + + // + File categories = new File(targetDirectory, "categories"); + categories.mkdirs(); + StatoolInfosUtils.copyRessource(source + "categories/default.png", categories); + } } diff --git a/src/fr/devinsy/statoolinfos/htmlize/SoftwaresPage.java b/src/fr/devinsy/statoolinfos/htmlize/SoftwaresPage.java index 8770459..868875f 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/SoftwaresPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/SoftwaresPage.java @@ -62,9 +62,10 @@ public class SoftwaresPage data.setEscapedContent("softwareListLine", index, "softwareListLineNameLink", stat.getName()); data.setAttribute("softwareListLine", index, "softwareListLineNameLink", "href", "software-" + stat.getTechnicalName() + ".xhtml"); - data.setEscapedContent("softwareListLine", index, "softwareListLineCategoryLink", stat.getCategory().getName()); + data.setEscapedContent("softwareListLine", index, "softwareListLineCategoryName", stat.getCategory().getName()); data.setAttribute("softwareListLine", index, "softwareListLineCategoryLink", "href", "category-" + stat.getCategory().getTechnicalName() + ".xhtml"); data.setAttribute("softwareListLine", index, "softwareListLineCategoryLink", "title", stat.getCategory().getDescription()); + data.setAttribute("softwareListLine", index, "softwareListLineCategoryLogo", "src", stat.getCategory().getLogoPath()); data.setEscapedContent("softwareListLine", index, "softwareListLineSoftwares", stat.getCategory().getName()); data.setContent("softwareListLine", index, "softwareListLineOrganizationCount", stat.getOrganizationCount()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/categories.xhtml b/src/fr/devinsy/statoolinfos/htmlize/categories.xhtml index b257a6d..dab523c 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/categories.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/categories.xhtml @@ -11,7 +11,7 @@ -
+

Catégories

@@ -20,7 +20,7 @@ - + @@ -30,7 +30,10 @@ diff --git a/src/fr/devinsy/statoolinfos/htmlize/category.xhtml b/src/fr/devinsy/statoolinfos/htmlize/category.xhtml index 99bc951..d4039e6 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/category.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/category.xhtml @@ -12,10 +12,14 @@
-

Catégorie n/a

- -

n/a

-
Logiciels : n/a
+
+
+ +
+
+

n/a

+
+
Nombre de services : n/a
diff --git a/src/fr/devinsy/statoolinfos/htmlize/socialNetworks.xhtml b/src/fr/devinsy/statoolinfos/htmlize/socialNetworks.xhtml index 858f0d2..a72962e 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/socialNetworks.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/socialNetworks.xhtml @@ -15,7 +15,7 @@ diff --git a/src/fr/devinsy/statoolinfos/htmlize/softwares.xhtml b/src/fr/devinsy/statoolinfos/htmlize/softwares.xhtml index cb13b8c..24b3ebd 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/softwares.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/softwares.xhtml @@ -33,7 +33,10 @@ n/a
diff --git a/src/fr/devinsy/statoolinfos/htmlize/stuff/categories/default.png b/src/fr/devinsy/statoolinfos/htmlize/stuff/categories/default.png new file mode 100644 index 0000000000000000000000000000000000000000..ee06df2fb5f05a26b8da0be3913c8a7dd034a027 GIT binary patch literal 8020 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
q-G< z=0q2+|F4hU#b11j(38&?bkR6)`Ns0E%Qt^apqGayaQ&tu1GST}(00=}(gJFu;kE_{ z6BCdmK+}Mz$ap}M07V8QYck${(=ak|5cwZI7^qYQ0dEi^kPu+jfA~O;*t|dd3jqK8 z((n9t6G-P+e{%g>rY1M|{R2_naJT=F0|YAjus#O@f$?6JwrE=uV-+_PQr5*C}A2^!d74G5Xr!KbL@kWf_%UxZ}M$tsh#9s&Q>2)(a5N;8E%hD~} z$L+ein5G7;T9^s|fP|x6_`{ICenBc>>SBLzRRH>&4H4u2(**6KE@psq@qnwS+z9hR zSfWtA{POa$@=9U=NT54H#avhK9|)kNF6N0w`>Q}8p`oF&p?}Gu0zDw|*RNlP$SFV+ z6l8!FGC>$Wv`d(bUyu-hK+FFJLl++87U<=V_CopbpJTeXqJq)tVq&!X|3JID{Ttao zIMDYGuDcrq?h8M^HVuLR0zm*cettD~Hx;+@OH@?gdGTNH7Vv;Sg@2WNy)^zq+iH;W zAp!26_J0chbWnr*C)zo9Al%pGT+aVNhq`$DC;GVxf&d)=bA?3t1<8hb`FJ7W?p`i` z#6B-U^t^oGD*ApXBwPl8@^yy?%7l0Yd7-`hJY<7HJpK=f{u$(tME_faKO&vmZqWY- zr0t9T4}s2gsN(D5=b
Nom de la catégorieNom de la catégorie Logiciels Services Organisations
- n/a + + +  n/a + n/a n/a - n/a + + +  n/a + n/a n/a