producer abort + timezone support
[mir.git] / source / mir / storage / Database.java
index fb7de4f..7a3034e 100755 (executable)
@@ -76,7 +76,7 @@ import mir.util.JDBCStringRoutines;
  * Treiber, Host, User und Passwort, ueber den der Zugriff auf die
  * Datenbank erfolgt.
  *
- * @version $Id: Database.java,v 1.44.2.3 2003/05/26 03:29:46 zapata Exp $
+ * @version $Id: Database.java,v 1.44.2.4 2003/06/23 15:24:06 zapata Exp $
  * @author rk
  *
  */
@@ -117,11 +117,15 @@ public class Database implements StorageObject {
   private String database_url;
   private int defaultLimit;
   protected DatabaseAdaptor theAdaptor;
-  private SimpleDateFormat _dateFormatterOut =
-    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-  private SimpleDateFormat _dateFormatterIn =
-    new SimpleDateFormat("yyyy-MM-dd HH:mm");
-  private Calendar _cal = new GregorianCalendar();
+  TimeZone timezone;
+  SimpleDateFormat internalDateFormat;
+  SimpleDateFormat userInputDateFormat;
+/*
+  private SimpleDateFormat _dateFormatterOut;
+  private SimpleDateFormat _dateFormatterIn;
+  _dateFormatterOut = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+  _dateFormatterIn = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+*/
 
   /**
    * Kontruktor bekommt den Filenamen des Konfigurationsfiles ?bergeben.
@@ -141,6 +145,13 @@ public class Database implements StorageObject {
       throw new StorageObjectFailure(e);
     }
     logger = new LoggerWrapper("Database");
+    timezone = TimeZone.getTimeZone(configuration.getString("Mir.DefaultTimezone"));
+    internalDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    internalDateFormat.setTimeZone(timezone);
+
+    userInputDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+    userInputDateFormat.setTimeZone(timezone);
+
 
     String theAdaptorName = configuration.getString("Database.Adaptor");
     defaultLimit = Integer.parseInt(configuration.getString("Database.Limit"));
@@ -349,14 +360,20 @@ public class Database implements StorageObject {
 
             if (!rs.wasNull()) {
               java.util.Date date = new java.util.Date(timestamp.getTime());
-              outValue = _dateFormatterOut.format(date);
-              _cal.setTime(date);
-
-              int offset =
-                  _cal.get(Calendar.ZONE_OFFSET) + _cal.get(Calendar.DST_OFFSET);
-              String tzOffset =
-                  StringUtil.zeroPaddingNumber(offset / _millisPerHour, 2, 2);
-              outValue = outValue + "+" + tzOffset;
+
+              Calendar calendar = new GregorianCalendar();
+              calendar.setTime(date);
+              calendar.setTimeZone(timezone);
+              outValue = internalDateFormat.format(date);
+
+              int offset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
+              String tzOffset = StringUtil.zeroPaddingNumber(Math.abs(offset) / _millisPerHour, 2, 2);
+
+              if (offset<0)
+                outValue = outValue + "-";
+              else
+                outValue = outValue + "+";
+              outValue = outValue + tzOffset;
             }
 
             break;
@@ -958,10 +975,11 @@ public class Database implements StorageObject {
 
         // TimeStamp stuff
         try {
-          java.util.Date d = _dateFormatterIn.parse(dateString);
-          Timestamp tStamp = new Timestamp(d.getTime());
-          sql.append(",webdb_create='" + tStamp.toString() + "'");
-        } catch (ParseException e) {
+          java.util.Date d = userInputDateFormat.parse(dateString);
+//          Timestamp tStamp = new Timestamp(d.getTime());
+          sql.append(",webdb_create='" + JDBCStringRoutines.formatDate(d) + "'");
+        }
+        catch (ParseException e) {
           throw new StorageObjectFailure(e);
         }
       }