/**
* Copyright (C) 2012 BonitaSoft S.A.
* BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.forms.server.accessor.api;
import java.io.Serializable;
import java.util.Map;
import org.bonitasoft.console.common.server.utils.BPMExpressionEvaluationException;
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.api.ProcessRuntimeAPI;
import org.bonitasoft.engine.expression.Expression;
import org.bonitasoft.engine.expression.ExpressionEvaluationException;
import org.bonitasoft.forms.server.accessor.widget.impl.XMLExpressionsUtil;
import org.bonitasoft.forms.server.api.impl.util.FormFieldValuesUtil;
/**
* @author Colin PUY
*
*/
public class ExpressionEvaluatorEngineClient {
private ProcessAPI processApi;
public ExpressionEvaluatorEngineClient(ProcessAPI processApi) {
this.processApi = processApi;
}
public Map<String, Serializable> evaluateExpressionsOnActivityInstance(long activityInstanceID,
Map<Expression, Map<String, Serializable>> expressionsWithContext) throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionsOnActivityInstance(activityInstanceID, expressionsWithContext);
} catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on activity instance " + activityInstanceID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
public Map<String, Serializable> evaluateExpressionsOnProcessInstance(long processInstanceID, Map<Expression, Map<String, Serializable>> expressions)
throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionsOnProcessInstance(processInstanceID, expressions);
} catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on process instance " + processInstanceID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
public Map<String, Serializable> evaluateExpressionsOnProcessDefinition(long processDefinitionID,
Map<Expression, Map<String, Serializable>> expressions) throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionsOnProcessDefinition(processDefinitionID, expressions);
} catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on process definition " + processDefinitionID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
public Map<String, Serializable> evaluateExpressionsOnCompletedActivityInstance(long activityInstanceID,
Map<Expression, Map<String, Serializable>> expressions) throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionsOnCompletedActivityInstance(activityInstanceID, expressions);
} catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on completed activity instance " + activityInstanceID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
public Map<String, Serializable> evaluateExpressionsOnCompletedProcessInstance(long processInstanceID,
Map<Expression, Map<String, Serializable>> expressions) throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionOnCompletedProcessInstance(processInstanceID, expressions);
} catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on completed process instance " + processInstanceID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
public Map<String, Serializable> evaluateExpressionsAtProcessInstanciation(long processInstanceID,
Map<Expression, Map<String, Serializable>> expressions) throws BPMExpressionEvaluationException {
try {
return getProcessAPI().evaluateExpressionsAtProcessInstanciation(processInstanceID, expressions);
}catch (ExpressionEvaluationException e) {
throw new BPMExpressionEvaluationException("Error when evaluating expressions on completed process instance " + processInstanceID + ". " + buildEvaluationMessageLogDetail(e), e);
}
}
private ProcessRuntimeAPI getProcessAPI() {
return processApi;
}
private String buildEvaluationMessageLogDetail(final ExpressionEvaluationException e) {
String[] splitExpressionName = null;
String expressionParentName = "unknown";
String expressionParentAttribute = "unknown";
if(e.getExpressionName()!=null){
splitExpressionName = e.getExpressionName().split(FormFieldValuesUtil.EXPRESSION_KEY_SEPARATOR);
if(splitExpressionName.length==2){
expressionParentName = splitExpressionName[0];
expressionParentAttribute = splitExpressionName[1];
return "Error on expression evaluation for the attribute ["+ expressionParentAttribute +"] of object ["+ expressionParentName +"].";
}
}
return "Error on expression evaluation for the expression with name ["+ e.getExpressionName() +"].";
}
}