/******************************************************************************* * Copyright 2017 Graz University of Technology * EAAF-Core Components has been developed in a cooperation between EGIZ, * A-SIT+, A-SIT, and Graz University of Technology. * * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * https://joinup.ec.europa.eu/news/understanding-eupl-v12 * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. *******************************************************************************/ /******************************************************************************* *******************************************************************************/ /******************************************************************************* *******************************************************************************/ package at.gv.egiz.eaaf.core.impl.idp.controller; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.text.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import at.gv.egiz.eaaf.core.api.IRequest; import at.gv.egiz.eaaf.core.api.IStatusMessenger; import at.gv.egiz.eaaf.core.api.data.EAAFConstants; import at.gv.egiz.eaaf.core.api.idp.process.ProcessEngine; import at.gv.egiz.eaaf.core.exceptions.EAAFException; import at.gv.egiz.eaaf.core.exceptions.EAAFIllegalStateException; import at.gv.egiz.eaaf.core.impl.utils.TransactionIDUtils; /** * Servlet that resumes a suspended process (in case of asynchronous tasks). * * @author tknall * */ public abstract class AbstractProcessEngineSignalController extends AbstractController { private static final Logger log = LoggerFactory.getLogger(AbstractProcessEngineSignalController.class); @Autowired protected ProcessEngine processEngine; protected void signalProcessManagement(HttpServletRequest req, HttpServletResponse resp) throws IOException { String pendingRequestID = StringEscapeUtils.escapeHtml4(getPendingRequestId(req)); IRequest pendingReq = null; try { if (pendingRequestID == null) { new EAAFException( IStatusMessenger.CODES_INTERNAL_ERROR_AUTH_NOPENDIGREQID, null); } pendingReq = requestStorage.getPendingRequest(pendingRequestID); if (pendingReq == null) { log.info("No PendingRequest with Id: " + pendingRequestID + " Maybe, a transaction timeout occure."); throw new EAAFException(IStatusMessenger.CODES_INTERNAL_ERROR_AUTH_TIMEOUT, new Object[]{pendingRequestID}); } //change pending-request ID requestStorage.changePendingRequestID(pendingReq); pendingRequestID = pendingReq.getPendingRequestId(); // process instance is mandatory if (pendingReq.getProcessInstanceId() == null) { throw new EAAFIllegalStateException(new Object[]{"MOA session does not provide process instance id."}); } // wake up next task processEngine.signal(pendingReq); } catch (Exception ex) { handleError(null, ex, req, resp, pendingReq); } finally { //MOASessionDBUtils.closeSession(); TransactionIDUtils.removeAllLoggingVariables(); } } /** * Retrieves the current pending-request id from the HttpServletRequest parameter * *

* Note that this class/method can be overwritten by modules providing their own strategy of retrieving the * respective pending-request id. * * @param request * The unterlying HttpServletRequest. * @return The current pending-request id. */ public String getPendingRequestId(HttpServletRequest request) { return StringEscapeUtils.escapeHtml4(request.getParameter(EAAFConstants.PARAM_HTTP_TARGET_PENDINGREQUESTID)); } }