aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatt Windsor <mattwindsor@btinternet.com>2011-03-19 17:25:07 +0000
committerMatt Windsor <mattwindsor@btinternet.com>2011-03-19 17:25:07 +0000
commit8f0360d9e72843d527b2db28047ae5f0498f3a3e (patch)
tree3ceb39d46aae2b913c1999e636cd282d93622b5c /src
parent410219d08abdb859315c4d6d0e0375287d64a88b (diff)
Library viewer now retrieves tracks from server. Code will need a LOT of cleanup, but this is a triumph. I'm making a note here-- huge success.
Diffstat (limited to 'src')
-rw-r--r--src/uk/org/ury/database/DatabaseItem.java2
-rw-r--r--src/uk/org/ury/library/LibraryRequestHandler.java2
-rw-r--r--src/uk/org/ury/library/LibraryUtils.java98
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewer.java88
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewerPanel.java6
-rw-r--r--src/uk/org/ury/server/Server.java1
-rw-r--r--src/uk/org/ury/server/exceptions/BadRequestException.java7
7 files changed, 94 insertions, 110 deletions
diff --git a/src/uk/org/ury/database/DatabaseItem.java b/src/uk/org/ury/database/DatabaseItem.java
index a6d929f..54b2ef7 100644
--- a/src/uk/org/ury/database/DatabaseItem.java
+++ b/src/uk/org/ury/database/DatabaseItem.java
@@ -72,7 +72,7 @@ public abstract class DatabaseItem<E, T>
/**
- * Map down the item into a server response body.
+ * Retrieve a map of string representations of the properties.
*
* This relies on E and T having meaningful toString methods.
*
diff --git a/src/uk/org/ury/library/LibraryRequestHandler.java b/src/uk/org/ury/library/LibraryRequestHandler.java
index 835e50e..bd7595b 100644
--- a/src/uk/org/ury/library/LibraryRequestHandler.java
+++ b/src/uk/org/ury/library/LibraryRequestHandler.java
@@ -133,7 +133,7 @@ public class LibraryRequestHandler implements RequestHandler
itemArray.add (li.asResponse ());
}
- response.put ("items", itemArray);
+ response.put (Directive.ITEMS.toString (), itemArray);
}
catch (QueryFailureException e)
{
diff --git a/src/uk/org/ury/library/LibraryUtils.java b/src/uk/org/ury/library/LibraryUtils.java
index 474c58a..9b4471a 100644
--- a/src/uk/org/ury/library/LibraryUtils.java
+++ b/src/uk/org/ury/library/LibraryUtils.java
@@ -141,102 +141,4 @@ public class LibraryUtils
return new LibraryItem (properties);
}
-
-
- /**
- * Construct items from a server response body.
- *
- * @param response The list of strings that constitute the response.
- *
- * @return a list of LibraryItems corresponding to the item
- * stanzas in the response.
- */
-
-/* public static List<LibraryItem>
- extractItemsFromResponse (List<String> response)
- {
- List<LibraryItem> result = new ArrayList<LibraryItem> ();
-
- boolean inItem = false;
- List<String> itemBuffer = new ArrayList<String> ();
-
- for (String line : response)
- {
- if (inItem == false)
- {
- if (line.startsWith (Directive.ITEM_START.toString ()))
- {
- inItem = true;
- itemBuffer.clear ();
- }
- }
-
- if (inItem == true)
- {
- itemBuffer.add (line);
-
- if (line.startsWith (Directive.ITEM_END.toString ()))
- {
- inItem = false;
- result.add (createItemFromResponse (itemBuffer));
- }
- }
- }
-
- return result;
- }*/
-
-
- /**
- * Construct a new item from a server response fragment.
- *
- * @param response The list of strings that constitutes the response.
- * The list must begin with Directive.ITEM_START and
- * end with Directive.ITEM_END's string
- * representations and otherwise contain solely
- * Directive.ITEM_PROPERTY lines.
- *
- * @return a LibraryItem embodying the properties described
- * in the response fragment.
- *
- * @throws IllegalArgumentException if the response is
- * malformed or null, or if the instantiation of
- * DatabaseItem does not use String as its data type.
- */
-
- /*public static LibraryItem
- createItemFromResponse (List<String> response)
- {
- // TODO: More appropriate exceptions.
-
- if (response == null)
- throw new IllegalArgumentException ("Response is null.");
- else if (response.get (0).equals (Directive.ITEM_START.toString ())
- && response.get (response.size () - 1)
- .equals (Directive.ITEM_END.toString ()))
- {
- // Response of size 2 must be blank.
- if (response.size () <= 2)
- throw new IllegalArgumentException ("Blank response.");
-
- Map<LibraryItemProperty, String> properties = new HashMap<LibraryItemProperty, String> ();
-
- for (int i = 0; i < response.size () - 1; i++)
- {
- // TODO: fan out impl. details to separate class
- if (response.get (i)
- .startsWith (Directive.ITEM_PROPERTY.toString ()))
- {
- String[] responseTuple = response.get (i).split (":=");
-
- properties.put (LibraryItemProperty.getFromSQL (responseTuple[1]),
- responseTuple[2]);
- }
- }
-
- return new LibraryItem (properties);
- }
- else
- throw new IllegalArgumentException ("Malformed response.");
- }*/
}
diff --git a/src/uk/org/ury/library/viewer/LibraryViewer.java b/src/uk/org/ury/library/viewer/LibraryViewer.java
index 9587d5e..3e09594 100644
--- a/src/uk/org/ury/library/viewer/LibraryViewer.java
+++ b/src/uk/org/ury/library/viewer/LibraryViewer.java
@@ -1,21 +1,42 @@
package uk.org.ury.library.viewer;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import uk.org.ury.client.Client;
import uk.org.ury.config.ConfigReader;
+
import uk.org.ury.database.DatabaseDriver;
import uk.org.ury.database.UserClass;
+
import uk.org.ury.database.exceptions.MissingCredentialsException;
import uk.org.ury.database.exceptions.QueryFailureException;
+
import uk.org.ury.frontend.AbstractFrontendModule;
import uk.org.ury.frontend.FrontendMaster;
import uk.org.ury.frontend.FrontendModulePanel;
import uk.org.ury.frontend.exceptions.UICreationFailureException;
-import uk.org.ury.library.LibraryUtils;
import uk.org.ury.library.exceptions.EmptySearchException;
+
import uk.org.ury.library.item.LibraryItem;
+import uk.org.ury.library.item.LibraryItemProperty;
+
+import uk.org.ury.server.protocol.DecodeFailureException;
+import uk.org.ury.server.protocol.Directive;
+import uk.org.ury.server.protocol.Status;
+
+
+/**
+ * Module for investigating the track library.
+ *
+ * @author Matt Windsor
+ *
+ */
public class LibraryViewer extends AbstractFrontendModule
{
@@ -24,7 +45,6 @@ public class LibraryViewer extends AbstractFrontendModule
*/
private static final long serialVersionUID = -2782366476480563739L;
- private DatabaseDriver dd;
private List<LibraryItem> libraryList;
private LibraryViewerPanel panel;
private ConfigReader config;
@@ -107,7 +127,69 @@ public class LibraryViewer extends AbstractFrontendModule
doSearch (String search)
throws EmptySearchException, QueryFailureException
{
- libraryList = LibraryUtils.search (dd, search);
+ // TODO: fan out?
+
+ Client cl = new Client ();
+ Map<?, ?> response = null;
+ libraryList.clear ();
+
+ try
+ {
+ response = cl.get ("/library/LibraryRequestHandler?function=search&search=" + search);
+ }
+ catch (DecodeFailureException e)
+ {
+ throw new QueryFailureException (e.getMessage ());
+ }
+
+ // Check to see if this is Map<String, ?> by looking for the status,
+ // which should always be in a valid response.
+ if (response.containsKey (Directive.STATUS.toString ()) == false
+ || (response.get (Directive.STATUS.toString ()) instanceof String) == false)
+ throw new QueryFailureException ("Status not provided.");
+
+ if (((String) response.get (Directive.STATUS.toString ()))
+ .equals (Status.OK.toString ()) == false)
+ throw new QueryFailureException ((String) response.get (Directive.REASON.toString ()));
+
+ // Should contain a list of items, even if there are no items.
+ if (response.containsKey (Directive.ITEMS.toString ()) == false)
+ throw new QueryFailureException ("No item set returned.");
+
+ if ((response.get (Directive.ITEMS.toString ()) instanceof List<?>) == false)
+ throw new QueryFailureException ("Malformed item list.");
+
+
+ for (Object obj : (List<?>) response.get (Directive.ITEMS.toString ()))
+ {
+ Map<LibraryItemProperty, String> properties
+ = new HashMap<LibraryItemProperty, String> ();
+
+ if (obj instanceof Map<?, ?> == false)
+ throw new QueryFailureException ("Malformed item.");
+
+ Set<?> keySet = ((Map<?, ?>) obj).keySet ();
+
+ // Check to make sure this item has only String-String mappings.
+ for (Object key : keySet)
+ {
+ if ((key instanceof String
+ && ((Map<?, ?>) obj).get (key) instanceof String)
+ == false)
+ throw new QueryFailureException ("Not a valid property.");
+ else if (LibraryItemProperty.valueOf ((String) key) == null)
+ throw new QueryFailureException ("Property type "
+ + key + " not recognised.");
+ else
+ properties.put (LibraryItemProperty.valueOf ((String) key),
+ (String) ((Map<?, ?>) obj).get (key));
+
+ }
+
+ libraryList.add (new LibraryItem (properties));
+ }
+
+ //libraryList = LibraryUtils.search (dd, search);
}
diff --git a/src/uk/org/ury/library/viewer/LibraryViewerPanel.java b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
index 79b5902..e05164e 100644
--- a/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
+++ b/src/uk/org/ury/library/viewer/LibraryViewerPanel.java
@@ -177,6 +177,7 @@ public class LibraryViewerPanel extends FrontendModulePanel
{
searchFailureMessage = String.format (rb.getString ("ERR_SEARCH_FAILED"),
searchTerm, e.getMessage ());
+ return false;
}
catch (EmptySearchException e)
{
@@ -206,11 +207,12 @@ public class LibraryViewerPanel extends FrontendModulePanel
}
catch (InterruptedException e)
{
- // Ignore
+ e.printStackTrace ();
}
catch (ExecutionException e)
{
- // Ignore
+ searchFailureMessage = String.format (rb.getString ("ERR_SEARCH_FAILED"),
+ searchTerm, e.getMessage ());
}
diff --git a/src/uk/org/ury/server/Server.java b/src/uk/org/ury/server/Server.java
index 75b5bd9..697476e 100644
--- a/src/uk/org/ury/server/Server.java
+++ b/src/uk/org/ury/server/Server.java
@@ -417,7 +417,6 @@ public class Server
serveError (int code, String reason)
{
// Get the reason string to put in the error response.
- // TODO: standards?
String statusReason = "";
diff --git a/src/uk/org/ury/server/exceptions/BadRequestException.java b/src/uk/org/ury/server/exceptions/BadRequestException.java
index 61aa951..189c7f5 100644
--- a/src/uk/org/ury/server/exceptions/BadRequestException.java
+++ b/src/uk/org/ury/server/exceptions/BadRequestException.java
@@ -12,12 +12,11 @@ package uk.org.ury.server.exceptions;
public class BadRequestException extends HandlingException
{
-
+
/**
- * TODO: Change this! ---v
+ *
*/
-
- private static final long serialVersionUID = -397479334359858162L;
+ private static final long serialVersionUID = 1825771401085225357L;
/**