d453b75be2e5c61752da96a6bb3444810bf09f76
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / RecordCommand.java
1 package com.indexdata.mkjsf.pazpar2.commands;\r
2 \r
3 import org.apache.log4j.Logger;\r
4 \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
13 \r
14 /**\r
15  * Represents a Pazpar2 <code>record</code> command. \r
16  * \r
17  * @author Niels Erik\r
18  *\r
19  */\r
20 public class RecordCommand extends Pazpar2Command implements ServiceProxyCommand {\r
21 \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
25 \r
26   public RecordCommand() {\r
27     super("record");\r
28   }\r
29   \r
30   @Override\r
31   public ResponseDataObject run() {\r
32     ResponseDataObject responseObject = null;\r
33     if (hasParameterValue("id")) {\r
34       HttpResponseWrapper commandResponse = Pz2Service.get().getSearchClient().executeCommand(this);\r
35       \r
36       if (commandResponse.getContentType().contains("xml")) {\r
37         responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
38         if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
39           logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
40         } else {\r
41           logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
42           ResponseDataObject recordResponse = new RecordResponse();\r
43           recordResponse.setType("record");\r
44           recordResponse.setXml(responseObject.getXml());\r
45           recordResponse.setAttribute("activeclients", "0");\r
46           responseObject = recordResponse;\r
47         }\r
48       } else if (commandResponse.isBinary()) {\r
49         responseObject = new RecordResponse();\r
50         responseObject.setType(getCommandName());\r
51         logger.info("Binary response");\r
52         responseObject.setAttribute("activeclients", "0");\r
53         responseObject.setXml("<record>binary response</record>");\r
54         responseObject.setBinary(commandResponse.getBytes());\r
55       } else {\r
56         logger.error("Response was not found to be XML or binary. The response was not handled.");\r
57       }\r
58       Pz2Service.get().getPzresp().put(getCommandName(), responseObject);\r
59     } else {\r
60       logger.debug("No record id parameter on this command. Ignoring request but clearing any previous record result.");\r
61       Pz2Service.get().getPzresp().put(getCommandName(), new RecordResponse());\r
62     }\r
63     return responseObject;\r
64   }\r
65   \r
66   /**\r
67    * Sets the <code>id</code> parameter. See Pazpar2 documentation for details.\r
68    * \r
69    * @param recId record ID\r
70    */\r
71   public void setId(String recId) {\r
72     setParameter(new CommandParameter("id","=",recId));\r
73   }\r
74 \r
75   /** \r
76    * Returns the <code>id</code> parameter value.\r
77    */\r
78   public String getId () {\r
79     return getParameterValue("id");\r
80   }\r
81 \r
82   /**\r
83    * Sets the <code>offset</code> parameter. See Pazpar2 documentation for details.\r
84    */  \r
85   public void setOffset (String offset) {\r
86     setParameter(new CommandParameter("offset","=",offset));\r
87   }\r
88 \r
89   /** \r
90    * Returns the <code>offset</code> parameter value.\r
91    */\r
92   public String getOffset () {\r
93     return getParameterValue("offset");\r
94   }\r
95   \r
96   /**\r
97    * Sets the <code>checksum</code> parameter. See Pazpar2 documentation for details.\r
98    */  \r
99   public void setChecksum (String checksum) {\r
100     setParameter(new CommandParameter("checksum","=",checksum));\r
101   }\r
102   \r
103   /** \r
104    * Returns the <code>checksum</code> parameter value.\r
105    */\r
106   public String getChecksum () {\r
107     return getParameterValue("checksum");\r
108   }\r
109   \r
110   /**\r
111    * Sets the <code>nativesyntax</code> parameter. See Pazpar2 documentation for details.\r
112    */    \r
113   public void setNativesyntax (String nativesyntax) {\r
114     setParameterInState(new CommandParameter("nativesyntax","=",nativesyntax));\r
115   }\r
116   \r
117   /** \r
118    * Returns the <code>nativesyntax</code> parameter value.\r
119    */\r
120   public String getNativesyntax () {\r
121     return getParameterValue("nativesyntax");\r
122   }\r
123   \r
124   /**\r
125    * Sets the <code>syntax</code> parameter. See Pazpar2 documentation for details.\r
126    */  \r
127   public void setSyntax (String syntax) {\r
128     setParameterInState(new CommandParameter("syntax","=",syntax));    \r
129   }\r
130   \r
131   /** \r
132    * Returns the <code>syntax</code> parameter value.\r
133    */\r
134   public String getSyntax () {\r
135     return getParameterValue("syntax");\r
136   }\r
137   \r
138   /**\r
139    * Sets the <code>esn</code> parameter. See Pazpar2 documentation for details.\r
140    */  \r
141   public void setEsn (String esn) {\r
142     setParameter(new CommandParameter("esn","=",esn));\r
143   }\r
144   \r
145   /** \r
146    * Returns the <code>esn</code> parameter value.\r
147    */\r
148   public String getEsn () {\r
149     return getParameterValue("esn");\r
150   }\r
151   \r
152   /**\r
153    * Sets the <code>binary</code> parameter. See Pazpar2 documentation for details.\r
154    */  \r
155   public void setBinary (String binary) {\r
156     setParameter(new CommandParameter("binary","=",binary));\r
157   }\r
158   \r
159   /** \r
160    * Returns the <code>binary</code> parameter value.\r
161    */\r
162   public String getBinary () {\r
163     return getParameterValue("binary");\r
164   }\r
165 \r
166   @Override\r
167   public RecordCommand copy () {\r
168     RecordCommand newCommand = new RecordCommand();\r
169     for (String parameterName : parameters.keySet()) {\r
170       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
171     }    \r
172     newCommand.spCommand = this.spCommand;\r
173     return newCommand;\r
174   }\r
175   \r
176   \r
177   /**\r
178    * Returns a record command object with Service Proxy extension parameters \r
179    * \r
180    */\r
181   public RecordCommandSp getSp () {\r
182     if (spCommand==null) {\r
183       spCommand = new RecordCommandSp(this);\r
184     } \r
185     return spCommand;\r
186   }\r
187 \r
188   @Override\r
189   public boolean spOnly() {    \r
190     return false;\r
191   }\r
192 }\r