No change except no rows found is not reported.
package com.pop3gateway;
import com.pop3gateway.MessageObject.*;
import java.util.HashMap;
import java.util.*;
import java.io.Serializable;
import java.io.*;
import java.sql.*;
/**
* <p>Title: Extensible Messaging Platform</p>
* <p>Description: Enterprise Anti-spam Filter</p>
* <p>Copyright: Copyright (c)1997-2004</p>
* <p>Company: J.A. Korsmeyer, Inc.</p>
* @author J.A. Korsmeyer, Inc.
* @version 5.5
*/
public class Quarantine extends DatabaseServer {
//static final long serialVersionUID = -3537385394408850867L;
//protected QuarantineRec QuarantineRec = null;
protected boolean hit = false;
protected boolean success = true;
File messageFile = null;
File messageFile2 = null;
PreparedStatement stQuerySenderRecipient = null;
PreparedStatement stQuerySender = null;
PreparedStatement stQueryRecipient = null;
PreparedStatement stQueryRecipientLike = null;
PreparedStatement stInsertRec = null;
PreparedStatement stDeleteRec = null;
String quarantine = System.getProperty("EMP.home") +
File.separatorChar +
"Data"
+ File.separatorChar + "RouterProcessorEngines" +
File.separatorChar
+ "0" + File.separatorChar + "Quarantine";
String msgObjs = System.getProperty("EMP.home") + File.separatorChar +
"Data"
+ File.separatorChar + "RouterProcessorEngines" +
File.separatorChar
+ "0" + File.separatorChar + "MessageObjects";
public Quarantine() {
this(System.getProperty("EMP.home") + File.separatorChar + "Db");
System.out.println("we ran the beans constructor");
//super();
}
public Quarantine(String databaseDir) {
super(databaseDir);
System.out.println("We're ready to test if Quarantine tables
exist");
if(!quarantineTablesExist()) {
//System.out.println("They don't so create");
try {
Statement createTableStatement = dbConnection.createStatement();
System.err.println("create table statement");
Statement createIE1Statement = dbConnection.createStatement();
Statement createIE2Statement = dbConnection.createStatement();
System.err.println("create table");
createTableStatement.execute("CREATE CACHED TABLE
quarantine(FILENAME CHAR(64), SENDER CHAR(128), RECIPIENT CHAR(128),
SUBJECT CHAR(128), FILTEREDBY CHAR(24), MATCHTEXT CHAR(128), CONSTRAINT
cQuarPRI PRIMARY KEY (FILENAME))");
createIE1Statement.execute("CREATE INDEX IEQ1 ON
quarantine(SENDER)");
createIE2Statement.execute("CREATE INDEX IEQ2 ON
quarantine(RECIPIENT)");
}
catch (SQLException sqlCreateQuarantineE) {
System.err.println("ERROR: unable to create table quarantine");
sqlCreateQuarantineE.printStackTrace();
}
}
// prepare statements for later use
initQuarantine();
}
private String test = "beginning value";
private Object sheetState;
private ResultSet rslt = null;
boolean more = false;
String returnSender = null;
File dbDirPath = null;
QuarantineRec quarantineRec = null;
public void initQuarantine() {
dbDirPath = new File(System.getProperty("EMP.home") +
File.separatorChar + "Db");
//System.out.println("just entered init");
quarantineRec = new QuarantineRec();
try {
setDatabaseDir(dbDirPath.getCanonicalPath());
dbConnect();
stQuerySenderRecipient = dbConnection.prepareStatement(
"SELECT * FROM quarantine WHERE sender=? AND recipient=?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//System.out.println("just prepared stQuerySenderRecipient");
stQuerySender = dbConnection.prepareStatement(
"SELECT * FROM quarantine WHERE sender=?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//System.out.println("just prepared stQuerySender");
stQueryRecipient = dbConnection.prepareStatement(
"SELECT * FROM quarantine WHERE recipient=?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
stQueryRecipientLike = dbConnection.prepareStatement(
"SELECT * FROM quarantine WHERE recipient LIKE ?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//System.out.println("just prepared stQueryRecipient");
stInsertRec = dbConnection.prepareStatement("INSERT INTO
quarantine VALUES(?,?,?,?,?,?)");
stDeleteRec = dbConnection.prepareStatement("DELETE FROM
quarantine WHERE filename = ?");
messagesList("[EMAIL PROTECTED]");
System.out.println("just called messagesList()");
} catch (SQLException stmtPrepE) {
System.err.println("ERROR: Couldn't prepare statements");
}
catch ( IOException dbPathE ) {
System.err.println("ERROR: Couldn't find path to DB directory");
}
}
public boolean quarantined(String sender, String recipient) {
hit = false;
if( sender != null && recipient != null ) {
try {
stQuerySenderRecipient.setString(1,
deFocus(sender).toLowerCase());
stQuerySenderRecipient.setString(2, recipient.toLowerCase());
rslt = stQuerySenderRecipient.executeQuery();
if (rslt != null && rslt.next()) {
hit = true;
}
}
catch (SQLException queryE) {}
}
return hit;
}
public boolean quarantined(SMTPMessageObject mo) {
hit = false;
if (mo.getSender() != null) {
try {
stQuerySender.setString(1,
deFocus(mo.getSender().toLowerCase()));
//System.out.println("getSender= " + deFocus(mo.getSender()));
//System.out.println("recipientsString= " +
mo.getRecipientsAsString());
rslt = stQuerySender.executeQuery();
if (rslt != null) more = rslt.next();
while (more && rslt != null) {
//System.out.println("recipient=" + rslt.getString(2));
//System.out.println("recipString=" +
mo.getRecipientsAsString());
if
(mo.getRecipientsAsString().toLowerCase().indexOf(rslt.getString(2).
toLowerCase()) > -1) {
//System.out.println("matched");
hit = true;
break;
}
more = rslt.next();
}
}
catch (SQLException queryE) {}
}
return hit;
}
public void messagesList(String recipient) {
if( recipient != null ) {
try {
stQueryRecipientLike.setString(1, "%" + recipient.toLowerCase()
+ "%");
rslt = stQueryRecipientLike.executeQuery();
System.out.println("result set=" + rslt);
if(rslt.last()) {
System.out.println("Number of records: " + rslt.getRow());
} else {
System.out.println("No records returned");
}
} catch (SQLException queryE) { queryE.printStackTrace(); }
}
}
boolean tryAgain = true;
public QuarantineRec getNextRec() {
tryAgain = true;
try {
if( rslt != null && rslt.next() ) {
while(tryAgain) {
messageFile = new File(quarantine + File.separatorChar +
rslt.getString("FILENAME"));
if (messageFile.exists()) {
//System.out.println("sender=" + rslt.getString(1));
quarantineRec.filename = rslt.getString("FILENAME");
quarantineRec.sender = rslt.getString("SENDER");
quarantineRec.recipient =
truncate(rslt.getString("RECIPIENT"), 64);
quarantineRec.subject = truncate(rslt.getString("SUBJECT"),
64);
quarantineRec.filteredby = rslt.getString("FILTEREDBY");
quarantineRec.matchtext =
truncate(rslt.getString("MATCHTEXT"), 64);
tryAgain = false;
}
else {
deleteRec(rslt.getString("FILENAME")); // cleanup database
record for deleted message
if(! rslt.next()) { break; }
}
}
}
else {
return null;
}
}catch (SQLException getNextE) {}
return quarantineRec;
}
public String displayMessage(String filename) {
String messageText = null;
String tempLine;
int lineNum = 0;
try {
BufferedReader bufMessageReader = new BufferedReader(new
FileReader(quarantine + File.separatorChar + filename));
while( (tempLine = bufMessageReader.readLine()) != null ) {
//System.out.println("(" + tempLine + ")");
messageText += tempLine + "\n";
lineNum++;
if(lineNum > 100) { break; }
}
bufMessageReader.close();
}
catch( Exception e) {
e.printStackTrace();
}
return messageText;
}
public boolean insertRec(String filename, String sender, String
recipient, String subject, String filteredby, String matchtext) {
success = false;
if( sender != null && recipient != null ) {
try {
success = true;
stInsertRec.setString(1, filename);
stInsertRec.setString(2, deFocus(sender.toLowerCase()));
stInsertRec.setString(3, recipient.toLowerCase());
stInsertRec.setString(4, subject);
stInsertRec.setString(5, filteredby);
stInsertRec.setString(6, matchtext);
stInsertRec.execute();
}
catch (SQLException insertE) {}
}
return success;
}
public boolean deleteRec(String filename) {
try {
success = true;
stDeleteRec.setString(1, filename);
stDeleteRec.execute();
// Delete from Quarantine directory
messageFile = new File(quarantine + File.separatorChar +
filename);
if(messageFile.exists()) {
messageFile.delete();
}
} catch(SQLException deleteE) { success = false; }
return success;
}
public boolean deliver(String filename) {
boolean success = true;
try {
stDeleteRec.setString(1, filename);
stDeleteRec.execute();
messageFile = new File(quarantine + File.separatorChar +
filename);
messageFile2 = new File(msgObjs + File.separatorChar + filename);
messageFile.renameTo(messageFile2);
} catch(SQLException deleteE) { success = false; }
return success;
}
public boolean messageFileExists(String filename) {
boolean exists = false;
messageFile = new File(quarantine + File.separatorChar + filename);
if(messageFile.exists()) { exists = true; }
return exists;
}
protected boolean quarantineTablesExist() {
boolean exists = true;
// String[] types = {"TABLE"};
try {
Statement statement = dbConnection.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM quarantine");
/*
DatabaseMetaData metaData = dbConnection.getMetaData();
ResultSet rs = metaData.getTables(null, null, "whitelist", // 2nd
null would be schemapattern
null);
if(rs.next()) { //the table exists
exists = true;
}
*/
}catch (Exception e) { e.printStackTrace(); exists = false; }
return exists;
}
public void quarantineDirectoryCleanup() {
// Delete from database if not in Quarantine directory
//
}
public void close() {
try {
dbConnection.commit();
dbConnection.close();
} catch (SQLException sqlClose) {
System.err.println("ERROR: closing connection into
statistics database");
sqlClose.printStackTrace();
}
}
protected String deFocus(String str) {
String returnToken = ""; // probably should be null but we need to
fix in full path (SMTPmsgObject + output portal
StringTokenizer tokenizer = new StringTokenizer(str, "<>");
if( tokenizer.hasMoreTokens()) {
returnToken = tokenizer.nextToken();
}
return returnToken;
}
public String truncate(String string, int maxChars) {
String returnString = string;
if(string != null && string.length() > maxChars) {
returnString = string.substring(0, maxChars);
}
return returnString;
}
public ResultSet getRslt() {
System.out.println("just called getRslt()");
return rslt;
}
public void setRslt(ResultSet rslt) { this.rslt = rslt; }
//void getInitQuarantine() { initQuarantine(); }
//void setInitQuarantine() { initQuarantine(); }
public Object getSheetState() {
return sheetState;
}
public void setSheetState(Object sheetState) {
this.sheetState = sheetState;
}
public void setTest(String teststring) {
this.test = teststring;
System.out.println("just setTest to " + this.test);
this.test = "this is what we hard setTest to";
}
public String getTest() { return this.test; }
}
-----Original Message-----
From: Bernd Bohmann [mailto:[EMAIL PROTECTED]
Sent: Monday, March 06, 2006 11:27 AM
To: MyFaces Discussion
Subject: Re: Tobago sheet using jdbc ResultSet example request
Please remove the state attribute it should be a ref to a SheetState
Instance.
Please remove showRowRage, showDirectLinks and directLinkCount
attributes they make no sense for a dataModel for a resultSet because
the dataModel returns rowCount -1 for a resultSet.
Can you send me the ManagedBean code, please.
Bernd
John schrieb:
That's what I thought - so I changed it to uppercase. Didn't affect
the results.
createTableStatement.execute("CREATE CACHED TABLE quarantine(FILENAME
CHAR(64), SENDER CHAR(128), RECIPIENT CHAR(128), SUBJECT CHAR(128),
FILTEREDBY CHAR(24), MATCHTEXT CHAR(128), CONSTRAINT cQuarPRI PRIMARY
KEY (FILENAME))");
<t:sheet
value="#{quarantine.rslt}"
id="sheet"
columns="3*;1*;3*;3*;3*"
var="quarantineRec"
state="1"
showRowRange="left"
showPageRange="right"
showDirectLinks="center"
pagingLength="7"
directLinkCount="5">
<t:column label="From" id="name" sortable="true">
<t:out value="#{quarantineRec.SENDER}" />
</t:column>
<t:column label="To" id="number" sortable="false"
align="center">
<t:out value="#{quarantineRec.RECIPIENT}" />
</t:column>
<t:column label="Subject" sortable="true">
<t:out value="#{quarantineRec.SUBJECT}" />
</t:column>
<t:column label="Matched" sortable="true">
<t:out value="#{quarantineRecr.MATCHTEXT}" />
</t:column>
<t:column label="Filtered" sortable="true" align="right">
<t:out value="#{quarantineRec.FILTEREDBY}" />
</t:column>
</t:sheet>
-----Original Message-----
From: Bernd Bohmann [mailto:[EMAIL PROTECTED]
Sent: Monday, March 06, 2006 11:02 AM
To: MyFaces Discussion
Subject: Re: Tobago sheet using jdbc ResultSet example request
John,
please send the sheet jsp and the definition of the table.
Maybe a case-sensitive problem.
Bernd
John schrieb:
Ok.
My bean is retrieving 2 rows, but they are not being displayed.
In the definition of the tobago sheet, the var definition: It's
arbitrary, I'm assuming and doesn't map to any real variables in any
beans.
Ok. So assuming a var definition of: QuarantineRec Then in the t:outs
if I'm using: quarantineRec.SENDER where SENDER is a database column
in the returned ResultSet.........
Does Tobago automatically know that SENDER is a db column?
No data showing in the Tobago sheet.
John
-----Original Message-----
From: Bernd Bohmann [mailto:[EMAIL PROTECTED]
Sent: Monday, March 06, 2006 1:28 AM
To: MyFaces Discussion
Subject: Re: Tobago sheet using jdbc ResultSet example request
John schrieb:
Thank you very much for the example.
The trick seems to be having a function called 'select' within the
backing bean, which tobago's sheet looks for to return data into the
resultSet which has been provided within the sheet's value.
Yes?
No, the select method is for the detail page.
The getSolarObjects() method is for the sheet.
The other get methods are for the detail page.
Bernd
--
Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development
Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333
--
Dipl.-Ing. Bernd Bohmann - Atanion GmbH - Software Development
Bismarckstr. 13, 26122 Oldenburg, http://www.atanion.com
phone: +49 441 4082312, mobile: +49 173 8839471, fax: +49 441 4082333