/**
*
*/
package net.conselldemallorca.helium.core.model.dao;
import net.conselldemallorca.helium.core.model.exception.PluginException;
import net.conselldemallorca.helium.core.util.GlobalProperties;
import net.conselldemallorca.helium.integracio.plugins.registre.RegistreNotificacio;
import net.conselldemallorca.helium.integracio.plugins.registre.RespostaAnotacioRegistre;
import net.conselldemallorca.helium.integracio.plugins.registre.RespostaJustificantDetallRecepcio;
import net.conselldemallorca.helium.integracio.plugins.registre.RespostaJustificantRecepcio;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.DadesTramit;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.DadesVistaDocument;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.ObtenirDadesTramitRequest;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.ObtenirVistaDocumentRequest;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.PublicarEventRequest;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.PublicarExpedientRequest;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.ResultatProcesTramitRequest;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.TramitacioPlugin;
import net.conselldemallorca.helium.integracio.plugins.tramitacio.TramitacioPluginException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;
/**
* Dao per accedir a la funcionalitat del plugin de tramitació
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Component
public class PluginTramitacioDao {
private TramitacioPlugin tramitacioPlugin;
public void publicarExpedient(
PublicarExpedientRequest request) {
try {
getTramitacioPlugin().publicarExpedient(request);
} catch (TramitacioPluginException ex) {
logger.error("Error al publicar l'expedient", ex);
throw new PluginException("Error al publicar l'expedient", ex);
}
}
public void publicarEvent(
PublicarEventRequest request) {
try {
getTramitacioPlugin().publicarEvent(request);
} catch (TramitacioPluginException ex) {
logger.error("Error al publicar l'event", ex);
throw new PluginException("Error al publicar l'event", ex);
}
}
public RespostaAnotacioRegistre registrarNotificacio(RegistreNotificacio registreNotificacio) {
try {
return getTramitacioPlugin().registrarNotificacio(registreNotificacio);
} catch (TramitacioPluginException ex) {
logger.error("Error al crear una notificació", ex);
throw new PluginException("Error al crear una notificació", ex);
}
}
public DadesTramit obtenirDadesTramit(
ObtenirDadesTramitRequest request) {
try {
return getTramitacioPlugin().obtenirDadesTramit(request);
} catch (TramitacioPluginException ex) {
logger.error("Error al obtenir les dades del tràmit " + request, ex);
throw new PluginException("Error al obtenir les dades del tràmit " + request, ex);
}
}
public DadesVistaDocument obtenirVistaDocument(
ObtenirVistaDocumentRequest request) {
try {
return getTramitacioPlugin().obtenirVistaDocument(request);
} catch (TramitacioPluginException ex) {
logger.error("Error al obtenir la vista del document " + request, ex);
throw new PluginException("Error al obtenir la vista del document " + request, ex);
}
}
public RespostaJustificantRecepcio obtenirJustificantRecepcio(
String numeroRegistre) throws TramitacioPluginException {
try {
return getTramitacioPlugin().obtenirJustificantRecepcio(numeroRegistre);
} catch (TramitacioPluginException ex) {
logger.error("Error al obtenir justificant de recepció", ex);
throw new PluginException("Error al obtenir justificant de recepció", ex);
}
}
public RespostaJustificantDetallRecepcio obtenirJustificantDetallRecepcio(
String numeroRegistre) throws TramitacioPluginException {
try {
return getTramitacioPlugin().obtenirJustificantDetallRecepcio(numeroRegistre);
} catch (TramitacioPluginException ex) {
logger.error("Error al obtenir justificant de recepció", ex);
throw new PluginException("Error al obtenir justificant de recepció", ex);
}
}
public void comunicarResultatProcesTramit(
ResultatProcesTramitRequest request) {
try {
getTramitacioPlugin().comunicarResultatProcesTramit(request);
} catch (TramitacioPluginException ex) {
logger.error("Error al comunicar el resultat del proces", ex);
throw new PluginException("Error al comunicar el resultat del proces", ex);
}
}
@SuppressWarnings("rawtypes")
private TramitacioPlugin getTramitacioPlugin() {
if (tramitacioPlugin == null) {
String pluginClass = GlobalProperties.getInstance().getProperty("app.tramitacio.plugin.class");
if (pluginClass == null) {
String bantelUrl = GlobalProperties.getInstance().getProperty("app.bantel.entrades.url");
if (bantelUrl.contains("v1")) {
pluginClass = "net.conselldemallorca.helium.integracio.plugins.tramitacio.TramitacioPluginSistrav1";
} else {
pluginClass = "net.conselldemallorca.helium.integracio.plugins.tramitacio.TramitacioPluginSistrav2";
}
}
if (pluginClass != null && pluginClass.length() > 0) {
try {
Class clazz = Class.forName(pluginClass);
tramitacioPlugin = (TramitacioPlugin)clazz.newInstance();
} catch (Exception ex) {
logger.error("No s'ha pogut crear la instància del plugin de tramitació", ex);
throw new PluginException("No s'ha pogut crear la instància del plugin de tramitació", ex);
}
}
}
return tramitacioPlugin;
}
private static final Log logger = LogFactory.getLog(PluginTramitacioDao.class);
}