Entity now freemarker compliant, freemarker lib update, deprecation of HTMLTemplatePr...
[mir.git] / source / mir / storage / Database.java
index dbfe137..f6de097 100755 (executable)
@@ -45,7 +45,7 @@ public class Database implements StorageObject {
   private       String                database_driver;
   private       String                database_url;
   private int                         defaultLimit;
-  private DatabaseAdaptor             theAdaptor;
+  protected DatabaseAdaptor             theAdaptor;
   protected Logfile                   theLog;
   protected Connection                con;
 
@@ -59,7 +59,7 @@ public class Database implements StorageObject {
    *
    * @param   String confFilename Dateiname der Konfigurationsdatei
    */
-  public Database() {
+  public Database() throws StorageObjectException {
     theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Database.Logfile"));
     String database_username=MirConfig.getProp("Database.Username");
     String database_password=MirConfig.getProp("Database.Password");
@@ -77,6 +77,7 @@ public class Database implements StorageObject {
     }
     catch (Exception e){
       theLog.printError("Bei Konstruktion von Database() with " + theAdaptorName + " -- " +e.toString());
+      throw new StorageObjectException(e.toString());
     }
   }
 
@@ -562,7 +563,6 @@ public class Database implements StorageObject {
     //cache
     invalidatePopupCache();
     try {
-      HashMap theEntityValues = theEntity.getValues();
       ArrayList streamedInput = theEntity.streamedInput();
       StringBuffer f = new StringBuffer();
       StringBuffer v = new StringBuffer();
@@ -582,8 +582,8 @@ public class Database implements StorageObject {
               aValue = "?";
             }
             else {
-              if (theEntityValues.containsKey(aField)) {
-                aValue = "'" + StringUtil.quote((String)theEntityValues.get(aField))
+              if (theEntity.hasValueForField(aField)) {
+                aValue = "'" + StringUtil.quote((String)theEntity.getValue(aField))
                     + "'";
               }
             }
@@ -611,7 +611,7 @@ public class Database implements StorageObject {
       pstmt = con.prepareStatement(sql);
       if (streamedInput != null) {
         for (int i = 0; i < streamedInput.size(); i++) {
-          String inputString = (String)theEntityValues.get(streamedInput.get(i));
+          String inputString = (String)theEntity.getValue((String)streamedInput.get(i));
           pstmt.setBytes(i + 1, inputString.getBytes());
         }
       }
@@ -648,7 +648,6 @@ public class Database implements StorageObject {
     Connection con = null;
     PreparedStatement pstmt = null;
     ArrayList streamedInput = theEntity.streamedInput();
-    HashMap theEntityValues = theEntity.getValues();
     String id = theEntity.getId();
     String aField;
     StringBuffer fv = new StringBuffer();
@@ -661,14 +660,14 @@ public class Database implements StorageObject {
       // only normal cases
       if (!(aField.equals(thePKeyName) || aField.equals("webdb_create") ||
           aField.equals("webdb_lastchange") || (streamedInput != null && streamedInput.contains(aField)))) {
-        if (theEntityValues.containsKey(aField)) {
+        if (theEntity.hasValueForField(aField)) {
           if (firstField == false) {
             fv.append(", ");
           }
           else {
             firstField = false;
           }
-          fv.append(aField).append("='").append(StringUtil.quote((String)theEntityValues.get(aField))).append("'");
+          fv.append(aField).append("='").append(StringUtil.quote((String)theEntity.getValue(aField))).append("'");
         }
       }
     }
@@ -691,7 +690,7 @@ public class Database implements StorageObject {
       pstmt = con.prepareStatement(sql.toString());
       if (streamedInput != null) {
         for (int i = 0; i < streamedInput.size(); i++) {
-          String inputString = (String)theEntityValues.get(streamedInput.get(i));
+          String inputString = theEntity.getValue((String)streamedInput.get(i));
           pstmt.setBytes(i + 1, inputString.getBytes());
         }
       }
@@ -752,7 +751,7 @@ public class Database implements StorageObject {
    * eine SimpleList mit Standard-Popupdaten erzeugt werden koennen soll.
    * @return null
    */
-  public SimpleList getPopupData () {
+  public SimpleList getPopupData () throws StorageObjectException {
     return  null;
   }
 
@@ -762,7 +761,8 @@ public class Database implements StorageObject {
    *  @param hasNullValue  Wenn true wird eine leerer  Eintrag fuer die Popups erzeugt.
    *  @return SimpleList Gibt freemarker.template.SimpleList zurueck.
    */
-  public SimpleList getPopupData (String name, boolean hasNullValue) {
+  public SimpleList getPopupData (String name, boolean hasNullValue) 
+    throws StorageObjectException {
     return  getPopupData(name, hasNullValue, null);
   }
 
@@ -773,8 +773,8 @@ public class Database implements StorageObject {
    *  @param where  Schraenkt die Selektion der Datensaetze ein.
    *  @return SimpleList Gibt freemarker.template.SimpleList zurueck.
    */
-  public SimpleList getPopupData (String name, boolean hasNullValue, String where) {
-    return  getPopupData(name, hasNullValue, where, null);
+  public SimpleList getPopupData (String name, boolean hasNullValue, String where) throws StorageObjectException {
+   return  getPopupData(name, hasNullValue, where, null);
   }
 
   /**
@@ -785,8 +785,7 @@ public class Database implements StorageObject {
    *  @param order  Gibt ein Feld als Sortierkriterium an.
    *  @return SimpleList Gibt freemarker.template.SimpleList zurueck.
    */
-  public SimpleList getPopupData (String name, boolean hasNullValue, String where,
-      String order) {
+  public SimpleList getPopupData (String name, boolean hasNullValue, String where, String order) throws StorageObjectException {
     // caching
     if (hasPopupCache && popupCache != null)
       return  popupCache;
@@ -828,6 +827,7 @@ public class Database implements StorageObject {
       }
     } catch (Exception e) {
       theLog.printDebugInfo(e.toString());
+      throw new StorageObjectException(e.toString());
     } finally {
       freeConnection(con, stmt);
     }
@@ -857,7 +857,7 @@ public class Database implements StorageObject {
 
   /* invalidates the popupCache
    */
-  private void invalidatePopupCache () {
+  protected void invalidatePopupCache () {
 
     /** @todo  invalidates toooo much */
     popupCache = null;
@@ -869,14 +869,25 @@ public class Database implements StorageObject {
    * @param stmt Statemnt
    * @param sql Sql-String
    * @return ResultSet
-   * @exception StorageObjectException, SQLException
+   * @exception StorageObjectException
    */
-  public ResultSet executeSql (Statement stmt, String sql) throws StorageObjectException,
-      SQLException {
+  public ResultSet executeSql (Statement stmt, String sql)
+    throws StorageObjectException, SQLException
+  {
+    ResultSet rs;
     long startTime = (new java.util.Date()).getTime();
-    ResultSet rs = stmt.executeQuery(sql);
-    theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms. for: "
+    try {
+      rs = stmt.executeQuery(sql);
+      theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms. for: "
+        + sql);
+    }
+    catch (SQLException e)
+    {
+      theLog.printDebugInfo("Failed: " + (new java.util.Date().getTime() - startTime) + "ms. for: "
         + sql);
+      throw e;
+    }
+
     return  rs;
   }
 
@@ -889,6 +900,7 @@ public class Database implements StorageObject {
    */
   public ResultSet executeSql (PreparedStatement stmt) throws StorageObjectException,
       SQLException {
+
     long startTime = (new java.util.Date()).getTime();
     ResultSet rs = stmt.executeQuery();
     theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms.");
@@ -928,10 +940,19 @@ public class Database implements StorageObject {
   public int executeUpdate(Statement stmt, String sql)
     throws StorageObjectException, SQLException
   {
+    int rs;
     long  startTime = (new java.util.Date()).getTime();
-    //theLog.printDebugInfo("trying: "+ sql);
-    int rs = stmt.executeUpdate(sql);
-    theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms. for: " + sql);
+    try
+    {
+      rs = stmt.executeUpdate(sql);
+      theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms. for: " + sql);
+    }
+    catch (SQLException e)
+    {
+      theLog.printDebugInfo("Failed: " + (new java.util.Date().getTime() - startTime) + "ms. for: "
+        + sql);
+      throw e;
+    }
     return rs;
   }
 
@@ -946,7 +967,10 @@ public class Database implements StorageObject {
       pstmt = con.prepareStatement(sql);
       result = pstmt.executeUpdate();
     }
-    catch (Exception e) {theLog.printDebugInfo("settimage :: setImage gescheitert: "+e.toString());}
+    catch (Exception e) {
+      theLog.printDebugInfo("settimage :: setImage gescheitert: "+e.toString());
+      throw new StorageObjectException("executeUpdate failed: "+e.toString());
+    }
     finally { freeConnection(con,pstmt); }
     theLog.printInfo((new java.util.Date().getTime() - startTime) + "ms. for: " + sql);
     return result;
@@ -1010,11 +1034,11 @@ public class Database implements StorageObject {
   /**
    * Datenbankverbindung wird geschlossen
    */
-  public void disconnectPool () {
+  public void disconnectPool () throws StorageObjectException {
     try {
       myBroker.destroy(100);
     } catch (SQLException sqe) {
-      ;
+      throwSQLException(sqe, "disconnectPool");
     }
   }
 
@@ -1038,17 +1062,21 @@ public class Database implements StorageObject {
    * @param con Connection zur Datenbank
    * @param stmt Statement-Objekt
    */
-  public void freeConnection (Connection con, Statement stmt) {
+  public void freeConnection (Connection con, Statement stmt)
+    throws StorageObjectException {
     try {
       if (stmt != null)
         stmt.close();
     } catch (SQLException e1) {
       theLog.printDebugInfo(e1.toString());
+      throw new StorageObjectException("DB, in freeConnection: "+e1.toString());
     }
     if (con != null)
       myBroker.freeConnection(con);
-    else
+    else {
       theLog.printDebugInfo("Con was null!");
+      throw new StorageObjectException("Con was null!");
+    }
   }
 
   /**
@@ -1057,7 +1085,7 @@ public class Database implements StorageObject {
    * @param wo Funktonsname, in der die SQLException geworfen wurde
    * @exception StorageObjectException
    */
-  void throwSQLException (SQLException sqe, String wo) throws StorageObjectException {
+  protected void throwSQLException (SQLException sqe, String wo) throws StorageObjectException {
     String state = "";
     String message = "";
     int vendor = 0;
@@ -1072,14 +1100,24 @@ public class Database implements StorageObject {
         sqe.toString());
   }
 
+  protected void _throwStorageObjectException (Exception e, String wo) throws StorageObjectException {
+    if (e != null) {
+        theLog.printError(e.toString()+ wo);
+        throw  new StorageObjectException(wo + e.toString());
+    } else {
+        theLog.printError(wo);
+        throw  new StorageObjectException(wo);
+    }
+        
+  }
+
   /**
    * Loggt Fehlermeldung mit dem Parameter Message und wirft dannach eine StorageObjectException
    * @param message Nachricht mit dem Fehler
    * @exception StorageObjectException
    */
   void throwStorageObjectException (String message) throws StorageObjectException {
-    theLog.printError(message);
-    throw  new StorageObjectException(message);
+    _throwStorageObjectException(null, message);
   }
 }