package de.twenty11.skysail.server.ext.jenkins;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.restlet.data.Form;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import de.twenty11.skysail.common.Presentation;
import de.twenty11.skysail.common.PresentationStyle;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.core.restlet.ListServerResource2;
import de.twenty11.skysail.server.ext.jenkins.internal.MyApplication;
@Presentation(preferred = PresentationStyle.TABLE)
public class JobsResource extends ListServerResource2<JobsDetails> {
private String installationName;
private final ObjectMapper mapper = new ObjectMapper();
public JobsResource() {
setName("jenkins installations");
}
@Override
protected void doInit() throws ResourceException {
installationName = (String) getRequest().getAttributes().get("name");
setDescription("list of all jobs of jenkins installation " + installationName);
}
@Override
@Get("html|json|csv|pdf")
public SkysailResponse<List<JobsDetails>> getEntities() {
return super.getEntities("all jobs from jenkins installation " + installationName);
}
@Override
protected List<JobsDetails> getData() {
MyApplication app = (MyApplication) getApplication();
EntityManager em = app.getEntityManager();
Query query = em.createQuery("SELECT c FROM JenkinsDetails c WHERE c.name = :name");
query.setParameter("name", installationName);
JenkinsDetails jenkinsDetails = (JenkinsDetails) query.getSingleResult();
String jenkinsLocation = jenkinsDetails.getLocation();
String jobUrl = jenkinsLocation + "api/json";
try {
List<JobsDetails> results = new ArrayList<JobsDetails>();
JsonNode jsonRootNode = mapper.readTree(new URL(jobUrl));
JsonNode jobs = jsonRootNode.path("jobs");
Iterator<JsonNode> ite = jobs.getElements();
while (ite.hasNext()) {
JsonNode next = ite.next();
results.add(new JobsDetails(next.path("name").getTextValue(), next.path("url").getTextValue(), next
.path("color").getTextValue()));
}
return results;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
@Override
public JobsDetails getData(Form form) {
// TODO Auto-generated method stub
return null;
}
@Override
public SkysailResponse<?> addEntity(JobsDetails entity) {
// TODO Auto-generated method stub
return null;
}
}