diff --git a/plugins/database/quota/pom.xml b/plugins/database/quota/pom.xml
index 6ea1ab18ad5..3748f978d17 100644
--- a/plugins/database/quota/pom.xml
+++ b/plugins/database/quota/pom.xml
@@ -39,5 +39,10 @@
commons-lang3
${cs.commons-lang3.version}
+
+ joda-time
+ joda-time
+ ${cs.joda-time.version}
+
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaDBUtilsImpl.java b/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaDBUtilsImpl.java
index 6c26a5986ed..340fb504a18 100644
--- a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaDBUtilsImpl.java
+++ b/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaDBUtilsImpl.java
@@ -37,6 +37,7 @@ import org.apache.cloudstack.api.response.QuotaTariffResponse;
import org.apache.cloudstack.quota.dao.QuotaCreditsDao;
import org.apache.cloudstack.quota.dao.QuotaTariffDao;
import org.apache.log4j.Logger;
+import org.joda.time.DateTimeComparator;
import org.springframework.stereotype.Component;
import javax.ejb.Local;
@@ -228,6 +229,7 @@ public class QuotaDBUtilsImpl implements QuotaDBUtils {
short opendb = TransactionLegacy.currentTxn().getDatabaseId();
TransactionLegacy.open(TransactionLegacy.USAGE_DB).close();
QuotaTariffVO result = null;
+ boolean updateRecord = false;
try {
final int resourceType = cmd.getUsageType();
final BigDecimal quotaCost = new BigDecimal(cmd.getValue());
@@ -237,6 +239,9 @@ public class QuotaDBUtilsImpl implements QuotaDBUtils {
throw new InvalidParameterValueException(String.format("Invalid Usage Resource type=%d provided", resourceType));
}
s_logger.debug(String.format("Updating Quota Tariff Plan: Old value=%s, new value=%s for resource type=%d", result.getCurrencyValue(), quotaCost, resourceType));
+ if (DateTimeComparator.getDateOnlyInstance().compare(result.getEffectiveOn(), effectiveDate) == 0) {
+ updateRecord = true;
+ }
result.setCurrencyValue(quotaCost);
result.setEffectiveOn(effectiveDate);
} catch (Exception pokemon) {
@@ -245,7 +250,11 @@ public class QuotaDBUtilsImpl implements QuotaDBUtils {
TransactionLegacy.open(opendb).close();
}
if (result != null) {
- _quotaTariffDao.updateQuotaTariff(result);
+ if (updateRecord) {
+ _quotaTariffDao.updateQuotaTariff(result);
+ } else {
+ result = _quotaTariffDao.addQuotaTariff(result);
+ }
}
return result;
}
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaTypes.java b/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaTypes.java
index 434dd5bf653..05eaf1622b7 100644
--- a/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaTypes.java
+++ b/plugins/database/quota/src/org/apache/cloudstack/quota/QuotaTypes.java
@@ -27,9 +27,8 @@ public class QuotaTypes extends UsageTypes {
public static final int CPU_NUMBER = 16;
public static final int MEMORY = 17;
- public static List responseList = new ArrayList();
-
public static List listQuotaUsageTypes() {
+ final List responseList = new ArrayList();
responseList.add(new QuotaTypeResponse(RUNNING_VM, "Running Vm Usage"));
responseList.add(new QuotaTypeResponse(ALLOCATED_VM, "Allocated Vm Usage"));
responseList.add(new QuotaTypeResponse(IP_ADDRESS, "IP Address Usage"));
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java b/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
index 7e128ba0032..ad8ea5dc36b 100644
--- a/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
+++ b/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDao.java
@@ -30,4 +30,6 @@ public interface QuotaTariffDao extends GenericDao {
List listAllTariffPlans(Date onOrBefore);
boolean updateQuotaTariff(QuotaTariffVO plan);
+
+ QuotaTariffVO addQuotaTariff(QuotaTariffVO plan);
}
diff --git a/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java b/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
index 0bc46208126..bcdb123db8a 100644
--- a/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
+++ b/plugins/database/quota/src/org/apache/cloudstack/quota/dao/QuotaTariffDaoImpl.java
@@ -117,4 +117,15 @@ public class QuotaTariffDaoImpl extends GenericDaoBase impl
TransactionLegacy.open(opendb).close(); // Switch back
return result;
}
+
+ @Override
+ public QuotaTariffVO addQuotaTariff(QuotaTariffVO plan) {
+ final short opendb = TransactionLegacy.currentTxn().getDatabaseId();
+ TransactionLegacy.open(TransactionLegacy.USAGE_DB).close(); // Switch to
+ // Usage DB
+ plan.setId(null);
+ QuotaTariffVO result = this.persist(plan);
+ TransactionLegacy.open(opendb).close(); // Switch back
+ return result;
+ }
}
diff --git a/pom.xml b/pom.xml
index 6d868e5c6b5..2dfb9eb1440 100644
--- a/pom.xml
+++ b/pom.xml
@@ -97,6 +97,7 @@
2.5.3
2.9.1
2.6.1
+ 2.8.1