Fixes NPE in renaming auth response (triggered by SP change)
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / sp / AuthCommand.java
1 package com.indexdata.mkjsf.pazpar2.commands.sp;\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.Pz2Service;\r
7 import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
8 import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
9 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
10 import com.indexdata.mkjsf.pazpar2.data.sp.AuthResponse;\r
11 import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject;\r
12 \r
13 /**\r
14  * Represents a Service Proxy <code>auth</code> command, can be accessed by <code>pzreq.sp.auth</code> \r
15  * \r
16  * <p>Authenticates a user against a Pazpar2 Service Proxy</p>\r
17  * \r
18  * @author Niels Erik\r
19  *\r
20  */\r
21 public class AuthCommand extends Pazpar2Command implements ServiceProxyCommand {\r
22 \r
23   private static final long serialVersionUID = 5487611235664162578L;\r
24   private static Logger logger = Logger.getLogger(AuthCommand.class);\r
25 \r
26   public AuthCommand() {\r
27     super("auth");\r
28   }\r
29   \r
30   public SpResponseDataObject run() {\r
31     Pz2Service.get().resetSearchAndRecordCommands();\r
32     Pz2Service.get().getPzresp().getSp().resetAuthAndBeyond(true);\r
33     ClientCommandResponse response = (ClientCommandResponse) Pz2Service.get().getSearchClient().executeCommand(this);      \r
34     String renamedResponse = renameResponseElement(response.getResponseString(), "auth");    \r
35     response.setResponseToParse(renamedResponse);\r
36     AuthResponse responseObject = (AuthResponse) ResponseParser.getParser().getDataObject(response);    \r
37     if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
38       Pz2Service.get().getPzresp().put(getCommandName(), responseObject);\r
39     }\r
40     if (responseObject.unsupportedCommand()) {\r
41       logger.error("auth command does not seem to be supported by this Service Proxy");\r
42     }\r
43     return responseObject;\r
44   }\r
45   \r
46   /**\r
47    * Normalizes the response XML for the benefit of the SAX parser that creates data objects. \r
48    * <p>The parser expects responses to have document element names corresponding to the names of\r
49    * the commands that created the responses.</p>\r
50    * \r
51    * @param responseString\r
52    * @param newName\r
53    * @return\r
54    */\r
55   private String renameResponseElement(String responseString, String newName) {\r
56     responseString = responseString.replace("<response", "<" + newName);\r
57     responseString = responseString.replace("</response", "</" + newName);\r
58     return responseString;\r
59   }\r
60 \r
61   /**\r
62    * Sets Service Proxy command parameter <code>action</code>. See Service Proxy documentation for details. \r
63    */\r
64   public void setAction (String action) {\r
65     setParameterInState(new CommandParameter("action","=",action));\r
66   }  \r
67   \r
68   /**\r
69    * Gets parameter value for <code>action</cod>\r
70    */\r
71   public String getAction () {\r
72     return getParameterValue("action");\r
73   }\r
74   \r
75   /**\r
76    * Sets Service Proxy command parameter <code>username</code>. See Service Proxy documentation for details. \r
77    */\r
78   public void setUsername(String username) {\r
79     setParameterInState(new CommandParameter("username","=",username));\r
80   }\r
81   \r
82   /**\r
83    * Gets parameter value for <code>username</cod>\r
84    */\r
85   public String getUsername () {\r
86     return getParameterValue("username");\r
87   }\r
88     \r
89   /**\r
90    * Sets Service Proxy command parameter <code>password</code>. See Service Proxy documentation for details. \r
91    */\r
92   public void setPassword (String password) {\r
93     setParameterInState(new CommandParameter("password","=",password));\r
94   }\r
95   \r
96   /**\r
97    * Gets parameter value for <code>password</cod>\r
98    */\r
99   public String getPassword () {\r
100     return getParameterValue("password");\r
101   }\r
102     \r
103   public AuthCommand copy () {\r
104     AuthCommand newCommand = new AuthCommand();\r
105     for (String parameterName : parameters.keySet()) {\r
106       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
107     }    \r
108     return newCommand;\r
109   }\r
110 \r
111   @Override\r
112   public ServiceProxyCommand getSp() {\r
113     return this;\r
114   }\r
115 \r
116   @Override\r
117   public boolean spOnly() {\r
118     return true;\r
119   }\r
120 }\r