aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury/library/LibraryRequestHandler.java
diff options
context:
space:
mode:
authorMatt Windsor <matt@deling.(none)>2011-03-18 08:28:09 +0000
committerMatt Windsor <matt@deling.(none)>2011-03-18 08:28:09 +0000
commitd547f87da5f68c12dede7c9d45618cae11ff5699 (patch)
tree613aa95d94b363c72ba9a7be639c74f76edf81f8 /src/uk/org/ury/library/LibraryRequestHandler.java
parentc8bb324e757587e742df0824304144e1eb881cee (diff)
Mega-commit to the rescue! Added Javadoc snapshot (admittedly old); show UI now fixed-layout; UI uses system selection colours for accents; now uses bapsserver password and can thus talk to show database relations; removed member relation dependencies until further notice; attempted to get application and applet launchers working but having issues with the latter; started working on a server communicating via a minimal implementation of HTTP 1.1 (standardisation required eventually).
Diffstat (limited to 'src/uk/org/ury/library/LibraryRequestHandler.java')
-rw-r--r--src/uk/org/ury/library/LibraryRequestHandler.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/uk/org/ury/library/LibraryRequestHandler.java b/src/uk/org/ury/library/LibraryRequestHandler.java
new file mode 100644
index 0000000..30bb7fc
--- /dev/null
+++ b/src/uk/org/ury/library/LibraryRequestHandler.java
@@ -0,0 +1,144 @@
+/**
+ *
+ */
+package uk.org.ury.library;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import uk.org.ury.database.DatabaseDriver;
+import uk.org.ury.database.UserClass;
+import uk.org.ury.database.exceptions.ConnectionFailureException;
+import uk.org.ury.database.exceptions.MissingCredentialsException;
+import uk.org.ury.database.exceptions.QueryFailureException;
+import uk.org.ury.library.exceptions.EmptySearchException;
+import uk.org.ury.library.item.LibraryItem;
+import uk.org.ury.server.Server;
+import uk.org.ury.server.RequestHandler;
+import uk.org.ury.server.exceptions.HandleFailureException;
+import uk.org.ury.server.protocol.Directive;
+
+/**
+ * A request handler for library queries.
+ *
+ * @author Matt Windsor
+ */
+
+public class LibraryRequestHandler implements RequestHandler
+{
+ /**
+ * Handle a server GET request (that is, a request for data
+ * output).
+ *
+ * @param parameters A key-value map of parameters supplied with
+ * the server request. Typically, the function
+ * parameter will detail the function that the
+ * request handler is expected to perform.
+ *
+ * @param server The server from which the request originated.
+ * This will be able to provide the handler with
+ * pooled resources, for example the database.
+ *
+ * @return A list of lines to return in the body of the
+ * server's response to the client.
+ *
+ * @throws HandleFailureException if the handler cannot
+ * handle the request.
+ */
+
+ @Override
+ public List<String>
+ handleGetRequest (Map<String, String> parameters, Server server)
+ throws HandleFailureException
+ {
+ List<String> response = new ArrayList<String> ();
+
+ if (parameters.containsKey ("function"))
+ {
+ String function = parameters.get ("function");
+
+ if (function.equals ("search"))
+ {
+ doSearch (parameters, response, server);
+ }
+ else if (function.equals ("help"))
+ {
+ response.add ("INFO: Available functions:");
+ response.add ("INFO: search (string) - search library for string.");
+ }
+ else
+ throw new HandleFailureException ("Unknown function: "
+ + function + ". (Try 'function=help'.)");
+
+ }
+ else
+ throw new HandleFailureException ("No function provided. (Try 'function=help'.)");
+
+ return response;
+ }
+
+
+ /**
+ * Perform a library search, populating the response list.
+ *
+ * @param parameters A key-value map of parameters supplied with
+ * the server request. Typically, the function
+ * parameter will detail the function that the
+ * request handler is expected to perform.
+ *
+ * @param response The response list to populate.
+ *
+ * @param server The server providing database resources.
+ *
+ * @throws HandleFailureException if an error occurs
+ * that thwarts the handling of the request.
+ */
+
+ private void
+ doSearch (Map<String, String> parameters,
+ List<String> response, Server server)
+ throws HandleFailureException
+ {
+ if (parameters.containsKey ("search") == false)
+ throw new HandleFailureException ("Search term is missing.");
+ else if (parameters.get ("search") == null)
+ throw new HandleFailureException ("Search term is null.");
+
+ String search = parameters.get ("search");
+ DatabaseDriver dd = null;
+
+ try
+ {
+ dd = server.getDatabaseConnection (UserClass.READ_ONLY);
+ }
+ catch (MissingCredentialsException e)
+ {
+ throw new HandleFailureException (e.getMessage ());
+ }
+ catch (ConnectionFailureException e)
+ {
+ throw new HandleFailureException (e.getMessage ());
+ }
+
+ try
+ {
+ for (LibraryItem li : LibraryUtils.search (dd, search))
+ {
+ response.add (Directive.ITEM_START.toString ());
+
+ response.addAll (li.asResponse ());
+
+ response.add (Directive.ITEM_END.toString ());
+ }
+ }
+ catch (QueryFailureException e)
+ {
+ throw new HandleFailureException (e.getMessage ());
+ }
+ catch (EmptySearchException e)
+ {
+ throw new HandleFailureException (e.getMessage ());
+ }
+ }
+}