All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertigo.vega.plugins.webservice.handler.WebServiceCallContext Maven / Gradle / Ivy

The newest version!
/*
 * vertigo - application development platform
 *
 * Copyright (C) 2013-2024, Vertigo.io, [email protected]
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.vertigo.vega.plugins.webservice.handler;

import java.io.Serializable;
import java.util.Map;
import java.util.Optional;

import io.vertigo.core.lang.Assertion;
import io.vertigo.datamodel.data.model.DataObject;
import io.vertigo.datamodel.data.model.DtList;
import io.vertigo.vega.webservice.definitions.WebServiceDefinition;
import io.vertigo.vega.webservice.definitions.WebServiceParam;
import io.vertigo.vega.webservice.model.DtListDelta;
import io.vertigo.vega.webservice.validation.UiContextResolver;
import io.vertigo.vega.webservice.validation.UiMessageStack;
import io.vertigo.vega.webservice.validation.VegaUiMessageStack;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
* @author npiedeloup
*/
public final class WebServiceCallContext {
	private static final String UI_MESSAGE_STACK = "UiMessageStack";
	private final WebServiceDefinition webServiceDefinition;
	private final HttpServletRequest request;
	private final HttpServletResponse response;
	private final WebServiceContext webServiceContext;
	private final UiContextResolver uiContextResolver;

	/**
	 * Constructor.
	 * @param webServiceDefinition WebServiceDefinition
	 */
	public WebServiceCallContext(final WebServiceContext webServiceContext, final WebServiceDefinition webServiceDefinition) {
		request = webServiceContext.getRequest();
		response = webServiceContext.getResponse();
		this.webServiceContext = webServiceContext;
		this.webServiceDefinition = webServiceDefinition;
		uiContextResolver = new UiContextResolver();
		request.setAttribute(UI_MESSAGE_STACK, new VegaUiMessageStack(uiContextResolver));
	}

	/**
	 * @return WebServiceDefinition
	 */
	public WebServiceDefinition getWebServiceDefinition() {
		return webServiceDefinition;
	}

	/**
	 * @return UiMessageStack
	 */
	public UiMessageStack getUiMessageStack() {
		return (UiMessageStack) request.getAttribute(UI_MESSAGE_STACK);
	}

	/**
	 * @return Request
	 */
	public HttpServletRequest getRequest() {
		return request;
	}

	/**
	 * @return Response
	 */
	public HttpServletResponse getResponse() {
		return response;
	}

	/**
	 * Set param of an endpoint.
	 * @param webServiceParam param name
	 * @param value param value
	 */
	public void setParamValue(final WebServiceParam webServiceParam, final Object value) {
		request.setAttribute(webServiceParam.getFullName(), ifOptional(webServiceParam, value));
	}

	/**
	 * Get param of an endpoint.
	 * @param webServiceParam param name
	 * @return param value
	 */
	public Object getParamValue(final WebServiceParam webServiceParam) {
		return request.getAttribute(webServiceParam.getFullName());
	}

	/**
	 * Get path param of an endpoint.
	 * @param webServiceParam param name
	 * @return path param value
	 */
	public String getPathParam(final WebServiceParam webServiceParam) {
		return webServiceContext.getPathParam(webServiceParam.getName());
	}

	public String getBody() {
		return webServiceContext.getBody();
	}

	/**
	 * Register Updated Dtos.
	 * @param webServiceParam param name
	 * @param updatedValue param updatedvalue
	 * @param contextKeyMap Map of elements contextKey
	 */
	public void registerUpdatedDtObjects(final WebServiceParam webServiceParam, final Serializable updatedValue, final Map contextKeyMap) {
		Assertion.check().isTrue(updatedValue instanceof DataObject
				|| updatedValue instanceof DtList
				|| updatedValue instanceof DtListDelta,
				"Context {0} format {1} not supported. Should be a Data, a DtList or a DtListDelta", webServiceParam.getFullName(), updatedValue.getClass().getSimpleName());

		for (final Map.Entry entry : contextKeyMap.entrySet()) {
			uiContextResolver.register(entry.getKey(), entry.getValue());
		}
		request.setAttribute(webServiceParam.getFullName() + "-input", request.getAttribute(webServiceParam.getFullName()));
		request.setAttribute(webServiceParam.getFullName(), ifOptional(webServiceParam, updatedValue));
	}

	private static Object ifOptional(final WebServiceParam webServiceParam, final Object value) {
		return webServiceParam.isOptional()
				? Optional.ofNullable(value)
				: value;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy