c9df6105eaa695ee6b8dc34c142f2cce493a645f
[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 public class RecordCommand extends Pazpar2Command implements ServiceProxyCommand {\r
15 \r
16   private static final long serialVersionUID = 2817539422114569506L;\r
17   private static Logger logger = Logger.getLogger(RecordCommand.class);\r
18   private RecordCommandSp spCommand = null;\r
19 \r
20   public RecordCommand() {\r
21     super("record");\r
22   }\r
23   \r
24   @Override\r
25   public ResponseDataObject run() {\r
26     ResponseDataObject responseObject = null;\r
27     if (hasParameterValue("id")) {\r
28       HttpResponseWrapper commandResponse = Pz2Service.get().getSearchClient().executeCommand(this);\r
29       \r
30       if (commandResponse.getContentType().contains("xml")) {\r
31         responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse)commandResponse);\r
32         if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
33           logger.debug("Storing " + responseObject.getType() + " in pzresp. ");\r
34         } else {\r
35           logger.debug("Command was 'record' but response not '<record>' - assuming raw record response.");\r
36           ResponseDataObject recordResponse = new RecordResponse();\r
37           recordResponse.setType("record");\r
38           recordResponse.setXml(responseObject.getXml());\r
39           recordResponse.setAttribute("activeclients", "0");\r
40           responseObject = recordResponse;\r
41         }\r
42       } else if (commandResponse.isBinary()) {\r
43         responseObject = new RecordResponse();\r
44         responseObject.setType(getCommandName());\r
45         logger.info("Binary response");\r
46         responseObject.setAttribute("activeclients", "0");\r
47         responseObject.setXml("<record>binary response</record>");\r
48         responseObject.setBinary(commandResponse.getBytes());\r
49       } else {\r
50         logger.error("Response was not found to be XML or binary. The response was not handled.");\r
51       }\r
52       Pz2Service.get().getPzresp().put(getCommandName(), responseObject);\r
53     } else {\r
54       logger.debug("No record id parameter on this command. Ignoring request but clearing any previous record result.");\r
55       Pz2Service.get().getPzresp().put(getCommandName(), new RecordResponse());\r
56     }\r
57     return responseObject;\r
58   }\r
59   \r
60   public void setId(String recId) {\r
61     setParameter(new CommandParameter("id","=",recId));\r
62   }\r
63   \r
64   public String getId () {\r
65     return getParameterValue("id");\r
66   }\r
67   \r
68   public void setOffset (String offset) {\r
69     setParameter(new CommandParameter("offset","=",offset));\r
70   }\r
71   \r
72   public String getOffset () {\r
73     return getParameterValue("offset");\r
74   }\r
75   \r
76   public void setChecksum (String checksum) {\r
77     setParameter(new CommandParameter("checksum","=",checksum));\r
78   }\r
79   \r
80   public String getChecksum () {\r
81     return getParameterValue("checksum");\r
82   }\r
83   \r
84   public void setNativesyntax (String nativesyntax) {\r
85     setParameterInState(new CommandParameter("nativesyntax","=",nativesyntax));\r
86   }\r
87   \r
88   public String getNativesyntax () {\r
89     return getParameterValue("nativesyntax");\r
90   }\r
91   \r
92   public void setSyntax (String syntax) {\r
93     setParameterInState(new CommandParameter("syntax","=",syntax));    \r
94   }\r
95   \r
96   public String getSyntax () {\r
97     return getParameterValue("syntax");\r
98   }\r
99   \r
100   public void setEsn (String esn) {\r
101     setParameter(new CommandParameter("esn","=",esn));\r
102   }\r
103   \r
104   public String getEsn () {\r
105     return getParameterValue("esn");\r
106   }\r
107   \r
108   public void setBinary (String binary) {\r
109     setParameter(new CommandParameter("binary","=",binary));\r
110   }\r
111   \r
112   public String getBinary () {\r
113     return getParameterValue("binary");\r
114   }\r
115 \r
116   @Override\r
117   public RecordCommand copy () {\r
118     RecordCommand newCommand = new RecordCommand();\r
119     for (String parameterName : parameters.keySet()) {\r
120       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
121     }    \r
122     newCommand.spCommand = this.spCommand;\r
123     return newCommand;\r
124   }\r
125   \r
126   \r
127   /**\r
128    * Returns a record command object with Service Proxy extension parameters \r
129    * \r
130    */\r
131   public RecordCommandSp getSp () {\r
132     if (spCommand==null) {\r
133       spCommand = new RecordCommandSp(this);\r
134     } \r
135     return spCommand;\r
136   }\r
137 \r
138   @Override\r
139   public boolean spOnly() {    \r
140     return false;\r
141   }\r
142 }\r