From af85da93ad44bba379f1ccf898cfd55e3f3f4395 Mon Sep 17 00:00:00 2001 From: Christos KK Loverdos Date: Mon, 6 Feb 2012 12:36:06 +0200 Subject: [PATCH] Fix a bug with mutable state. Although DateCalculator is mutable, I was using it as an immutable. --- .../scala/gr/grnet/aquarium/user/UserStateComputations.scala | 3 +-- .../scala/gr/grnet/aquarium/util/date/DateCalculator.scala | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/scala/gr/grnet/aquarium/user/UserStateComputations.scala b/src/main/scala/gr/grnet/aquarium/user/UserStateComputations.scala index 22b1c25..670c900 100644 --- a/src/main/scala/gr/grnet/aquarium/user/UserStateComputations.scala +++ b/src/main/scala/gr/grnet/aquarium/user/UserStateComputations.scala @@ -221,9 +221,8 @@ class UserStateComputations extends Loggable { accounting: Accounting): Maybe[EndOfBillingState] = Maybe { val billingMonthStartDate = new DateCalculator(yearOfBillingMonth, billingMonth, 1) - val billingMonthStopDate = billingMonthStartDate.endOfThisMonth + val billingMonthStopDate = billingMonthStartDate.copy.endOfThisMonth logger.debug("billingMonthStartDate = %s".format(billingMonthStartDate)) - logger.debug("billingMonthStartDate == billingMonthStopDate = %s".format(billingMonthStartDate == billingMonthStopDate)) logger.debug("billingMonthStopDate = %s".format(billingMonthStopDate)) val prevBillingMonthStartDate = billingMonthStartDate.previousMonth diff --git a/src/main/scala/gr/grnet/aquarium/util/date/DateCalculator.scala b/src/main/scala/gr/grnet/aquarium/util/date/DateCalculator.scala index ecdac70..f8be752 100644 --- a/src/main/scala/gr/grnet/aquarium/util/date/DateCalculator.scala +++ b/src/main/scala/gr/grnet/aquarium/util/date/DateCalculator.scala @@ -8,12 +8,12 @@ import java.text.DateFormat /** * Date calculator. * - * Utility class for date manipulations. + * Utility class for date manipulations. Not that this is mutable. * * @author Christos KK Loverdos */ -class DateCalculator private(private[this] var dateTime: MutableDateTime) { +class DateCalculator private(private[this] var dateTime: MutableDateTime) extends Cloneable { def this(millis: Long) = this(new MutableDateTime(millis)) def this(date: Date) = this(new MutableDateTime(date)) def this(cal: Calendar) = this(new MutableDateTime(cal)) @@ -24,6 +24,11 @@ class DateCalculator private(private[this] var dateTime: MutableDateTime) { def this(year: Int, monthOfYear: Int) = this(year, monthOfYear, 1) + + override def clone(): DateCalculator = new DateCalculator(this.dateTime) + + def copy: DateCalculator = clone() + def plusMonths(n: Int): this.type = { dateTime.addMonths(n) -- 1.7.10.4