import (not working)
This commit is contained in:
		
							
								
								
									
										145
									
								
								pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |   <modelVersion>4.0.0</modelVersion> | ||||||
|  |  | ||||||
|  |   <groupId>uk.org.mafoo.cpomssummariser</groupId> | ||||||
|  |   <artifactId>cpomssummariser</artifactId> | ||||||
|  |   <version>1.0-SNAPSHOT</version> | ||||||
|  |  | ||||||
|  |   <name>cpomssummariser</name> | ||||||
|  |   <!-- FIXME change it to the project's website --> | ||||||
|  |   <url>http://www.example.com</url> | ||||||
|  |  | ||||||
|  |   <properties> | ||||||
|  |     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||||
|  |     <maven.compiler.release>17</maven.compiler.release> | ||||||
|  |   </properties> | ||||||
|  |  | ||||||
|  |   <dependencyManagement> | ||||||
|  |     <dependencies> | ||||||
|  |       <dependency> | ||||||
|  |         <groupId>org.junit</groupId> | ||||||
|  |         <artifactId>junit-bom</artifactId> | ||||||
|  |         <version>5.11.0</version> | ||||||
|  |         <type>pom</type> | ||||||
|  |         <scope>import</scope> | ||||||
|  |       </dependency> | ||||||
|  |     </dependencies> | ||||||
|  |   </dependencyManagement> | ||||||
|  |  | ||||||
|  |   <dependencies> | ||||||
|  |     <dependency> | ||||||
|  |       <groupId>org.junit.jupiter</groupId> | ||||||
|  |       <artifactId>junit-jupiter-api</artifactId> | ||||||
|  |       <scope>test</scope> | ||||||
|  |     </dependency> | ||||||
|  |     <!-- Optionally: parameterized tests support --> | ||||||
|  |     <dependency> | ||||||
|  |       <groupId>org.junit.jupiter</groupId> | ||||||
|  |       <artifactId>junit-jupiter-params</artifactId> | ||||||
|  |       <scope>test</scope> | ||||||
|  |     </dependency> | ||||||
|  |  | ||||||
|  |     <dependency>  | ||||||
|  |       <groupId>org.apache.poi</groupId> | ||||||
|  |       <artifactId>poi</artifactId>  | ||||||
|  |       <version>5.3.0</version>  | ||||||
|  |     </dependency>  | ||||||
|  |     <dependency>  | ||||||
|  |       <groupId>org.apache.poi</groupId>  | ||||||
|  |       <artifactId>poi-ooxml</artifactId>  | ||||||
|  |       <version>5.3.0</version>  | ||||||
|  |     </dependency> | ||||||
|  |     <dependency> | ||||||
|  |       <groupId>org.jxls</groupId> | ||||||
|  |       <artifactId>jxls-jexcel</artifactId> | ||||||
|  |       <version>1.0.9</version> | ||||||
|  |     </dependency> | ||||||
|  |     <dependency> | ||||||
|  |         <groupId>org.dhatim</groupId> | ||||||
|  |         <artifactId>fastexcel-reader</artifactId> | ||||||
|  |         <version>0.18.1</version> | ||||||
|  |     </dependency> | ||||||
|  |     <dependency> | ||||||
|  |         <groupId>org.dhatim</groupId> | ||||||
|  |         <artifactId>fastexcel</artifactId> | ||||||
|  |         <version>0.18.1</version> | ||||||
|  |     </dependency> | ||||||
|  |   </dependencies> | ||||||
|  |  | ||||||
|  |   <build> | ||||||
|  |     <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> | ||||||
|  |       <plugins> | ||||||
|  |         <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-clean-plugin</artifactId> | ||||||
|  |           <version>3.4.0</version> | ||||||
|  |         </plugin> | ||||||
|  |         <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-resources-plugin</artifactId> | ||||||
|  |           <version>3.3.1</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-compiler-plugin</artifactId> | ||||||
|  |           <version>3.13.0</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-surefire-plugin</artifactId> | ||||||
|  |           <version>3.3.0</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-jar-plugin</artifactId> | ||||||
|  |           <version>3.4.2</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-install-plugin</artifactId> | ||||||
|  |           <version>3.1.2</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-deploy-plugin</artifactId> | ||||||
|  |           <version>3.1.2</version> | ||||||
|  |         </plugin> | ||||||
|  |         <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-site-plugin</artifactId> | ||||||
|  |           <version>3.12.1</version> | ||||||
|  |         </plugin> | ||||||
|  |         <plugin> | ||||||
|  |           <artifactId>maven-project-info-reports-plugin</artifactId> | ||||||
|  |           <version>3.6.1</version> | ||||||
|  |         </plugin> | ||||||
|  |  | ||||||
|  |         <plugin> | ||||||
|  |           <!-- Build an executable JAR --> | ||||||
|  |           <groupId>org.apache.maven.plugins</groupId> | ||||||
|  |           <artifactId>maven-jar-plugin</artifactId> | ||||||
|  |           <version>3.1.0</version> | ||||||
|  |           <configuration> | ||||||
|  |             <archive> | ||||||
|  |               <manifest> | ||||||
|  |                 <addClasspath>true</addClasspath> | ||||||
|  |                 <mainClass>uk.org.mafoo.cpomssummariser.App</mainClass> | ||||||
|  |               </manifest> | ||||||
|  |             </archive> | ||||||
|  |           </configuration> | ||||||
|  |         </plugin> | ||||||
|  |             <!-- Add the assemble plugin with standard configuration --> | ||||||
|  |         <plugin> | ||||||
|  |         <artifactId>maven-assembly-plugin</artifactId> | ||||||
|  |         <configuration> | ||||||
|  |             <archive> | ||||||
|  |             <manifest> | ||||||
|  |                 <mainClass>uk.org.mafoo.cpomssummariser.App</mainClass> | ||||||
|  |             </manifest> | ||||||
|  |             </archive> | ||||||
|  |             <descriptorRefs> | ||||||
|  |             <descriptorRef>jar-with-dependencies</descriptorRef> | ||||||
|  |             </descriptorRefs> | ||||||
|  |         </configuration> | ||||||
|  |         </plugin> | ||||||
|  |       </plugins> | ||||||
|  |     </pluginManagement> | ||||||
|  |   </build> | ||||||
|  | </project> | ||||||
							
								
								
									
										66
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/App.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/App.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.io.*; | ||||||
|  | import java.util.*; | ||||||
|  | import org.apache.poi.xssf.usermodel.*; | ||||||
|  | import org.apache.poi.ss.usermodel.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Hello world! | ||||||
|  |  */ | ||||||
|  | public class App { | ||||||
|  |  | ||||||
|  |     public static void xlsxtest(String filename) throws IOException { | ||||||
|  |         FileInputStream file = new FileInputStream(new File(filename)); | ||||||
|  |         //Create Workbook instance holding reference to .xlsx file | ||||||
|  |         XSSFWorkbook workbook = new XSSFWorkbook(file); | ||||||
|  |  | ||||||
|  |         //Get first/desired sheet from the workbook | ||||||
|  |         XSSFSheet sheet = workbook.getSheetAt(0); | ||||||
|  |  | ||||||
|  |         //Iterate through each rows one by one | ||||||
|  |         Iterator<Row> rowIterator = sheet.iterator(); | ||||||
|  |         while (rowIterator.hasNext()) { | ||||||
|  |  | ||||||
|  |           Row row = rowIterator.next(); | ||||||
|  |  | ||||||
|  |           //For each row, iterate through all the columns | ||||||
|  |           Iterator<Cell> cellIterator = row.cellIterator(); | ||||||
|  |           System.out.print(" | ");           | ||||||
|  |           while (cellIterator.hasNext()) { | ||||||
|  |  | ||||||
|  |             Cell cell = cellIterator.next(); | ||||||
|  |  | ||||||
|  |             //Check the cell type and format accordingly | ||||||
|  |             switch (cell.getCellType()) { | ||||||
|  |               case NUMERIC: | ||||||
|  |                 System.out.print(cell.getNumericCellValue()); | ||||||
|  |                 break; | ||||||
|  |               case STRING: | ||||||
|  |                 System.out.print(cell.getStringCellValue()); | ||||||
|  |                 break; | ||||||
|  |               default: | ||||||
|  |                 System.out.print(cell.getNumericCellValue()); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             System.out.print(" | "); | ||||||
|  |              | ||||||
|  |           } | ||||||
|  |           System.out.println(""); | ||||||
|  |         } | ||||||
|  |         file.close(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void main(String[] args) throws IOException { | ||||||
|  |         String filename = "testdata.xlsx"; | ||||||
|  |         if(args.length > 0)  filename = args[0]; | ||||||
|  |         FileInputStream file = new FileInputStream(filename); | ||||||
|  |         List<List<String>> data = Loader.loadXlsx(file); | ||||||
|  |         // System.out.println(data); | ||||||
|  |  | ||||||
|  |         List<Record> records = Parser.parse(data); | ||||||
|  |         Summariser summariser = new Summariser(records); | ||||||
|  |  | ||||||
|  |         System.out.println("Ending..."); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,8 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser.DataModel; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | public record Category(String superior, String name, Map<String,List<CategoryGroupData>> data) { | ||||||
|  |      | ||||||
|  | } | ||||||
| @@ -0,0 +1,67 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser.DataModel; | ||||||
|  |  | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.Map; | ||||||
|  |  | ||||||
|  | public class CategoryGroupData { | ||||||
|  |      | ||||||
|  |     String group; | ||||||
|  |     Map<String, Integer> sex; | ||||||
|  |     Integer SEND; | ||||||
|  |     Integer PP; | ||||||
|  |  | ||||||
|  |     public CategoryGroupData(String group, Map<String, Integer> sex, Integer SEND, Integer PP) { | ||||||
|  |         this.group = group; | ||||||
|  |         this.sex = sex; | ||||||
|  |         this.SEND = SEND; | ||||||
|  |         this.PP = PP; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public CategoryGroupData(String group) { | ||||||
|  |         this( | ||||||
|  |             group, | ||||||
|  |             new HashMap<String, Integer>(), | ||||||
|  |             0, | ||||||
|  |             0 | ||||||
|  |         ); | ||||||
|  |         this.sex.put("Male", 0); | ||||||
|  |         this.sex.put("Female", 0); | ||||||
|  |         // System.out.println("[CategoryGroupData] Created new group: " + group); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void incrementPP() { | ||||||
|  |         this.PP += 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void incrementSEND() { | ||||||
|  |         this.SEND += 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void incrementSexValue(String sex) { | ||||||
|  |         assert(sex.equals("Male") || sex.equals("Female")); | ||||||
|  |         this.sex.put(sex, this.sex.get(sex) + 1); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getPP() { | ||||||
|  |         return this.PP.intValue(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getSEND() { | ||||||
|  |         return this.SEND.intValue(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getSexValue(String sex) { | ||||||
|  |         assert(sex.equals("Male") || sex.equals("Female")); | ||||||
|  |         return this.sex.get(sex).intValue(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String toString() { | ||||||
|  |         StringBuilder stringBuilder = new StringBuilder(); | ||||||
|  |         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(" "); | ||||||
|  |         stringBuilder.append("SEND=");    stringBuilder.append(this.getSEND());                 stringBuilder.append(" "); | ||||||
|  |         stringBuilder.append("PP=");      stringBuilder.append(this.getPP());                   stringBuilder.append(" "); | ||||||
|  |         return stringBuilder.toString(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,11 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser.DataModel; | ||||||
|  |  | ||||||
|  | public enum Groups { | ||||||
|  |     YEAR_7, | ||||||
|  |     YEAR_8, | ||||||
|  |     YEAR_9, | ||||||
|  |     YEAR_10, | ||||||
|  |     YEAR_11, | ||||||
|  |     YEAR_12, | ||||||
|  |     YEAR_13 | ||||||
|  | } | ||||||
							
								
								
									
										65
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Loader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Loader.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.io.FileInputStream; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Iterator; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import org.apache.poi.ss.usermodel.Cell; | ||||||
|  | import org.apache.poi.ss.usermodel.Row; | ||||||
|  | import org.apache.poi.xssf.usermodel.XSSFSheet; | ||||||
|  | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||||||
|  |  | ||||||
|  | public class Loader { | ||||||
|  |     public static List<List<String>> loadXlsx(FileInputStream fd) throws IOException { | ||||||
|  |         return loadXlsx(fd, true); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static List<List<String>> loadXlsx(FileInputStream fd, boolean forceGroupToInteger) throws IOException { | ||||||
|  |         List<List<String>> data = new ArrayList<>(); | ||||||
|  |  | ||||||
|  |         XSSFWorkbook workbook = new XSSFWorkbook(fd); | ||||||
|  |  | ||||||
|  |         // Get first/desired sheet from the workbook | ||||||
|  |         XSSFSheet sheet = workbook.getSheetAt(0); | ||||||
|  |  | ||||||
|  |         // Iterate through each rows one by one | ||||||
|  |         Iterator<Row> rowIterator = sheet.iterator(); | ||||||
|  |         while (rowIterator.hasNext()) { | ||||||
|  |  | ||||||
|  |             Row row = rowIterator.next(); | ||||||
|  |             List<String> rowdata = new ArrayList<String>(); | ||||||
|  |  | ||||||
|  |             // For each row, iterate through all the columns | ||||||
|  |             Iterator<Cell> cellIterator = row.cellIterator(); | ||||||
|  |              | ||||||
|  |             while (cellIterator.hasNext()) { | ||||||
|  |  | ||||||
|  |                 Cell cell = cellIterator.next(); | ||||||
|  |  | ||||||
|  |                 // Check the cell type and format accordingly | ||||||
|  |                 switch (cell.getCellType()) { | ||||||
|  |                     case NUMERIC: | ||||||
|  |                         if(forceGroupToInteger) { | ||||||
|  |                             rowdata.add( "" + ((int)cell.getNumericCellValue()) ); | ||||||
|  |                         } else { | ||||||
|  |                             rowdata.add("" + cell.getNumericCellValue()); | ||||||
|  |                         } | ||||||
|  |                         break; | ||||||
|  |                     case STRING: | ||||||
|  |                         rowdata.add(cell.getStringCellValue()); | ||||||
|  |                         break; | ||||||
|  |                     default: | ||||||
|  |                         rowdata.add(cell.getStringCellValue()); | ||||||
|  |                  } | ||||||
|  |  | ||||||
|  |                 // rowdata.add(cell.getStringCellValue()); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             data.add(rowdata); | ||||||
|  |         } | ||||||
|  |         workbook.close(); | ||||||
|  |         return data; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Parser.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Parser.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class Parser { | ||||||
|  |     private static final int expected = 5; | ||||||
|  |  | ||||||
|  |     public static List<Record> parse(List<List<String>> in) { | ||||||
|  |         List<Record> out = new ArrayList<Record>(); | ||||||
|  |         for (List<String> row : in) { | ||||||
|  |             if (row.get(0).equals("Sex")) continue; | ||||||
|  |             // System.out.println("Parsing: " + String.join(" :: ", row)); | ||||||
|  |  | ||||||
|  |             int missing = expected - row.size(); | ||||||
|  |             while(missing-- > 0) row.add(""); // Fill in the gaps | ||||||
|  |  | ||||||
|  |             Record r = new Record(row.get(0), row.get(1), row.get(2), row.get(3), row.get(4)); | ||||||
|  |             out.add(r); | ||||||
|  |         } | ||||||
|  |         return out; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										101
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Record.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Record.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.HashSet; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Set; | ||||||
|  |  | ||||||
|  | public class Record { | ||||||
|  |  | ||||||
|  |     private final String p_sex; | ||||||
|  |     private final String p_group; | ||||||
|  |     private final Map<String, List<String>> p_categories; | ||||||
|  |     private final boolean p_send; | ||||||
|  |     private final boolean p_pp; | ||||||
|  |  | ||||||
|  |     private static final String topLevelCategories[] = { | ||||||
|  |         "Cause for Concern - Green form", | ||||||
|  |         "Bullying/ Friendship Related Issues" | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     private static List<String> p_groups = new ArrayList<String>(); | ||||||
|  |  | ||||||
|  |     private Map<String, List<String>> splitCategories(String str) { | ||||||
|  |         Map<String, List<String>> categories = new HashMap<String, List<String>>(); | ||||||
|  |         for (String cat : topLevelCategories) { | ||||||
|  |             categories.put(cat, new ArrayList<String>()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         String currentTopLevelCategory = null; | ||||||
|  |         for (String cat : str.split(", ")) { | ||||||
|  |             if (cat.equals("Categories")) continue; // Skip the header line  | ||||||
|  |             if (categories.containsKey(cat)) { | ||||||
|  |                 currentTopLevelCategory = cat; | ||||||
|  |             } else { | ||||||
|  |                 assert(currentTopLevelCategory != null); | ||||||
|  |                 categories.get(currentTopLevelCategory).add(cat); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return categories; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private boolean boolstrToBool(String str) { | ||||||
|  |         if(str == "Yes") | ||||||
|  |             return true; | ||||||
|  |         else | ||||||
|  |             return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Record (String sex, String group, String categories, String send, String pp) { | ||||||
|  |         this.p_sex = sex; | ||||||
|  |         this.p_group = "Year " + group; | ||||||
|  |         this.p_categories = splitCategories(categories); | ||||||
|  |         this.p_send = boolstrToBool(send); | ||||||
|  |         this.p_pp = boolstrToBool(pp); | ||||||
|  |  | ||||||
|  |         if(! p_groups.contains(group)) p_groups.add("Year " + group); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected String getSex() { | ||||||
|  |         return p_sex; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected String getGroup() { | ||||||
|  |         return p_group; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected Map<String, List<String>> getCategories() { | ||||||
|  |         return p_categories; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected boolean getSEND() { | ||||||
|  |         return p_send; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected boolean getPP() { | ||||||
|  |         return p_pp; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String toString() { | ||||||
|  |         return Map.of( | ||||||
|  |             "Sex", getSex(), | ||||||
|  |             "Group", getGroup(), | ||||||
|  |             "Categories", getCategories(), | ||||||
|  |             "SEND", getSEND(), | ||||||
|  |             "PP", getPP() | ||||||
|  |         ).toString(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static List<String> getGroups() { | ||||||
|  |         return Collections.unmodifiableList(p_groups); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static List<String> getTopLevelCategories() { | ||||||
|  |         return new ArrayList<String>(Arrays.asList(topLevelCategories)); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/main/java/uk/org/mafoo/cpomssummariser/Summariser.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Map.Entry; | ||||||
|  | import uk.org.mafoo.cpomssummariser.DataModel.CategoryGroupData; | ||||||
|  |  | ||||||
|  | public class Summariser { | ||||||
|  |  | ||||||
|  |     List<Record> records; | ||||||
|  |     Map<String, Map<String, CategoryGroupData>> data = new HashMap<String, Map<String, CategoryGroupData>>(); | ||||||
|  |  | ||||||
|  |     public Summariser(List<Record> 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(); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Map<String, CategoryGroupData> data_getOrCreate(String cat) { | ||||||
|  |         if(! data.containsKey(cat)) { | ||||||
|  |             Map<String, CategoryGroupData> tmp = new HashMap<String, CategoryGroupData>(); | ||||||
|  |             for (String g : Record.getGroups()) { | ||||||
|  |                 tmp.put(g, new CategoryGroupData(g)); | ||||||
|  |             } | ||||||
|  |             data.put(cat, tmp); | ||||||
|  |         } | ||||||
|  |         return data.get(cat); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void process() { | ||||||
|  |         for (Record record : records) { | ||||||
|  |             System.out.println("--> " + record); | ||||||
|  |             for (Entry<String, List<String>> category : record.getCategories().entrySet()) { | ||||||
|  |                 for (String subcat : category.getValue()) { | ||||||
|  |                     String group = record.getGroup(); | ||||||
|  |                     Map<String, CategoryGroupData> x = data_getOrCreate(subcat); | ||||||
|  |                     CategoryGroupData blob = x.get(group); | ||||||
|  |                     if(record.getSEND()) blob.incrementSEND(); | ||||||
|  |                     if(record.getPP()) blob.incrementPP(); | ||||||
|  |                     blob.incrementSexValue(record.getSex());                  | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								src/test/java/uk/org/mafoo/cpomssummariser/AppTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/test/java/uk/org/mafoo/cpomssummariser/AppTest.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | package uk.org.mafoo.cpomssummariser; | ||||||
|  |  | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertTrue; | ||||||
|  |  | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Unit test for simple App. | ||||||
|  |  */ | ||||||
|  | public class AppTest { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Rigorous Test :-) | ||||||
|  |      */ | ||||||
|  |     @Test | ||||||
|  |     public void shouldAnswerWithTrue() { | ||||||
|  |         assertTrue(true); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user