Mir goes GPL
[mir.git] / source / mircoders / storage / DatabaseLinksImcs.java
index 6618251..7290782 100755 (executable)
@@ -1,3 +1,34 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
 package  mircoders.storage;
 
 import  java.lang.*;
@@ -16,45 +47,52 @@ import  mir.misc.*;
  *
  */
 public class DatabaseLinksImcs extends Database
-    implements StorageObject {
-  private static DatabaseLinksImcs instance;
+               implements StorageObject {
+       private static DatabaseLinksImcs instance;
 
-  /**
-   * put your documentation comment here
-   * @return
-   * @exception StorageObjectException
-   */
-  public static DatabaseLinksImcs getInstance () throws StorageObjectException {
-    if (instance == null) {
-      instance = new DatabaseLinksImcs();
-      instance.myselfDatabase = instance;
-    }
-    return  instance;
-  }
+       /**
+        * put your documentation comment here
+        * @return
+        * @exception StorageObjectException
+        */
+       // the following *has* to be sychronized cause this static method
+       // could get preemted and we could end up with 2 instances of DatabaseFoo..
+       // see the "Singletons with needles and thread" article at JavaWorld -mh
+       public synchronized static DatabaseLinksImcs getInstance () 
+         throws StorageObjectException {
+               if (instance == null) {
+                       instance = new DatabaseLinksImcs();
+                       instance.myselfDatabase = instance;
+               }
+               return  instance;
+       }
 
-  /**
-   * put your documentation comment here
-   */
-  private DatabaseLinksImcs () throws StorageObjectException
-  {
-    super();
-    //this.cache = new HashMap();
-    this.hasTimestamp = false;
-    this.theTable = "links_imcs";
-    try {
-      this.theEntityClass = Class.forName("mircoders.entity.EntityLinksImcs");
-    } catch (Exception e) {
-      throw  new StorageObjectException(e.toString());
-    }
-  }
+       /**
+        * put your documentation comment here
+        */
+       private DatabaseLinksImcs () throws StorageObjectException
+       {
+               super();
+               ////this.cache = new HashMap();
+               this.hasTimestamp = false;
+               this.theTable = "links_imcs";
+               try {
+                       this.theEntityClass = Class.forName("mircoders.entity.EntityLinksImcs");
+               } catch (Exception e) {
+                       throw  new StorageObjectException(e.toString());
+               }
+       }
 
-  public String insert (Entity theEntity) throws StorageObjectException {
+       /** @todo toooo much copy/paste in this class //rk  */
+
+       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();
@@ -74,12 +112,12 @@ public class DatabaseLinksImcs extends Database
                                                        aValue = "?";
                                                }
                                                else {
-                                                       if (theEntity.hasValueForField(aField)) {
-                if (aField.equals("to_parent_id")) {
-                  aValue = StringUtil.quote((String)theEntity.getValue(aField));
-                } else {
-                                                                 aValue = "'" + StringUtil.quote((String)theEntity.getValue(aField)) + "'";
-                }
+                                                       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)) + "'";
+                                                               }
                                                        }
                                                }
                                        }
@@ -106,7 +144,7 @@ public class DatabaseLinksImcs extends Database
                        pstmt = con.prepareStatement(sql);
                        if (streamedInput != null) {
                                for (int i = 0; i < streamedInput.size(); i++) {
-                                       String inputString = (String)theEntity.getValue((String)streamedInput.get(i));
+                                       String inputString = (String)theEntityValues.get(streamedInput.get(i));
                                        pstmt.setBytes(i + 1, inputString.getBytes());
                                }
                        }
@@ -129,84 +167,74 @@ public class DatabaseLinksImcs extends Database
                return  returnId;
        }
 
-  public void update (Entity theEntity) throws StorageObjectException {
-    Connection con = null;
-    PreparedStatement pstmt = null;
-    ArrayList streamedInput = theEntity.streamedInput();
-    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 (theEntity.hasValueForField(aField)) {
-          if (firstField == false) {
-            fv.append(", ");
-          }
-          else {
-            firstField = false;
-          }
-          if (aField.equals("to_parent_id")) {
-            fv.append(aField).append("=").append(StringUtil.quote(theEntity.getValue(aField)));
-          } else {
-            fv.append(aField).append("='").append(StringUtil.quote((String)theEntity.getValue(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)theEntity.getValue((String)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 SimpleHash getHashData () {
-    return  getHashData();
-  }
+       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);
+               }
+       }
 
-  public SimpleList getPopupData () {
-    return  getPopupData();
-  }
 }