/**
*
*/
package net.conselldemallorca.helium.jbpm3.handlers;
import java.util.Calendar;
import java.util.Date;
import net.conselldemallorca.helium.jbpm3.integracio.Jbpm3HeliumBridge;
import net.conselldemallorca.helium.jbpm3.integracio.Termini;
import net.conselldemallorca.helium.v3.core.api.dto.TerminiDto;
import org.jbpm.JbpmException;
import org.jbpm.graph.exe.ExecutionContext;
/**
* Handler per iniciar un termini.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@SuppressWarnings("serial")
public class TerminiIniciarHandler extends AbstractHeliumActionHandler implements TerminiIniciarHandlerInterface {
private String terminiCodi;
private String varTerminiCodi;
private String varData;
private String sumarUnDia;
private String varTermini;
private String esDataFi;
public void execute(ExecutionContext executionContext) throws Exception {
String tercod = (String)getValorOVariable(
executionContext,
terminiCodi,
varTerminiCodi);
TerminiDto termini = getTerminiAmbCodi(executionContext, tercod);
if (termini != null) {
if (varTermini != null) {
Object valorTermini = executionContext.getVariable(varTermini);
if (valorTermini == null)
throw new JbpmException("No s'ha pogut llegir el termini de la variable '" + varTermini + "'");
Termini vt = null;
if (valorTermini instanceof Termini) {
vt = (Termini)valorTermini;
} else {
vt = Termini.valueFromString((String) valorTermini);
}
Jbpm3HeliumBridge.getInstanceService().terminiIniciar(
tercod,
getProcessInstanceId(executionContext),
getDataVariable(executionContext),
vt.getAnys(),
vt.getMesos(),
vt.getDies(),
esDataFi());
} else {
Jbpm3HeliumBridge.getInstanceService().terminiIniciar(
tercod,
getProcessInstanceId(executionContext),
getDataVariable(executionContext),
esDataFi());
}
} else {
throw new JbpmException("No existeix cap termini amb aquest codi '" + terminiCodi + "'");
}
}
public void setTerminiCodi(String terminiCodi) {
this.terminiCodi = terminiCodi;
}
public void setVarTerminiCodi(String varTerminiCodi) {
this.varTerminiCodi = varTerminiCodi;
}
public void setVarData(String varData) {
this.varData = varData;
}
public void setSumarUnDia(String sumarUnDia) {
this.sumarUnDia = sumarUnDia;
}
public void setVarTermini(String varTermini) {
this.varTermini = varTermini;
}
public void setDesdeFi(String desdeFi) {
this.esDataFi = desdeFi;
}
public void setEsDataFi(String esDataFi) {
this.esDataFi = esDataFi;
}
private Date getDataVariable(ExecutionContext executionContext) {
Date data;
if (varData != null && varData.length() > 0) {
data = getVariableComData(executionContext, varData);
} else {
data = new Date();
}
if (!esDataFi() && sumarUnDia != null && sumarUnDia.length() > 0) {
Calendar cal = Calendar.getInstance();
cal.setTime(data);
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
} else {
return data;
}
}
private boolean esDataFi() {
return (esDataFi != null && "true".equalsIgnoreCase(esDataFi));
}
}