/**
* $Date: 2003/10/13 22:11:23 $
* $Author: Administrator $
* $Id: ClipAgent.java,v 1.2 2003/10/13 22:11:23 Administrator Exp $
* $Revision: 1.2 $
* $Source: /mnt/flashdrive/cvshome/cl1p/web-inf/src/com/diodesoftware/scb/agents/ClipAgent.java,v $
*/
package com.diodesoftware.scb.agents;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.diodesoftware.dbmapper.DBMapper;
import com.diodesoftware.scb.clipboard.ClipSaver;
import com.diodesoftware.scb.clipboard.ClipSqlException;
import com.diodesoftware.scb.tables.Clip;
import com.diodesoftware.scb.tables.ClipHistory;
import com.diodesoftware.scb.tables.ClipLink;
import com.diodesoftware.scb.tables.Forum;
import com.diodesoftware.scb.tables.RichText;
import com.diodesoftware.scb.tables.TodoList;
public class ClipAgent
{
private static ClipAgent instance = null;
public DBMapper dbMapper;
private Logger log = Logger.getLogger(ClipAgent.class);
private ClipAgent(DBMapper mapper)
{
this.dbMapper = mapper;
}
public static synchronized void initalize(DBMapper dbMapper)
{
instance = new ClipAgent(dbMapper);
}
public static ClipAgent getInstance()
{
return instance;
}
public Clip loadClip(String uri, Connection con)
{
Clip result = null;
String sql = "Select * from Clip where Uri = ?";
try
{
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setString(1, uri);
ResultSet rs = prepStmt.executeQuery();
if(rs.next())
result = (Clip)dbMapper.loadSingle(Clip.class, rs);
rs.close();
prepStmt.close();
}catch(SQLException e)
{
log.error("Error running SQL [" + sql + "]", e);
}
return result;
}
public void saveClip(Clip clip, Connection con)
{
String content = clip.getValue();
if(content == null)
content = "";
if(content.getBytes().length > ClipSaver.MAX_VALUE_SIZE)
{
byte[] trim = new byte[ClipSaver.MAX_VALUE_SIZE];
System.arraycopy(content.getBytes(), 0, trim, 0, ClipSaver.MAX_VALUE_SIZE);
content = new String(trim);
log.error("Content Bytes:" + content.getBytes().length + " > " + ClipSaver.MAX_VALUE_SIZE + ". Triming");
clip.setValue(content);
}
try
{
dbMapper.save(clip,con);
}catch(ClipSqlException e)
{
log.error("Error Saving clip.\n" +
"Title Size:" + clip.getTitle().length() + " \n" +
"Value Size:" + clip.getValue().length(),e);
}
// ClipHistory history = new ClipHistory();
// history.setClipNumber(clip.getNumber());
// history.setLastEdit(clip.getLastEdit());
// history.setValue(clip.getValue());
// dbMapper.save(history,con);
}
public void removePassword(Clip clip, Connection con){
String sql = "update Clip set Password = null where Uri = ?";
log.debug("Setting password null for [" +clip.getUri() + "] [" + sql + "]");
try{
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setString(1, clip.getUri());
prepStmt.executeUpdate();
prepStmt.close();
}catch(SQLException e){
log.error("Error running sql [" + sql + "]", e);
}
}
public void saveClipLink(ClipLink cl, Connection con){
dbMapper.save(
cl, con
);
}
public ClipLink[] getLinksTo(Clip clip, Connection con){
List list = new ArrayList();
String sql = "Select * from ClipLink where ClipId = ? and Blocked = 'N'";
try{
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setInt(1, clip.getNumber());
ResultSet rs = prepStmt.executeQuery();
while(rs.next()){
list.add(dbMapper.loadSingle(ClipLink.class, rs));
}
rs.close();
prepStmt.close();
}catch(SQLException e){
log.error("SQL Exception loading link code [" + sql + "]",e);
}
//log.error("getLinks got [" + list.size() + "] from [" + sql + "] Id[" + clip.getNumber() + "]");
ClipLink[] result = new ClipLink[list.size()];
list.toArray(result);
return result;
}
public ClipLink[] getLinksFrom(Clip clip, Connection con){
List list = new ArrayList();
String sql = "Select cl.*, c.Uri from ClipLink cl inner join Clip c on c.Number = cl.ClipId where cl.ToClipId = ? and cl.Blocked = 'N'";
try{
PreparedStatement prepStmt = con.prepareStatement(sql);
prepStmt.setInt(1, clip.getNumber());
ResultSet rs = prepStmt.executeQuery();
while(rs.next()){
ClipLink cl = new ClipLink();
cl.setNumber(rs.getInt("cl.Number"));
cl.setClipId(rs.getInt("cl.ClipId"));
cl.setToClipId(rs.getInt("cl.toClipId"));
cl.setUri(rs.getString("c.Uri"));
list.add(cl);
}
rs.close();
prepStmt.close();
}catch(SQLException e){
log.error("Error running SQL [" + sql + "]", e);
}
ClipLink[] result = new ClipLink[list.size()];
list.toArray(result);
return result;
}
public void changeClipType(Clip clip, Connection con, int clipType){
clip.setClipType(clipType);
if(clipType == Clip.CLIP_TYPE_RICH_TEXT){
RichText richText = new RichText();
dbMapper.save(richText, con);
clip.setClipTypeId(richText.getNumber());
}else if(clipType == Clip.CLIP_TYPE_TODO_LIST){
TodoList todoList = new TodoList();
dbMapper.save(todoList, con);
clip.setClipTypeId(todoList.getNumber());
}else if(clipType == Clip.CLIP_TYPE_FORUM){
Forum forum = new Forum();
dbMapper.save(forum, con);
clip.setRows(5);
clip.setClipTypeId(forum.getNumber());
}
dbMapper.save(clip, con);
}
}
/**
* $Log: ClipAgent.java,v $
* Revision 1.2 2003/10/13 22:11:23 Administrator
* *** empty log message ***
*
* Revision 1.1.1.1 2003/10/13 19:19:31 Administrator
* no message
*
* Revision 1.1.1.1 2003/10/13 00:21:18 root
* no message
*
* Revision 1.1 2003/09/06 23:48:28 Administrator
* *** empty log message ***
*
*/