[LIB-5] Collection empty objects,reporting and serializable
[snooker-score-api.git] / src / main / java / org / hedgecode / snooker / json / JsonEvents.java
index 78474de..664dcd8 100644 (file)
@@ -17,6 +17,9 @@
 package org.hedgecode.snooker.json;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import org.hedgecode.snooker.api.Event;
@@ -31,6 +34,8 @@ import org.hedgecode.snooker.compare.EventComparators;
  */
 public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
 
+    private static final JsonEvents EMPTY = new JsonEvents(new Event[0]);
+
     protected JsonEvents(Event[] entities) {
         super(entities);
     }
@@ -45,7 +50,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.season().equals(season))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -54,7 +59,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.type().equals(type))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -63,7 +68,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.city().equals(city))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -72,7 +77,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.country().equals(country))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -81,7 +86,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.sex().equals(sex))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -90,7 +95,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.stage().equals(stage))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -99,7 +104,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.valueType().equals(valueType))
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -108,7 +113,7 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         for (Event event : this)
             if (event.worldSnookerId() == worldSnookerId)
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -116,9 +121,9 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         List<Event> events = new ArrayList<>();
         long currentTime = System.currentTimeMillis();
         for (Event event : this)
-            if (event.endDate().getTime() < currentTime)
+            if (currentTime > nextDate(event.endDate()).getTime())
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -126,10 +131,10 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         List<Event> events = new ArrayList<>();
         long currentTime = System.currentTimeMillis();
         for (Event event : this)
-            if (event.startDate().getTime() < currentTime
-                    && event.endDate().getTime() > currentTime)
+            if (currentTime > event.startDate().getTime()
+                    && currentTime < nextDate(event.endDate()).getTime())
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -137,9 +142,9 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         List<Event> events = new ArrayList<>();
         long currentTime = System.currentTimeMillis();
         for (Event event : this)
-            if (event.startDate().getTime() > currentTime)
+            if (currentTime < event.startDate().getTime())
                 events.add(event);
-        return events.isEmpty() ? null : new JsonEvents(events);
+        return events.isEmpty() ? EMPTY : new JsonEvents(events);
     }
 
     @Override
@@ -156,4 +161,11 @@ public class JsonEvents extends JsonCollectionEntity<Event> implements Events {
         );
     }
 
+    private Date nextDate(Date date) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        c.add(Calendar.DATE, 1);
+        return c.getTime();
+    }
+
 }