SPCoopArchiveImportUtils.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.protocol.spcoop.archive;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopContext;
import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopUtilities;
import it.gov.spcoop.sica.dao.AccordoServizioComposto;
import it.gov.spcoop.sica.dao.AccordoServizioParteComune;
import it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica;
import it.gov.spcoop.sica.manifest.ElencoPartecipanti;
import it.gov.spcoop.sica.manifest.ElencoServiziComponenti;
import it.gov.spcoop.sica.manifest.ElencoServiziComposti;
import it.gov.spcoop.sica.manifest.driver.TipiDocumentoConversazione;
/**
* SPCoopArchiveImportUtils
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class SPCoopArchiveImportUtils {
/* ------------ SetCodiceIPA -------------------------- */
public static void setIDSoggettoFromCodiceIPA(AccordoServizioParteComune aspc,SICAtoOpenSPCoopContext contextSICA,IRegistryReader registryReader) throws Exception{
// Imposto CodiceIPA memorizzato per Referente
if(aspc.getManifesto()!=null && aspc.getManifesto().getParteComune()!=null &&
aspc.getManifesto().getParteComune().getPubblicatore()!=null){
String codiceIPAReferente = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(aspc.getManifesto().getParteComune().getPubblicatore().toString());
IDSoggetto soggettoReferente = null;
try{
soggettoReferente = registryReader.getIdSoggettoByCodiceIPA(codiceIPAReferente);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoReferente, codiceIPAReferente);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPAReferente+"] non esiste");
}
}
}
public static void setIDSoggettoFromCodiceIPA(AccordoServizioComposto asc,SICAtoOpenSPCoopContext contextSICA,IRegistryReader registryReader) throws Exception{
// Imposto CodiceIPA memorizzato per Referente
if(asc.getManifesto()!=null &&
asc.getManifesto().getPubblicatore()!=null){
String codiceIPAReferente = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(asc.getManifesto().getPubblicatore().toString());
IDSoggetto soggettoReferente = null;
try{
soggettoReferente = registryReader.getIdSoggettoByCodiceIPA(codiceIPAReferente);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoReferente, codiceIPAReferente);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPAReferente+"] non esiste");
}
}
// Imposto CodiceIPA memorizzato per erogatori servizi componenti
if(asc.getManifesto()!=null && asc.getManifesto().getServiziComponenti()!=null ){
ElencoServiziComponenti sComponenti = asc.getManifesto().getServiziComponenti();
for(int i=0; i<sComponenti.sizeServizioComponenteList(); i++){
String servComponente = sComponenti.getServizioComponente(i).toString();
String codiceIPASoggettoErogatoreServizioComponente = SICAtoOpenSPCoopUtilities.readDNSoggettoFromUriAccordo(servComponente);
IDSoggetto soggettoErogatoreServizioComponente = null;
try{
soggettoErogatoreServizioComponente = registryReader.getIdSoggettoByCodiceIPA(codiceIPASoggettoErogatoreServizioComponente);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoErogatoreServizioComponente, codiceIPASoggettoErogatoreServizioComponente);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto erogatore con Codice IPA ["+codiceIPASoggettoErogatoreServizioComponente+"] non esiste (servizio componente: "+servComponente+")");
}
}
}
}
public static void setIDServizioFromURI_APS(AccordoServizioComposto asc,SICAtoOpenSPCoopContext contextSICA,IRegistryReader registryReader) throws Exception{
// Imposto ServizioSPCoop memorizzato per servizi componenti
if(asc.getManifesto()!=null && asc.getManifesto().getServiziComponenti()!=null ){
ElencoServiziComponenti sComponenti = asc.getManifesto().getServiziComponenti();
for(int i=0; i<sComponenti.sizeServizioComponenteList(); i++){
String servComponente = sComponenti.getServizioComponente(i).toString();
IDServizio idAccordoServizioParteSpecifica = SICAtoOpenSPCoopUtilities.idAccordoServizioParteSpecifica_sicaToOpenspcoop(registryReader, servComponente, contextSICA);
contextSICA.addMappingServizioToUriAPS(registryReader, idAccordoServizioParteSpecifica);
}
}
}
public static void setIDSoggettoFromCodiceIPA(it.gov.spcoop.sica.dao.AccordoCooperazione ac,SICAtoOpenSPCoopContext contextSICA,IRegistryReader registryReader) throws Exception{
// Imposto CodiceIPA memorizzato per Coordinatore
if(ac.getManifesto()!=null && ac.getManifesto().getCoordinatore()!=null){
String codiceIPACoordinatore = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(ac.getManifesto().getCoordinatore().toString());
IDSoggetto soggettoCoordinatore = null;
try{
soggettoCoordinatore = registryReader.getIdSoggettoByCodiceIPA(codiceIPACoordinatore);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoCoordinatore, codiceIPACoordinatore);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto coordinatore con Codice IPA ["+codiceIPACoordinatore+"] non esiste");
}
}
// Imposto CodiceIPA per Partecipanti
if(ac.getManifesto()!=null && ac.getManifesto().getElencoPartecipanti()!=null ){
ElencoPartecipanti elencoPartecipanti = ac.getManifesto().getElencoPartecipanti();
for(int i=0; i<elencoPartecipanti.sizePartecipanteList(); i++){
String codiceIPASoggettoPartecipante = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(elencoPartecipanti.getPartecipante(i).toString());
IDSoggetto soggettoPartecipante = null;
try{
soggettoPartecipante = registryReader.getIdSoggettoByCodiceIPA(codiceIPASoggettoPartecipante);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoPartecipante, codiceIPASoggettoPartecipante);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto partecipante con Codice IPA ["+codiceIPASoggettoPartecipante+"] non esiste");
}
}
}
// Imposto CodiceIPA per erogatori servizi composti
if(ac.getManifesto()!=null && ac.getManifesto().getServiziComposti()!=null ){
ElencoServiziComposti sComposti = ac.getManifesto().getServiziComposti();
for(int i=0; i<sComposti.sizeServizioCompostoList(); i++){
String uriServizioComposto = sComposti.getServizioComposto(i).toString();
String codiceIPASoggettoErogatoreServizioComposto = SICAtoOpenSPCoopUtilities.readDNSoggettoFromUriAccordo(uriServizioComposto);
IDSoggetto soggettoErogatoreServizioComposto = null;
try{
soggettoErogatoreServizioComposto = registryReader.getIdSoggettoByCodiceIPA(codiceIPASoggettoErogatoreServizioComposto);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoErogatoreServizioComposto, codiceIPASoggettoErogatoreServizioComposto);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto erogatore con Codice IPA ["+codiceIPASoggettoErogatoreServizioComposto+"] non esiste (servizio composto: "+uriServizioComposto+")");
}
}
}
}
public static void setIDSoggettoFromCodiceIPA(AccordoServizioParteSpecifica asps,SICAtoOpenSPCoopContext contextSICA,IRegistryReader registryReader) throws Exception{
// Imposto CodiceIPA memorizzato per Erogatore
if(asps.getManifesto()!=null && asps.getManifesto().getParteSpecifica()!=null &&
asps.getManifesto().getParteSpecifica().getErogatore()!=null){
String codiceIPAErogatore = SICAtoOpenSPCoopUtilities.removeURI_IDSoggettoSica(asps.getManifesto().getParteSpecifica().getErogatore().toString());
IDSoggetto soggettoErogatore = null;
try{
soggettoErogatore = registryReader.getIdSoggettoByCodiceIPA(codiceIPAErogatore);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoErogatore, codiceIPAErogatore);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto erogatore con Codice IPA ["+codiceIPAErogatore+"] non esiste");
}
}
// Imposto CodiceIPA memorizzato per referente Accordo di Servizio Parte Comune
if(asps.getManifesto()!=null && asps.getManifesto().getParteSpecifica()!=null &&
asps.getManifesto().getParteSpecifica().getRiferimentoParteComune()!=null){
String uriRiferimentoParteComune = asps.getManifesto().getParteSpecifica().getRiferimentoParteComune().toString();
String codiceIPASoggettoReferenteParteComune = SICAtoOpenSPCoopUtilities.readDNSoggettoFromUriAccordo(uriRiferimentoParteComune);
IDSoggetto soggettoReferenteParteComune = null;
try{
soggettoReferenteParteComune = registryReader.getIdSoggettoByCodiceIPA(codiceIPASoggettoReferenteParteComune);
contextSICA.addMappingSoggettoSPCoopToCodiceIPA(soggettoReferenteParteComune, codiceIPASoggettoReferenteParteComune);
}catch(RegistryNotFound dNotF){
throw new ProtocolException("Il soggetto referente con Codice IPA ["+codiceIPASoggettoReferenteParteComune+"] non esiste (parte comune: "+uriRiferimentoParteComune+")");
}
}
}
/* ------------ Validazione -------------------------- */
public static void validazioneContenuti(AccordoServizioParteComune aspc) throws Exception{
if(aspc.getInterfacciaConcettuale()==null){
throw new Exception("WSDL Concettuale non presente");
}
if(aspc.getInterfacciaLogicaLatoErogatore()==null){
throw new Exception("WSDL Logico Erogatore non presente");
}
byte[] wsdlConcettuale = aspc.getInterfacciaConcettuale().getContenuto();
if(wsdlConcettuale==null){
throw new Exception("WSDL Concettuale non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlConcettuale)){
wsdlConcettuale=null;
}
aspc.getInterfacciaConcettuale().setContenuto(wsdlConcettuale);
byte[] wsdlLogicoErogatore = aspc.getInterfacciaLogicaLatoErogatore().getContenuto();
if(wsdlLogicoErogatore==null){
throw new Exception("WSDL Logico Erogatore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlLogicoErogatore)){
wsdlLogicoErogatore=null;
}
aspc.getInterfacciaLogicaLatoErogatore().setContenuto(wsdlLogicoErogatore);
byte[] wsdlLogicoFruitore = null;
if(aspc.getInterfacciaLogicaLatoFruitore()!=null){
wsdlLogicoFruitore = aspc.getInterfacciaLogicaLatoFruitore().getContenuto();
if(wsdlLogicoFruitore==null){
throw new Exception("WSDL Logico Fruitore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlLogicoFruitore)){
wsdlLogicoFruitore=null;
}
}
if(aspc.getInterfacciaLogicaLatoFruitore()!=null)
aspc.getInterfacciaLogicaLatoFruitore().setContenuto(wsdlLogicoFruitore);
byte[] wsblConcettuale = null;
if(aspc.getConversazioneConcettuale()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(aspc.getConversazioneConcettuale().getTipo())
){
wsblConcettuale = aspc.getConversazioneConcettuale().getContenuto();
if(wsblConcettuale==null){
throw new Exception("WSBL Concettuale non presente nell'archivio");
}
}
if(aspc.getConversazioneConcettuale()!=null)
aspc.getConversazioneConcettuale().setContenuto(wsblConcettuale);
byte[] wsblLogicoErogatore = null;
if(aspc.getConversazioneLogicaErogatore()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(aspc.getConversazioneLogicaErogatore().getTipo())
){
wsblLogicoErogatore = aspc.getConversazioneLogicaErogatore().getContenuto();
if(wsblLogicoErogatore==null){
throw new Exception("WSBL Logico Erogatore non presente nell'archivio");
}
}
if(aspc.getConversazioneLogicaErogatore()!=null)
aspc.getConversazioneLogicaErogatore().setContenuto(wsblLogicoErogatore);
byte[] wsblLogicoFruitore = null;
if(aspc.getConversazioneLogicaFruitore()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(aspc.getConversazioneLogicaFruitore().getTipo())
){
wsblLogicoFruitore = aspc.getConversazioneLogicaFruitore().getContenuto();
if(wsblLogicoFruitore==null){
throw new Exception("WSBL Logico Fruitore non presente nell'archivio");
}
}
if(aspc.getConversazioneLogicaFruitore()!=null)
aspc.getConversazioneLogicaFruitore().setContenuto(wsblLogicoFruitore);
// il resto della validazione viene effettuata di base dal prodotto
}
public static void validazioneContenuti(AccordoServizioComposto asc) throws Exception{
if(asc.getInterfacciaConcettuale()==null){
throw new Exception("WSDL Concettuale non presente");
}
if(asc.getInterfacciaLogicaLatoErogatore()==null){
throw new Exception("WSDL Logico Erogatore non presente");
}
byte[] wsdlConcettuale = asc.getInterfacciaConcettuale().getContenuto();
if(wsdlConcettuale==null){
throw new Exception("WSDL Concettuale non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlConcettuale)){
wsdlConcettuale=null;
}
asc.getInterfacciaConcettuale().setContenuto(wsdlConcettuale);
byte[] wsdlLogicoErogatore = asc.getInterfacciaLogicaLatoErogatore().getContenuto();
if(wsdlLogicoErogatore==null){
throw new Exception("WSDL Logico Erogatore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlLogicoErogatore)){
wsdlLogicoErogatore=null;
}
asc.getInterfacciaLogicaLatoErogatore().setContenuto(wsdlLogicoErogatore);
byte[] wsdlLogicoFruitore = null;
if(asc.getInterfacciaLogicaLatoFruitore()!=null){
wsdlLogicoFruitore = asc.getInterfacciaLogicaLatoFruitore().getContenuto();
if(wsdlLogicoFruitore==null){
throw new Exception("WSDL Logico Fruitore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlLogicoFruitore)){
wsdlLogicoFruitore=null;
}
}
if(asc.getInterfacciaLogicaLatoFruitore()!=null)
asc.getInterfacciaLogicaLatoFruitore().setContenuto(wsdlLogicoFruitore);
byte[] wsblConcettuale = null;
if(asc.getConversazioneConcettuale()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(asc.getConversazioneConcettuale().getTipo())
){
wsblConcettuale = asc.getConversazioneConcettuale().getContenuto();
if(wsblConcettuale==null){
throw new Exception("WSBL Concettuale non presente nell'archivio");
}
}
if(asc.getConversazioneConcettuale()!=null)
asc.getConversazioneConcettuale().setContenuto(wsblConcettuale);
byte[] wsblLogicoErogatore = null;
if(asc.getConversazioneLogicaErogatore()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(asc.getConversazioneLogicaErogatore().getTipo())
){
wsblLogicoErogatore = asc.getConversazioneLogicaErogatore().getContenuto();
if(wsblLogicoErogatore==null){
throw new Exception("WSBL Logico Erogatore non presente nell'archivio");
}
}
if(asc.getConversazioneLogicaErogatore()!=null)
asc.getConversazioneLogicaErogatore().setContenuto(wsblLogicoErogatore);
byte[] wsblLogicoFruitore = null;
if(asc.getConversazioneLogicaFruitore()!=null &&
TipiDocumentoConversazione.WSBL.toString().equals(asc.getConversazioneLogicaFruitore().getTipo())
){
wsblLogicoFruitore = asc.getConversazioneLogicaFruitore().getContenuto();
if(wsblLogicoFruitore==null){
throw new Exception("WSBL Logico Fruitore non presente nell'archivio");
}
}
if(asc.getConversazioneLogicaFruitore()!=null)
asc.getConversazioneLogicaFruitore().setContenuto(wsblLogicoFruitore);
// il resto della validazione viene effettuata di base dal prodotto
}
public static void validazioneContenuti(AccordoServizioParteSpecifica aps) throws Exception{
if(aps.getPortiAccessoErogatore()==null && aps.getPortiAccessoFruitore()==null){
throw new Exception("Nessun WSDL Implementativo presente");
}
//implementativo erogatore
if(aps.getPortiAccessoErogatore()!=null){
byte[] wsdlImplementativo = aps.getPortiAccessoErogatore().getContenuto();
if(wsdlImplementativo==null){
throw new Exception("WSDL Implementativo Erogatore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlImplementativo)){
wsdlImplementativo=null;
}
aps.getPortiAccessoErogatore().setContenuto(wsdlImplementativo);
}
//implementativo fruitore
if(aps.getPortiAccessoFruitore()!=null){
byte[] wsdlImplementativo = aps.getPortiAccessoFruitore().getContenuto();
if(wsdlImplementativo==null){
throw new Exception("WSDL Implementativo Fruitore non presente nell'archivio");
}
if(SICAtoOpenSPCoopUtilities.isWsdlEmpty(wsdlImplementativo)){
wsdlImplementativo=null;
}
aps.getPortiAccessoFruitore().setContenuto(wsdlImplementativo);
}
}
/* -------------------- InfoServices -------------------------------- */
// Metodi oramai gestiti direttamente dall'import
@Deprecated
public static boolean isInfoEGovPresenti(AccordoServizioParteComune aspc){
boolean infoEgovPresenti = false;
if(aspc!=null){
it.gov.spcoop.sica.dao.Documento docSICA = null;
for(int j=0; j<aspc.sizeAllegati(); j++){
docSICA = aspc.getAllegato(j);
if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
else if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
}
if(infoEgovPresenti==false){
for(int j=0; j<aspc.sizeSpecificheSemiformali(); j++){
docSICA = aspc.getSpecificaSemiformale(j);
if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
else if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
}
}
}
return infoEgovPresenti;
}
@Deprecated
public static boolean isInfoEGovPresenti(AccordoServizioComposto asc){
boolean infoEgovPresenti = false;
if(asc!=null){
it.gov.spcoop.sica.dao.Documento docSICA = null;
for(int j=0; j<asc.sizeAllegati(); j++){
docSICA = asc.getAllegato(j);
if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
else if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
}
if(infoEgovPresenti==false){
for(int j=0; j<asc.sizeSpecificheSemiformali(); j++){
docSICA = asc.getSpecificaSemiformale(j);
if(it.gov.spcoop.sica.wscp.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
else if(it.cnipa.collprofiles.driver.XMLUtils.isProfiloCollaborazioneEGOV(docSICA.getContenuto())){
infoEgovPresenti = true;
break;
}
}
}
}
return infoEgovPresenti;
}
}