// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/page/PageParameters.java
// public class PageParameters {
// 
//     private int total;
// 
//     private String firstPageNumber;
//     private String lastPageNumber;
//     private String nextPageNumber;
//     private int nextPage = 0;
//     private int lastPage = 0;
//     private String previousPageNumber;
//     private String startIndexString;
// 
//     private int startIndex;
// 
//     public int getTotal() {
// 	return total;
//     }
//     public void setTotal(int total) {
// 	this.total = total;
//     }
// 
//     public String getFirstPageNumber() {
// 	return firstPageNumber;
//     }
//     public void setFirstPageNumber(String firstPageNumber) {
// 	this.firstPageNumber = firstPageNumber;
//     }
//     public String getLastPageNumber() {
// 	return lastPageNumber;
//     }
//     public void setLastPageNumber(String lastPageNumber) {
// 	this.lastPageNumber = lastPageNumber;
//     }
//     public String getNextPageNumber() {
// 	return nextPageNumber;
//     }
//     public void setNextPageNumber(String nextPageNumber) {
// 	this.nextPageNumber = nextPageNumber;
//     }
//     public String getPreviousPageNumber() {
// 	return previousPageNumber;
//     }
//     public void setPreviousPageNumber(String previousPageNumber) {
// 	this.previousPageNumber = previousPageNumber;
//     }
//     public int getStartIndex() {
// 	return startIndex;
//     }
//     public void setStartIndex(int startIndex) {
// 	this.startIndex = startIndex;
//     }
//     public int getNextPage() {
// 	return nextPage;
//     }
//     public void setNextPage(int nextPage) {
// 	this.nextPage = nextPage;
//     }
//     public int getLastPage() {
// 	return lastPage;
//     }
//     public void setLastPage(int lastPage) {
// 	this.lastPage = lastPage;
//     }
//     public String getStartIndexString() {
// 	return startIndexString;
//     }
//     public void setStartIndexString(String startIndexString) {
// 	this.startIndexString = startIndexString;
//     }
// 
// 
//     @Override
//     public String toString(){
// 	return "total:" +this.getTotal() + " startIndex:" +this.getStartIndex() + " nextPage:" + this.getNextPage() ;
//     }
// 
// }
// 
// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/w3c/SuggestOption.java
// public class SuggestOption  {
// 
//     private float score;
//     private String text;
// 
// 
//     public SuggestOption(float score, String text){
// 	this.score = score;
// 	this.text = text;
//     }
// 
//     public SuggestOption(String text){
// 	this.text = text;
//     }
//     public float getScore() {
// 	return score;
//     }
//     public void setScore(float score) {
// 	this.score = score;
//     }
//     public String getText() {
// 	return text;
//     }
//     public void setText(String text) {
// 	this.text = text;
//     }
// 
// 
// }
// 
// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/w3c/W3CAnnotation.java
// public class W3CAnnotation extends AbstractAnnotation {
// 
// }


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import com.digirati.themathmos.model.annotation.page.PageParameters;
import com.digirati.themathmos.model.annotation.w3c.SuggestOption;
import com.digirati.themathmos.model.annotation.w3c.W3CAnnotation;
import com.github.jsonldjava.utils.JsonUtils;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
	// }

	return root;

    }

    /**
     * Method to create the terms urls will replace
     *
     * @param query
     * @param optionText
     * @return
     */
    private String getSearchQueryFromAutocompleteQuery(String query, String optionText) {

	String searchQuery = query;
	searchQuery = searchQuery.replace("autocomplete", "search");

	String tidyQuery = removeParametersAutocompleteQuery(searchQuery, AUTOCOMPLETE_IGNORE_PARAMETERS);
	String encodedOptionText = optionText;
	try {
	    encodedOptionText = URLEncoder.encode(optionText, "UTF-8");
	} catch (UnsupportedEncodingException e) {

	    LOG.error(String.format("Autocomplete: unable to encode [%s]", optionText), e);
	}

	return tidyQuery.replaceAll("q=[^&]+", "q=" + encodedOptionText);
    }

// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/page/PageParameters.java
// public class PageParameters {
// 
//     private int total;
// 
//     private String firstPageNumber;
//     private String lastPageNumber;
//     private String nextPageNumber;
//     private int nextPage = 0;
//     private int lastPage = 0;
//     private String previousPageNumber;
//     private String startIndexString;
// 
//     private int startIndex;
// 
//     public int getTotal() {
// 	return total;
//     }
//     public void setTotal(int total) {
// 	this.total = total;
//     }
// 
//     public String getFirstPageNumber() {
// 	return firstPageNumber;
//     }
//     public void setFirstPageNumber(String firstPageNumber) {
// 	this.firstPageNumber = firstPageNumber;
//     }
//     public String getLastPageNumber() {
// 	return lastPageNumber;
//     }
//     public void setLastPageNumber(String lastPageNumber) {
// 	this.lastPageNumber = lastPageNumber;
//     }
//     public String getNextPageNumber() {
// 	return nextPageNumber;
//     }
//     public void setNextPageNumber(String nextPageNumber) {
// 	this.nextPageNumber = nextPageNumber;
//     }
//     public String getPreviousPageNumber() {
// 	return previousPageNumber;
//     }
//     public void setPreviousPageNumber(String previousPageNumber) {
// 	this.previousPageNumber = previousPageNumber;
//     }
//     public int getStartIndex() {
// 	return startIndex;
//     }
//     public void setStartIndex(int startIndex) {
// 	this.startIndex = startIndex;
//     }
//     public int getNextPage() {
// 	return nextPage;
//     }
//     public void setNextPage(int nextPage) {
// 	this.nextPage = nextPage;
//     }
//     public int getLastPage() {
// 	return lastPage;
//     }
//     public void setLastPage(int lastPage) {
// 	this.lastPage = lastPage;
//     }
//     public String getStartIndexString() {
// 	return startIndexString;
//     }
//     public void setStartIndexString(String startIndexString) {
// 	this.startIndexString = startIndexString;
//     }
// 
// 
//     @Override
//     public String toString(){
// 	return "total:" +this.getTotal() + " startIndex:" +this.getStartIndex() + " nextPage:" + this.getNextPage() ;
//     }
// 
// }
// 
// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/w3c/SuggestOption.java
// public class SuggestOption  {
// 
//     private float score;
//     private String text;
// 
// 
//     public SuggestOption(float score, String text){
// 	this.score = score;
// 	this.text = text;
//     }
// 
//     public SuggestOption(String text){
// 	this.text = text;
//     }
//     public float getScore() {
// 	return score;
//     }
//     public void setScore(float score) {
// 	this.score = score;
//     }
//     public String getText() {
// 	return text;
//     }
//     public void setText(String text) {
// 	this.text = text;
//     }
// 
// 
// }
// 
// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/model/annotation/w3c/W3CAnnotation.java
// public class W3CAnnotation extends AbstractAnnotation {
// 
// }


// Path: the-mathmos-server/src/main/java/com/digirati/themathmos/service/impl/AnnotationUtils.java
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import com.digirati.themathmos.model.annotation.page.PageParameters;
import com.digirati.themathmos.model.annotation.w3c.SuggestOption;
import com.digirati.themathmos.model.annotation.w3c.W3CAnnotation;
import com.github.jsonldjava.utils.JsonUtils;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;

	// }

	return root;

    }

    /**
     * Method to create the terms urls will replace
     *
     * @param query
     * @param optionText
     * @return
     */
    private String getSearchQueryFromAutocompleteQuery(String query, String optionText) {

	String searchQuery = query;
	searchQuery = searchQuery.replace("autocomplete", "search");

	String tidyQuery = removeParametersAutocompleteQuery(searchQuery, AUTOCOMPLETE_IGNORE_PARAMETERS);
	String encodedOptionText = optionText;
	try {
	    encodedOptionText = URLEncoder.encode(optionText, "UTF-8");
	} catch (UnsupportedEncodingException e) {

	    LOG.error(String.format("Autocomplete: unable to encode [%s]", optionText), e);
	}

	return tidyQuery.replaceAll("q=[^&]+", "q=" + encodedOptionText);
    }

    public Map<String, Object> createAutocompleteList(List<SuggestOption> options, boolean isW3c, String queryString,