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]>'].