1 package com.knowgate.hipergate; 2 3 import java.sql.SQLException ; 4 import java.sql.PreparedStatement ; 5 import java.sql.ResultSet ; 6 import java.sql.Timestamp ; 7 8 import com.knowgate.debug.DebugFile; 9 import com.knowgate.jdc.JDCConnection; 10 import com.knowgate.dataobjs.DB; 11 import com.knowgate.dataobjs.DBPersist; 12 import com.knowgate.dataobjs.DBSubset; 13 14 19 20 public class RecentlyUsed { 21 22 private String sTable; 23 private String sPK; 24 private String sFilter; 25 private String sDate; 26 private int iSize; 27 28 36 public RecentlyUsed (String sBaseTable, int iListSize, String sPrimaryKey, String sFilterField) { 37 sTable = sBaseTable; 38 sPK = sPrimaryKey; 39 sFilter = sFilterField; 40 iSize = iListSize; 41 sDate = DB.dt_last_visit; 42 } 43 44 46 52 public void clear (JDCConnection oConn, Object oFilterValue) 53 throws SQLException { 54 55 if (DebugFile.trace) { 56 DebugFile.writeln("Begin RecentlyUsed.clear ([Connection]," + oFilterValue + ")"); 57 DebugFile.incIdent(); 58 DebugFile.writeln("Connection.prepareStatement(DELETE FROM " + sTable + " WHERE " + sFilter + "=" + oFilterValue + ")"); 59 } 60 61 PreparedStatement oDlte = oConn.prepareStatement("DELETE FROM " + sTable + " WHERE " + sFilter + "=?"); 62 oDlte.setObject (1, oFilterValue); 63 int iDeleted = oDlte.executeUpdate(); 64 oDlte.close(); 65 66 if (DebugFile.trace) { 67 DebugFile.decIdent(); 68 DebugFile.writeln("End RecentlyUsed.clear () : " + String.valueOf(iDeleted)); 69 } 70 } 72 74 81 public int listSize (JDCConnection oConn, Object oFilterValue) 82 throws SQLException { 83 84 if (DebugFile.trace) { 85 DebugFile.writeln("Begin RecentlyUsed.listSize ([Connection]," + oFilterValue + ")"); 86 DebugFile.incIdent(); 87 DebugFile.writeln("Connection.prepareStatement(SELECT COUNT(" + sPK + ") FROM " + sTable + " WHERE " + sFilter + "=" +oFilterValue + ")"); 88 } 89 90 PreparedStatement oStmt = oConn.prepareStatement("SELECT COUNT(" + sPK + ") FROM " + sTable + " WHERE " + sFilter + "=?" , ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 91 oStmt.setObject (1, oFilterValue); 92 ResultSet oRSet = oStmt.executeQuery(); 93 oRSet.next(); 94 Object oCount = oRSet.getObject(1); 95 oRSet.close(); 96 oStmt.close(); 97 98 if (DebugFile.trace) { 99 DebugFile.decIdent(); 100 DebugFile.writeln("End RecentlyUsed.listSize () : " + oCount); 101 } 102 103 return Integer.parseInt(oCount.toString()); 104 } 106 108 116 public DBSubset list (JDCConnection oConn, Object oFilterValue) 117 throws SQLException { 118 119 if (DebugFile.trace) { 120 DebugFile.writeln("Begin RecentlyUsed.list ([Connection]," + oFilterValue + ")"); 121 DebugFile.incIdent(); 122 } 123 124 DBSubset oList = new DBSubset (sTable, "*", sFilter + "=? ORDER BY " + sDate + " DESC", iSize); 125 126 oList.load (oConn, new Object []{oFilterValue}); 127 128 if (DebugFile.trace) { 129 DebugFile.decIdent(); 130 DebugFile.writeln("End RecentlyUsed.list () : " + String.valueOf(oList.getRowCount())); 131 } 132 133 return oList; 134 } 136 138 private void deleteOldest (JDCConnection oConn, Object oFilterValue) 139 throws SQLException { 140 141 Object oPK = null; 142 143 if (DebugFile.trace) { 144 DebugFile.writeln("Begin RecentlyUsed.deleteOldest ([Connection]," + oFilterValue + ")"); 145 DebugFile.incIdent(); 146 DebugFile.writeln("Connection.prepareStatement(SELECT " + sPK + " FROM " + sTable + " WHERE " + sFilter + "=" + oFilterValue + " ORDER BY " + sDate + ")"); 147 } 148 149 PreparedStatement oStmt = oConn.prepareStatement("SELECT " + sPK + " FROM " + sTable + " WHERE " + sFilter + "=? ORDER BY " + sDate, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 150 oStmt.setObject (1, oFilterValue); 151 ResultSet oRSet = oStmt.executeQuery(); 152 if (oRSet.next()) 153 oPK = oRSet.getObject(1); 154 oRSet.close(); 155 oStmt.close(); 156 157 if (null!=oPK) { 158 if (DebugFile.trace) 159 DebugFile.writeln("Connection.prepareStatement(DELETE FROM " + sTable + " WHERE " + sPK + "=" + oPK + ")"); 160 161 PreparedStatement oDlte = oConn.prepareStatement("DELETE FROM " + sTable + " WHERE " + sPK + "=?"); 162 oDlte.setObject (1, oPK); 163 oDlte.executeUpdate(); 164 oDlte.close(); 165 } 167 if (DebugFile.trace) { 168 DebugFile.decIdent(); 169 DebugFile.writeln("End RecentlyUsed.deleteOldest () : " + oPK); 170 } 171 } 173 175 182 public void add (JDCConnection oConn, DBPersist oItem) 183 throws SQLException { 184 185 if (DebugFile.trace) { 186 DebugFile.writeln("Begin RecentlyUsed.add ([Connection],[DBPersist])"); 187 DebugFile.incIdent(); 188 DebugFile.writeln("filter value=" + oItem.get(sFilter)); 189 } 190 191 Object oFilterValue = oItem.get(sFilter); 192 193 if (listSize(oConn, oFilterValue) >= iSize) deleteOldest (oConn, oFilterValue); 194 195 oItem.replace(sDate, new Timestamp (new java.util.Date ().getTime())); 196 197 oItem.store(oConn); 198 199 if (DebugFile.trace) { 200 DebugFile.decIdent(); 201 DebugFile.writeln("End RecentlyUsed.add()"); 202 } 203 } } | Popular Tags |