mostly working, output headers need fixing
This commit is contained in:
		| @@ -2,7 +2,12 @@ package uk.org.mafoo.cpomssummariser; | |||||||
|  |  | ||||||
| import java.io.*; | import java.io.*; | ||||||
| import java.util.*; | import java.util.*; | ||||||
|  | import java.util.Map.Entry; | ||||||
|  |  | ||||||
| import org.apache.poi.xssf.usermodel.*; | import org.apache.poi.xssf.usermodel.*; | ||||||
|  |  | ||||||
|  | import uk.org.mafoo.cpomssummariser.DataModel.CategoryGroupData; | ||||||
|  |  | ||||||
| import org.apache.poi.ss.usermodel.*; | import org.apache.poi.ss.usermodel.*; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -48,6 +53,7 @@ public class App { | |||||||
|           } |           } | ||||||
|           System.out.println(""); |           System.out.println(""); | ||||||
|         } |         } | ||||||
|  |         workbook.close(); | ||||||
|         file.close(); |         file.close(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -61,6 +67,14 @@ public class App { | |||||||
|         List<Record> records = Parser.parse(data); |         List<Record> records = Parser.parse(data); | ||||||
|         Summariser summariser = new Summariser(records); |         Summariser summariser = new Summariser(records); | ||||||
|  |  | ||||||
|  |         System.out.println("Data imported..."); | ||||||
|  |  | ||||||
|  |         for (Entry<String, Map<String, CategoryGroupData>> item : summariser.getData().entrySet()) { | ||||||
|  |             System.out.println(item); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Writer.run(summariser, "out.xlsx"); | ||||||
|  |  | ||||||
|         System.out.println("Ending..."); |         System.out.println("Ending..."); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,20 +5,26 @@ import java.util.Map; | |||||||
|  |  | ||||||
| public class CategoryGroupData { | public class CategoryGroupData { | ||||||
|      |      | ||||||
|     String group; |     final String parent; | ||||||
|  |     final String name; | ||||||
|  |     final String group; | ||||||
|     Map<String, Integer> sex; |     Map<String, Integer> sex; | ||||||
|     Integer SEND; |     Integer SEND; | ||||||
|     Integer PP; |     Integer PP; | ||||||
|  |  | ||||||
|     public CategoryGroupData(String group, Map<String, Integer> sex, Integer SEND, Integer PP) { |     public CategoryGroupData(String parent, String name, String group, Map<String, Integer> sex, Integer SEND, Integer PP) { | ||||||
|  |         this.parent = parent; | ||||||
|  |         this.name = name; | ||||||
|         this.group = group; |         this.group = group; | ||||||
|         this.sex = sex; |         this.sex = sex; | ||||||
|         this.SEND = SEND; |         this.SEND = SEND; | ||||||
|         this.PP = PP; |         this.PP = PP; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public CategoryGroupData(String group) { |     public CategoryGroupData(String parent, String name, String group) { | ||||||
|         this( |         this( | ||||||
|  |             parent, | ||||||
|  |             name, | ||||||
|             group, |             group, | ||||||
|             new HashMap<String, Integer>(), |             new HashMap<String, Integer>(), | ||||||
|             0, |             0, | ||||||
| @@ -26,7 +32,7 @@ public class CategoryGroupData { | |||||||
|         ); |         ); | ||||||
|         this.sex.put("Male", 0); |         this.sex.put("Male", 0); | ||||||
|         this.sex.put("Female", 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() { |     public void incrementPP() { | ||||||
| @@ -42,6 +48,14 @@ public class CategoryGroupData { | |||||||
|         this.sex.put(sex, this.sex.get(sex) + 1); |         this.sex.put(sex, this.sex.get(sex) + 1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public String getParent() { | ||||||
|  |         return this.parent; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getName() { | ||||||
|  |         return this.name; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public int getPP() { |     public int getPP() { | ||||||
|         return this.PP.intValue(); |         return this.PP.intValue(); | ||||||
|     } |     } | ||||||
| @@ -57,6 +71,8 @@ public class CategoryGroupData { | |||||||
|  |  | ||||||
|     public String toString() { |     public String toString() { | ||||||
|         StringBuilder stringBuilder = new StringBuilder(); |         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("Group=");   stringBuilder.append(this.group);                     stringBuilder.append(" "); | ||||||
|         stringBuilder.append("Male=");    stringBuilder.append(this.getSexValue("Male"));   stringBuilder.append(" "); |         stringBuilder.append("Male=");    stringBuilder.append(this.getSexValue("Male"));   stringBuilder.append(" "); | ||||||
|         stringBuilder.append("Female=");  stringBuilder.append(this.getSexValue("Female")); stringBuilder.append(" "); |         stringBuilder.append("Female=");  stringBuilder.append(this.getSexValue("Female")); stringBuilder.append(" "); | ||||||
|   | |||||||
| @@ -58,7 +58,9 @@ public class Record { | |||||||
|         this.p_send = boolstrToBool(send); |         this.p_send = boolstrToBool(send); | ||||||
|         this.p_pp = boolstrToBool(pp); |         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() { |     protected String getSex() { | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package uk.org.mafoo.cpomssummariser; | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Collections; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| @@ -9,29 +11,20 @@ import uk.org.mafoo.cpomssummariser.DataModel.CategoryGroupData; | |||||||
| public class Summariser { | public class Summariser { | ||||||
|  |  | ||||||
|     List<Record> records; |     List<Record> records; | ||||||
|  |     List<String> groups = Record.getGroups(); | ||||||
|     Map<String, Map<String, CategoryGroupData>> data = new HashMap<String, Map<String, CategoryGroupData>>(); |     Map<String, Map<String, CategoryGroupData>> data = new HashMap<String, Map<String, CategoryGroupData>>(); | ||||||
|  |  | ||||||
|     public Summariser(List<Record> records) { |     public Summariser(List<Record> records) { | ||||||
|         this.records = records; |         this.records = records; | ||||||
|  |  | ||||||
|         // Prepare the top-level data structure |  | ||||||
|         for (String c : Record.getTopLevelCategories()) { |  | ||||||
|             Map<String, CategoryGroupData> cat = new HashMap<String, CategoryGroupData>(); |  | ||||||
|             for (String g : Record.getGroups()) { |  | ||||||
|                 cat.put(g, new CategoryGroupData(g)); |  | ||||||
|             } |  | ||||||
|             data.put(c, cat); |  | ||||||
|             System.out.println("[Summariser] Created: " + c); |  | ||||||
|         } |  | ||||||
|         process(); |         process(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     Map<String, CategoryGroupData> data_getOrCreate(String cat) { |     Map<String, CategoryGroupData> data_getOrCreate(String parent, String cat) { | ||||||
|         if(! data.containsKey(cat)) { |         if(! data.containsKey(cat)) { | ||||||
|             Map<String, CategoryGroupData> tmp = new HashMap<String, CategoryGroupData>(); |             Map<String, CategoryGroupData> tmp = new HashMap<String, CategoryGroupData>(); | ||||||
|             for (String g : Record.getGroups()) { |             for (String g : Record.getGroups()) { | ||||||
|                 tmp.put(g, new CategoryGroupData(g)); |                 tmp.put(g, new CategoryGroupData(parent, cat, g)); | ||||||
|             } |             } | ||||||
|             data.put(cat, tmp); |             data.put(cat, tmp); | ||||||
|         } |         } | ||||||
| @@ -44,7 +37,7 @@ public class Summariser { | |||||||
|             for (Entry<String, List<String>> category : record.getCategories().entrySet()) { |             for (Entry<String, List<String>> category : record.getCategories().entrySet()) { | ||||||
|                 for (String subcat : category.getValue()) { |                 for (String subcat : category.getValue()) { | ||||||
|                     String group = record.getGroup(); |                     String group = record.getGroup(); | ||||||
|                     Map<String, CategoryGroupData> x = data_getOrCreate(subcat); |                     Map<String, CategoryGroupData> x = data_getOrCreate(category.getKey(), subcat); | ||||||
|                     CategoryGroupData blob = x.get(group); |                     CategoryGroupData blob = x.get(group); | ||||||
|                     if(record.getSEND()) blob.incrementSEND(); |                     if(record.getSEND()) blob.incrementSEND(); | ||||||
|                     if(record.getPP()) blob.incrementPP(); |                     if(record.getPP()) blob.incrementPP(); | ||||||
| @@ -54,4 +47,15 @@ public class Summariser { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public List<String> getGroups() { | ||||||
|  |         List<String> clone = new ArrayList<String>(); | ||||||
|  |         clone.addAll(groups); | ||||||
|  |         Collections.sort(clone); // FIXME: Sort is wrong! | ||||||
|  |         return clone; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Map<String, Map<String, CategoryGroupData>> getData() { | ||||||
|  |         return data; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user