Loading vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java +20 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package it.inaf.ia2.vospace.ui.client; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.aa.data.User; import it.inaf.ia2.vospace.ui.VOSpaceUiApplication; import it.inaf.ia2.vospace.ui.data.Job; import it.inaf.ia2.vospace.ui.exception.VOSpaceException; import java.io.IOException; import java.io.InputStream; Loading @@ -14,15 +15,19 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.concurrent.CompletionException; import java.util.concurrent.ForkJoinPool; import java.util.function.Function; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.xml.bind.JAXB; import net.ivoa.xml.uws.v1.JobSummary; import net.ivoa.xml.uws.v1.Jobs; import net.ivoa.xml.uws.v1.ShortJobDescription; import net.ivoa.xml.vospace.v2.Node; import net.ivoa.xml.vospace.v2.Protocol; import net.ivoa.xml.vospace.v2.Transfer; Loading Loading @@ -111,6 +116,21 @@ public class VOSpaceClient { return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class)); } public List<Job> getJobs() { HttpRequest request = getRequest("/transfers?direction=pullToVoSpace") .header("Accept", useJson ? "application/json" : "text/xml") .header("Content-Type", useJson ? "application/json" : "text/xml") .GET() .build(); return call(request, BodyHandlers.ofInputStream(), 200, res -> { return unmarshal(res, Jobs.class).getJobref().stream() .map(jobDesc -> new Job(jobDesc)) .collect(Collectors.toList()); }); } private <T, U> U call(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, int expectedStatusCode, Function<T, U> responseHandler) { try { return httpClient.sendAsync(request, responseBodyHandler) Loading vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java +1 −2 Original line number Diff line number Diff line Loading @@ -158,7 +158,6 @@ public class JobController extends BaseController { @GetMapping(value = "/jobs", produces = MediaType.APPLICATION_JSON_VALUE) public List<Job> getJobs() { // TODO return new ArrayList<>(); return client.getJobs(); } } vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java +24 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.data; import java.text.SimpleDateFormat; import javax.xml.datatype.XMLGregorianCalendar; import net.ivoa.xml.uws.v1.ExecutionPhase; import net.ivoa.xml.uws.v1.JobSummary; import net.ivoa.xml.uws.v1.ShortJobDescription; public class Job { private String id; private String creationTime; private ExecutionPhase phase; private boolean read; Loading @@ -14,9 +18,21 @@ public class Job { public Job(JobSummary job) { this.id = job.getJobId(); this.creationTime = formatCreationTime(job.getCreationTime()); this.phase = job.getPhase(); } public Job(ShortJobDescription job) { this.id = job.getId(); this.creationTime = formatCreationTime(job.getCreationTime()); this.phase = job.getPhase(); } private String formatCreationTime(XMLGregorianCalendar calendar) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(calendar.toGregorianCalendar().getTime()); } public String getId() { return id; } Loading @@ -25,6 +41,14 @@ public class Job { this.id = id; } public String getCreationTime() { return creationTime; } public void setCreationTime(String creationTime) { this.creationTime = creationTime; } public ExecutionPhase getPhase() { return phase; } Loading vospace-ui-frontend/src/components/Jobs.vue +19 −14 Original line number Diff line number Diff line <template> <div> <h3>Async recall jobs</h3> <table class="table b-table table-striped table-hover"> <thead> <tr> <th>Creation time</th> <th>Id</th> <th>Status</th> <th>Phase</th> </tr> </thead> <tbody> <tr v-for="job in jobs" :key="job.id"> <td>{{job.creationTime}}</td> <td>{{job.id}}</td> <td>{{job.status}}</td> <td>{{job.phase}}</td> </tr> </tbody> </table> </div> </template> <script> Loading Loading
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java +20 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package it.inaf.ia2.vospace.ui.client; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.aa.data.User; import it.inaf.ia2.vospace.ui.VOSpaceUiApplication; import it.inaf.ia2.vospace.ui.data.Job; import it.inaf.ia2.vospace.ui.exception.VOSpaceException; import java.io.IOException; import java.io.InputStream; Loading @@ -14,15 +15,19 @@ import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.concurrent.CompletionException; import java.util.concurrent.ForkJoinPool; import java.util.function.Function; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.xml.bind.JAXB; import net.ivoa.xml.uws.v1.JobSummary; import net.ivoa.xml.uws.v1.Jobs; import net.ivoa.xml.uws.v1.ShortJobDescription; import net.ivoa.xml.vospace.v2.Node; import net.ivoa.xml.vospace.v2.Protocol; import net.ivoa.xml.vospace.v2.Transfer; Loading Loading @@ -111,6 +116,21 @@ public class VOSpaceClient { return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class)); } public List<Job> getJobs() { HttpRequest request = getRequest("/transfers?direction=pullToVoSpace") .header("Accept", useJson ? "application/json" : "text/xml") .header("Content-Type", useJson ? "application/json" : "text/xml") .GET() .build(); return call(request, BodyHandlers.ofInputStream(), 200, res -> { return unmarshal(res, Jobs.class).getJobref().stream() .map(jobDesc -> new Job(jobDesc)) .collect(Collectors.toList()); }); } private <T, U> U call(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, int expectedStatusCode, Function<T, U> responseHandler) { try { return httpClient.sendAsync(request, responseBodyHandler) Loading
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/JobController.java +1 −2 Original line number Diff line number Diff line Loading @@ -158,7 +158,6 @@ public class JobController extends BaseController { @GetMapping(value = "/jobs", produces = MediaType.APPLICATION_JSON_VALUE) public List<Job> getJobs() { // TODO return new ArrayList<>(); return client.getJobs(); } }
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/Job.java +24 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.data; import java.text.SimpleDateFormat; import javax.xml.datatype.XMLGregorianCalendar; import net.ivoa.xml.uws.v1.ExecutionPhase; import net.ivoa.xml.uws.v1.JobSummary; import net.ivoa.xml.uws.v1.ShortJobDescription; public class Job { private String id; private String creationTime; private ExecutionPhase phase; private boolean read; Loading @@ -14,9 +18,21 @@ public class Job { public Job(JobSummary job) { this.id = job.getJobId(); this.creationTime = formatCreationTime(job.getCreationTime()); this.phase = job.getPhase(); } public Job(ShortJobDescription job) { this.id = job.getId(); this.creationTime = formatCreationTime(job.getCreationTime()); this.phase = job.getPhase(); } private String formatCreationTime(XMLGregorianCalendar calendar) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(calendar.toGregorianCalendar().getTime()); } public String getId() { return id; } Loading @@ -25,6 +41,14 @@ public class Job { this.id = id; } public String getCreationTime() { return creationTime; } public void setCreationTime(String creationTime) { this.creationTime = creationTime; } public ExecutionPhase getPhase() { return phase; } Loading
vospace-ui-frontend/src/components/Jobs.vue +19 −14 Original line number Diff line number Diff line <template> <div> <h3>Async recall jobs</h3> <table class="table b-table table-striped table-hover"> <thead> <tr> <th>Creation time</th> <th>Id</th> <th>Status</th> <th>Phase</th> </tr> </thead> <tbody> <tr v-for="job in jobs" :key="job.id"> <td>{{job.creationTime}}</td> <td>{{job.id}}</td> <td>{{job.status}}</td> <td>{{job.phase}}</td> </tr> </tbody> </table> </div> </template> <script> Loading