diff --git a/src/data/BioTree.java b/src/data/BioTree.java index 97ec7ed0dcde1b616d81fc38d9f2ede1a6b7bf93..b8039458a19754504419c68cb103cee8d84ec77c 100644 --- a/src/data/BioTree.java +++ b/src/data/BioTree.java @@ -292,17 +292,24 @@ public class BioTree implements Serializable { public static Iterable<Integer> getNonEmptyChildren(int taxonId){ ArrayList<Integer> result = new ArrayList<Integer>(); - getNonEmptyChildren(idNodes.get(taxonId), result); + getAllChildren(idNodes.get(taxonId), result, false); return result; + } + + public static Iterable<Integer> getAllChildren(int taxonId){ + ArrayList<Integer> result = new ArrayList<Integer>(); + getAllChildren(idNodes.get(taxonId), result, true); + + return result; } - private static void getNonEmptyChildren(TaxonNode txNode, ArrayList<Integer> result) { + private static void getAllChildren(TaxonNode txNode, ArrayList<Integer> result, boolean emptyAllowed) { if (txNode == null) return; - if (txNode.getCount() > 0) result.add(txNode.getTaxonId()); + if ((txNode.getCount() > 0) || emptyAllowed) result.add(txNode.getTaxonId()); for (TaxonNode tx: txNode.getChildren()) { - getNonEmptyChildren(tx, result); + getAllChildren(tx, result, emptyAllowed); } } diff --git a/src/model/TrawlExpert.java b/src/model/TrawlExpert.java index a0a1ed490366e6760ad7b60002fa7af1297b5f50..7e4ba47ddb77828a8abac9fd7ab50cf4256878c6 100644 --- a/src/model/TrawlExpert.java +++ b/src/model/TrawlExpert.java @@ -1,6 +1,7 @@ package model; import java.io.IOException; +import java.util.ArrayList; import org.json.simple.parser.ParseException; @@ -54,4 +55,13 @@ public class TrawlExpert { } return null; } + + public Iterable<Integer> getNonEmptyChildren(int taxonId){ + return BioTree.getNonEmptyChildren(taxonId); + } + + public Iterable<Integer> getAllChildren(int taxonId){ + return BioTree.getAllChildren(taxonId); + } + } diff --git a/src/search/GeneralCompare.java b/src/search/GeneralCompare.java deleted file mode 100644 index 215fddf629ae39a3fec841758c91034af5e200f2..0000000000000000000000000000000000000000 --- a/src/search/GeneralCompare.java +++ /dev/null @@ -1,5 +0,0 @@ -package search; - -public interface GeneralCompare<T> { - public int compare(Comparable<T> a1, Comparable<T> a2); -} diff --git a/tomcat/webapps/Trawl/bioresult.jsp b/tomcat/webapps/Trawl/bioresult.jsp index 36460f354acf95ccf8bf673b541edf666839d259..01bbb822ad90a9a463f1500cf76ff348632c5db4 100644 --- a/tomcat/webapps/Trawl/bioresult.jsp +++ b/tomcat/webapps/Trawl/bioresult.jsp @@ -1,6 +1,9 @@ <%@page import="org.json.simple.JSONArray"%> <%@page import="sort.MergeSort"%> <%@page import="sort.GeneralCompare"%> +<%@page import="search.RedBlackTree"%> +<%@page import="search.Field"%> +<%@page import="data.TaxonType"%> <%@page import="org.json.simple.parser.JSONParser"%> <%@ page import="java.util.*, data.Record, model.TrawlExpert, search.BST, search.BasicSearchResult, org.json.simple.JSONObject, data.TaxonNode" %> <% @@ -10,27 +13,59 @@ Integer taxonId = (int) (long) req.get("taxId"); //System.out.println(taxonId); - ArrayList<TaxonNode> txNodes = ((ArrayList<TaxonNode>) te.getTaxonRecord(taxonId).getChildren()); - TaxonNode[] txNodesAr = txNodes.toArray(new TaxonNode[txNodes.size()]); - GeneralCompare<TaxonNode> gc = (tn0, tn1) -> ((TaxonNode) tn0).getName().compareTo(((TaxonNode) tn1).getName()); - MergeSort.sort(txNodesAr, 0, txNodesAr.length - 1, gc); + //get all children + ArrayList<Integer> txIds = ((ArrayList<Integer>) te.getAllChildren(taxonId)); + + //GeneralCompare<String> gc = (t0, t1) -> ((String) t0).compareTo((String)t1); + //Field<String, ArrayList<TaxonNode>> fld = tn -> ((ArrayList<TaxonNode>) tn).get(0).getName().toString().toLowerCase(); + //RedBlackTree<String, ArrayList<TaxonNode>> tt = new RedBlackTree<String, ArrayList<TaxonNode>>(fld, gc); + BST<TaxonType, ArrayList<TaxonNode>> tt = new BST<TaxonType, ArrayList<TaxonNode>>(); + + //add to BST in bins + for (Integer txId: txIds){ + TaxonNode txNode = te.getTaxonRecord(txId); + ArrayList<TaxonNode> txList = tt.get(txNode.getTaxonType()); + if (txList == null){ + txList = new ArrayList<TaxonNode>(); + txList.add(txNode); + tt.put(txNode.getTaxonType(), txList); + } else{ + txList.add(txNode); + } + } + //initialize JSON objects and arrays JSONObject js = new JSONObject(); JSONArray taxonIds = new JSONArray(); JSONArray names = new JSONArray(); - taxonIds.add(-1); - names.add("Any"); - - for (TaxonNode tx: txNodesAr){ - taxonIds.add(tx.getTaxonId()); - names.add(tx.getName()); + GeneralCompare<TaxonNode> gc = (tn0, tn1) -> ((TaxonNode) tn0).getName().compareTo(((TaxonNode) tn1).getName()); + + //iterate through all results + for(TaxonType taxType: tt.keys()){ + String name = taxType.toString().toLowerCase(); + ArrayList<TaxonNode> al = tt.get(taxType); + TaxonNode[] txNodesAr = al.toArray(new TaxonNode[al.size()]); + //sort result + MergeSort.sort(txNodesAr, 0, txNodesAr.length - 1, gc); + taxonIds = new JSONArray(); + names = new JSONArray(); + + taxonIds.add(-1); + names.add("Any"); + + for (TaxonNode tx: txNodesAr){ + taxonIds.add(tx.getTaxonId()); + names.add(tx.getName()); + } + JSONObject inner = new JSONObject(); + inner.put("taxonName", names); + inner.put("taxonId", taxonIds); + + js.put(name, inner); } - js.put("taxonId", taxonIds); - js.put("taxonName", names); - out.print(js.toJSONString()); %> \ No newline at end of file diff --git a/tomcat/webapps/Trawl/index.jsp b/tomcat/webapps/Trawl/index.jsp index 535087a7ca62bbf68ff959090f6fc24476a94d09..a674f48b49434067511beb590b286ecd18dd1682 100644 --- a/tomcat/webapps/Trawl/index.jsp +++ b/tomcat/webapps/Trawl/index.jsp @@ -10,7 +10,7 @@ Double Handle Slider Modified from: http://jqueryui.com/slider/#range <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="keywords" content="insert, some, keywords"> <!--TODO--> <meta name="description" content="insert a description"> <!--TODO--> - <title>TrawlTool</title> + <title>TrawlExpert</title> <link rel="stylesheet" type="text/css" href="style.css"> <!--JQuery--> @@ -30,7 +30,7 @@ Double Handle Slider Modified from: http://jqueryui.com/slider/#range <body> <header> <div class="headerWrapper"> - <a href="index.jsp" >TrawlTool</a> + <a href="index.jsp" >TrawlExpert</a> <span class="nav-bar"> <a href="about.html">About</a> | <a href="index.html" target="_blank">Gitlab/Github Nonfunc!</a>