diff --git a/src/main/java/com/cloudius/urchin/api/APIClient.java b/src/main/java/com/cloudius/urchin/api/APIClient.java index 2b2de95..57dd788 100644 --- a/src/main/java/com/cloudius/urchin/api/APIClient.java +++ b/src/main/java/com/cloudius/urchin/api/APIClient.java @@ -5,6 +5,7 @@ package com.cloudius.urchin.api; import java.io.StringReader; import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -18,9 +19,11 @@ import javax.json.JsonReader; import javax.json.JsonReaderFactory; import javax.json.JsonString; import javax.management.openmbean.TabularData; +import javax.management.openmbean.TabularDataSupport; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; +import com.cloudius.urchin.utils.SnapshotDetailsTabularData; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.WebResource.Builder; @@ -46,11 +49,15 @@ public class APIClient { } public Builder get(String path, MultivaluedMap queryParams) { + if (queryParams == null) { + return get(path); + } ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(UriBuilder.fromUri(getBaseUrl()) .build()); - return service.queryParams(queryParams).path(path).accept(MediaType.APPLICATION_JSON); + return service.queryParams(queryParams).path(path) + .accept(MediaType.APPLICATION_JSON); } public void post(String path, MultivaluedMap queryParams) { @@ -61,24 +68,56 @@ public class APIClient { get(path).post(); } - public String getStringValue(String string) { + public void post(String path) { + post(path, null); + } + + public void delete(String path, MultivaluedMap queryParams) { + if (queryParams != null) { + get(path, queryParams).delete(); + return; + } + get(path).delete(); + } + + public void delete(String path) { + delete(path, null); + } + + public String getStringValue(String string, + MultivaluedMap queryParams) { if (string != "") { - return get(string).get(String.class); + return get(string, queryParams).get(String.class); } return ""; } + public String getStringValue(String string) { + return getStringValue(string, null); + } + + public JsonReader getReader(String string, + MultivaluedMap queryParams) { + return factory.createReader(new StringReader(getStringValue(string, + queryParams))); + } + public JsonReader getReader(String string) { - return factory.createReader(new StringReader(getStringValue(string))); + return getReader(string, null); } public String[] getStringArrValue(String string) { - // TODO Auto-generated method stub - return null; + List val = getListStrValue(string); + return val.toArray(new String[val.size()]); + } + + public int getIntValue(String string, + MultivaluedMap queryParams) { + return Integer.parseInt(getStringValue(string, queryParams)); } public int getIntValue(String string) { - return Integer.parseInt(getStringValue(string)); + return getIntValue(string, null); } public boolean getBooleanValue(String string) { @@ -89,8 +128,9 @@ public class APIClient { return Double.parseDouble(getStringValue(string)); } - public List getListStrValue(String string) { - JsonReader reader = getReader(string); + public List getListStrValue(String string, + MultivaluedMap queryParams) { + JsonReader reader = getReader(string, queryParams); JsonArray arr = reader.readArray(); List res = new ArrayList(arr.size()); for (int i = 0; i < arr.size(); i++) { @@ -101,19 +141,120 @@ public class APIClient { } + public List getListStrValue(String string) { + return getListStrValue(string, null); + + } + + public static List listStrFromJArr(JsonArray arr) { + List res = new ArrayList(); + for (int i = 0; i < arr.size(); i++) { + res.add(arr.getString(i)); + } + return res; + } + + public static String join(String[] arr, String joiner) { + String res = ""; + if (arr != null) { + for (String name : arr) { + if (name != null && !name.equals("")) { + if (!res.equals("")) { + res = res + ","; + } + res = res + name; + } + } + } + return res; + } + + public static String join(String[] arr) { + return join(arr, ","); + } + + public static boolean set_query_param( + MultivaluedMap queryParams, String key, String value) { + if (queryParams != null && key != null && value != null + && !value.equals("")) { + queryParams.add(key, value); + return true; + } + return false; + } + + public static boolean set_bool_query_param( + MultivaluedMap queryParams, String key, + boolean value) { + if (queryParams != null && key != null && value) { + queryParams.add(key, "true"); + return true; + } + return false; + } + + public Map, List> getMapListStrValue(String string, + MultivaluedMap queryParams) { + if (string.equals("")) { + return null; + } + JsonReader reader = getReader(string, queryParams); + JsonArray arr = reader.readArray(); + Map, List> map = new HashMap, List>(); + for (int i = 0; i < arr.size(); i++) { + JsonObject obj = arr.getJsonObject(i); + if (obj.containsKey("key") && obj.containsKey("value")) { + map.put(listStrFromJArr(obj.getJsonArray("key")), + listStrFromJArr(obj.getJsonArray("value"))); + } + } + reader.close(); + return map; + } + public Map, List> getMapListStrValue(String string) { - // TODO Auto-generated method stub - return null; + return getMapListStrValue(string, null); + } + + public Map getMapStrValue(String string, + MultivaluedMap queryParams) { + if (string.equals("")) { + return null; + } + JsonReader reader = getReader(string, queryParams); + JsonArray arr = reader.readArray(); + Map map = new HashMap(); + for (int i = 0; i < arr.size(); i++) { + JsonObject obj = arr.getJsonObject(i); + if (obj.containsKey("key") && obj.containsKey("value")) { + map.put(obj.getString("key"), obj.getString("value")); + } + } + reader.close(); + return map; } public Map getMapStrValue(String string) { - // TODO Auto-generated method stub - return null; + return getMapStrValue(string, null); + } + + public List getListInetAddressValue(String string, + MultivaluedMap queryParams) { + List vals = getListStrValue(string, queryParams); + List res = new ArrayList(); + for (String val : vals) { + try { + res.add(InetAddress.getByName(val)); + } catch (UnknownHostException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return res; } public List getListInetAddressValue(String string) { - // TODO Auto-generated method stub - return null; + return getListInetAddressValue(string, null); } public Map getMapStringTabularDataValue(String string) { @@ -121,6 +262,41 @@ public class APIClient { return null; } + private TabularDataSupport getSnapshotData(String ks, JsonArray arr) { + TabularDataSupport data = new TabularDataSupport( + SnapshotDetailsTabularData.TABULAR_TYPE); + + for (int i = 0; i < arr.size(); i++) { + JsonObject obj = arr.getJsonObject(i); + if (obj.containsKey("key") && obj.containsKey("cf")) { + SnapshotDetailsTabularData.from(obj.getString("key"), ks, + obj.getString("cf"), obj.getInt("total"), + obj.getInt("live"), data); + } + } + return data; + } + + public Map getMapStringSnapshotTabularDataValue( + String string, MultivaluedMap queryParams) { + if (string.equals("")) { + return null; + } + JsonReader reader = getReader(string, queryParams); + JsonArray arr = reader.readArray(); + Map map = new HashMap<>(); + + for (int i = 0; i < arr.size(); i++) { + JsonObject obj = arr.getJsonObject(i); + if (obj.containsKey("key") && obj.containsKey("value")) { + String key = obj.getString("key"); + map.put(key, getSnapshotData(key, obj.getJsonArray("value"))); + } + } + reader.close(); + return map; + } + public long getLongValue(String string) { return Long.parseLong(getStringValue(string)); }