X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fstorage%2FDatabaseLinksImcs.java;h=06c75e6af956316d8c80e5ecb95a759aed5bcae7;hb=fa58a8a8c88c4c23cc537258818abbd8569c093b;hp=2ee800553212bdd58c9d5ec57ac75a5e3f2333ea;hpb=5b5ad25b22bbf795a89cd6c8291e6ed2ff4388e3;p=mir.git diff --git a/source/mircoders/storage/DatabaseLinksImcs.java b/source/mircoders/storage/DatabaseLinksImcs.java index 2ee80055..06c75e6a 100755 --- a/source/mircoders/storage/DatabaseLinksImcs.java +++ b/source/mircoders/storage/DatabaseLinksImcs.java @@ -1,9 +1,3 @@ -/* - * put your module comment here - * formatted with JxBeauty (c) johann.langhofer@nextra.at - */ - - package mircoders.storage; import java.lang.*; @@ -44,9 +38,9 @@ public class DatabaseLinksImcs extends Database private DatabaseLinksImcs () throws StorageObjectException { super(); - this.cache = new HashMap(); + //this.cache = new HashMap(); this.hasTimestamp = false; - this.theTable = "links_imc"; + this.theTable = "links_imcs"; try { this.theEntityClass = Class.forName("mircoders.entity.EntityLinksImcs"); } catch (Exception e) { @@ -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(); } }