*** empty log message ***
[mir.git] / source / mircoders / storage / DatabaseLinksImcs.java
index 21eba6a..06c75e6 100755 (executable)
@@ -1,9 +1,3 @@
-/*
- * put your module comment here
- * formatted with JxBeauty (c) johann.langhofer@nextra.at
- */
-
-
 package  mircoders.storage;
 
 import  java.lang.*;
@@ -44,7 +38,7 @@ public class DatabaseLinksImcs extends Database
   private DatabaseLinksImcs () throws StorageObjectException
   {
     super();
-    this.cache = new HashMap();
+    //this.cache = new HashMap();
     this.hasTimestamp = false;
     this.theTable = "links_imcs";
     try {
@@ -54,12 +48,166 @@ public class DatabaseLinksImcs extends Database
     }
   }
 
+  public String insert (Entity theEntity) throws StorageObjectException {
+               String returnId = "0";
+               Connection con = null;
+               PreparedStatement pstmt = null;
+               //cache
+               invalidatePopupCache();
+               try {
+                       HashMap theEntityValues = theEntity.getValues();
+                       ArrayList streamedInput = theEntity.streamedInput();
+                       StringBuffer f = new StringBuffer();
+                       StringBuffer v = new StringBuffer();
+                       String aField, aValue;
+                       boolean firstField = true;
+                       // make sql-string
+                       for (int i = 0; i < getFields().size(); i++) {
+                               aField = (String)getFields().get(i);
+                               if (!aField.equals(thePKeyName)) {
+                                       aValue = null;
+                                       // sonderfaelle
+                                       if (aField.equals("webdb_create")) {
+                                               aValue = "NOW()";
+                                       }
+                                       else {
+                                               if (streamedInput != null && streamedInput.contains(aField)) {
+                                                       aValue = "?";
+                                               }
+                                               else {
+                                                       if (theEntityValues.containsKey(aField)) {
+                if (aField.equals("to_parent_id")) {
+                  aValue = StringUtil.quote((String)theEntityValues.get(aField));
+                } else {
+                                                                 aValue = "'" + StringUtil.quote((String)theEntityValues.get(aField)) + "'";
+                }
+                                                       }
+                                               }
+                                       }
+                                       // wenn Wert gegeben, dann einbauen
+                                       if (aValue != null) {
+                                               if (firstField == false) {
+                                                       f.append(",");
+                                                       v.append(",");
+                                               }
+                                               else {
+                                                       firstField = false;
+                                               }
+                                               f.append(aField);
+                                               v.append(aValue);
+                                       }
+                               }
+                       }         // end for
+                       // insert into db
+                       StringBuffer sqlBuf = new StringBuffer("insert into ").append(theTable).append("(").append(f).append(") values (").append(v).append(")");
+                       String sql = sqlBuf.toString();
+                       theLog.printInfo("INSERT: " + sql);
+                       con = getPooledCon();
+                       con.setAutoCommit(false);
+                       pstmt = con.prepareStatement(sql);
+                       if (streamedInput != null) {
+                               for (int i = 0; i < streamedInput.size(); i++) {
+                                       String inputString = (String)theEntityValues.get(streamedInput.get(i));
+                                       pstmt.setBytes(i + 1, inputString.getBytes());
+                               }
+                       }
+                       pstmt.execute();
+                       pstmt = con.prepareStatement(theAdaptor.getLastInsertSQL((Database)myselfDatabase));
+                       ResultSet rs = pstmt.executeQuery();
+                       rs.next();
+                       returnId = rs.getString(1);
+                       theEntity.setId(returnId);
+               } catch (SQLException sqe) {
+                       throwSQLException(sqe, "insert");
+               } finally {
+                       try {
+                               con.setAutoCommit(true);
+                       } catch (Exception e) {
+                               ;
+                       }
+                       freeConnection(con, pstmt);
+               }
+               return  returnId;
+       }
+
+  public void update (Entity theEntity) throws StorageObjectException {
+    Connection con = null;
+    PreparedStatement pstmt = null;
+    ArrayList streamedInput = theEntity.streamedInput();
+    HashMap theEntityValues = theEntity.getValues();
+    String id = theEntity.getId();
+    String aField;
+    StringBuffer fv = new StringBuffer();
+    boolean firstField = true;
+    //cache
+    invalidatePopupCache();
+    // build sql statement
+    for (int i = 0; i < getFields().size(); i++) {
+      aField = (String)metadataFields.get(i);
+      // 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 (firstField == false) {
+            fv.append(", ");
+          }
+          else {
+            firstField = false;
+          }
+          if (aField.equals("to_parent_id")) {
+            fv.append(aField).append("=").append(StringUtil.quote((String)theEntityValues.get(aField)));
+          } else {
+            fv.append(aField).append("='").append(StringUtil.quote((String)theEntityValues.get(aField))).append("'");
+          }
+        }
+      }
+    }
+    StringBuffer sql = new StringBuffer("update ").append(theTable).append(" set ").append(fv);
+    // exceptions
+    if (metadataFields.contains("webdb_lastchange")) {
+      sql.append(",webdb_lastchange=NOW()");
+    }
+    if (streamedInput != null) {
+      for (int i = 0; i < streamedInput.size(); i++) {
+        sql.append(",").append(streamedInput.get(i)).append("=?");
+      }
+    }
+    sql.append(" where id=").append(id);
+    theLog.printInfo("UPDATE: " + sql);
+    // execute sql
+    try {
+      con = getPooledCon();
+      con.setAutoCommit(false);
+      pstmt = con.prepareStatement(sql.toString());
+      if (streamedInput != null) {
+        for (int i = 0; i < streamedInput.size(); i++) {
+          String inputString = (String)theEntityValues.get(streamedInput.get(i));
+          pstmt.setBytes(i + 1, inputString.getBytes());
+        }
+      }
+      pstmt.executeUpdate();
+    } catch (SQLException sqe) {
+      throwSQLException(sqe, "update");
+    } finally {
+      try {
+        con.setAutoCommit(true);
+      } catch (Exception e) {
+        ;
+      }
+      freeConnection(con, pstmt);
+    }
+  }
+
   /**
    * put your documentation comment here
    * @return
    */
-  public SimpleList getPopupData () {
-    return  getPopupData("title", true);
+  public SimpleHash getHashData () {
+    return  getHashData();
+  }
+
+  public SimpleList getPopupData () throws StorageObjectException {
+    return  getPopupData();
   }
 }