strolch-maven-archetypes/strolch.mvn.archetype.plc/src/main/resources/archetype-resources/__rootArtifactId__-web/src/main/java/server/web/rest/ShopFloorResource.java

67 lines
2.4 KiB
Java

package ${package}.server.web.rest;
import static ${package}.plc.shared.SharedPlcConstants.ROLE_SHOP_FLOOR;
import static ${package}.server.web.json.JsonVisitors.shopFloorToJson;
import static li.strolch.model.Tags.Json.DATA;
import static li.strolch.plc.model.PlcConstants.PARAM_PLC_ID;
import static li.strolch.rest.StrolchRestfulConstants.STROLCH_CERTIFICATE;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import ${package}.server.web.service.ShopFloorActionService;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.privilege.model.Certificate;
import li.strolch.rest.RestfulStrolchComponent;
import li.strolch.rest.helper.ResponseUtil;
import li.strolch.service.JsonServiceArgument;
import li.strolch.service.api.ServiceHandler;
@Path("shopFloor")
public class ShopFloorResource {
private static String getContext() {
StackTraceElement element = new Throwable().getStackTrace()[2];
return element.getClassName() + "." + element.getMethodName();
}
private StrolchTransaction openTx(Certificate certificate) {
return RestfulStrolchComponent.getInstance().openTx(certificate, getContext());
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getState(@Context HttpServletRequest request) {
Certificate cert = (Certificate) request.getAttribute(STROLCH_CERTIFICATE);
try (StrolchTransaction tx = openTx(cert)) {
tx.assertHasRole(ROLE_SHOP_FLOOR);
return ResponseUtil.toResponse(DATA, shopFloorToJson(tx));
}
}
@PUT
@Path("action")
@Consumes(MediaType.APPLICATION_JSON)
public Response doAction(@Context HttpServletRequest request, String data) {
Certificate cert = (Certificate) request.getAttribute(STROLCH_CERTIFICATE);
JsonObject jsonObject = JsonParser.parseString(data).getAsJsonObject();
try (StrolchTransaction tx = openTx(cert)) {
jsonObject.addProperty(PARAM_PLC_ID, tx.getConfiguration().getString(PARAM_PLC_ID));
}
ShopFloorActionService svc = new ShopFloorActionService();
JsonServiceArgument arg = svc.getArgumentInstance();
arg.jsonElement = jsonObject;
ServiceHandler svcHandler = RestfulStrolchComponent.getInstance().getServiceHandler();
return ResponseUtil.toResponse(svcHandler.doService(cert, svc, arg));
}
}