package org.bonitasoft.web.rest.server.api.bpm.cases; import org.bonitasoft.engine.api.ProcessAPI; import org.bonitasoft.engine.bpm.process.ProcessInstanceNotFoundException; import org.bonitasoft.engine.expression.ExpressionEvaluationException; import org.bonitasoft.web.rest.server.FinderFactory; import org.bonitasoft.web.rest.server.api.resource.CommonResource; import org.bonitasoft.web.toolkit.client.common.exception.api.APIException; import org.restlet.resource.Get; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** * Created by Fabio Lombardi */ public class ArchivedCaseContextResource extends CommonResource { static final String ARCHIVED_CASE_ID = "archivedCaseId"; private final ProcessAPI processAPI; private FinderFactory resourceHandler; public ArchivedCaseContextResource (final ProcessAPI processAPI, FinderFactory resourceHandler) { this.processAPI = processAPI; this.resourceHandler = resourceHandler; } @Get("json") public Map<String, Serializable> getArchivedCaseContext() throws ExpressionEvaluationException, ProcessInstanceNotFoundException { final Map<String, Serializable> resultMap = new HashMap<String, Serializable>(); Map<String, Serializable> caseExecutionContext = processAPI.getArchivedProcessInstanceExecutionContext(getArchivedCaseIdParameter()); for (Map.Entry<String, Serializable> caseContextElement : caseExecutionContext.entrySet()) { resultMap.put(caseContextElement.getKey(), getContextResultElement(caseContextElement.getValue())); } return resultMap; } private Serializable getContextResultElement(Serializable executionContextElementValue) { return resourceHandler.getContextResultElement(executionContextElementValue); } protected long getArchivedCaseIdParameter() { final String caseId = getAttribute(ARCHIVED_CASE_ID); if (caseId == null) { throw new APIException("Attribute '" + ARCHIVED_CASE_ID + "' is mandatory in order to get the archived case context"); } return Long.parseLong(caseId); } }