package se.sics.gvod.ls.video.snapshot;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
import java.sql.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;
/**
* Jersey REST client generated for REST resource:StatsResource
* [/video.stats]<br> USAGE:
* <pre>
* StatsRestClient client = new StatsRestClient();
* Object response = client.XXX(...);
* // do whatever with response
* client.close();
* </pre>
*
* @author Niklas Wahlén <nwahlen@kth.se>
*/
public class StatsRestClient {
private WebResource webResource;
private Client client;
private String statsPath = "stats";
private String experimentPath = "experiment";
public StatsRestClient(String url) {
ClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
client = Client.create(config);
// Read configuration
if (!url.contains("http://")) {
url = "http://" + url;
}
final String base_uri = url;
webResource = client.resource(base_uri);
}
public ClientResponse createStats(Stats s) {
return webResource.path(statsPath).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, s);
}
public ClientResponse editStats(Stats s) {
return webResource.path(statsPath).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).put(ClientResponse.class, s);
}
public ClientResponse removeStats(String id) {
return webResource.path(statsPath).path(id).delete(ClientResponse.class);
}
public Stats findStats(String id) {
return webResource.path(statsPath).path(id).accept(MediaType.APPLICATION_JSON).get(Stats.class);
}
public List<Stats> findAll() {
return webResource.path(statsPath).accept(MediaType.APPLICATION_JSON).get(new GenericType<List<Stats>>() {
});
}
public int getStatsCount() {
return Integer.parseInt(webResource.path(statsPath).path("count").accept(MediaType.TEXT_PLAIN).get(String.class));
}
public boolean experimentIterationExists(String id, String iteration) {
ClientResponse cr = webResource.path("experiment").path(id).path(iteration).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
if (cr.getStatus() < 200 || cr.getStatus() > 299) {
return false;
}
return true;
}
public ClientResponse createExperiment(Experiment e) {
return webResource.path(experimentPath).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, e);
}
public ClientResponse editExperiment(Experiment e) {
return webResource.path(experimentPath).type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).put(ClientResponse.class, e);
}
public ClientResponse removeExperiment(String id) {
return webResource.path(experimentPath).path(id).delete(ClientResponse.class);
}
public Experiment findExperiment(String id) {
ClientResponse cr = webResource.path(experimentPath).path(id).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
if (cr.getStatus() != 200) {
return null;
} else {
return cr.getEntity(Experiment.class);
}
}
public int getExperimentCount() {
ClientResponse cr = webResource.path(experimentPath).path("count").accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
if (200 <= cr.getStatus() && cr.getStatus() < 300) {
return Integer.valueOf(cr.getEntity(String.class));
} else {
return 0;
}
}
public Integer getMaxExperimentId() {
String max = webResource.path(experimentPath).path("max").accept(MediaType.TEXT_PLAIN).get(String.class);
if (max == null || max.equals("null")) {
return null;
} else {
return Integer.parseInt(max);
}
}
public void close() {
client.destroy();
}
public static void main(String args[]) {
StatsRestClient c = new StatsRestClient("http://127.0.0.1:8080/video");
// Stats s1 = new Stats(4, 1, false);
// s1.setNatType(VodAddress.NatType.NAT);
// ClientResponse cr1 = c.createStats(s1);
// System.out.println(cr1);
// if (cr1.getClientResponseStatus().getFamily().equals(ClientResponse.Status.fromStatusCode(200).getFamily())) {
// // OK
// } else {
// // ?
// }
Experiment e = new Experiment(0);
e.setArguments("test-args");
e.setIterations((short) 1);
e.setScenario("test-scenario");
e.setEndTs(Date.valueOf("2038-01-19"));
e.setStatus(Experiment.Status.opened);
System.out.println(c.createExperiment(e));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(StatsRestClient.class.getName()).log(Level.SEVERE, null, ex);
}
e.setStatus(Experiment.Status.finished);
e.setEndTs(null);
System.out.println(c.editExperiment(e));
System.out.println("Stats count: " + c.getStatsCount());
System.out.println("Experiment count: " + c.getExperimentCount());
c.close();
}
}