package net.thirdy.blackmarket.service;
import java.util.List;
import io.jexiletools.es.ExileToolsSearchClient.ExileToolsSearchResult;
import io.jexiletools.es.ExileToolsSearchException;
import io.jexiletools.es.model.json.ExileToolsHit;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import net.thirdy.blackmarket.BlackmarketApplication;
import net.thirdy.blackmarket.ex.BlackmarketException;
import net.thirdy.blackmarket.util.ImageCache;
public class ExileToolsService extends Service<ExileToolsSearchResult> {
@Override
protected Task<ExileToolsSearchResult> createTask() {
return new Task<ExileToolsSearchResult>() {
final String s = getJson();
@Override protected ExileToolsSearchResult call() throws Exception {
try {
// FIXME: not sure if ExileToolsESClient is thread-safe, maybe we should just instantiate here and then shutdown afterwards
updateMessage("Querying against Exile Tools Elastic Search Public API...");
ExileToolsSearchResult result = BlackmarketApplication.getExileToolsESClient().execute(s);
List<ExileToolsHit> exileToolHits = result.getExileToolHits();
// cache images
updateMessage("Caching images...");
for (ExileToolsHit h : exileToolHits) {
String icon = h.getInfo().getIcon();
updateMessage("Caching image: " + icon);
ImageCache.getInstance().preLoad(icon);
}
return result;
} catch (ExileToolsSearchException e) {
e.printStackTrace();
// String msg = "Error while running search to Exile Tools ES API";
updateMessage(e.getMessage());
// throw new BlackmarketException(msg, e);
throw e;
}
}
};
}
private StringProperty json = new SimpleStringProperty(this, "json");
public final void setJson(String value) { json.set(value); }
public final String getJson() { return json.get(); }
public final StringProperty jsonProperty() { return json; }
}