Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / sp / AuthCommand.java
diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/AuthCommand.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/sp/AuthCommand.java
new file mode 100644 (file)
index 0000000..75d46aa
--- /dev/null
@@ -0,0 +1,119 @@
+package com.indexdata.mkjsf.pazpar2.commands.sp;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;\r
+import com.indexdata.mkjsf.pazpar2.Pz2Service;\r
+import com.indexdata.mkjsf.pazpar2.commands.CommandParameter;\r
+import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.SpResponseDataObject;\r
+\r
+/**\r
+ * Represents a Service Proxy <code>auth</code> command, can be accessed by <code>pzreq.sp.auth</code> \r
+ * \r
+ * <p>Authenticates a user against a Pazpar2 Service Proxy</p>\r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+public class AuthCommand extends Pazpar2Command implements ServiceProxyCommand {\r
+\r
+  private static final long serialVersionUID = 5487611235664162578L;\r
+  private static Logger logger = Logger.getLogger(AuthCommand.class);\r
+\r
+  public AuthCommand() {\r
+    super("auth");\r
+  }\r
+  \r
+  public SpResponseDataObject run() {\r
+    Pz2Service.get().resetSearchAndRecordCommands();\r
+    Pz2Service.get().getPzresp().getSp().resetAuthAndBeyond(true);\r
+    ClientCommandResponse response = (ClientCommandResponse) Pz2Service.get().getSearchClient().executeCommand(this);      \r
+    String renamedResponse = renameResponseElement(response.getResponseString(), "auth");    \r
+    response.setResponseToParse(renamedResponse);\r
+    SpResponseDataObject responseObject = (SpResponseDataObject) ResponseParser.getParser().getDataObject(response);    \r
+    if (ResponseParser.docTypes.contains(responseObject.getType())) {\r
+      Pz2Service.get().getPzresp().put(getCommandName(), responseObject);\r
+    }\r
+    if (responseObject.unsupportedCommand()) {\r
+      logger.error("auth command does not seem to be supported by this Service Proxy");\r
+    }\r
+    return responseObject;\r
+  }\r
+  \r
+  /**\r
+   * Normalizes the response XML for the benefit of the SAX parser that creates data objects. \r
+   * <p>The parser expects responses to have document element names corresponding to the names of\r
+   * the commands that created the responses.</p>\r
+   * \r
+   * @param responseString\r
+   * @param newName\r
+   * @return\r
+   */\r
+  private String renameResponseElement(String responseString, String newName) {\r
+    responseString = responseString.replace("<response>", "<" + newName + ">");\r
+    responseString = responseString.replace("</response>", "</" + newName + ">");\r
+    return responseString;\r
+  }\r
+\r
+  /**\r
+   * Sets Service Proxy command parameter <code>action</code>. See Service Proxy documentation for details. \r
+   */\r
+  public void setAction (String action) {\r
+    setParameterInState(new CommandParameter("action","=",action));\r
+  }  \r
+  \r
+  /**\r
+   * Gets parameter value for <code>action</cod>\r
+   */\r
+  public String getAction () {\r
+    return getParameterValue("action");\r
+  }\r
+  \r
+  /**\r
+   * Sets Service Proxy command parameter <code>username</code>. See Service Proxy documentation for details. \r
+   */\r
+  public void setUsername(String username) {\r
+    setParameterInState(new CommandParameter("username","=",username));\r
+  }\r
+  \r
+  /**\r
+   * Gets parameter value for <code>username</cod>\r
+   */\r
+  public String getUsername () {\r
+    return getParameterValue("username");\r
+  }\r
+    \r
+  /**\r
+   * Sets Service Proxy command parameter <code>password</code>. See Service Proxy documentation for details. \r
+   */\r
+  public void setPassword (String password) {\r
+    setParameterInState(new CommandParameter("password","=",password));\r
+  }\r
+  \r
+  /**\r
+   * Gets parameter value for <code>password</cod>\r
+   */\r
+  public String getPassword () {\r
+    return getParameterValue("password");\r
+  }\r
+    \r
+  public AuthCommand copy () {\r
+    AuthCommand newCommand = new AuthCommand();\r
+    for (String parameterName : parameters.keySet()) {\r
+      newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
+    }    \r
+    return newCommand;\r
+  }\r
+\r
+  @Override\r
+  public ServiceProxyCommand getSp() {\r
+    return this;\r
+  }\r
+\r
+  @Override\r
+  public boolean spOnly() {\r
+    return true;\r
+  }\r
+}\r