/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.requestitem;
import org.apache.log4j.Logger;
import org.dspace.core.Context;
import org.dspace.core.Utils;
import org.dspace.storage.rdbms.DatabaseManager;
import org.dspace.storage.rdbms.TableRow;
import java.sql.SQLException;
import java.util.Date;
/**
* Object representing an Item Request
*/
public class RequestItem {
private static Logger log = Logger.getLogger(RequestItem.class);
private int bitstreamId, itemID;
private String reqEmail;
private String reqName;
private String reqMessage;
private String token;
private boolean allfiles;
private Date decision_date;
private boolean accept_request;
public RequestItem(int itemID, int bitstreamId, String reqEmail, String reqName, String reqMessage, boolean allfiles){
this.itemID = itemID;
this.bitstreamId = bitstreamId;
this.reqEmail = reqEmail;
this.reqName = reqName;
this.reqMessage = reqMessage;
this.allfiles = allfiles;
}
private RequestItem(TableRow record) {
this.itemID = record.getIntColumn("item_id");
this.bitstreamId = record.getIntColumn("bitstream_id");
this.token = record.getStringColumn("token");
this.reqEmail = record.getStringColumn("request_email");
this.reqName = record.getStringColumn("request_name");
this.reqMessage = record.getStringColumn("request_message");
this.allfiles = record.getBooleanColumn("allfiles");
this.decision_date = record.getDateColumn("decision_date");
this.accept_request = record.getBooleanColumn("accept_request");
}
public static RequestItem findByToken(Context context, String token) {
try {
TableRow requestItem = DatabaseManager.findByUnique(context, "requestitem", "token", token);
return new RequestItem(requestItem);
} catch (SQLException e) {
log.error(e.getMessage());
return null;
}
}
/**
* Save updates to the record. Only accept_request, and decision_date are set-able.
* @param context
*/
public void update(Context context) {
try {
TableRow record = DatabaseManager.findByUnique(context, "requestitem", "token", token);
record.setColumn("accept_request", accept_request);
record.setColumn("decision_date", decision_date);
DatabaseManager.update(context, record);
} catch (SQLException e) {
log.error(e.getMessage());
}
}
/**
* Generate a unique id of the request and put it into the DB
* @param context
* @return
* @throws java.sql.SQLException
*/
public String getNewToken(Context context) throws SQLException
{
TableRow record = DatabaseManager.create(context, "requestitem");
record.setColumn("token", Utils.generateHexKey());
record.setColumn("bitstream_id", bitstreamId);
record.setColumn("item_id", itemID);
record.setColumn("allfiles", allfiles);
record.setColumn("request_email", reqEmail);
record.setColumn("request_name", reqName);
record.setColumn("request_message", reqMessage);
record.setColumnNull("accept_request");
record.setColumn("request_date", new Date());
record.setColumnNull("decision_date");
record.setColumnNull("expires");
DatabaseManager.update(context, record);
if (log.isDebugEnabled())
{
log.debug("Created requestitem_token " + record.getIntColumn("requestitem_id")
+ " with token " + record.getStringColumn("token") + "\"");
}
return record.getStringColumn("token");
}
public boolean isAllfiles() {
return allfiles;
}
public String getReqMessage() {
return reqMessage;
}
public String getReqName() {
return reqName;
}
public String getReqEmail() {
return reqEmail;
}
public String getToken() {
return token;
}
public int getItemID() {
return itemID;
}
public int getBitstreamId() {
return bitstreamId;
}
public Date getDecision_date() {
return decision_date;
}
public void setDecision_date(Date decision_date) {
this.decision_date = decision_date;
}
public boolean isAccept_request() {
return accept_request;
}
public void setAccept_request(boolean accept_request) {
this.accept_request = accept_request;
}
}