/** * */ package net.conselldemallorca.helium.jbpm3.handlers; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import net.conselldemallorca.helium.jbpm3.handlers.exception.ValidationException; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DadesRegistreEntrada; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DadesRegistreNotificacio; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DadesRegistreSortida; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DocumentDisseny; import net.conselldemallorca.helium.jbpm3.handlers.tipus.DocumentInfo; import net.conselldemallorca.helium.jbpm3.handlers.tipus.ExpedientInfo; import net.conselldemallorca.helium.jbpm3.handlers.tipus.FilaResultat; import net.conselldemallorca.helium.jbpm3.handlers.tipus.ParellaCodiValor; import net.conselldemallorca.helium.jbpm3.handlers.tipus.ReferenciaRDSJustificante; import net.conselldemallorca.helium.jbpm3.handlers.tipus.RespostaRegistre; import net.conselldemallorca.helium.jbpm3.handlers.tipus.Tramit; import net.conselldemallorca.helium.jbpm3.helper.ConversioTipusHelper; import net.conselldemallorca.helium.jbpm3.integracio.DominiCodiDescripcio; import net.conselldemallorca.helium.jbpm3.integracio.Jbpm3HeliumBridge; import net.conselldemallorca.helium.jbpm3.integracio.Termini; 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.DocumentDissenyDto; import net.conselldemallorca.helium.v3.core.api.dto.DominiRespostaColumnaDto; import net.conselldemallorca.helium.v3.core.api.dto.DominiRespostaFilaDto; import net.conselldemallorca.helium.v3.core.api.dto.EnumeracioValorDto; import net.conselldemallorca.helium.v3.core.api.dto.EstatDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDadaDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto; import net.conselldemallorca.helium.v3.core.api.dto.RegistreAnnexDto; import net.conselldemallorca.helium.v3.core.api.dto.RegistreAnotacioDto; import net.conselldemallorca.helium.v3.core.api.dto.RegistreIdDto; import net.conselldemallorca.helium.v3.core.api.dto.RegistreNotificacioDto; import net.conselldemallorca.helium.v3.core.api.dto.RespostaJustificantDetallRecepcioDto; import net.conselldemallorca.helium.v3.core.api.dto.RespostaJustificantRecepcioDto; import org.jbpm.JbpmException; import org.jbpm.context.exe.ContextInstance; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.Token; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; /** * Handler que pot servir com a base per als handlers que s'hagin * d'implementar a dins les definicions de procés. * * @author Limit Tecnologies <limit@limit.es> */ public abstract class BasicActionHandler extends AbstractHeliumActionHandler implements ActionHandler { public static final String PARAMS_RETROCEDIR_VARIABLE_PREFIX = "H3l1um#params.retroces."; public static final String PARAMS_RETROCEDIR_SEPARADOR = "#@#"; public abstract void execute(ExecutionContext executionContext) throws Exception; /** * Retorna l'expedient associat al procés actual * * @param executionContext * @return */ public ExpedientInfo getExpedient(ExecutionContext executionContext) { return ConversioTipusHelper.toExpedientInfo(getExpedientActual(executionContext)); } /** * Llança un error de validació * * @param error descripció de l'error */ public void errorValidacio(String error) { throw new ValidationException(error); } /** * Realitza una consulta a un domini * * @param executionContext * @param codiDomini * @param parametres * @return */ public List<FilaResultat> consultaDomini( ExecutionContext executionContext, String codiDomini, String id, Map<String, Object> parametres) { List<FilaResultat> resposta = new ArrayList<FilaResultat>(); List<DominiRespostaFilaDto> files = Jbpm3HeliumBridge.getInstanceService().dominiConsultar( getProcessInstanceId(executionContext), codiDomini, id, parametres); if (files != null) { for (DominiRespostaFilaDto fila: files) { FilaResultat fres = new FilaResultat(); for (DominiRespostaColumnaDto columna: fila.getColumnes()) { fres.addColumna( new ParellaCodiValor( columna.getCodi(), columna.getValor())); } resposta.add(fres); } } return resposta; } /** * Retorna tots els valors d'una enumeració * * @param executionContext * @param codiEnumeracio * @return */ public List<ParellaCodiValor> consultaEnumeracio( ExecutionContext executionContext, String codiEnumeracio) { List<ParellaCodiValor> resposta = new ArrayList<ParellaCodiValor>(); List<EnumeracioValorDto> valors = Jbpm3HeliumBridge.getInstanceService().enumeracioConsultar( getProcessInstanceId(executionContext), codiEnumeracio); if (valors != null) { for (EnumeracioValorDto valor: valors) { resposta.add( new ParellaCodiValor( valor.getCodi(), valor.getNom())); } } return resposta; } /** * Retorna el resultat d'una consulta d'expedients * * @param executionContext * @param titol * @param numero * @param dataInici1 * @param dataInici2 * @param expedientTipusCodi * @param estatCodi * @param iniciat * @param finalitzat * @return */ public List<ExpedientInfo> consultaExpedients( ExecutionContext executionContext, String titol, String numero, Date dataInici1, Date dataInici2, String expedientTipusCodi, String estatCodi, boolean iniciat, boolean finalitzat) { try { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null) { ExpedientDto expedient = getExpedientActual(executionContext); EstatDto estat = Jbpm3HeliumBridge.getInstanceService().findEstatAmbEntornIExpedientTipusICodi( expedient.getEntorn().getId(), expedientTipusCodi, estatCodi); // Consulta d'expedients List<ExpedientDto> resultats = Jbpm3HeliumBridge.getInstanceService().findExpedientsConsultaGeneral( expedient.getEntorn().getId(), titol, numero, dataInici1, dataInici2, expedient.getTipus().getId(), estat == null ? null : estat.getId(), iniciat, finalitzat); // Construcció de la resposta List<ExpedientInfo> resposta = new ArrayList<ExpedientInfo>(); for (ExpedientDto dto: resultats) resposta.add(ConversioTipusHelper.toExpedientInfo(dto)); return resposta; } else { throw new JbpmException("No hi ha usuari autenticat"); } } catch (Exception ex) { throw new JbpmException("Error en la consulta d'expedients", ex); } } /** * Obté el document al que fa referència una variable * * @param executionContext * @param varDocument * @return */ public DocumentInfo getDocument( ExecutionContext executionContext, String documentCodi) { return getDocumentInfo( executionContext, documentCodi, true); } /** * Obté la informació de disseny del document * * @param executionContext * @param codiDocument * @return */ public DocumentDisseny getDocumentDisseny( ExecutionContext executionContext, String codiDocument) { DefinicioProcesDto definicioProces = getDefinicioProces(executionContext); DocumentDissenyDto document = Jbpm3HeliumBridge.getInstanceService().getDocumentDisseny( definicioProces.getId(), codiDocument); if (document == null) return null; DocumentDisseny resposta = new DocumentDisseny(); resposta.setId(document.getId()); resposta.setCodi(document.getCodi()); resposta.setNom(document.getNom()); resposta.setDescripcio(document.getDescripcio()); resposta.setPlantilla(document.isPlantilla()); resposta.setContentType(document.getContentType()); resposta.setCustodiaCodi(document.getCustodiaCodi()); resposta.setTipusDocPortasignatures(document.getTipusDocPortasignatures()); return resposta; } /** * Enllaça un document d'una instancia de procés pare. Si el document * no existeix no el copia i no produeix cap error. * * @param executionContext * @param codiDocument */ public void crearReferenciaDocumentInstanciaProcesPare( ExecutionContext executionContext, String varDocument) { Token tokenPare = executionContext.getProcessInstance().getRootToken().getParent(); if (tokenPare != null) { String varCodi = Jbpm3HeliumBridge.getInstanceService().getCodiVariablePerDocumentCodi(varDocument); Object valor = tokenPare.getProcessInstance().getContextInstance().getVariable(varCodi); if (valor != null) { if (valor instanceof Long) { long lv = ((Long)valor).longValue(); executionContext.setVariable(varCodi, new Long(-lv)); } else { throw new JbpmException("El contingut del document '" + varDocument + "' no és del tipus correcte"); } } } else { throw new JbpmException("Aquesta instància de procés no té pare"); } } /** * Envia un email amb possibilitat d'adjuntar documents de l'expedient. * * @param recipients * @param ccRecipients * @param bccRecipients * @param subject * @param text * @param attachments */ public void enviarEmail( List<String> recipients, List<String> ccRecipients, List<String> bccRecipients, String subject, String text, List<Long> attachments) { try { List<ArxiuDto> documents = null; if (attachments != null) { documents = new ArrayList<ArxiuDto>(); for (Long id: attachments) { ArxiuDto arxiu = Jbpm3HeliumBridge.getInstanceService().getArxiuPerMostrar(id); if (arxiu != null) documents.add(arxiu); } } Jbpm3HeliumBridge.getInstanceService().emailSend( Jbpm3HeliumBridge.getInstanceService().getHeliumProperty("app.correu.remitent"), recipients, ccRecipients, bccRecipients, subject, text, documents); } catch (Exception ex) { throw new JbpmException("No s'ha pogut enviar el missatge", ex); } } /** * Registra un document d'entrada * * @param dadesRegistre * @param executionContext * @return */ public RespostaRegistre registreEntrada( ExecutionContext executionContext, DadesRegistreEntrada dadesEntrada, List<DocumentInfo> documentsEntrada) { RegistreAnotacioDto anotacio = new RegistreAnotacioDto(); anotacio.setOrganCodi(dadesEntrada.getOrganCodi()); anotacio.setOficinaCodi(dadesEntrada.getOficinaCodi()); anotacio.setEntitatCodi(dadesEntrada.getInteressatEntitatCodi()); anotacio.setUnitatAdministrativa(dadesEntrada.getAnotacioUnitatAdministrativa()); anotacio.setInteressatAutenticat(true); anotacio.setInteressatNif(dadesEntrada.getInteressatNif()); anotacio.setInteressatNomAmbCognoms(dadesEntrada.getInteressatNomAmbCognoms()); anotacio.setInteressatPaisCodi(dadesEntrada.getInteressatPaisCodi()); anotacio.setInteressatPaisNom(dadesEntrada.getInteressatPaisNom()); anotacio.setInteressatProvinciaCodi(dadesEntrada.getInteressatProvinciaCodi()); anotacio.setInteressatProvinciaNom(dadesEntrada.getInteressatProvinciaNom()); anotacio.setInteressatMunicipiCodi(dadesEntrada.getInteressatMunicipiCodi()); anotacio.setInteressatMunicipiNom(dadesEntrada.getInteressatMunicipiNom()); anotacio.setRepresentatNif(dadesEntrada.getRepresentatNif()); anotacio.setRepresentatNomAmbCognoms(dadesEntrada.getRepresentatNomAmbCognoms()); anotacio.setAssumpteIdiomaCodi(dadesEntrada.getAnotacioIdiomaCodi()); anotacio.setAssumpteTipus(dadesEntrada.getAnotacioTipusAssumpte()); anotacio.setAssumpteExtracte(dadesEntrada.getAnotacioAssumpte()); List<RegistreAnnexDto> annexos = new ArrayList<RegistreAnnexDto>(); for (DocumentInfo document: documentsEntrada) { RegistreAnnexDto annex = new RegistreAnnexDto(); annex.setNom(document.getTitol()); annex.setData(document.getDataDocument()); annex.setIdiomaCodi("ca"); annex.setArxiuNom(document.getArxiuNom()); annex.setArxiuContingut(document.getArxiuContingut()); annexos.add(annex); } anotacio.setAnnexos(annexos); RegistreIdDto anotacioId = Jbpm3HeliumBridge.getInstanceService().registreAnotacioEntrada(anotacio,executionContext.getProcessInstance().getExpedient().getId()); RespostaRegistre resposta = new RespostaRegistre(); resposta.setNumero(anotacioId.getNumero()); resposta.setData(anotacioId.getData()); return resposta; } /** * Registra un document de sortida * * @param dadesRegistre * @param executionContext * @return */ public RespostaRegistre registreSortida( ExecutionContext executionContext, DadesRegistreSortida dadesSortida, List<DocumentInfo> documentsSortida) { RegistreAnotacioDto anotacio = new RegistreAnotacioDto(); anotacio.setOrganCodi(dadesSortida.getOrganCodi()); anotacio.setOficinaCodi(dadesSortida.getOficinaCodi()); anotacio.setEntitatCodi(dadesSortida.getInteressatEntitatCodi()); anotacio.setUnitatAdministrativa(dadesSortida.getAnotacioUnitatAdministrativa()); anotacio.setInteressatAutenticat(true); anotacio.setInteressatNif(dadesSortida.getInteressatNif()); anotacio.setInteressatNomAmbCognoms(dadesSortida.getInteressatNomAmbCognoms()); anotacio.setInteressatPaisCodi(dadesSortida.getInteressatPaisCodi()); anotacio.setInteressatPaisNom(dadesSortida.getInteressatPaisNom()); anotacio.setInteressatProvinciaCodi(dadesSortida.getInteressatProvinciaCodi()); anotacio.setInteressatProvinciaNom(dadesSortida.getInteressatProvinciaNom()); anotacio.setInteressatMunicipiCodi(dadesSortida.getInteressatMunicipiCodi()); anotacio.setInteressatMunicipiNom(dadesSortida.getInteressatMunicipiNom()); anotacio.setRepresentatNif(dadesSortida.getRepresentatNif()); anotacio.setRepresentatNomAmbCognoms(dadesSortida.getRepresentatNomAmbCognoms()); anotacio.setAssumpteIdiomaCodi(dadesSortida.getAnotacioIdiomaCodi()); anotacio.setAssumpteTipus(dadesSortida.getAnotacioTipusAssumpte()); anotacio.setAssumpteExtracte(dadesSortida.getAnotacioAssumpte()); List<RegistreAnnexDto> annexos = new ArrayList<RegistreAnnexDto>(); for (DocumentInfo document: documentsSortida) { RegistreAnnexDto annex = new RegistreAnnexDto(); annex.setNom(document.getTitol()); annex.setData(document.getDataDocument()); annex.setIdiomaCodi("ca"); annex.setArxiuNom(document.getArxiuNom()); annex.setArxiuContingut(document.getArxiuContingut()); annexos.add(annex); } anotacio.setAnnexos(annexos); RegistreIdDto anotacioId = Jbpm3HeliumBridge.getInstanceService().registreAnotacioSortida(anotacio, getExpedient(executionContext).getId()); RespostaRegistre resposta = new RespostaRegistre(); resposta.setNumero(anotacioId.getNumero()); resposta.setData(anotacioId.getData()); return resposta; } /** * Fa una notificació telemàtica al ciutadà. * * @param dadesRegistre * @param executionContext * @return */ public RespostaRegistre registreNotificacio( ExecutionContext executionContext, DadesRegistreNotificacio dadesNotificacio, List<DocumentInfo> documentsNotificacio) throws JbpmException{ RegistreNotificacioDto notificacio = new RegistreNotificacioDto(); notificacio.setExpedientIdentificador(dadesNotificacio.getExpedientIdentificador()); notificacio.setExpedientClau(dadesNotificacio.getExpedientClau()); notificacio.setExpedientUnitatAdministrativa(dadesNotificacio.getExpedientUnitatAdministrativa()); notificacio.setOrganCodi(dadesNotificacio.getOrganCodi()); notificacio.setOficinaCodi(dadesNotificacio.getOficinaCodi()); notificacio.setEntitatCodi(dadesNotificacio.getInteressatEntitatCodi()); notificacio.setInteressatAutenticat(dadesNotificacio.isInteressatAutenticat()); notificacio.setInteressatNif(dadesNotificacio.getInteressatNif()); notificacio.setInteressatNomAmbCognoms(dadesNotificacio.getInteressatNomAmbCognoms()); notificacio.setInteressatPaisCodi(dadesNotificacio.getInteressatPaisCodi()); notificacio.setInteressatPaisNom(dadesNotificacio.getInteressatPaisNom()); notificacio.setInteressatProvinciaCodi(dadesNotificacio.getInteressatProvinciaCodi()); notificacio.setInteressatProvinciaNom(dadesNotificacio.getInteressatProvinciaNom()); notificacio.setInteressatMunicipiCodi(dadesNotificacio.getInteressatMunicipiCodi()); notificacio.setInteressatMunicipiNom(dadesNotificacio.getInteressatMunicipiNom()); if (dadesNotificacio.getRepresentatNif() != null || dadesNotificacio.getRepresentatNomAmbCognoms() != null) { notificacio.setRepresentatNif(dadesNotificacio.getRepresentatNif()); notificacio.setRepresentatNomAmbCognoms(dadesNotificacio.getRepresentatNomAmbCognoms()); } notificacio.setAssumpteIdiomaCodi(dadesNotificacio.getAnotacioIdiomaCodi()); notificacio.setAssumpteTipus(dadesNotificacio.getAnotacioTipusAssumpte()); notificacio.setAssumpteExtracte(dadesNotificacio.getAnotacioAssumpte()); notificacio.setNotificacioJustificantRecepcio(dadesNotificacio.isNotificacioJustificantRecepcio()); notificacio.setNotificacioAvisTitol(dadesNotificacio.getNotificacioAvisTitol()); notificacio.setNotificacioAvisText(dadesNotificacio.getNotificacioAvisText()); notificacio.setNotificacioAvisTextSms(dadesNotificacio.getNotificacioAvisTextSms()); notificacio.setNotificacioOficiTitol(dadesNotificacio.getNotificacioOficiTitol()); notificacio.setNotificacioOficiText(dadesNotificacio.getNotificacioOficiText()); if (dadesNotificacio.getNotificacioSubsanacioTramitIdentificador() != null) { notificacio.setTramitSubsanacioIdentificador( dadesNotificacio.getNotificacioSubsanacioTramitIdentificador()); notificacio.setTramitSubsanacioVersio( dadesNotificacio.getNotificacioSubsanacioTramitVersio()); notificacio.setTramitSubsanacioDescripcio( dadesNotificacio.getNotificacioSubsanacioTramitDescripcio()); if (dadesNotificacio.getNotificacioSubsanacioParametres() != null) { for (String key: dadesNotificacio.getNotificacioSubsanacioParametres().keySet()) { notificacio.afegirTramitSubsanacioParametre( key, dadesNotificacio.getNotificacioSubsanacioParametres().get(key)); } } } List<RegistreAnnexDto> annexos = new ArrayList<RegistreAnnexDto>(); for (DocumentInfo document: documentsNotificacio) { RegistreAnnexDto annex = new RegistreAnnexDto(); annex.setNom(document.getTitol()); annex.setData(document.getDataDocument()); annex.setIdiomaCodi("ca"); annex.setArxiuNom(document.getArxiuNom()); annex.setArxiuContingut(document.getArxiuContingut()); annexos.add(annex); } notificacio.setAnnexos(annexos); RegistreIdDto anotacioId = Jbpm3HeliumBridge.getInstanceService().notificacioCrear(notificacio, getExpedient(executionContext).getId()); RespostaRegistre resposta = new RespostaRegistre(); resposta.setNumero(anotacioId.getNumero()); resposta.setData(anotacioId.getData()); ReferenciaRDSJustificante referenciaRDSJustificante = new ReferenciaRDSJustificante(); referenciaRDSJustificante.setClave(anotacioId.getReferenciaRDSJustificante().getClave()); referenciaRDSJustificante.setCodigo(anotacioId.getReferenciaRDSJustificante().getCodigo()); resposta.setReferenciaRDSJustificante(referenciaRDSJustificante); return resposta; } /** * Consulta la data del justificant de recepció d'una notificació. * * @param registreNumero * @return * @throws Exception */ public RespostaJustificantRecepcioDto obtenirJustificantRecepcio(String registreNumero) throws Exception { return Jbpm3HeliumBridge.getInstanceService().notificacioElectronicaJustificant( registreNumero); } /** * Consulta la data del justificant de recepció d'una notificació. * * @param registreNumero * @return * @throws Exception */ public RespostaJustificantDetallRecepcioDto obtenirJustificantDetallRecepcio(String registreNumero) throws Exception { return Jbpm3HeliumBridge.getInstanceService().notificacioElectronicaJustificantDetall( registreNumero); } /** * Consulta la data del justificant de recepció d'una notificació. * * @param registreNumero * @return */ public Date registreObtenirJustificantRecepcio(String registreNumero) { return Jbpm3HeliumBridge.getInstanceService().registreNotificacioComprovarRecepcio( registreNumero, null); } /** * Retorna el valor d'una variable * * @param executionContext * @param varCodi * @return */ public Object getVariableValor( ExecutionContext executionContext, String varCodi) { return getVarValue(executionContext.getVariable(varCodi)); } /** * Retorna el text d'una variable per a mostrar a l'usuari * * @param executionContext * @param varCodi * @return */ public String getVariableText( ExecutionContext executionContext, String varCodi) { ExpedientDadaDto dto = Jbpm3HeliumBridge.getInstanceService().getDadaPerProcessInstance( getProcessInstanceId(executionContext), varCodi); if (dto == null) return null; else return dto.getText(); } public String getTextPerVariableAmbDomini( ExecutionContext executionContext, String varCodi) { return getVariableText(executionContext, varCodi); } /** * Guarda un termini a dins una variable * * @param executionContext * @param anys * @param mesos * @param dies */ public void terminiGuardar( ExecutionContext executionContext, String varName, int anys, int mesos, int dies) { Termini termini = new Termini(); termini.setAnys(anys); termini.setMesos(mesos); termini.setDies(dies); executionContext.setVariable(varName, termini); } /** * Consulta les dades d'un tràmit * * @param executionContext * @param anys * @param mesos * @param dies */ public Tramit consultaTramit( String numero, String clau) { try { return ConversioTipusHelper.toTramit( Jbpm3HeliumBridge.getInstanceService().getTramit(numero, clau)); } catch (Exception ex) { throw new JbpmException("No s'ha pogut obtenir el tràmit (numero=" + numero + ", clau=" + clau + ")", ex); } } /** * Relaciona aquest expedient amb un altre * * @param executionContext * @param anys * @param mesos * @param dies */ public void expedientRelacionar( ExecutionContext executionContext, long expedientId) { ExpedientInfo expedient = getExpedient(executionContext); Jbpm3HeliumBridge.getInstanceService().expedientRelacionar( expedient.getId(), expedientId); } /** * Redirigeix un token cap a un altre node. * * @param tokenId * @param nodeName * @param cancelarTasques */ public void tokenRedirigir( long tokenId, String nodeName, boolean cancelarTasques) { Jbpm3HeliumBridge.getInstanceService().tokenRedirigir( tokenId, nodeName, cancelarTasques); } /** * Emmagatzema els paràmetres per a retrocedir l'acció. * * @param executionContext * @param parametres */ public void guardarParametresPerRetrocedir( ExecutionContext executionContext, List<String> parametres) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < parametres.size(); i++) { sb.append(parametres.get(i)); if (i < parametres.size() - 1) sb.append(PARAMS_RETROCEDIR_SEPARADOR); } executionContext.setVariable( PARAMS_RETROCEDIR_VARIABLE_PREFIX + executionContext.getAction().getId(), sb.toString()); } /** * Reindexa l'expedient actual. * * @param executionContext */ public void instanciaProcesReindexar(ExecutionContext executionContext) { instanciaProcesReindexar(executionContext.getProcessInstance().getId()); } /** * Reindexa l'expedient corresponent a una instància de procés. * * @param processInstanceId */ public void instanciaProcesReindexar(long processInstanceId) { Jbpm3HeliumBridge.getInstanceService().expedientReindexar( new Long(processInstanceId).toString()); } /** * Activa o desactiva un token * * @param tokenId * @param activar * @return */ public boolean tokenActivar(long tokenId, boolean activar) { return Jbpm3HeliumBridge.getInstanceService().tokenActivar(tokenId, activar); } /** * Reprendre un expedient * * @param processInstanceId * @throws Exception */ public void reprendreExpedient(String processInstanceId) throws Exception { Jbpm3HeliumBridge.getInstanceService().desfinalitzarExpedient(processInstanceId); } /** * Obté el contingut de l'arxiu directament de la gestió documental. * * @param id * @return */ public byte[] obtenirArxiuGestorDocumental(String id) { ArxiuDto arxiu = Jbpm3HeliumBridge.getInstanceService().getArxiuGestorDocumental(id); if (arxiu != null) return arxiu.getContingut(); else return null; } /** * Emmagatzema un document a dins l'expedient. * * @param executionContext * @param documentCodi * @param data * @param arxiuNom * @param arxiuContingut */ public void documentGuardar( ExecutionContext executionContext, String documentCodi, Date data, String arxiuNom, byte[] arxiuContingut) { Jbpm3HeliumBridge.getInstanceService().documentExpedientGuardar( getProcessInstanceId(executionContext), documentCodi, data, arxiuNom, arxiuContingut); } /** * Guarda un document adjunt. * * @param executionContext * @param nomDocument * @param data * @param arxiuNom * @param arxiuContingut */ public void adjuntGuardar( ExecutionContext executionContext, String nomDocument, Date data, String arxiuNom, byte[] arxiuContingut) { Jbpm3HeliumBridge.getInstanceService().documentExpedientAdjuntar( getProcessInstanceId(executionContext), null, // adjuntId nomDocument, data, arxiuNom, arxiuContingut); } /** * Retorna el valor d'una variable global. * * @param executionContext * @param varCodi * @return */ public Object getVariableGlobal( ExecutionContext executionContext, String varCodi) { ContextInstance ci = getContextInstanceGlobal(executionContext); return ci.getVariable(varCodi); } /** * Modifica el valor d'una variable global. * * @param executionContext * @param varCodi * @return */ public void setVariableGlobal( ExecutionContext executionContext, String varCodi, Object varValor) { ContextInstance ci = getContextInstanceGlobal(executionContext); ci.setVariable(varCodi, varValor); } /** * Retorna el valor d'una variable global. * * @param executionContext * @param varCodi * @return */ public Object getVariableGlobalValor( ExecutionContext executionContext, String varCodi) { ContextInstance ci = getContextInstanceGlobal(executionContext); return getVarValue(ci.getVariable(varCodi)); } /** * Insereix el @missatge amb la data actual com a * informació d'execució de la tasca * en segón pla. * * @param executionContext * @param missatge */ public void desarInformacioExecucio( ExecutionContext executionContext, String missatge) throws Exception { ClassLoader surroundingClassLoader = Thread.currentThread().getContextClassLoader(); try { Long tokenId = executionContext.getToken().getId(); Long taskId = Jbpm3HeliumBridge.getInstanceService().getTaskInstanceIdByTokenId(tokenId); boolean isTascaEnSegonPla = Jbpm3HeliumBridge.getInstanceService().isTascaEnSegonPla(taskId); if (isTascaEnSegonPla) { DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); String dataHandler = df.format(new Date()); Jbpm3HeliumBridge.getInstanceService().addMissatgeExecucioTascaSegonPla(taskId, new String[]{dataHandler, missatge}); } } finally { Thread.currentThread().setContextClassLoader(surroundingClassLoader); } } private ContextInstance getContextInstanceGlobal( ExecutionContext executionContext) { ContextInstance ci = executionContext.getContextInstance(); if (executionContext.getToken() != null) { ci = executionContext.getToken().getProcessInstance().getContextInstance(); while (ci.getProcessInstance().getSuperProcessToken() != null) { ci = ci.getProcessInstance().getSuperProcessToken().getProcessInstance().getContextInstance(); } } return ci; } private Object getVarValue(Object valor) { if (valor instanceof DominiCodiDescripcio) { return ((DominiCodiDescripcio)valor).getCodi(); } else { return valor; } } static final long serialVersionUID = 1L; }