Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
579900f
Add the corresponding genomes to the segments
smesseim May 6, 2016
32715b4
Intuitive zooming on graph
May 7, 2016
83537cb
Fixed mouse leave document bug
May 7, 2016
34a3f24
Changed zoom on scroll function
May 7, 2016
42e4ac8
PhyloGeneticTreeParser tests
SamuelSital May 8, 2016
6dbd4b3
Temporary fix PhyloGenticTreeParser
SamuelSital May 9, 2016
fabed39
Custom string iterator
SamuelSital May 9, 2016
3f657d9
Remove .fasta extension from genome name
smesseim May 9, 2016
c4ff56c
Merge remote-tracking branch 'origin/feature/phyloparser' into featur…
smesseim May 9, 2016
4bc0ed6
Working parser
SamuelSital May 9, 2016
4a14784
Clean up parser
SamuelSital May 9, 2016
5cd0d28
Add JSON serializer for treenode
smesseim May 9, 2016
0901cd5
Merge remote-tracking branch 'origin/feature/phyloparser' into featur…
smesseim May 9, 2016
614a298
fix test failures
smesseim May 9, 2016
0a00450
Merge pull request #50 from ProgrammingLife2016/feature/phyloparser-json
smesseim May 10, 2016
10cd412
Merge remote-tracking branch 'origin/feature/phyloparser' into featur…
smesseim May 10, 2016
0db671b
Fix front end
SamuelSital May 11, 2016
0d47478
Fix merge conflict
SamuelSital May 11, 2016
0fa2671
Add pan/zoom widget and send zoom level to server
SamuelSital May 11, 2016
65353f0
Merge conflict fix
SamuelSital May 11, 2016
2fdf1e9
Load data after zoom level ajax request
SamuelSital May 11, 2016
40d42ec
Phylognetic tree in IFRAME
SamuelSital May 12, 2016
56aa40a
Fixed CONTENT_LENGTH_MISMATCH error
May 12, 2016
eda98c1
Add semantic zooming
smesseim May 12, 2016
26d7bdd
Add all gfa's to LFS
smesseim May 12, 2016
1b4d02a
Hide irrelevant links
smesseim May 12, 2016
73de374
Added ajax request on panning/zooming with minx and miny
May 12, 2016
2dfd47f
Fix Phylogenetic tree in div
SamuelSital May 12, 2016
9f31e76
Merge branch 'feature/phyloparser' of https://github.com/ProgrammingL…
SamuelSital May 12, 2016
2ce1a5b
Modified ajax pan/zoom request
May 12, 2016
f570e89
Merge remote-tracking branch 'origin/feature/phyloparser' into featur…
smesseim May 12, 2016
c907ce1
Fix failing test
smesseim May 12, 2016
a16e7de
Add bounding for semantic zooming
smesseim May 12, 2016
2009d4b
Merge to get the new testing package structure
raviautar May 13, 2016
034ab16
Added new package for phyloparser to maintain structure
raviautar May 13, 2016
6879fc8
Fix positioning phylotree
SamuelSital May 13, 2016
8f45f19
Merge branch 'feature/phyloparser' of https://github.com/ProgrammingL…
SamuelSital May 13, 2016
4e5e4d0
Added missing tests for phyloparser
raviautar May 13, 2016
83f6cc9
Merge remote-tracking branch 'origin/feature/phyloparser' into featur…
smesseim May 13, 2016
f04c50d
Added few tests for phylotree
raviautar May 13, 2016
2749b72
Merge to get newest test classes
raviautar May 13, 2016
77c68d6
Completed all test for phylotree
raviautar May 13, 2016
e42a252
Added test case to test PositionHandler
raviautar May 13, 2016
b47ee10
Remove orphan nodes
smesseim May 13, 2016
998f79f
Merge pull request #54 from ProgrammingLife2016/testing/phylotreeparser
smesseim May 13, 2016
d2d275d
Merge branch 'feature/phylosemanticism' of github.com:ProgrammingLife…
smesseim May 13, 2016
4d7a284
Merge pull request #55 from ProgrammingLife2016/testing/segments
smesseim May 13, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions code.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

public static void main(String[] args) {
TokenIterator it = new TokenIterator("cbbaaacabaa", "bc");
while (it.hasNext()) {
System.out.println("next: " + it.next());
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.ArrayList;
import java.util.List;
import static java.util.stream.Collectors.*;

/**
* Class for representing a node in the phylogenetic tree.
Expand Down Expand Up @@ -104,6 +105,9 @@ public List<TreeNode> getChildren() {
*/
@Override
public String toString() {
return String.format("BaseTreeNode{id= %d, weight= %d, children= %d, parent = %d}", id, weight, children, parent);
return "[" + this.getId() + " " + this.getWeight()
+ " {" + children.stream()
.map(Object::toString)
.collect(joining(", ")) + "}]";
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package io.github.programminglife2016.pl1_2016.parser;

import io.github.programminglife2016.pl1_2016.Launcher;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.nio.charset.StandardCharsets;
import java.util.*;


/**
Expand All @@ -15,9 +16,7 @@ public class PhyloGeneticTreeParser implements Parser {
@Override
public JsonSerializable parse(InputStream inputStream) {
String s = inputStreamToString(inputStream);
StringTokenizer tokenizer = new StringTokenizer(s, "(:,);", true);
TreeNode root = constructTree(null, tokenizer);
root = root.getChildren().get(0);
TreeNode root = parseTokensFromString(s);
return null;
}

Expand All @@ -28,50 +27,78 @@ private String inputStreamToString(InputStream inputStream) {
return s;
}

/**
* Create tree from string.
* @param s string representin the tree.
* @return root of tree
*/
public TreeNode parseTokensFromString(String s) {
StringIterator tokenizer = new TokenIterator(s, "(:,);", true);
TreeNode root = constructTree(null, tokenizer);
return root.getChildren().get(0);
}

/**
* Construct tree from the input of the String Tokenizer.
* @param parent parent of the current node.
* @param tokenizer tokenizer with the contents of the .nwk file.
* @return parsed Tree Node object.
*/
public TreeNode constructTree(TreeNode parent, StringTokenizer tokenizer) {
public TreeNode constructTree(TreeNode parent, StringIterator tokenizer) {
TreeNode current = new BaseTreeNode();
String next;
double weight;
List<TreeNode> nodes = new ArrayList<>();
while (tokenizer.hasMoreElements()) {
next = tokenizer.nextToken();
while (tokenizer.hasNext()) {
next = tokenizer.next();
switch (next) {
case "(":
TreeNode newNode = constructTree(current, tokenizer);
nodes.add(newNode);
if (tokenizer.hasMoreTokens()) {
tokenizer.nextToken();
}
break;
case ":":
current.setWeight(Double.parseDouble(tokenizer.nextToken()));
break;
case ",":
nodes.add(current);
current = new BaseTreeNode();
break;
case ")":
case "(":
TreeNode newNode = constructTree(current, tokenizer);
nodes.add(newNode);
if (tokenizer.hasNext()) {
tokenizer.next();
}
break;
case ":":
current.setWeight(Double.parseDouble(tokenizer.next()));
break;
case ",":
nodes.add(current);
current = new BaseTreeNode();
break;
case ")":
if (!current.getId().equals("-") && current.getWeight() != 0.0) {
nodes.add(current);
weight = 0;
if (tokenizer.hasMoreTokens() && tokenizer.nextToken().equals(":")) {
weight = Double.parseDouble(tokenizer.nextToken());
}
return new BaseTreeNode("-", weight, nodes, parent);
case ";":
current.setChildren(nodes);
return current;
default:
current.setId(next);
break;
}
weight = 0;
if (tokenizer.hasNext() && tokenizer.next().equals(":")) {
weight = Double.parseDouble(tokenizer.next());
}
return new BaseTreeNode("-", weight, nodes, parent);
case ";":
current.setChildren(nodes);
return current;
default:
current.setId(next);
break;
}
}
current.setChildren(nodes);
return current;
}

/**
* Test parser.
* @param args args.
*/
public static void main(String[] args) {
System.out.println("PhylgoGenetic Tree Parser");
PhyloGeneticTreeParser parser = new PhyloGeneticTreeParser();
// String s = "(A: 0.1,B: 0.2,(C:0.3,D:0.4):0.5);";
String s = "(A: 0.1,B: 0.2,(C:0.3,(Z:1,Y:2):0.4):0.5);";
// parser.parse(Launcher.class.getResourceAsStream("/genomes/340tree.rooted.TKK.nwk"));
s = "(A:0.1,(B:0.2,(C:0.3,(D:0.4,E:0.5):0.6):0.4):0.5);";
System.out.println("Done");
parser.parse(new ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.github.programminglife2016.pl1_2016.parser;

import java.util.Iterator;

public interface StringIterator extends Iterator<String> {
/**
* Get the next string from the iterator.
* @return next string.
*/
String peek();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package io.github.programminglife2016.pl1_2016.parser;

import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.function.Consumer;

/**
* Adapter for the StringTokenizer class.
*/
public class StringTokenizerAdapter extends StringTokenizer implements StringIterator {

/**
* Create StringTokinzerAdapter object.
* @param str string to split up into tokens.
* @param delim delimters of the tokens.
* @param returnDelims if the tokenizer should return the delimiters itself.
*/
public StringTokenizerAdapter(String str, String delim, boolean returnDelims) {
super(str, delim, returnDelims);
}

@Override
public void remove() {

}

@Override
public void forEachRemaining(Consumer<? super String> action) {

}

@Override
public boolean hasNext() {
return this.hasMoreTokens();
}

@Override
public String next() {
return this.nextToken();
}

@Override
public String peek() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package io.github.programminglife2016.pl1_2016.parser;

import java.util.Iterator;
import java.util.function.Consumer;
import java.util.stream.Collector;

public class TokenIterator implements StringIterator {
private String tokens;
private int pos;
private String delimiters;
private StringBuilder sb;

public TokenIterator(String tokens, String delimiters, boolean r) {
this.delimiters = delimiters;
this.tokens = tokens;
reset();
}

public void reset() {
this.pos = 0;
}

public String peek() {
if (hasNext()) {
int tempPos = this.pos;
String next = this.next();
this.pos = tempPos;
return next;
} else {
return "";
}
}

@Override
public boolean hasNext() {
return (pos < tokens.length());
}

@Override
public String next() {
sb = new StringBuilder();
char c = tokens.charAt(pos);
while (hasNext() && delimiters.indexOf(c) == -1) {
sb.append(c);
pos++;
if (hasNext()) {
c = tokens.charAt(pos);
}
}
if (sb.length() == 0) {
sb.append(c);
pos++;
}
return sb.toString();
}

@Override
public void remove() {

}

@Override
public void forEachRemaining(Consumer<? super String> action) {

}
}
Loading