/** * */ package net.conselldemallorca.helium.jbpm3.handlers; import java.text.SimpleDateFormat; import java.util.Date; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DocumentInfo; import net.conselldemallorca.helium.jbpm3.integracio.DominiCodiDescripcio; import net.conselldemallorca.helium.jbpm3.integracio.Jbpm3HeliumBridge; import net.conselldemallorca.helium.v3.core.api.dto.ArxiuDto; import net.conselldemallorca.helium.v3.core.api.dto.DefinicioProcesDto; import net.conselldemallorca.helium.v3.core.api.dto.DocumentDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto; import net.conselldemallorca.helium.v3.core.api.dto.TerminiDto; import net.conselldemallorca.helium.v3.core.api.dto.TerminiIniciatDto; import org.jbpm.JbpmException; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; /** * Handler base amb accés a la funcionalitat de Helium * * @author Limit Tecnologies <limit@limit.es> */ @SuppressWarnings("serial") abstract class AbstractHeliumActionHandler implements ActionHandler { public abstract void execute(ExecutionContext executionContext) throws Exception; ExpedientDto getExpedientActual(ExecutionContext executionContext) { ExpedientDto expedient = Jbpm3HeliumBridge.getInstanceService().getExpedientIniciant(); if (expedient == null) { expedient = Jbpm3HeliumBridge.getInstanceService().getExpedientArrelAmbProcessInstanceId( getProcessInstanceId(executionContext)); } return expedient; } ExpedientDto findExpedientAmbMateixTipusINumero( ExecutionContext executionContext, String numero) { ExpedientDto expedient = getExpedientActual(executionContext); return Jbpm3HeliumBridge.getInstanceService().findExpedientAmbMateixTipusINumero( expedient.getEntorn().getId(), expedient.getTipus().getId(), numero); } DefinicioProcesDto getDefinicioProces(ExecutionContext executionContext) { return Jbpm3HeliumBridge.getInstanceService().getDefinicioProcesPerProcessInstanceId( getProcessInstanceId(executionContext)); } TerminiDto getTerminiAmbCodi(ExecutionContext executionContext, String codi) { try { return Jbpm3HeliumBridge.getInstanceService().getTerminiAmbProcessInstanceICodi( getProcessInstanceId(executionContext), codi); } catch (Exception ex) { throw new JbpmException("No s'ha trobat el termini amb codi: " + codi); } } TerminiIniciatDto getTerminiIniciatAmbCodi( ExecutionContext executionContext, String codi) { TerminiDto termini = getTerminiAmbCodi( executionContext, codi); if (termini != null) { return Jbpm3HeliumBridge.getInstanceService().getTerminiIniciatAmbProcessInstanceITerminiCodi( getProcessInstanceId(executionContext), termini.getCodi()); } else { return null; } } DocumentInfo getDocumentInfo( ExecutionContext executionContext, String documentCodi, boolean ambArxiu) { String varCodi = Jbpm3HeliumBridge.getInstanceService().getCodiVariablePerDocumentCodi(documentCodi); Object valor = executionContext.getVariable(varCodi); if (valor == null) return null; if (valor instanceof Long) { Long id = (Long) valor; DocumentDto document = Jbpm3HeliumBridge.getInstanceService().getDocumentInfo(id); if (document == null) return null; DocumentInfo resposta = new DocumentInfo(); resposta.setId(id); if (document.isAdjunt()) { resposta.setTitol(document.getAdjuntTitol()); } else { resposta.setTitol(document.getDocumentNom()); } resposta.setDataCreacio(document.getDataCreacio()); resposta.setDataDocument(document.getDataDocument()); resposta.setSignat(document.isSignat()); if (document.isRegistrat()) { resposta.setRegistrat(true); resposta.setRegistreNumero(document.getRegistreNumero()); resposta.setRegistreData(document.getRegistreData()); resposta.setRegistreOficinaCodi(document.getRegistreOficinaCodi()); resposta.setRegistreOficinaNom(document.getRegistreOficinaNom()); resposta.setRegistreEntrada(document.isRegistreEntrada()); } if (ambArxiu) { ArxiuDto arxiu = Jbpm3HeliumBridge.getInstanceService().getArxiuPerMostrar(id); resposta.setArxiuNom(arxiu.getNom()); resposta.setArxiuContingut(arxiu.getContingut()); } return resposta; } else { throw new JbpmException("La referencia al document \"" + documentCodi + "\" no es del tipus correcte"); } } protected String getProcessInstanceId(ExecutionContext executionContext) { return new Long(executionContext.getProcessInstance().getId()).toString(); } protected Date getVariableComData(ExecutionContext executionContext, String var) { Object obj = executionContext.getVariable(var); if (obj instanceof Date) return (Date) obj; throw new JbpmException("La variable amb el codi '" + var + "' no és de tipus Date"); } protected Object getValorOVariable(ExecutionContext executionContext, Object value, String var) { if (value != null) return value; if (var != null && var.length() > 0) { Object returnVal; if (executionContext.getVariable(var) instanceof DominiCodiDescripcio) returnVal = ((DominiCodiDescripcio)executionContext.getVariable(var)).getCodi(); else returnVal = executionContext.getVariable(var); return returnVal; } return null; } protected Date getValorOVariableData(ExecutionContext executionContext, Object value, String var) { if (value != null) { if (value instanceof Date) { return (Date) value; } else { try { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); return sdf.parse(value.toString()); } catch (Exception ignored) { } } } if (var != null && var.length() > 0) { Object valor = executionContext.getVariable(var); if (valor != null) { if (valor instanceof Date) { return (Date) valor; } else { try { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); return sdf.parse(valor.toString()); } catch (Exception ignored) { } } } } return null; } protected Integer getValorOVariableInteger( ExecutionContext executionContext, Object value, String var) { if (value != null) { if (value instanceof Integer) { return (Integer) value; } else { return new Integer(value.toString()); } } if (var != null && var.length() > 0) { Object valor = executionContext.getVariable(var); if (valor != null) { if (valor instanceof Integer) { return (Integer) valor; } else { return new Integer(valor.toString()); } } } return null; } }