This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new bac423f  CLOUDSTACK-10184: Re-work method 
QuotaResponseBuilderImpl.startOfNextDay (#2326)
bac423f is described below

commit bac423fea082febd4bc3522aa85f7bbb594f2562
Author: Rafael Weingärtner <[email protected]>
AuthorDate: Mon Dec 11 15:02:23 2017 -0200

    CLOUDSTACK-10184: Re-work method QuotaResponseBuilderImpl.startOfNextDay 
(#2326)
    
    Also, removed @Local annotation that is not needed and add test cases.
---
 .../api/response/QuotaResponseBuilderImpl.java     | 89 +++++++++++-----------
 .../api/response/QuotaResponseBuilderImplTest.java | 58 +++++++++-----
 2 files changed, 80 insertions(+), 67 deletions(-)

diff --git 
a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
 
b/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
index 5748de5..76a68cf 100644
--- 
a/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
+++ 
b/plugins/database/quota/src/org/apache/cloudstack/api/response/QuotaResponseBuilderImpl.java
@@ -16,15 +16,22 @@
 //under the License.
 package org.apache.cloudstack.api.response;
 
-import com.cloud.domain.DomainVO;
-import com.cloud.domain.dao.DomainDao;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountVO;
-import com.cloud.user.User;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.user.dao.UserDao;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.inject.Inject;
 
 import org.apache.cloudstack.api.command.QuotaBalanceCmd;
 import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd;
@@ -53,24 +60,17 @@ import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import javax.ejb.Local;
-import javax.inject.Inject;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
+import com.cloud.domain.DomainVO;
+import com.cloud.domain.dao.DomainDao;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.AccountVO;
+import com.cloud.user.User;
+import com.cloud.user.dao.AccountDao;
+import com.cloud.user.dao.UserDao;
 
 @Component
-@Local(value = QuotaResponseBuilderImpl.class)
 public class QuotaResponseBuilderImpl implements QuotaResponseBuilder {
     private static final Logger s_logger = 
Logger.getLogger(QuotaResponseBuilderImpl.class);
 
@@ -141,7 +141,9 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
         } else {
             for (final QuotaAccountVO quotaAccount : 
_quotaAccountDao.listAllQuotaAccount()) {
                 AccountVO account = _accountDao.findById(quotaAccount.getId());
-                if (account == null) continue;
+                if (account == null) {
+                    continue;
+                }
                 QuotaSummaryResponse qr = getQuotaSummaryResponse(account);
                 result.add(qr);
             }
@@ -181,6 +183,7 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
             throw new InvalidParameterValueException("The request period does 
not contain balance entries.");
         }
         Collections.sort(quotaBalance, new Comparator<QuotaBalanceVO>() {
+            @Override
             public int compare(QuotaBalanceVO o1, QuotaBalanceVO o2) {
                 o1 = o1 == null ? new QuotaBalanceVO() : o1;
                 o2 = o2 == null ? new QuotaBalanceVO() : o2;
@@ -287,13 +290,15 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
         if (s_logger.isDebugEnabled()) {
             s_logger.debug(
                     "createQuotaStatementResponse Type=" + 
quotaUsage.get(0).getUsageType() + " usage=" + 
quotaUsage.get(0).getQuotaUsed().setScale(2, RoundingMode.HALF_EVEN)
-                            + " rec.id=" + quotaUsage.get(0).getUsageItemId() 
+ " SD=" + quotaUsage.get(0).getStartDate() + " ED=" + 
quotaUsage.get(0).getEndDate());
+                    + " rec.id=" + quotaUsage.get(0).getUsageItemId() + " SD=" 
+ quotaUsage.get(0).getStartDate() + " ED=" + quotaUsage.get(0).getEndDate());
         }
 
         Collections.sort(quotaUsage, new Comparator<QuotaUsageVO>() {
+            @Override
             public int compare(QuotaUsageVO o1, QuotaUsageVO o2) {
-                if (o1.getUsageType() == o2.getUsageType())
+                if (o1.getUsageType() == o2.getUsageType()) {
                     return 0;
+                }
                 return o1.getUsageType() < o2.getUsageType() ? -1 : 1;
             }
         });
@@ -508,29 +513,21 @@ public class QuotaResponseBuilderImpl implements 
QuotaResponseBuilder {
     public List<QuotaBalanceVO> getQuotaBalance(QuotaBalanceCmd cmd) {
         return _quotaService.findQuotaBalanceVO(cmd.getAccountId(), 
cmd.getAccountName(), cmd.getDomainId(), cmd.getStartDate(), cmd.getEndDate());
     }
-
     @Override
-    public Date startOfNextDay(Date dt) {
-        Calendar c = Calendar.getInstance();
-        c.setTime(dt);
-        c.add(Calendar.DATE, 1);
-        c.set(Calendar.HOUR, 0);
-        c.set(Calendar.MINUTE, 0);
-        c.set(Calendar.SECOND, 0);
-        c.set(Calendar.MILLISECOND, 0);
-        return c.getTime();
+    public Date startOfNextDay(Date date) {
+        LocalDate localDate = 
date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return createDateAtTheStartOfNextDay(localDate);
     }
 
     @Override
     public Date startOfNextDay() {
-        Calendar c = Calendar.getInstance();
-        c.setTime(new Date());
-        c.add(Calendar.DATE, 1);
-        c.set(Calendar.HOUR, 0);
-        c.set(Calendar.MINUTE, 0);
-        c.set(Calendar.SECOND, 0);
-        c.set(Calendar.MILLISECOND, 0);
-        return c.getTime();
+        LocalDate localDate = LocalDate.now();
+        return createDateAtTheStartOfNextDay(localDate);
+    }
+
+    private Date createDateAtTheStartOfNextDay(LocalDate localDate) {
+        LocalDate nextDayLocalDate = localDate.plusDays(1);
+        return 
Date.from(nextDayLocalDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
     }
 
 }
diff --git 
a/plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
 
b/plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
index 4a76052..de961f6 100644
--- 
a/plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
+++ 
b/plugins/database/quota/test/org/apache/cloudstack/api/response/QuotaResponseBuilderImplTest.java
@@ -16,14 +16,17 @@
 // under the License.
 package org.apache.cloudstack.api.response;
 
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountVO;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.user.dao.UserDao;
-import com.cloud.utils.db.TransactionLegacy;
-import junit.framework.TestCase;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.inject.Inject;
+
 import org.apache.cloudstack.api.command.QuotaEmailTemplateListCmd;
 import org.apache.cloudstack.api.command.QuotaEmailTemplateUpdateCmd;
 import org.apache.cloudstack.quota.QuotaService;
@@ -36,7 +39,7 @@ import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
 import org.apache.cloudstack.quota.vo.QuotaCreditsVO;
 import org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO;
 import org.apache.cloudstack.quota.vo.QuotaTariffVO;
-import org.joda.time.DateTime;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -44,13 +47,15 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.user.Account;
+import com.cloud.user.AccountManager;
+import com.cloud.user.AccountVO;
+import com.cloud.user.dao.AccountDao;
+import com.cloud.user.dao.UserDao;
+import com.cloud.utils.db.TransactionLegacy;
 
-import javax.inject.Inject;
+import junit.framework.TestCase;
 
 @RunWith(MockitoJUnitRunner.class)
 public class QuotaResponseBuilderImplTest extends TestCase {
@@ -218,13 +223,24 @@ public class QuotaResponseBuilderImplTest extends 
TestCase {
     }
 
     @Test
-    public void testStartOfNextDay() {
-        DateTime now = new DateTime();
-        DateTime nextDay = new 
DateTime(quotaResponseBuilder.startOfNextDay(now.toDate()));
-        DateTime nextDay2 = new 
DateTime(quotaResponseBuilder.startOfNextDay());
-        
assertTrue(now.toLocalDate().equals(nextDay.minusDays(1).toLocalDate()));
-        
assertTrue(now.toLocalDate().equals(nextDay2.minusDays(1).toLocalDate()));
+    public void testStartOfNextDayWithoutParameters() {
+        Date nextDate = quotaResponseBuilder.startOfNextDay();
+
+        LocalDateTime tomorrowAtStartOfTheDay = 
LocalDate.now().atStartOfDay().plusDays(1);
+        Date expectedNextDate = 
Date.from(tomorrowAtStartOfTheDay.atZone(ZoneId.systemDefault()).toInstant());
+
+        Assert.assertEquals(expectedNextDate, nextDate);
     }
 
+    @Test
+    public void testStartOfNextDayWithParameter() {
+        Date anyDate = new Date(1242421545757532l);
+
+        Date nextDayDate = quotaResponseBuilder.startOfNextDay(anyDate);
 
+        LocalDateTime nextDayLocalDateTimeAtStartOfTheDay = 
anyDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1).atStartOfDay();
+        Date expectedNextDate = 
Date.from(nextDayLocalDateTimeAtStartOfTheDay.atZone(ZoneId.systemDefault()).toInstant());
+
+        Assert.assertEquals(expectedNextDate, nextDayDate);
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to