X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fcommands%2FRecordCommand.java;h=c9df6105eaa695ee6b8dc34c142f2cce493a645f;hb=7df6b1590eb285bca094652950a23edc3da95f70;hp=78d192eea239207e896b83f24bc945a57ee764aa;hpb=ccb28ae8d5d46d29c40bd8b1637522c212b80636;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/RecordCommand.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/RecordCommand.java index 78d192e..c9df610 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/RecordCommand.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/RecordCommand.java @@ -1,13 +1,60 @@ package com.indexdata.mkjsf.pazpar2.commands; -import com.indexdata.mkjsf.pazpar2.state.StateManager; +import org.apache.log4j.Logger; -public class RecordCommand extends Pazpar2Command { +import com.indexdata.mkjsf.pazpar2.ClientCommandResponse; +import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper; +import com.indexdata.mkjsf.pazpar2.Pz2Service; +import com.indexdata.mkjsf.pazpar2.commands.sp.RecordCommandSp; +import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand; +import com.indexdata.mkjsf.pazpar2.data.RecordResponse; +import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject; +import com.indexdata.mkjsf.pazpar2.data.ResponseParser; + +public class RecordCommand extends Pazpar2Command implements ServiceProxyCommand { private static final long serialVersionUID = 2817539422114569506L; + private static Logger logger = Logger.getLogger(RecordCommand.class); + private RecordCommandSp spCommand = null; - public RecordCommand(StateManager stateMgr) { - super("record",stateMgr); + public RecordCommand() { + super("record"); + } + + @Override + public ResponseDataObject run() { + ResponseDataObject responseObject = null; + if (hasParameterValue("id")) { + HttpResponseWrapper commandResponse = Pz2Service.get().getSearchClient().executeCommand(this); + + if (commandResponse.getContentType().contains("xml")) { + responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse); + if (ResponseParser.docTypes.contains(responseObject.getType())) { + logger.debug("Storing " + responseObject.getType() + " in pzresp. "); + } else { + logger.debug("Command was 'record' but response not '' - assuming raw record response."); + ResponseDataObject recordResponse = new RecordResponse(); + recordResponse.setType("record"); + recordResponse.setXml(responseObject.getXml()); + recordResponse.setAttribute("activeclients", "0"); + responseObject = recordResponse; + } + } else if (commandResponse.isBinary()) { + responseObject = new RecordResponse(); + responseObject.setType(getCommandName()); + logger.info("Binary response"); + responseObject.setAttribute("activeclients", "0"); + responseObject.setXml("binary response"); + responseObject.setBinary(commandResponse.getBytes()); + } else { + logger.error("Response was not found to be XML or binary. The response was not handled."); + } + Pz2Service.get().getPzresp().put(getCommandName(), responseObject); + } else { + logger.debug("No record id parameter on this command. Ignoring request but clearing any previous record result."); + Pz2Service.get().getPzresp().put(getCommandName(), new RecordResponse()); + } + return responseObject; } public void setId(String recId) { @@ -16,14 +63,80 @@ public class RecordCommand extends Pazpar2Command { public String getId () { return getParameterValue("id"); - } + } + + public void setOffset (String offset) { + setParameter(new CommandParameter("offset","=",offset)); + } + + public String getOffset () { + return getParameterValue("offset"); + } + + public void setChecksum (String checksum) { + setParameter(new CommandParameter("checksum","=",checksum)); + } + + public String getChecksum () { + return getParameterValue("checksum"); + } + + public void setNativesyntax (String nativesyntax) { + setParameterInState(new CommandParameter("nativesyntax","=",nativesyntax)); + } + + public String getNativesyntax () { + return getParameterValue("nativesyntax"); + } + + public void setSyntax (String syntax) { + setParameterInState(new CommandParameter("syntax","=",syntax)); + } + + public String getSyntax () { + return getParameterValue("syntax"); + } + + public void setEsn (String esn) { + setParameter(new CommandParameter("esn","=",esn)); + } + + public String getEsn () { + return getParameterValue("esn"); + } + + public void setBinary (String binary) { + setParameter(new CommandParameter("binary","=",binary)); + } + + public String getBinary () { + return getParameterValue("binary"); + } @Override public RecordCommand copy () { - RecordCommand newCommand = new RecordCommand(stateMgr); + RecordCommand newCommand = new RecordCommand(); for (String parameterName : parameters.keySet()) { newCommand.setParameterInState(parameters.get(parameterName).copy()); } + newCommand.spCommand = this.spCommand; return newCommand; } + + + /** + * Returns a record command object with Service Proxy extension parameters + * + */ + public RecordCommandSp getSp () { + if (spCommand==null) { + spCommand = new RecordCommandSp(this); + } + return spCommand; + } + + @Override + public boolean spOnly() { + return false; + } }