package com.sf.elastic.repositories;
import android.content.Context;
import android.util.Log;
import com.sf.elastic.R;
import com.sf.elastic.models.City;
import com.silverforge.elasticsearchrawclient.elasticFacade.ElasticClient;
import com.silverforge.elasticsearchrawclient.elasticFacade.ElasticRawClient;
import com.silverforge.elasticsearchrawclient.model.ElasticSettings;
import com.silverforge.elasticsearchrawclient.utils.StreamUtils;
import com.silverforge.webconnector.exceptions.SettingsIsNullException;
import com.silverforge.webconnector.model.ConnectorSettings;
import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.RootContext;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import rx.Observable;
@EBean
public class CityRepository implements Repository<City> {
private static final String TAG = CityRepository.class.getName();
private static final String ELASTIC_URL = "https://mgj.east-us.azr.facetflow.io";
private static final String ELASTIC_APIKEY = "wihIilbbekmCeppKlgQXDwpSZEUekkk0";
private static final String[] ELASTIC_INDICES = new String[] {"cities"};
private ElasticRawClient client;
@RootContext
public Context context;
public CityRepository() {
ConnectorSettings connectorSettings = ConnectorSettings
.builder()
.baseUrl(ELASTIC_URL)
.userName(ELASTIC_APIKEY)
.build();
ElasticSettings elasticSettings = ElasticSettings
.builder()
.indices(ELASTIC_INDICES)
.build();
try {
client = new ElasticClient(connectorSettings, elasticSettings);
} catch (URISyntaxException | SettingsIsNullException e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
}
@Override
public Observable<City> getNextCity(final String text) {
String searchQuery = getSearch(text);
return client
.searchAsync(searchQuery, City.class);
}
private String getSearch(String text) {
String queryText = StreamUtils.getRawContent(context, R.raw.city_name_prefix_query);
return queryText
.replace("{{SIZE}}", "1000")
.replace("{{NAME}}", text.toLowerCase());
}
private List<String> convertStreamToList(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
ArrayList<String> retValue = new ArrayList<>();
String line;
try {
while ((line = reader.readLine()) != null) {
retValue.add(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return retValue;
}
public void addCities() {
ConnectorSettings mySettings = ConnectorSettings
.builder()
.baseUrl("https://mgj.east-us.azr.facetflow.io")
.userName(ELASTIC_APIKEY)
.build();
try {
ElasticClient myClient = new ElasticClient(mySettings);
InputStream cityIS = context
.getResources()
.openRawResource(R.raw.city_list);
List<String> cities = convertStreamToList(cityIS);
String queryText = StreamUtils.getRawContent(context, R.raw.city_add);
Observable
.from(cities)
.subscribe(city -> {
String postData = queryText
.replace("{{CITY_NAME}}", city);
// myClient.executeRawRequest().post("/cities/city", postData);
});
} catch (URISyntaxException | SettingsIsNullException e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
}
}