X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmircoders%2Fstorage%2FDatabaseLinksImcs.java;h=a2911ef0230f9c281597368aeef8f9e3c8621688;hb=cefb1fc50afc1db7e00fc67290589d4694f5e7be;hp=66182515f7645fcc07bd5a0a236b37211cf264f8;hpb=1e06f519c12e542b61df7a19ceec7871011112c7;p=mir.git diff --git a/source/mircoders/storage/DatabaseLinksImcs.java b/source/mircoders/storage/DatabaseLinksImcs.java index 66182515..a2911ef0 100755 --- a/source/mircoders/storage/DatabaseLinksImcs.java +++ b/source/mircoders/storage/DatabaseLinksImcs.java @@ -16,45 +16,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()); - } - } + /** @todo toooo much copy/paste in this class //rk */ - public String insert (Entity theEntity) throws StorageObjectException { + 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 +81,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 +113,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 +136,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(); - } }