DocumentoExporter.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* 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.openspcoop2.web.ctrlstat.servlet.archivi;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.config.Credenziali;
import org.openspcoop2.core.config.InvocazionePorta;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.RegistroPluginArchivio;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.Soggetto;
import org.openspcoop2.core.config.TrasformazioneRegola;
import org.openspcoop2.core.config.TrasformazioneRegolaRichiesta;
import org.openspcoop2.core.config.TrasformazioneRegolaRisposta;
import org.openspcoop2.core.config.TrasformazioneSoap;
import org.openspcoop2.core.config.TrasformazioneSoapRisposta;
import org.openspcoop2.core.config.Trasformazioni;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.CredenzialiSoggetto;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.ProtocolProperty;
import org.openspcoop2.core.registry.constants.CredenzialeTipo;
import org.openspcoop2.core.registry.constants.ServiceBinding;
import org.openspcoop2.core.registry.driver.AccordoServizioUtils;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.wsdl.AccordoServizioWrapper;
import org.openspcoop2.core.registry.wsdl.AccordoServizioWrapperUtilities;
import org.openspcoop2.message.OpenSPCoop2MessageFactory;
import org.openspcoop2.message.xml.MessageXMLUtils;
import org.openspcoop2.pdd.core.jmx.JMXUtils;
import org.openspcoop2.pdd.core.keystore.RemoteStoreKeyEntry;
import org.openspcoop2.protocol.basic.Costanti;
import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
import org.openspcoop2.utils.json.YAMLUtils;
import org.openspcoop2.utils.transport.http.HttpUtilities;
import org.openspcoop2.utils.wsdl.WSDLUtilities;
import org.openspcoop2.utils.xml.XMLException;
import org.openspcoop2.utils.xml.XSDSchemaCollection;
import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCore;
import org.openspcoop2.web.ctrlstat.servlet.remote_stores.RemoteStoresCore;
import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
import org.openspcoop2.web.lib.mvc.PageData;
import org.openspcoop2.web.lib.mvc.ServletUtils;
import org.slf4j.Logger;
/**
* Questa servlet si occupa di esportare le tracce diagnostiche in formato xml
* zippandole
*
*
* @author Andrea Poli (apoli@link.it)
* @author Stefano Corallo (corallo@link.it)
* @author Sandra Giangrandi (sandra@link.it)
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class DocumentoExporter extends HttpServlet {
private static final long serialVersionUID = -7341279067126334095L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.processRequest(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.processRequest(req, resp);
}
/**
* Processa la richiesta pervenuta e si occupa di fornire i dati richiesti
* in formato zip
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
private void processRequest(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
// Inizializzo PageData
PageData pd = new PageData();
ArchiviHelper archiviHelper = null;
byte[] docBytes = null;
String fileName = null;
try {
archiviHelper = new ArchiviHelper(request, pd, session);
ControlStationCore.logDebug("Ricevuta Richiesta di esportazione...");
Enumeration<?> en = archiviHelper.getParameterNames();
ControlStationCore.logDebug("Parametri (nome = valore):\n-----------------");
while (en.hasMoreElements()) {
String param = (String) en.nextElement();
String value = archiviHelper.getParameter(param);
ControlStationCore.logDebug(param + " = " + value);
}
ControlStationCore.logDebug("-----------------");
String idAllegato = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_ID_ALLEGATO);
String idAccordo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_ID_ACCORDO);
String tipoDocumento = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO);
String tipoDocumentoDaScaricare = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO);
if(tipoDocumentoDaScaricare==null || "".equals(tipoDocumentoDaScaricare)){
tipoDocumentoDaScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_DOCUMENTO;
}
String tipoSoggettoFruitore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_TIPO_SOGGETTO_FRUITORE);
String nomeSoggettoFruitore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_NOME_SOGGETTO_FRUITORE);
long idAccordoLong = getIdAccordoLong(idAccordo);
ArchiviCore archiviCore = new ArchiviCore();
ProtocolPropertiesCore ppCore = new ProtocolPropertiesCore(archiviCore);
PorteDelegateCore pdCore = new PorteDelegateCore(archiviCore);
PorteApplicativeCore paCore = new PorteApplicativeCore(archiviCore);
if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_DOCUMENTO.equals(tipoDocumentoDaScaricare) ){
long idAllegatoInt = Long.parseLong(idAllegato);
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoDocumento)
||
ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_SPECIFICA.equals(tipoDocumento)
||
ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_COOPERAZIONE.equals(tipoDocumento)){
Documento doc = archiviCore.getDocumento(idAllegatoInt,true);
fileName = doc.getFile();
docBytes = doc.getByteContenuto();
}
else{
throw new ServletException("Tipo archivio ["+tipoDocumento+"] non gestito (tipo documento: "+tipoDocumentoDaScaricare+")");
}
}
else {
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoDocumento)){
AccordiServizioParteComuneCore asCore = new AccordiServizioParteComuneCore(archiviCore);
AccordoServizioParteComune as = asCore.getAccordoServizioFull(idAccordoLong);
if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_DEFINITORIO.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_INTERFACCIA_DEFINITORIA;
docBytes = as.getByteWsdlDefinitorio();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_CONCETTUALE.equals(tipoDocumentoDaScaricare) ){
docBytes = as.getByteWsdlConcettuale();
if(as.getFormatoSpecifica()!=null) {
switch (as.getFormatoSpecifica()) {
case WSDL_11:
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
break;
case OPEN_API_3:
YAMLUtils yamlUtils = YAMLUtils.getInstance();
if(yamlUtils.isYaml(docBytes)) {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_YAML;
}
else {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_JSON;
}
break;
case SWAGGER_2:
yamlUtils = YAMLUtils.getInstance();
if(yamlUtils.isYaml(docBytes)) {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_YAML;
}
else {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_JSON;
}
break;
case WADL:
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WADL;
break;
}
}
else {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
}
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL;
docBytes = as.getByteWsdlLogicoErogatore();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL;
docBytes = as.getByteWsdlLogicoFruitore();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_CONCETTUALE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_CONCETTUALE;
docBytes = as.getByteSpecificaConversazioneConcettuale();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_EROGATORE;
docBytes = as.getByteSpecificaConversazioneErogatore();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_SPECIFICA_CONVERSAZIONE_LOGICO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_FRUITORE;
docBytes = as.getByteSpecificaConversazioneFruitore();
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_XSD_SCHEMA_COLLECTION.equals(tipoDocumentoDaScaricare) ){
AccordoServizioParteComune asConAllegati = asCore.getAccordoServizioFull(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as), true);
try{
// Nel caso di API REST devo eliminare la parte concettuale/logica poichè non è un wsdl/xsd
if( ServiceBinding.REST.equals(asConAllegati.getServiceBinding()) ){
asConAllegati.setByteWsdlConcettuale(null);
asConAllegati.setByteWsdlLogicoErogatore(null);
asConAllegati.setByteWsdlLogicoFruitore(null);
}
AccordoServizioUtils asUtils = new AccordoServizioUtils(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), ControlStationCore.getLog());
XSDSchemaCollection schemaCollection = asUtils.buildSchemaCollection(asConAllegati, true);
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_XSD_SCHEMA_COLLECTION;
docBytes = this.serializeWsdl(ControlStationCore.getLog(), schemaCollection, asConAllegati);
}
catch(Exception e){
ControlStationCore.getLog().error("XSDSchemaCollection build error: "+e.getMessage(),e);
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_XSD_SCHEMA_COLLECTION_ERROR;
String msg = e.getMessage();
if(msg==null || msg.equals("")){
if(e instanceof NullPointerException){
msg = "Internal Error (NP)";
}
else{
msg = e.toString();
if(msg==null || msg.equals("")){
msg = "Internal Error";
}
}
}
docBytes = msg.getBytes();
}
}
else{
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_SPECIFICA.equals(tipoDocumento)){
AccordiServizioParteSpecificaCore asCore = new AccordiServizioParteSpecificaCore(archiviCore);
AccordoServizioParteSpecifica as = asCore.getAccordoServizioParteSpecifica(idAccordoLong);
if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_EROGATORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_EROGATORE_WSDL;
if(tipoSoggettoFruitore!=null && !"".equals(tipoSoggettoFruitore) &&
nomeSoggettoFruitore!=null && !"".equals(nomeSoggettoFruitore)){
for (int i = 0; i < as.sizeFruitoreList(); i++) {
Fruitore f = as.getFruitore(i);
if(tipoSoggettoFruitore.equals(f.getTipo()) && nomeSoggettoFruitore.equals(f.getNome())){
docBytes = f.getByteWsdlImplementativoErogatore();
break;
}
}
}else{
docBytes = as.getByteWsdlImplementativoErogatore();
}
}
else if( ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_IMPLEMENTATIVO_FRUITORE.equals(tipoDocumentoDaScaricare) ){
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_FRUITORE_WSDL;
if(tipoSoggettoFruitore!=null && !"".equals(tipoSoggettoFruitore) &&
nomeSoggettoFruitore!=null && !"".equals(nomeSoggettoFruitore)){
for (int i = 0; i < as.sizeFruitoreList(); i++) {
Fruitore f = as.getFruitore(i);
if(tipoSoggettoFruitore.equals(f.getTipo()) && nomeSoggettoFruitore.equals(f.getNome())){
docBytes = f.getByteWsdlImplementativoFruitore();
break;
}
}
}else{
docBytes = as.getByteWsdlImplementativoFruitore();
}
}
else{
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PROTOCOL_PROPERTY.equals(tipoDocumento)){
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PROTOCOL_PROPERTY_BINARY.equals(tipoDocumentoDaScaricare)){
long idAllegatoInt = Long.parseLong(idAllegato);
ProtocolProperty bp = ppCore.getProtocolPropertyBinaria(idAllegatoInt);
fileName = bp.getFile();
docBytes = bp.getByteFile();
docBytes = archiviCore.getDriverBYOKUtilities().unwrap(docBytes); // se cifrato, viene decifrato
}else{
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PORTA_APPLICATIVA.equals(tipoDocumento)){
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_XACML_POLICY.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_XACML_POLICY_FILENAME;
String policy = portaApplicativa.getXacmlPolicy();
if(StringUtils.isEmpty(policy)) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = policy.getBytes();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
if(richiesta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(richiesta.getConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(richiesta.getConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(richiesta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] '"+tipo+"' non disponibile per il tipo archivio ["+tipoDocumento+"]: tipo non supportato");
}
/** if(fileName==null) {
// throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] '"+tipo+"' non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
// }*/
docBytes = richiesta.getConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
if(richiesta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(richiesta.getTrasformazioneSoap() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneSoap trasformazioneSoap = richiesta.getTrasformazioneSoap();
if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRisposta oldRisposta = null;
for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
if (risposta.getId().longValue() == idTrasformazioneRisposta) {
oldRisposta = risposta;
break;
}
}
if(oldRisposta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(oldRisposta.getConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(oldRisposta.getConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = oldRisposta.getConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaApplicativa portaApplicativa = paCore.getPortaApplicativa(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_APPLICATIVA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
Trasformazioni trasformazioni = portaApplicativa.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRisposta oldRisposta = null;
for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
if (risposta.getId().longValue() == idTrasformazioneRisposta) {
oldRisposta = risposta;
break;
}
}
if(oldRisposta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(oldRisposta.getTrasformazioneSoap() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneSoapRisposta trasformazioneSoap = oldRisposta.getTrasformazioneSoap();
if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
}else {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_PORTA_DELEGATA.equals(tipoDocumento)){
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_XACML_POLICY.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_XACML_POLICY_FILENAME;
String policy = portaDelegata.getXacmlPolicy();
if(StringUtils.isEmpty(policy)) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = policy.getBytes();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
if(richiesta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(richiesta.getConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(richiesta.getConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(richiesta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = richiesta.getConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRichiesta richiesta = oldRegola.getRichiesta();
if(richiesta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(richiesta.getTrasformazioneSoap() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneSoap trasformazioneSoap = richiesta.getTrasformazioneSoap();
if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRisposta oldRisposta = null;
for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
if (risposta.getId().longValue() == idTrasformazioneRisposta) {
oldRisposta = risposta;
break;
}
}
if(oldRisposta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(oldRisposta.getConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(oldRisposta.getConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = oldRisposta.getConversioneTemplate();
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE.equals(tipoDocumentoDaScaricare)){
Long idPorta = Long.parseLong(idAccordo);
PortaDelegata portaDelegata = pdCore.getPortaDelegata(idPorta);
fileName = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE_FILENAME;
String idTrasformazioneRegola = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_REQ_ID);
long idTrasformazione = Long.parseLong(idTrasformazioneRegola);
String idTrasformazioneRegolaRes = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_PORTA_DELEGATA_CONFIGURAZIONE_TRASFORMAZIONI_RES_ID);
long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRegolaRes);
Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
TrasformazioneRegola oldRegola = null;
for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
if(reg.getId().longValue() == idTrasformazione) {
oldRegola = reg;
break;
}
}
if(oldRegola == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneRegolaRisposta oldRisposta = null;
for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
if (risposta.getId().longValue() == idTrasformazioneRisposta) {
oldRisposta = risposta;
break;
}
}
if(oldRisposta == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
if(oldRisposta.getTrasformazioneSoap() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
TrasformazioneSoapRisposta trasformazioneSoap = oldRisposta.getTrasformazioneSoap();
if( trasformazioneSoap.getEnvelopeBodyConversioneTemplate() == null) {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione tipo = StringUtils.isNotEmpty(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) ?
org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneSoap.getEnvelopeBodyConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
switch(tipo) {
case FREEMARKER_TEMPLATE:
case CONTEXT_FREEMARKER_TEMPLATE:
case FREEMARKER_TEMPLATE_ZIP:
case VELOCITY_TEMPLATE:
case CONTEXT_VELOCITY_TEMPLATE:
case VELOCITY_TEMPLATE_ZIP:
case TEMPLATE:
case XSLT:
case ZIP:
case TGZ:
case TAR:
fileName += tipo.getExt();
break;
case EMPTY:
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non disponibile per il tipo archivio ["+tipoDocumento+"]: contenuto vuoto o non presente");
}
docBytes = trasformazioneSoap.getEnvelopeBodyConversioneTemplate();
}else {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_SOGGETTO.equals(tipoDocumento)){
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_CERTIFICATO_SSL.equals(tipoDocumentoDaScaricare)){
Long idSogg = Long.parseLong(idAccordo);
SoggettiCore soggettiCore = new SoggettiCore(archiviCore);
String oldnomeprov = null;
String oldtipoprov = null;
if(soggettiCore.isRegistroServiziLocale()){
org.openspcoop2.core.registry.Soggetto soggettoRegistry = soggettiCore.getSoggettoRegistro(idSogg);
oldnomeprov = soggettoRegistry.getNome();
oldtipoprov = soggettoRegistry.getTipo();
}
else{
Soggetto soggettoConfig = soggettiCore.getSoggetto(idSogg);
oldnomeprov = soggettoConfig.getNome();
oldtipoprov = soggettoConfig.getTipo();
}
IDSoggetto idSoggetto = new IDSoggetto(oldtipoprov,oldnomeprov);
String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(oldtipoprov);
IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
IRegistryReader registryReader = soggettiCore.getRegistryReader(protocolFactory);
int posizioneCredenziale = 0;
String pos = archiviHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CREDENZIALI_ID);
if(StringUtils.isNotEmpty(pos)) {
posizioneCredenziale = Integer.valueOf(pos);
}
CredenzialiSoggetto credenziali = null;
org.openspcoop2.core.registry.Soggetto soggetto = null;
try{
soggetto = registryReader.getSoggetto(idSoggetto);
if(soggetto.sizeCredenzialiList()>0) {
credenziali = soggetto.getCredenziali(posizioneCredenziale);
}
}catch(RegistryNotFound r){
// rilancio
throw r;
}
fileName = soggetto.getNome() + ".crt";
if(credenziali != null && credenziali.getTipo() != null && credenziali.getTipo().equals(CredenzialeTipo.SSL)) {
if(credenziali.getCertificate() != null && credenziali.getCertificate().length > 0) {
docBytes = credenziali.getCertificate();
} else {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
}
} else
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
}else{
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_SERVIZIO_APPLICATIVO.equals(tipoDocumento)){
if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_DOCUMENTO_CERTIFICATO_SSL.equals(tipoDocumentoDaScaricare)){
Long idSA = Long.parseLong(idAccordo);
ServiziApplicativiCore saCore = new ServiziApplicativiCore(archiviCore);
ServizioApplicativo sa = saCore.getServizioApplicativo(idSA);
fileName = sa.getNome() + ".crt";
int posizioneCredenziale = 0;
String pos = archiviHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CREDENZIALI_ID);
if(StringUtils.isNotEmpty(pos)) {
posizioneCredenziale = Integer.valueOf(pos);
}
InvocazionePorta ip = sa.getInvocazionePorta();
Credenziali credenziali = null;
if (ip != null &&
ip.sizeCredenzialiList()>0) {
credenziali = ip.getCredenziali(posizioneCredenziale);
}
if(credenziali != null && credenziali.getTipo() != null && credenziali.getTipo().equals(org.openspcoop2.core.config.constants.CredenzialeTipo.SSL)) {
if(credenziali.getCertificate() != null && credenziali.getCertificate().length > 0) {
docBytes = credenziali.getCertificate();
} else {
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
}
} else
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non definito per il tipo archivio ["+tipoDocumento+"]");
}else{
throw new ServletException("Tipo documento ["+tipoDocumentoDaScaricare+"] non gestito per il tipo archivio ["+tipoDocumento+"]");
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_CONNETTORE_CERTIFICATO_SERVER.equals(tipoDocumento)){
String aliasForVerificaConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_ALIAS_CONNETTORE);
String tipoConnettoreRegistro = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TIPO_CONNETTORE_REGISTRO);
boolean connettoreRegistro = ServletUtils.isCheckBoxEnabled(tipoConnettoreRegistro);
String labelConnettore = connettoreRegistro ? "connettore del registro" : "connettore della configurazione";
String idConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_ID_CONNETTORE);
String tokenTipologia = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_TIPOLOGIA);
String tokenNome= archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_NOME);
String tokenConnettoreTipo = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_TOKEN_TIPO);
String nameConnettore = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_CERTIFICATI_SERVER_NOME_CONNETTORE);
fileName = nameConnettore + ".pem";
String risorsa = null;
if(connettoreRegistro) {
risorsa = archiviCore.getJmxPdDConfigurazioneSistemaNomeRisorsaAccessoRegistroServizi(aliasForVerificaConnettore);
}
else {
risorsa = archiviCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(aliasForVerificaConnettore);
}
String metodo = null;
List<Object> parameters = new ArrayList<>();
if(idConnettore!=null) {
metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreById(aliasForVerificaConnettore);
parameters.add(idConnettore+"");
}
else if(tokenTipologia!=null) {
if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_GESTIONE_POLICY_TOKEN.equals(tokenTipologia)) {
metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreTokenPolicyValidazione(aliasForVerificaConnettore);
parameters.add(tokenNome);
if(tokenConnettoreTipo!=null && StringUtils.isNotEmpty(tokenConnettoreTipo)) {
parameters.add(tokenConnettoreTipo);
}
}
else if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_RETRIEVE_POLICY_TOKEN.equals(tokenTipologia)) {
metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreTokenPolicyNegoziazione(aliasForVerificaConnettore);
parameters.add(tokenNome);
}
else if(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_ATTRIBUTE_AUTHORITY.equals(tokenTipologia)) {
metodo = archiviCore.getJmxPdDConfigurazioneSistemaNomeMetodoGetCertificatiConnettoreAttributeAuthority(aliasForVerificaConnettore);
parameters.add(tokenNome);
}
else {
throw new DriverControlStationException("Tipologia '"+tokenTipologia+"' da utilizzare per l'export dei certificati server non supportata");
}
}
else {
throw new DriverControlStationException("Nessuna risorsa definita da cui effettuare l'export dei certificati server");
}
try{
String stato = archiviCore.getInvoker().invokeJMXMethod(aliasForVerificaConnettore, archiviCore.getJmxPdDConfigurazioneSistemaType(aliasForVerificaConnettore),
risorsa,
metodo,
parameters.toArray());
if(stato==null) {
throw new ServletException("Recupero certificati server fallito");
}
if(stato==null || stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
throw new ServletException(stato);
}
else {
docBytes = stato.getBytes();
}
}catch(Exception e){
String msgErrore = "Errore durante il recupero dei certificati server del "+labelConnettore+" con parametri '"+parameters+"' (jmxResource '"+risorsa+"') (node:"+aliasForVerificaConnettore+"): "+e.getMessage();
ControlStationCore.logError(msgErrore, e);
/**throw new ServletException(msgErrore);*/
// se lancio una eccezione ho il crash dell'interfaccia. Ritorno anzi un file errato.
fileName+=".error";
docBytes = msgErrore.getBytes();
}
}
else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ARCHIVIO_JAR.equals(tipoDocumento)){
String nomePlugin = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_JAR_NOME_PLUGIN);
String nomeJar = archiviHelper.getParameter(ArchiviCostanti.PARAMETRO_ARCHIVI_JAR_NOME_ARCHVIO);
fileName = nomeJar;
ConfigurazioneCore confCore = new ConfigurazioneCore(archiviCore);
try{
RegistroPluginArchivio jar = confCore.getRegistroPluginArchivio(nomePlugin, nomeJar);
docBytes = jar.getContenuto();
}catch(Exception e){
String msgErrore = "Errore durante il recupero dell'archivio jar '"+nomeJar+"' del plugin "+nomePlugin+": "+e.getMessage();
ControlStationCore.logError(msgErrore, e);
/**throw new ServletException(msgErrore);*/
// se lancio una eccezione ho il crash dell'interfaccia. Ritorno anzi un file errato.
fileName+=".error";
docBytes = msgErrore.getBytes();
}
}else if(ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_REMOTE_STORE_ENTRY.equals(tipoDocumento)){
RemoteStoresCore remoteStoresCore = new RemoteStoresCore(archiviCore);
RemoteStoreKeyEntry remoteStoreKeyEntry = remoteStoresCore.getRemoteStoreKeyEntry(idAccordoLong);
fileName = remoteStoreKeyEntry.getKid() + ".jwk";
docBytes = remoteStoreKeyEntry.getContentKey();
}
else{
throw new ServletException("Tipo archivio ["+tipoDocumento+"] non gestito (tipo documento: "+tipoDocumentoDaScaricare+")");
}
}
// Setto Proprietà Export File
HttpUtilities.setOutputFile(response, true, fileName);
if(docBytes!=null) {
OutputStream out = response.getOutputStream();
out.write(docBytes);
out.flush();
out.close();
}
} catch (Exception e) {
ControlStationCore.logError("Errore durante il download dei documenti "+e.getMessage(), e);
}
}
private long getIdAccordoLong(String idAccordo){
long idAccordoLong = 0;
try{ idAccordoLong = Long.valueOf(idAccordo); }catch(Exception e){ idAccordoLong = 0 ; }
return idAccordoLong;
}
private byte[] serializeWsdl(Logger log,XSDSchemaCollection schemaCollection, AccordoServizioParteComune asConAllegati) throws XMLException{
try{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
serializeWsdl(log,bout,schemaCollection,asConAllegati);
bout.flush();
bout.close();
return bout.toByteArray();
}catch(Exception e){
throw new XMLException(e.getMessage(),e);
}
}
private void serializeWsdl(Logger log,OutputStream out,XSDSchemaCollection schemaCollection, AccordoServizioParteComune asConAllegati) throws XMLException{
ZipOutputStream zipOut = null;
try{
zipOut = new ZipOutputStream(out);
schemaCollection.zipSerialize(log, zipOut);
String rootPackageDir = "wsdl"+File.separatorChar;
if(asConAllegati.getByteWsdlLogicoErogatore()!=null){
String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL;
this.writeWsdl(log, rootPackageDir+nomeFile, zipOut, true, asConAllegati);
}
if(asConAllegati.getByteWsdlLogicoFruitore()!=null){
String nomeFile = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL;
this.writeWsdl(log, rootPackageDir+nomeFile, zipOut, false, asConAllegati);
}
zipOut.flush();
}catch(Exception e){
throw new XMLException(e.getMessage(),e);
}finally{
try{
if(zipOut!=null)
zipOut.close();
}catch(Exception eClose){
// close
}
}
}
private void writeWsdl(Logger log,String nomeFile, ZipOutputStream zipOut, boolean erogatore, AccordoServizioParteComune asConAllegati) throws IOException{
try{
AccordoServizioWrapperUtilities wsdlWrapperUtilities = new AccordoServizioWrapperUtilities(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log);
wsdlWrapperUtilities.setAccordoServizio(new AccordoServizioWrapper());
wsdlWrapperUtilities.getAccordoServizioWrapper().setAccordoServizio((AccordoServizioParteComune)asConAllegati.clone());
WSDLUtilities wsdlUtilities = new WSDLUtilities(MessageXMLUtils.DEFAULT);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
javax.wsdl.Definition wsdl = null;
if(erogatore){
wsdl = wsdlWrapperUtilities.buildWsdlErogatoreFromBytes();
}
else{
wsdl = wsdlWrapperUtilities.buildWsdlFruitoreFromBytes();
}
wsdlUtilities.writeWsdlTo(wsdl, bout);
bout.flush();
bout.close();
zipOut.putNextEntry(new ZipEntry(nomeFile));
zipOut.write(bout.toByteArray());
}catch(Exception e){
String tipo = "Erogatore";
if(!erogatore){
tipo = "Fruitore";
}
log.error("Costruzione WSDL "+tipo+" fallita: "+e.getMessage(),e);
nomeFile = nomeFile + ".buildFailed.txt";
zipOut.putNextEntry(new ZipEntry(nomeFile));
String msg = e.getMessage();
if(msg==null || msg.equals("")){
if(e instanceof NullPointerException){
msg = "Internal Error (NP)";
}
else{
msg = e.toString();
if(msg==null || msg.equals("")){
msg = "Internal Error";
}
}
}
zipOut.write(msg.getBytes());
}
}
}