package org.wordcorr.db;
import org.jdom.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
/**
* Represents a citation entry in the database.
* @author Jim Shiba
**/
public class Citation extends AbstractPersistent {
Citation(Database db, long id, CorrespondenceSet correspondenceSet, Group group) {
super(db, id);
_correspondenceSet = correspondenceSet;
_group = group;
}
//---------------------------------------------------------------//
// Attributes
//---------------------------------------------------------------//
/**
* Get the correspondence set.
**/
public CorrespondenceSet getCorrespondenceSet() {
return _correspondenceSet;
}
/**
* Set the value of correspondence set.
* @param v Value to assign to correspondence set.
**/
public void setCorrespondenceSet(CorrespondenceSet v) {
_correspondenceSet = v;
}
/**
* Get the group.
**/
public Group getGroup() {
return _group;
}
/**
* Get the value of position.
**/
public Integer getPosition() {
return _position;
}
/**
* Set the value of position.
* @param v Value to assign to position.
**/
public void setPosition(Integer v) {
_position = v;
}
/**
* Get element representing this citation.
**/
public Element getElement() {
Element element = new Element("citation");
// get group tag and entry key
try {
GroupData data = getGroupData();
// set attributes
element.setAttribute("entry-number", data.getEntryID() + "");
element.setAttribute("tag", data.getTag());
Integer position = getPosition();
element.setAttribute("glyph-position",
(position == null) ? "" : position.intValue() + "");
} catch (DatabaseException e) {
e.printStackTrace();
return element;
}
return element;
}
/**
* Get group data.
**/
public GroupData getGroupData() throws DatabaseException {
List list = getDatabase().retrieveObjects(new RetrieveAllParameters() {
public String getRetrieveAllSQLKey() {
return "GET_GROUP_DATA";
}
public void setRetrieveAllParameters(PreparedStatement stmt)
throws SQLException
{
stmt.setLong(1, _groupID);
}
public Object createObject(Database db, ResultSet rs)
throws SQLException
{
return new GroupData(rs.getString(1), rs.getLong(2));
}
});
return (GroupData)list.get(0);
}
/**
* Group data class.
**/
public static class GroupData {
public GroupData(String tag, long entryID) {
_tag = tag;
_entryID = entryID;
}
public long getEntryID() {
return _entryID;
}
public String getTag() {
return _tag;
}
private long _entryID;
private String _tag;
}
//---------------------------------------------------------------//
// Persistent Methods
//---------------------------------------------------------------//
/**
* Update the object based on a result set.
**/
public void updateObject(ResultSet rs) throws SQLException {
_correspondenceSetID = rs.getLong(2);
_groupID = rs.getLong(3);
_position = getInt(rs, 4);
// load correspondence set if null
if (_correspondenceSet == null) {
try {
_correspondenceSet = new CorrespondenceSet(getDatabase(), _correspondenceSetID, null);
_correspondenceSet.revert();
} catch (DatabaseException e) {
e.printStackTrace();
throw new SQLException(e.getRootCause().getMessage());
}
}
}
/**
* Set parameters on the update statement.
**/
public void setUpdateParameters(PreparedStatement stmt) throws SQLException {
setInt(stmt, 1, _position);
stmt.setLong(2, _correspondenceSet.getID());
stmt.setLong(3, getID());
}
/**
* Set parameters on the create statement.
**/
public void setCreateParameters(PreparedStatement stmt) throws SQLException {
setInt(stmt, 1, _position);
stmt.setLong(2, _correspondenceSet.getID());
stmt.setLong(3, _group.getID());
}
/**
* Generates object and all children from Element and saves in db.
**/
public void generateFromElement(Element element) throws DatabaseException {
if (element == null)
return;
// set values
setPosition(new Integer(element.getAttributeValue("glyph-position")));
save();
}
private long _correspondenceSetID;
private long _groupID;
private Integer _position;
private CorrespondenceSet _correspondenceSet;
private Group _group;
}