KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > knowgate > hipergate > RecentlyUsed


1 package com.knowgate.hipergate;
2
3 import java.sql.SQLException JavaDoc;
4 import java.sql.PreparedStatement JavaDoc;
5 import java.sql.ResultSet JavaDoc;
6 import java.sql.Timestamp JavaDoc;
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 /**
15  * Generic list of recently used items held at a database table
16  * @author Sergio Montoro Ten
17  * @version 2.0
18  */

19
20 public class RecentlyUsed {
21
22   private String JavaDoc sTable;
23   private String JavaDoc sPK;
24   private String JavaDoc sFilter;
25   private String JavaDoc sDate;
26   private int iSize;
27
28   /**
29    * <p>Open access to a recently used list.</p>
30    * <p>Example: new RecentlyUsed ("k_companies_recent", 10, "gu_company", "gu_user")</p>
31    * @param sBaseTable Name of database table that holds all instances of list class
32    * @param iListSize Maximum items per distinct list
33    * @param sPrimaryKey Primary key of the items at each list
34    * @param sFilterField Field used for filtering items from an specific list
35    */

36   public RecentlyUsed (String JavaDoc sBaseTable, int iListSize, String JavaDoc sPrimaryKey, String JavaDoc sFilterField) {
37     sTable = sBaseTable;
38     sPK = sPrimaryKey;
39     sFilter = sFilterField;
40     iSize = iListSize;
41     sDate = DB.dt_last_visit;
42   }
43
44   // ---------------------------------------------------------------------------
45

46   /**
47    * Clear recently used list
48    * @param oConn JDBC Database Connection
49    * @param oFilterValue Value for field used for filtering items from this list
50    * @throws SQLException
51    */

52   public void clear (JDCConnection oConn, Object JavaDoc oFilterValue)
53     throws SQLException JavaDoc {
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 JavaDoc 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   } // clear
71

72   // ---------------------------------------------------------------------------
73

74   /**
75    * Current list size
76    * @param oConn JDBC Database connection
77    * @param oFilterValue Value for field used for filtering items from this list
78    * @return Number of items in list
79    * @throws SQLException
80    */

81   public int listSize (JDCConnection oConn, Object JavaDoc oFilterValue)
82     throws SQLException JavaDoc {
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 JavaDoc 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 JavaDoc oRSet = oStmt.executeQuery();
93     oRSet.next();
94     Object JavaDoc 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   } // listSize
105

106   // ---------------------------------------------------------------------------
107

108   /**
109    * <P>Get list items</p>
110    * Items are returned ordered by last use. First the most recently used one.
111    * @param oConn JDBC Database Connection
112    * @param oFilterValue Value for field used for filtering items from this list
113    * @return List items as a DBSubset
114    * @throws SQLException
115    */

116   public DBSubset list (JDCConnection oConn, Object JavaDoc oFilterValue)
117     throws SQLException JavaDoc {
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 JavaDoc[]{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   } // list
135

136   // ---------------------------------------------------------------------------
137

138   private void deleteOldest (JDCConnection oConn, Object JavaDoc oFilterValue)
139     throws SQLException JavaDoc {
140
141     Object JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc oDlte = oConn.prepareStatement("DELETE FROM " + sTable + " WHERE " + sPK + "=?");
162       oDlte.setObject (1, oPK);
163       oDlte.executeUpdate();
164       oDlte.close();
165     } // fi
166

167     if (DebugFile.trace) {
168       DebugFile.decIdent();
169       DebugFile.writeln("End RecentlyUsed.deleteOldest () : " + oPK);
170     }
171   } // deleteOldest
172

173   // ---------------------------------------------------------------------------
174

175   /**
176    * <p>Add item to the list</p>
177    * If list has reached its maximum allowed size then the oldest item is removed before inserting the new one
178    * @param oConn JDBC Database Connection
179    * @param oItem DBPersist instance containing all neccessary values for the inserted item except the access date.
180    * @throws SQLException
181    */

182   public void add (JDCConnection oConn, DBPersist oItem)
183     throws SQLException JavaDoc {
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 JavaDoc oFilterValue = oItem.get(sFilter);
192
193     if (listSize(oConn, oFilterValue) >= iSize) deleteOldest (oConn, oFilterValue);
194
195     oItem.replace(sDate, new Timestamp JavaDoc (new java.util.Date JavaDoc().getTime()));
196
197     oItem.store(oConn);
198
199     if (DebugFile.trace) {
200       DebugFile.decIdent();
201       DebugFile.writeln("End RecentlyUsed.add()");
202     }
203   } // add
204
}
Popular Tags