com.sap.cds.adapter.rest.CdsRestHandlers Maven / Gradle / Ivy
/**************************************************************************
* (C) 2019-2021 SAP SE or an SAP affiliate company. All rights reserved. *
**************************************************************************/
package com.sap.cds.adapter.rest;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static javax.servlet.http.HttpServletResponse.SC_CREATED;
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import com.sap.cds.Result;
import com.sap.cds.adapter.rest.utils.JsonException;
import com.sap.cds.ql.Delete;
import com.sap.cds.ql.Insert;
import com.sap.cds.ql.Select;
import com.sap.cds.ql.Update;
import com.sap.cds.ql.cqn.CqnDelete;
import com.sap.cds.services.ServiceCatalog;
import com.sap.cds.services.cds.ApplicationService;
import com.sap.cds.services.request.RequestContext;
public class CdsRestHandlers {
private static final EnumMap event2Handler = new EnumMap<>(CdsRestEvent.class);
static {
event2Handler.put(CdsRestEvent.GET, CdsRestHandlers::get);
event2Handler.put(CdsRestEvent.PUT, CdsRestHandlers::put);
event2Handler.put(CdsRestEvent.POST, CdsRestHandlers::post);
event2Handler.put(CdsRestEvent.PATCH, CdsRestHandlers::patch);
event2Handler.put(CdsRestEvent.DELETE, CdsRestHandlers::delete);
}
public static CdsRestHandler getHandler(CdsRestEvent event) {
return event2Handler.get(event);
}
public static CdsRestResponse get(CdsRestRequest request, RequestContext context) {
ApplicationService applicationService = findApplicationService(request, context);
// remove the sap-language query parameter because this is used to set the language for the request
Map clearedQueryParameters = new HashMap<>(request.getQueryParameterMap());
clearedQueryParameters.remove("sap-language");
Result result = applicationService.run( Select.from(request.getEntity()).matching(valueMap(clearedQueryParameters)) );
return new CdsRestResponseImpl(SC_OK, result.toJson());
}
public static CdsRestResponse post(CdsRestRequest request, RequestContext context) {
ApplicationService applicationService = findApplicationService(request, context);
Insert insert;
try {
insert = Insert.into(request.getEntity()).entry(request.getBody().asMap());
} catch (JsonException e) { //NOSONAR
return new CdsRestResponseImpl(SC_BAD_REQUEST, e.getMessage());
}
applicationService.run(insert);
return new CdsRestResponseImpl(SC_CREATED);
}
public static CdsRestResponse put(CdsRestRequest request, RequestContext context) {
ApplicationService applicationService = findApplicationService(request, context);
try {
applicationService.run( Update.entity(request.getEntity()).data(request.getBody().asMap()).matching(valueMap(request.getQueryParameterMap())) );
} catch (JsonException e) { //NOSONAR
return new CdsRestResponseImpl(SC_BAD_REQUEST, e.getMessage());
}
return new CdsRestResponseImpl(SC_OK);
}
public static CdsRestResponse patch(CdsRestRequest request, RequestContext context) {
return put(request, context);
}
public static CdsRestResponse delete(CdsRestRequest request, RequestContext context) {
ApplicationService applicationService = findApplicationService(request, context);
CqnDelete delete = Delete.from(request.getEntity()).matching(valueMap(request.getQueryParameterMap()));
applicationService.run(delete);
return new CdsRestResponseImpl(SC_NO_CONTENT);
}
private static ApplicationService findApplicationService(CdsRestRequest request, RequestContext context) {
ServiceCatalog catalog = context.getServiceCatalog();
return catalog.getService(ApplicationService.class, request.getService());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private static Map valueMap(Map queryParams) {
return (Map)queryParams;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy