package com.pcee.ws.resource.server; import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import com.graph.elements.edge.EdgeElement; import com.graph.elements.vertex.VertexElement; import com.pcee.architecture.ModuleManagement; import com.pcee.architecture.computationmodule.ted.TopologyInformation; import com.pcee.ws.launcher.PCEEWebLauncher; @Path("/server") public class PCEEServerControlResource { private ModuleManagement serverModuleManagement = PCEEWebLauncher .getServerModuleManagement(); private String topology = PCEEWebLauncher.getTopology(); @GET @Path("/status") @Produces({ MediaType.APPLICATION_JSON }) public Response getStatus() { if (serverModuleManagement == null) return Response .status(400) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); else return Response .ok() .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } @POST @Path("/start") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public Response startServer(String topology) { topology = topology.substring(1, topology.length() - 1); PCEEWebLauncher.setTopology(topology); topology = ".//" + topology + ".txt"; if (serverModuleManagement == null) { PCEEWebLauncher.setServerModuleManagement(new ModuleManagement( topology, true)); return Response .ok() .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } else return Response .status(400) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } @GET @Path("/stop") @Produces({ MediaType.APPLICATION_JSON }) public Response stopServer() { if (serverModuleManagement != null) { // This is not the correct way to stop the server serverModuleManagement.stop(false); PCEEWebLauncher.setServerModuleManagement(null); // /////////////////////////////////// return Response .ok() .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } else return Response .status(400) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } @GET @Path("/topology/nodes") @Produces({ MediaType.APPLICATION_JSON }) public Response getNodes() { double scalingFactor = 1.0; if (this.topology.equals("austria")) scalingFactor = 1.7; List<String> setOfNodes = new ArrayList<String>(); for (VertexElement v : TopologyInformation.getInstance().getGraph() .createCopy().getVertexSet()) { setOfNodes.add(v.getVertexID() + " " + v.getXCoord() * scalingFactor + " " + v.getYCoord() * scalingFactor); } return Response .ok(setOfNodes) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } @GET @Path("/topology/links") @Produces({ MediaType.APPLICATION_JSON }) public Response getLinks() { List<String> setOfLinks = new ArrayList<String>(); for (EdgeElement e : TopologyInformation.getInstance().getGraph() .createCopy().getEdgeSet()) { setOfLinks.add(e.getSourceVertex().getVertexID() + " " + e.getDestinationVertex().getVertexID()); } return Response .ok(setOfLinks) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build(); } }