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