package focusedCrawler.seedfinder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Query {
private List<QueryTerm> terms = new ArrayList<QueryTerm>();
public Query(String[] terms, double[] weights) {
if(terms.length != weights.length) {
throw new IllegalArgumentException("terms and weights vectors should have same size.");
}
for (int i = 0; i < weights.length; i++) {
this.terms.add(new QueryTerm(terms[i], weights[i]));
}
}
public Query(List<QueryTerm> terms) {
this.terms = terms;
}
public Query(String query) {
this(query.split("\\s"));
}
public Query(String... terms) {
for (int i = 0; i < terms.length; i++) {
this.terms.add(new QueryTerm(terms[i], 0));
}
}
public void addTerm(String term, double score) {
addTerm(new QueryTerm(term, score));
}
public void addTerm(QueryTerm term) {
this.terms.add(term);
}
public void addTerms(List<QueryTerm> terms) {
this.terms.addAll(terms);
}
public List<QueryTerm> getTerms() {
return this.terms;
}
public String asString() {
if(terms == null || terms.isEmpty()) {
return "";
}
StringBuilder q = new StringBuilder();
for(QueryTerm term : terms) {
q.append(term.term);
q.append(" ");
}
try {
return URLEncoder.encode(q.toString().trim(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Oops! Unsupported enconding.");
}
}
public String explain() {
if(terms == null || terms.isEmpty()) {
return "";
}
StringBuilder q = new StringBuilder();
for(QueryTerm term : terms) {
q.append(term.score);
q.append(" ");
q.append(term.term);
q.append("\n");
}
return q.toString();
}
public void sortByScore() {
Collections.sort(this.terms, QueryTerm.COMPARATOR);
}
public void dropLast() {
terms.remove(terms.size()-1);
}
public Set<String> termsSet() {
Set<String> termsSet = new HashSet<String>();
for (QueryTerm t : this.terms) {
termsSet.add(t.term);
}
return termsSet;
}
}