package lt.emasina.resthub.client; import lt.emasina.resthub.model.QueryManager; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import lombok.Getter; import lt.emasina.resthub.model.Namespace; import lt.emasina.resthub.util.Helper; import org.json.JSONException; import org.json.JSONObject; /** * The RestHubServer class is used to get Namespace and Query objects. */ @Getter public class RestHubServer { private final String url; /** * Creates an object of RestHubServer. * * @param url An URL of running RestHub server. */ public RestHubServer(String url) { this.url = url; } /** * Creates and returns a QueryManager object by given sql string. * * @param sql Sql string. * @return New QueryManager object. */ public QueryManager newQueryManager(String sql) { return new QueryManager(url, sql); } /** * Returns The list of namespaces from the server. There is one request to * server. * * @return The list of Namespace objects. * @throws java.io.IOException * @throws org.json.JSONException */ public List<Namespace> getNamespaces() throws IOException, JSONException{ JSONObject jsonObject = Helper.getJSONObject(this.url); Iterator i = jsonObject.keys(); List<Namespace> list = new ArrayList<>(); while (i.hasNext()) { String name = i.next().toString(); JSONObject namespace = jsonObject.getJSONObject(name); list.add(new Namespace(name, namespace)); } return list; } /** * Returns the list of query ids from the server. There is one request to * server. * * @return The list of query ids. * @throws java.io.IOException * @throws org.json.JSONException */ public List<String> getQueryIdList() throws IOException, JSONException{ JSONObject jsonObject = Helper.getJSONObject(this.url + "/queries"); Iterator i = jsonObject.keys(); List<String> list = new ArrayList<>(); while (i.hasNext()) { String name = i.next().toString(); list.add(name); } return list; } /** * Creates and returns a QueryManager object by given query id. There is one * request to server. * * @param id Existing Query id. * @return New QueryManager object. * @throws java.io.IOException * @throws org.json.JSONException */ public QueryManager getQueryManager(String id) throws IOException, JSONException{ JSONObject jsonObject = Helper.getJSONObject(this.url + "/query/" + id); return new QueryManager(url, jsonObject.getString("query")); } }