From 8159818aa020875a358c37b207e4eefa950bc8db Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Sun, 29 Jan 2017 17:59:12 +0100
Subject: [PATCH] Simplifying Map object handling

---
 .../mi/exam/unitmarking/MarkingListener.java  | 54 ++++++++++---------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/exam/unitmarking/MarkingListener.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/exam/unitmarking/MarkingListener.java
index d596b08fa..30deedb4d 100644
--- a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/exam/unitmarking/MarkingListener.java
+++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/exam/unitmarking/MarkingListener.java
@@ -8,15 +8,23 @@ import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunListener;
 
 public class MarkingListener extends RunListener {
+   
+  static <T> T last(T[] array) {
+      return array[array.length - 1];
+  }
 
    private Map<String, Values> valuesByClassname = new HashMap<>();
-   
+
    class Values {
-      
+
       int points = 0,
-          reachablePoints = 0,
-          currentPoints;
+            reachablePoints = 0,
+            currentPoints = 0;
 
+      public Values() {}
+      public Values(int currentPoints) {
+         this.currentPoints = currentPoints;
+      }
       public int getPoints() {
          return points;
       }
@@ -24,6 +32,10 @@ public class MarkingListener extends RunListener {
       public int getReachablePoints() {
          return reachablePoints;
       }
+      public Values set (int currentPoints){
+         this.currentPoints = currentPoints;
+         return this;
+      }
    }
 
    @Override
@@ -42,31 +54,21 @@ public class MarkingListener extends RunListener {
    }
 
    Values addDescription(final Description description) {
-      // Split fully qualified classname string
-      final String[] components = description.getClassName().split("\\.");
+
+      final String testClassName =  last(description.getClassName().split("\\."));
       
-      final String testClassName = components[components.length - 1];
-      Values values = valuesByClassname.get(testClassName);
-      if (null == values) {
-         values = new Values();
-         valuesByClassname.put(testClassName, values);
-      }
       final Marking marking = description.getAnnotation(Marking.class);
-      if (null == marking) {
-         values.currentPoints = 1;
-      } else {
-         values.currentPoints = marking.points();
-      }
-      return values;
+      final int reacheablePoints = null == marking? 1: marking.points();
+      
+      return valuesByClassname.compute(testClassName, (c, v) -> {return v == null? new Values(reacheablePoints): v.set(reacheablePoints);});
    }
 
-   
    public String getPointSumms() {
       final StringBuffer ret = new StringBuffer();
-      
+
       int reachablePointSum = 0,
             pointSum = 0;
-      
+
       for (Map.Entry<String, Values> entry: valuesByClassname.entrySet()) {
          ret.append(entry.getKey());
          ret.append(": ");
@@ -81,11 +83,11 @@ public class MarkingListener extends RunListener {
       ret.append("\nSum (" + pointSum + "/" + reachablePointSum + ")");
       return ret.toString();
    }
-//      @Override
-//      public void testRunStarted(Description description) throws Exception {
-//         super.testRunStarted(description);
-//         System.out.println("testRunStarted" + description);
-//      }
+   //      @Override
+   //      public void testRunStarted(Description description) throws Exception {
+   //         super.testRunStarted(description);
+   //         System.out.println("testRunStarted" + description);
+   //      }
    //
    //   @Override
    //   public void testRunFinished(Result result) throws Exception {
-- 
GitLab