package nl.pascaldevink.intellij.thesaurus.downloader;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AltervistaThesaurusDownloader extends AbstractDownloader
{
private static final String endpoint = "http://thesaurus.altervista.org/thesaurus/v1";
public AltervistaThesaurusDownloader(String apiKey) {
super(apiKey);
}
@Override
protected String buildUrl(String originalWord) throws UnsupportedEncodingException
{
return endpoint + "?word="+ URLEncoder.encode(originalWord, "UTF-8")+"&language=en_US&key="+apiKey+"&output=json";
}
protected List<String> parseRawJsonToSynonymsList(String rawJson)
{
JSONObject obj = (JSONObject) JSONValue.parse(rawJson);
JSONArray array = (JSONArray)obj.get("response");
List<String> synonyms = new ArrayList<String>();
for (int i=0; i < array.size(); i++) {
JSONObject list = (JSONObject) ((JSONObject)array.get(i)).get("list");
String partialSynonyms = (String)list.get("synonyms");
synonyms.addAll(explodeSynonyms(partialSynonyms));
}
return synonyms;
}
protected List<String> explodeSynonyms(String partialSynonyms)
{
String[] synonyms = partialSynonyms.split("\\|");
List<String> synonymList = new ArrayList<String>();
Collections.addAll(synonymList, synonyms);
for (String synonym : synonymList) {
if (synonym.contains("(")) {
int index = synonymList.indexOf(synonym);
synonym = synonym.substring(0, synonym.indexOf("(") - 1).trim();
synonymList.set(index, synonym);
}
}
return synonymList;
}
}