package thaw.plugins.miniFrost.frostKSK;
import java.sql.*;
import java.util.Date;
import thaw.core.Logger;
import thaw.plugins.Hsqldb;
public class SSKBoard extends KSKBoard {
private String publicKey;
private String privateKey;
public SSKBoard(SSKBoardFactory factory,
int id, String name, Date lastUpdate,
String publicKey, String privateKey) {
super(factory, id, name, lastUpdate);
if (!publicKey.endsWith("/"))
publicKey += "/";
if (privateKey != null && !privateKey.endsWith("/"))
privateKey += "/";
this.publicKey = publicKey;
this.privateKey = privateKey;
}
/**
* called by KSKMessage.download();
*/
protected String getDownloadKey(Date date, int rev) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy.M.d");
StringBuffer keyBuf = new StringBuffer(publicKey);
keyBuf.append(getName()+"|");
keyBuf = formatter.format(date, keyBuf, new java.text.FieldPosition(0));
keyBuf.append("-");
keyBuf.append(Integer.toString(rev));
keyBuf.append(".xml");
return keyBuf.toString();
}
protected int getKeyType() {
return thaw.fcp.FCPClientPut.KEY_TYPE_SSK;
}
/**
* called by KSKDraft
*/
protected String getPrivateKey() {
return privateKey;
}
protected String getPublicKey() {
return publicKey;
}
/**
* called by KSKDraft
*/
protected String getNameForInsertion(Date date, int rev) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy.M.d");
StringBuffer keyBuf = new StringBuffer(getName()+"|");
keyBuf = formatter.format(date, keyBuf, new java.text.FieldPosition(0));
keyBuf.append("-");
keyBuf.append(Integer.toString(rev));
keyBuf.append(".xml");
return keyBuf.toString();
}
public boolean destroy() {
try {
Hsqldb db = getFactory().getDb();
synchronized(db.dbLock) {
PreparedStatement st;
st = db.getConnection().prepareStatement("DELETE FROM frostSSKBoards "+
"WHERE kskBoardId = ?");
st.setInt(1, getId());
st.execute();
st.close();
}
} catch(SQLException e) {
Logger.error(this, "Can't destroy the board because : "+e.toString());
return false;
}
if (!super.destroy()) {
/* unable to destroy the board
* => we put back the public and private keys
* to avoid some desynchronisations
*/
try {
Hsqldb db = getFactory().getDb();
synchronized(db.dbLock) {
PreparedStatement st;
st = db.getConnection().prepareStatement("INSERT INTO frostSSKBoards "+
"(publicKey, privateKey, kskBoardId) "+
"VALUES (?, ?, ?)");
st.setString(1, publicKey);
if (privateKey != null)
st.setString(2, privateKey);
else
st.setNull(2, Types.VARCHAR);
st.setInt(3, getId());
st.execute();
st.close();
}
} catch(SQLException e) {
Logger.error(this, "Oops ! Unable to delete the board, and I think that I've broken something :(");
Logger.error(this, "Reason : "+e.toString());
}
return false;
}
return true;
}
public thaw.plugins.miniFrost.interfaces.Draft getDraft(thaw.plugins.miniFrost.interfaces.Message inReplyTo) {
if (privateKey == null) {
Logger.warning(this, "Sorry, you need the private key to post on this board");
return null;
}
return super.getDraft(inReplyTo);
}
public String toString() {
if (privateKey == null)
return super.toString()+" (R)";
else
return super.toString()+" (R/W)";
}
}