aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury/library/viewer/LibraryViewer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/org/ury/library/viewer/LibraryViewer.java')
-rw-r--r--src/uk/org/ury/library/viewer/LibraryViewer.java88
1 files changed, 85 insertions, 3 deletions
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);
}