strolch-plc/plc-rest/src/main/java/li/strolch/plc/rest/PlcConnectionsResource.java

72 lines
2.6 KiB
Java

package li.strolch.plc.rest;
import static li.strolch.plc.rest.PlcModelVisitor.plcConnectionToJson;
import com.google.gson.JsonObject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import li.strolch.model.Tags;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.plc.core.search.PlcConnectionSearch;
import li.strolch.plc.core.service.SetPlcConnectionStateService;
import li.strolch.privilege.model.Certificate;
import li.strolch.rest.RestfulStrolchComponent;
import li.strolch.rest.StrolchRestfulConstants;
import li.strolch.rest.helper.ResponseUtil;
import li.strolch.service.StringMapArgument;
import li.strolch.service.api.ServiceHandler;
import li.strolch.service.api.ServiceResult;
import li.strolch.utils.collections.Paging;
@Path("plc/connections")
public class PlcConnectionsResource {
private static String getContext() {
StackTraceElement element = new Throwable().getStackTrace()[1];
return element.getClassName() + "." + element.getMethodName();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getConnections(@Context HttpServletRequest request, @QueryParam("query") String query,
@QueryParam("offset") @DefaultValue("0") int offset, @QueryParam("limit") @DefaultValue("20") int limit) {
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
Paging<JsonObject> paging;
try (StrolchTransaction tx = RestfulStrolchComponent.getInstance().openTx(cert, getContext())) {
paging = new PlcConnectionSearch() //
.stringQuery(query) //
.search(tx) //
.orderByName() //
.visitor(plcConnectionToJson()) //
.toPaging(offset, limit);
}
return ResponseUtil.toResponse(paging);
}
@PUT
@Path("{id}/state/{state}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response setState(@Context HttpServletRequest request, @PathParam("id") String id,
@PathParam("state") String state) {
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
SetPlcConnectionStateService svc = new SetPlcConnectionStateService();
StringMapArgument arg = svc.getArgumentInstance();
arg.map.put(Tags.Json.ID, id);
arg.map.put(Tags.Json.STATE, state);
// call service
ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getServiceHandler();
ServiceResult svcResult = svcHandler.doService(cert, svc, arg);
return ResponseUtil.toResponse(svcResult);
}
}