1 package com.indexdata.mkjsf.pazpar2.commands;
\r
3 import org.apache.log4j.Logger;
\r
5 import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;
\r
6 import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper;
\r
7 import com.indexdata.mkjsf.pazpar2.Pz2Service;
\r
8 import com.indexdata.mkjsf.pazpar2.commands.sp.RecordCommandSp;
\r
9 import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;
\r
10 import com.indexdata.mkjsf.pazpar2.data.RecordResponse;
\r
11 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;
\r
12 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;
\r
15 * Represents a Pazpar2 <code>record</code> command, can be accessed by <code>pzreq.record</code>
\r
17 * @author Niels Erik
\r
20 public class RecordCommand extends Pazpar2Command implements ServiceProxyCommand {
\r
22 private static final long serialVersionUID = 2817539422114569506L;
\r
23 private static Logger logger = Logger.getLogger(RecordCommand.class);
\r
24 private RecordCommandSp spCommand = null;
\r
26 public RecordCommand() {
\r
31 * Special handling of record responses since they come in three distinctly different ways
\r
33 * <li>As a regular <record> document</li>
\r
34 * <li>In arbitrary XML format, in case of an offset request to get the native format</li>
\r
35 * <li>In binary (non XML) format</li>
\r
39 public ResponseDataObject run() {
\r
40 ResponseDataObject responseObject = null;
\r
41 if (hasParameterValue("id")) {
\r
42 HttpResponseWrapper commandResponse = Pz2Service.get().getSearchClient().executeCommand(this);
\r
44 if (commandResponse.getContentType().contains("xml")) {
\r
45 responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);
\r
46 if (ResponseParser.docTypes.contains(responseObject.getType())) {
\r
47 logger.debug("Storing " + responseObject.getType() + " in pzresp. ");
\r
49 logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");
\r
50 ResponseDataObject recordResponse = new RecordResponse();
\r
51 recordResponse.setType("record");
\r
52 recordResponse.setXml(responseObject.getXml());
\r
53 recordResponse.setAttribute("activeclients", "0");
\r
54 responseObject = recordResponse;
\r
56 } else if (commandResponse.isBinary()) {
\r
57 responseObject = new RecordResponse();
\r
58 responseObject.setType(getCommandName());
\r
59 logger.info("Binary response");
\r
60 responseObject.setAttribute("activeclients", "0");
\r
61 responseObject.setXml("<record>binary response</record>");
\r
62 responseObject.setBinary(commandResponse.getBytes());
\r
64 logger.error("Response was not found to be XML or binary. The response was not handled.");
\r
66 Pz2Service.get().getPzresp().put(getCommandName(), responseObject);
\r
68 logger.debug("No record id parameter on this command. Ignoring request but clearing any previous record result.");
\r
69 Pz2Service.get().getPzresp().put(getCommandName(), new RecordResponse());
\r
71 return responseObject;
\r
75 * Sets the <code>id</code> parameter. See Pazpar2 documentation for details.
\r
77 * @param recId record ID
\r
79 public void setId(String recId) {
\r
80 setParameter(new CommandParameter("id","=",recId));
\r
84 * Returns the <code>id</code> parameter value.
\r
86 public String getId () {
\r
87 return getParameterValue("id");
\r
91 * Sets the <code>offset</code> parameter. See Pazpar2 documentation for details.
\r
93 public void setOffset (String offset) {
\r
94 setParameter(new CommandParameter("offset","=",offset));
\r
98 * Returns the <code>offset</code> parameter value.
\r
100 public String getOffset () {
\r
101 return getParameterValue("offset");
\r
105 * Sets the <code>checksum</code> parameter. See Pazpar2 documentation for details.
\r
107 public void setChecksum (String checksum) {
\r
108 setParameter(new CommandParameter("checksum","=",checksum));
\r
112 * Returns the <code>checksum</code> parameter value.
\r
114 public String getChecksum () {
\r
115 return getParameterValue("checksum");
\r
119 * Sets the <code>nativesyntax</code> parameter. See Pazpar2 documentation for details.
\r
121 public void setNativesyntax (String nativesyntax) {
\r
122 setParameterInState(new CommandParameter("nativesyntax","=",nativesyntax));
\r
126 * Returns the <code>nativesyntax</code> parameter value.
\r
128 public String getNativesyntax () {
\r
129 return getParameterValue("nativesyntax");
\r
133 * Sets the <code>syntax</code> parameter. See Pazpar2 documentation for details.
\r
135 public void setSyntax (String syntax) {
\r
136 setParameterInState(new CommandParameter("syntax","=",syntax));
\r
140 * Returns the <code>syntax</code> parameter value.
\r
142 public String getSyntax () {
\r
143 return getParameterValue("syntax");
\r
147 * Sets the <code>esn</code> parameter. See Pazpar2 documentation for details.
\r
149 public void setEsn (String esn) {
\r
150 setParameter(new CommandParameter("esn","=",esn));
\r
154 * Returns the <code>esn</code> parameter value.
\r
156 public String getEsn () {
\r
157 return getParameterValue("esn");
\r
161 * Sets the <code>binary</code> parameter. See Pazpar2 documentation for details.
\r
163 public void setBinary (String binary) {
\r
164 setParameter(new CommandParameter("binary","=",binary));
\r
168 * Returns the <code>binary</code> parameter value.
\r
170 public String getBinary () {
\r
171 return getParameterValue("binary");
\r
175 public RecordCommand copy () {
\r
176 RecordCommand newCommand = new RecordCommand();
\r
177 for (String parameterName : parameters.keySet()) {
\r
178 newCommand.setParameterInState(parameters.get(parameterName).copy());
\r
180 newCommand.spCommand = new RecordCommandSp(newCommand);
\r
186 * Returns a record command object with Service Proxy extension parameters
\r
189 public RecordCommandSp getSp () {
\r
190 if (spCommand==null) {
\r
191 spCommand = new RecordCommandSp(this);
\r
197 public boolean spOnly() {
\r