Fixed infinite loop during accounting update duw to bug in calendar calculations
authorChristos V. Stathis <chstath@ebs.gr>
Thu, 31 Mar 2011 13:49:21 +0000 (16:49 +0300)
committerChristos V. Stathis <chstath@ebs.gr>
Thu, 31 Mar 2011 13:49:21 +0000 (16:49 +0300)
src/gr/ebs/gss/server/ejb/GSSDAOBean.java

index 4815518..2d527c5 100644 (file)
@@ -543,23 +543,23 @@ public class GSSDAOBean implements GSSDAO {
                }
 
                if (ai==null) {
-                       // The right entry does not exist; must be created.
-                       // This is where we set the initial time period.
-                       // We now start from the user's creation, we can change this to something else.
-                       Calendar creationDate = new GregorianCalendar();
-                       creationDate.setTime(user.getAuditInfo().getCreationDate());
-                       int offset = 0;
-                       Calendar dateFrom;
-                       Calendar dateTo;
-                       long timeInMillis = date.getTime();
-                       do {
-                               dateFrom = (Calendar) creationDate.clone();
-                               dateFrom.add(BANDWIDTH_TIME_PERIOD_FIELD, offset);
-                               dateTo = (Calendar) dateFrom.clone();
-                               dateTo.add(BANDWIDTH_TIME_PERIOD_FIELD, 1);
-                               offset += BANDWIDTH_TIME_PERIOD_AMOUNT;
-                       }
-                       while (!(dateFrom.getTimeInMillis()<=timeInMillis && dateTo.getTimeInMillis()>timeInMillis));
+            Calendar dateFrom;
+            Calendar dateTo;
+            Calendar thisDate = new GregorianCalendar();
+            thisDate.setTime(date);
+            dateFrom = (Calendar) thisDate.clone();
+            dateFrom.set(Calendar.DAY_OF_MONTH, thisDate.getActualMinimum(Calendar.DAY_OF_MONTH));
+            dateFrom.set(Calendar.HOUR_OF_DAY, thisDate.getActualMinimum(Calendar.HOUR_OF_DAY));
+            dateFrom.set(Calendar.MINUTE, thisDate.getActualMinimum(Calendar.MINUTE));
+            dateFrom.set(Calendar.SECOND, thisDate.getActualMinimum(Calendar.SECOND));
+            dateFrom.set(Calendar.MILLISECOND, thisDate.getActualMinimum(Calendar.MILLISECOND));
+
+            dateTo = (Calendar) thisDate.clone();
+            dateTo.set(Calendar.DAY_OF_MONTH, thisDate.getActualMaximum(Calendar.DAY_OF_MONTH));
+            dateTo.set(Calendar.HOUR_OF_DAY, thisDate.getActualMaximum(Calendar.HOUR_OF_DAY));
+            dateTo.set(Calendar.MINUTE, thisDate.getActualMaximum(Calendar.MINUTE));
+            dateTo.set(Calendar.SECOND, thisDate.getActualMaximum(Calendar.SECOND));
+            dateTo.set(Calendar.MILLISECOND, thisDate.getActualMaximum(Calendar.MILLISECOND));
 
                        ai = new AccountingInfo(user, dateFrom.getTime(), dateTo.getTime());
                        manager.persist(ai);