Start the real deal
[aquarium] / src / main / scala / gr / grnet / aquarium / logic / events / ResourceEvent.scala
index 7e4794b..3abc7da 100644 (file)
@@ -74,19 +74,25 @@ case class ResourceEvent(
   def fullResourceInfo = (safeResource, safeInstanceId)
 
   def isOccurredWithinMillis(fromMillis: Long, toMillis: Long): Boolean = {
+    require(fromMillis <= toMillis, "fromMillis <= toMillis")
     fromMillis <= occurredMillis && occurredMillis <= toMillis
   }
 
   def isOccurredWithinDates(fromDate: Date, toDate: Date): Boolean = {
-    fromDate.getTime <= occurredMillis && occurredMillis <= toDate.getTime
+    isOccurredWithinMillis(fromDate.getTime, toDate.getTime)
   }
 
   def isReceivedWithinMillis(fromMillis: Long, toMillis: Long): Boolean = {
+    require(fromMillis <= toMillis, "fromMillis <= toMillis")
     fromMillis <= receivedMillis && receivedMillis <= toMillis
   }
   
   def isReceivedWithinDates(fromDate: Date, toDate: Date): Boolean = {
-    fromDate.getTime <= receivedMillis && receivedMillis <= toDate.getTime
+    isReceivedWithinMillis(fromDate.getTime, toDate.getTime)
+  }
+
+  def isReceivedWithinDateCalcs(fromDate: DateCalculator, toDate: DateCalculator): Boolean = {
+    isReceivedWithinMillis(fromDate.getMillis, toDate.getMillis)
   }
 
   def isOccurredOrReceivedWithinMillis(fromMillis: Long, toMillis: Long): Boolean = {
@@ -98,6 +104,19 @@ case class ResourceEvent(
     isOccurredWithinDates(fromDate, toDate) ||
     isReceivedWithinDates(fromDate, toDate)
   }
+  
+  def isOutOfSyncForBillingMonth(yearOfBillingMonth: Int, billingMonth: Int) = {
+    val billingStartDateCalc = new DateCalculator(yearOfBillingMonth, billingMonth)
+    val billingStartMillis = billingStartDateCalc.toMillis
+    val billingStopMillis  = billingStartDateCalc.goEndOfThisMonth.toMillis
+
+    isOutOfSyncForBillingPeriod(billingStartMillis, billingStopMillis)
+  }
+  
+  def isOutOfSyncForBillingPeriod(billingStartMillis: Long, billingStopMillis: Long): Boolean = {
+    isReceivedWithinMillis(billingStartMillis, billingStopMillis) &&
+    (occurredMillis < billingStartMillis || occurredMillis > billingStopMillis)
+  }
 
   def toDebugString(resourcesMap: DSLResourcesMap, useOnlyInstanceId: Boolean): String = {
     val instanceInfo = if(useOnlyInstanceId) instanceId else "%s::%s".format(resource, instanceId)