From f170723e1f4b0b7c1357037c2331427b436bd738 Mon Sep 17 00:00:00 2001 From: Matthew Slowe Date: Sat, 18 Oct 2025 20:38:01 +0100 Subject: [PATCH] mostly working, output headers need fixing --- .../uk/org/mafoo/cpomssummariser/App.java | 14 +++++++++ .../DataModel/CategoryGroupData.java | 24 ++++++++++++--- .../uk/org/mafoo/cpomssummariser/Record.java | 4 ++- .../org/mafoo/cpomssummariser/Summariser.java | 30 +++++++++++-------- 4 files changed, 54 insertions(+), 18 deletions(-) diff --git a/src/main/java/uk/org/mafoo/cpomssummariser/App.java b/src/main/java/uk/org/mafoo/cpomssummariser/App.java index 8757c07..38ce4df 100644 --- a/src/main/java/uk/org/mafoo/cpomssummariser/App.java +++ b/src/main/java/uk/org/mafoo/cpomssummariser/App.java @@ -2,7 +2,12 @@ package uk.org.mafoo.cpomssummariser; import java.io.*; import java.util.*; +import java.util.Map.Entry; + import org.apache.poi.xssf.usermodel.*; + +import uk.org.mafoo.cpomssummariser.DataModel.CategoryGroupData; + import org.apache.poi.ss.usermodel.*; /** @@ -48,6 +53,7 @@ public class App { } System.out.println(""); } + workbook.close(); file.close(); } @@ -61,6 +67,14 @@ public class App { List records = Parser.parse(data); Summariser summariser = new Summariser(records); + System.out.println("Data imported..."); + + for (Entry> item : summariser.getData().entrySet()) { + System.out.println(item); + } + + Writer.run(summariser, "out.xlsx"); + System.out.println("Ending..."); } } diff --git a/src/main/java/uk/org/mafoo/cpomssummariser/DataModel/CategoryGroupData.java b/src/main/java/uk/org/mafoo/cpomssummariser/DataModel/CategoryGroupData.java index d2170d1..0465c56 100644 --- a/src/main/java/uk/org/mafoo/cpomssummariser/DataModel/CategoryGroupData.java +++ b/src/main/java/uk/org/mafoo/cpomssummariser/DataModel/CategoryGroupData.java @@ -5,20 +5,26 @@ import java.util.Map; public class CategoryGroupData { - String group; + final String parent; + final String name; + final String group; Map sex; Integer SEND; Integer PP; - public CategoryGroupData(String group, Map sex, Integer SEND, Integer PP) { + public CategoryGroupData(String parent, String name, String group, Map sex, Integer SEND, Integer PP) { + this.parent = parent; + this.name = name; this.group = group; this.sex = sex; this.SEND = SEND; this.PP = PP; } - public CategoryGroupData(String group) { + public CategoryGroupData(String parent, String name, String group) { this( + parent, + name, group, new HashMap(), 0, @@ -26,7 +32,7 @@ public class CategoryGroupData { ); this.sex.put("Male", 0); this.sex.put("Female", 0); - // System.out.println("[CategoryGroupData] Created new group: " + group); + System.out.println("[CategoryGroupData] Created new group: " + parent + " / " + group); } public void incrementPP() { @@ -42,6 +48,14 @@ public class CategoryGroupData { this.sex.put(sex, this.sex.get(sex) + 1); } + public String getParent() { + return this.parent; + } + + public String getName() { + return this.name; + } + public int getPP() { return this.PP.intValue(); } @@ -57,6 +71,8 @@ public class CategoryGroupData { public String toString() { StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("Parent="); stringBuilder.append(this.parent); stringBuilder.append(" "); + stringBuilder.append("Name="); stringBuilder.append(this.name); stringBuilder.append(" "); stringBuilder.append("Group="); stringBuilder.append(this.group); stringBuilder.append(" "); stringBuilder.append("Male="); stringBuilder.append(this.getSexValue("Male")); stringBuilder.append(" "); stringBuilder.append("Female="); stringBuilder.append(this.getSexValue("Female")); stringBuilder.append(" "); diff --git a/src/main/java/uk/org/mafoo/cpomssummariser/Record.java b/src/main/java/uk/org/mafoo/cpomssummariser/Record.java index c9319fb..7332d96 100644 --- a/src/main/java/uk/org/mafoo/cpomssummariser/Record.java +++ b/src/main/java/uk/org/mafoo/cpomssummariser/Record.java @@ -58,7 +58,9 @@ public class Record { this.p_send = boolstrToBool(send); this.p_pp = boolstrToBool(pp); - if(! p_groups.contains(group)) p_groups.add("Year " + group); + if(! p_groups.contains("Year " + group)) { + p_groups.add("Year " + group); + } } protected String getSex() { diff --git a/src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java b/src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java index 6444ef1..0a12dfa 100644 --- a/src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java +++ b/src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java @@ -1,5 +1,7 @@ package uk.org.mafoo.cpomssummariser; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -9,29 +11,20 @@ import uk.org.mafoo.cpomssummariser.DataModel.CategoryGroupData; public class Summariser { List records; + List groups = Record.getGroups(); Map> data = new HashMap>(); public Summariser(List records) { this.records = records; - - // Prepare the top-level data structure - for (String c : Record.getTopLevelCategories()) { - Map cat = new HashMap(); - for (String g : Record.getGroups()) { - cat.put(g, new CategoryGroupData(g)); - } - data.put(c, cat); - System.out.println("[Summariser] Created: " + c); - } process(); } - Map data_getOrCreate(String cat) { + Map data_getOrCreate(String parent, String cat) { if(! data.containsKey(cat)) { Map tmp = new HashMap(); for (String g : Record.getGroups()) { - tmp.put(g, new CategoryGroupData(g)); + tmp.put(g, new CategoryGroupData(parent, cat, g)); } data.put(cat, tmp); } @@ -44,7 +37,7 @@ public class Summariser { for (Entry> category : record.getCategories().entrySet()) { for (String subcat : category.getValue()) { String group = record.getGroup(); - Map x = data_getOrCreate(subcat); + Map x = data_getOrCreate(category.getKey(), subcat); CategoryGroupData blob = x.get(group); if(record.getSEND()) blob.incrementSEND(); if(record.getPP()) blob.incrementPP(); @@ -54,4 +47,15 @@ public class Summariser { } } + public List getGroups() { + List clone = new ArrayList(); + clone.addAll(groups); + Collections.sort(clone); // FIXME: Sort is wrong! + return clone; + } + + public Map> getData() { + return data; + } + }