AbstractConverter.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.basic.archive.abstraction;
- import java.util.ArrayList;
- import java.util.List;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDServizioApplicativo;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.protocol.abstraction.Soggetto;
- import org.openspcoop2.protocol.basic.archive.ZIPReadUtils;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.archive.Archive;
- import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaAccordi;
- import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaServizi;
- import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
- import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
- import org.openspcoop2.protocol.sdk.registry.RegistryException;
- import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
- import org.slf4j.Logger;
- /**
- * AbstractConverter
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public abstract class AbstractConverter {
-
- protected IDAccordoFactory idAccordoFactory;
- protected IDServizioFactory idServizioFactory;
- protected Logger log;
- protected ZIPReadUtils filler;
-
- protected AbstractConverter(Logger log,ZIPReadUtils zipReader) throws ProtocolException{
- this.idAccordoFactory = IDAccordoFactory.getInstance();
- this.idServizioFactory = IDServizioFactory.getInstance();
- this.log = log;
- this.filler = zipReader;
- }
-
- protected boolean existsPdd(Archive archive, IRegistryReader registryReader, String pdd) {
-
- // Cerco nel registro
- if(registryReader.existsPortaDominio(pdd)){
- return true;
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getPdd().size()>0){
- for (int i = 0; i < archive.getPdd().size(); i++) {
- String nome = archive.getPdd().get(i).getPortaDominio().getNome();
- if(nome.equals(pdd)){
- return true;
- }
- }
- }
-
- return false;
-
- }
-
- protected boolean isPddOperativa(Archive archive, IRegistryReader registryReader, String pdd) throws RegistryException{
-
- // Cerco nel registro
- if(registryReader.existsPortaDominio(pdd)){
- try{
- if(registryReader.findIdPorteDominio(true).contains(pdd)){
- return true;
- }
- }catch(RegistryNotFound notFound){
- return false;
- }
- }
-
- return false; // le pdd presenti nell'archivio vengono aggiunte come esterne.
- }
-
- protected String getPddOperativa(IRegistryReader registryReader) throws RegistryNotFound, RegistryException{
- return registryReader.findIdPorteDominio(true).get(0); // una pdd operativa esiste sempre
- }
-
- protected boolean existsSoggetto(Archive archive, IRegistryReader registryReader, Soggetto idSoggetto) {
-
- // Cerco nel registro
- if(registryReader.existsSoggetto(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()))){
- return true;
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getSoggetti().size()>0){
- for (int i = 0; i < archive.getSoggetti().size(); i++) {
- org.openspcoop2.core.registry.Soggetto soggetto = archive.getSoggetti().get(i).getSoggettoRegistro();
- if(soggetto!=null){
- if(idSoggetto.getTipo().equals(soggetto.getTipo()) && idSoggetto.getNome().equals(soggetto.getNome())){
- return true;
- }
- }
- }
- }
-
- return false;
-
- }
-
- protected boolean existsServizioApplicativo(Archive archive, IConfigIntegrationReader configIntegrationReader, Soggetto idSoggetto, String nomeServizioApplicativo) {
-
- IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
- idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()));
- idServizioApplicativo.setNome(nomeServizioApplicativo);
-
- // Cerco nel registro
- if(configIntegrationReader.existsServizioApplicativo(idServizioApplicativo)){
- return true;
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getServiziApplicativi().size()>0){
- for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
- org.openspcoop2.core.config.ServizioApplicativo sa = archive.getServiziApplicativi().get(i).getServizioApplicativo();
- if(sa!=null){
- if(idSoggetto.getTipo().equals(sa.getTipoSoggettoProprietario()) &&
- idSoggetto.getNome().equals(sa.getNomeSoggettoProprietario()) &&
- nomeServizioApplicativo.equals(sa.getNome())){
- return true;
- }
- }
- }
- }
-
- return false;
-
- }
-
- protected String getTipoCredenzialeServizioApplicativo(Archive archive, IConfigIntegrationReader configIntegrationReader, Soggetto idSoggetto, String nomeServizioApplicativo) throws Exception {
-
- IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
- idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()));
- idServizioApplicativo.setNome(nomeServizioApplicativo);
-
- ServizioApplicativo sa = null;
-
- // Cerco nel registro
- if(configIntegrationReader.existsServizioApplicativo(idServizioApplicativo)){
- sa = configIntegrationReader.getServizioApplicativo(idServizioApplicativo);
- }
- else{
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getServiziApplicativi().size()>0){
- for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
- org.openspcoop2.core.config.ServizioApplicativo saTmp = archive.getServiziApplicativi().get(i).getServizioApplicativo();
- if(saTmp!=null){
- if(idSoggetto.getTipo().equals(saTmp.getTipoSoggettoProprietario()) &&
- idSoggetto.getNome().equals(saTmp.getNomeSoggettoProprietario()) &&
- nomeServizioApplicativo.equals(saTmp.getNome())){
- sa = saTmp;
- break;
- }
- }
- }
- }
- }
-
- if(sa==null){
- throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non esistente");
- }
- if(sa.getInvocazionePorta()==null){
- throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non possiede delle credenziali di accesso alla PdD (Indicare un applicativo con tipologia 'fruitore')");
- }
- if(sa.getInvocazionePorta().sizeCredenzialiList()<=0){
- throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non possiede delle credenziali di accesso alla PdD (Indicare un applicativo con tipologia 'fruitore') con credenziali");
- }
- return sa.getInvocazionePorta().getCredenziali(0).getTipo().getValue();
-
- }
-
- protected boolean existsAccordoServizioParteComune(Archive archive, IRegistryReader registryReader, IDAccordo idAccordo) throws RegistryException {
-
- // Cerco nel registro
- try{
- registryReader.getAccordoServizioParteComune(idAccordo);
- return true;
- }catch(RegistryNotFound notFound){
- // ignore
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getAccordiServizioParteComune().size()>0){
- for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
- try{
- IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioParteComune().get(i).getAccordoServizioParteComune());
- if(idAccordo.equals(id)){
- return true;
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
- if(archive.getAccordiServizioComposto().size()>0){
- for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
- try{
- IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioComposto().get(i).getAccordoServizioParteComune());
- if(idAccordo.equals(id)){
- return true;
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
- return false;
-
- }
-
- protected IDAccordo findIdAccordoServizioParteComune(Archive archive, IRegistryReader registryReader,
- String nome, Soggetto idSoggetto, Integer versione) throws DriverRegistroServiziException, ProtocolException, RegistryException{
-
- List<IDAccordo> idAccordi = new ArrayList<IDAccordo>();
- List<String> uriAccordi = new ArrayList<>();
-
- // Cerco nel registro
- ProtocolFiltroRicercaAccordi filtroAccordi = new ProtocolFiltroRicercaAccordi();
- filtroAccordi.setNome(nome);
- if(versione!=null){
- filtroAccordi.setVersione(versione);
- }
- if(idSoggetto!=null){
- IDSoggetto idSoggettoOp2 = new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome());
- filtroAccordi.setSoggetto(idSoggettoOp2);
- }
- try {
- List<IDAccordo> found = registryReader.findIdAccordiServizioParteComune(filtroAccordi);
- if(found.size()>0){
- for (IDAccordo id : found) {
- idAccordi.add(id);
- uriAccordi.add(this.idAccordoFactory.getUriFromIDAccordo(id));
- }
- }
- } catch (RegistryNotFound e) {
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getAccordiServizioParteComune().size()>0){
- for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
- try{
- IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioParteComune().get(i).getAccordoServizioParteComune());
- if(nome.equals(id.getNome())==false){
- continue;
- }
- if(versione!=null && id.getVersione()!=null && (versione.intValue()!=id.getVersione().intValue()) ){
- continue;
- }
- if(idSoggetto!=null){
- if(id.getSoggettoReferente()==null){
- continue;
- }
- if(idSoggetto.getTipo()!=null && idSoggetto.getTipo().equals(id.getSoggettoReferente().getTipo())==false){
- continue;
- }
- if(idSoggetto.getNome()!=null && idSoggetto.getNome().equals(id.getSoggettoReferente().getNome())==false){
- continue;
- }
- }
- String uri = this.idAccordoFactory.getUriFromIDAccordo(id);
- if(uriAccordi.contains(uri)==false){
- idAccordi.add(id);
- uriAccordi.add(uri);
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
- if(archive.getAccordiServizioComposto().size()>0){
- for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
- try{
- IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioComposto().get(i).getAccordoServizioParteComune());
- if(nome.equals(id.getNome())==false){
- continue;
- }
- if(versione!=null && id.getVersione()!=null && (versione.intValue()!=id.getVersione().intValue()) ){
- continue;
- }
- if(idSoggetto!=null){
- if(id.getSoggettoReferente()==null){
- continue;
- }
- if(idSoggetto.getTipo()!=null && idSoggetto.getTipo().equals(id.getSoggettoReferente().getTipo())==false){
- continue;
- }
- if(idSoggetto.getNome()!=null && idSoggetto.getNome().equals(id.getSoggettoReferente().getNome())==false){
- continue;
- }
- }
- String uri = this.idAccordoFactory.getUriFromIDAccordo(id);
- if(uriAccordi.contains(uri)==false){
- idAccordi.add(id);
- uriAccordi.add(uri);
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
-
- // Verifico
- if(idAccordi.size()==1){
- return idAccordi.get(0);
- }
- else {
- String filtro = "Nome["+nome+"]";
- if(versione!=null){
- filtro = filtro + " Versione["+versione+"]";
- }
- if(idSoggetto!=null){
- filtro = filtro + " TipoSoggetto["+idSoggetto.getTipo()+"]";
- filtro = filtro + " NomeSoggetto["+idSoggetto.getNome()+"]";
- }
- if(idAccordi.size()<1){
- throw new ProtocolException("Non risultano accordi di servizio parte comune che corrispondono al seguente criterio di ricerca: "+filtro);
- }
- else{
- throw new ProtocolException("Risultano più accordi di servizio parte comune ("+uriAccordi.size()+") che corrispondono al seguente criterio di ricerca: "+filtro+""
- + "\nGli accordi sono: "+uriAccordi.toString());
- }
- }
- }
-
-
- protected boolean existsAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader, IDServizio idServizio) throws RegistryException {
-
- // Cerco nel registro
- try{
- registryReader.getAccordoServizioParteSpecifica(idServizio);
- return true;
- }catch(RegistryNotFound notFound){
- // ignore
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getAccordiServizioParteSpecifica().size()>0){
- for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
- try{
- AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
- IDServizio id = IDServizioFactory.getInstance().getIDServizioFromValues(asps.getTipo(), asps.getNome(),
- asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore(),
- asps.getVersione());
- if(idServizio.equals(id)){
- return true;
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
- return false;
-
- }
-
- protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader, IDServizio idServizio) throws RegistryException {
-
- // Cerco nel registro
- try{
- return registryReader.getAccordoServizioParteSpecifica(idServizio);
- }catch(RegistryNotFound notFound){
- // ignore
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getAccordiServizioParteSpecifica().size()>0){
- for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
- try{
- AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
- if(idServizio.getTipo().equals(asps.getTipo())==false ){
- continue;
- }
- if(idServizio.getNome().equals(asps.getNome())==false){
- continue;
- }
- if(idServizio.getVersione().intValue() != asps.getVersione().intValue()){
- continue;
- }
- if(idServizio.getSoggettoErogatore().getTipo().equals(asps.getTipoSoggettoErogatore())==false){
- continue;
- }
- if(idServizio.getSoggettoErogatore().getNome().equals(asps.getNomeSoggettoErogatore())==false){
- continue;
- }
- return asps;
- }catch(Exception e){
- // ignore
- }
- }
- }
- return null;
-
- }
-
- protected IDServizio findIdAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader,
- String nome, String tipo, Integer versione, Soggetto idSoggetto) throws DriverRegistroServiziException, ProtocolException, RegistryException{
-
- List<IDServizio> idAccordi = new ArrayList<IDServizio>();
- List<String> uriAccordi = new ArrayList<>();
-
- // Cerco nel registro
- ProtocolFiltroRicercaServizi filtroAccordi = new ProtocolFiltroRicercaServizi();
- filtroAccordi.setTipoServizio(tipo);
- filtroAccordi.setNomeServizio(nome);
- if(idSoggetto!=null){
- IDSoggetto idSoggettoOp2 = new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome());
- filtroAccordi.setSoggettoErogatore(idSoggettoOp2);
- }
- try {
- List<IDServizio> found = registryReader.findIdAccordiServizioParteSpecifica(filtroAccordi);
- if(found.size()>0){
- for (IDServizio id : found) {
- idAccordi.add(id);
- uriAccordi.add(id.toString());
- }
- }
- } catch (RegistryNotFound e) {
- }
-
- // Cerco negli oggetti presenti nell'archivio
- if(archive.getAccordiServizioParteSpecifica().size()>0){
- for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
- try{
- AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
- if(tipo!=null && (tipo.equals(asps.getTipo())==false) ){
- continue;
- }
- if(nome.equals(asps.getNome())==false){
- continue;
- }
- if(versione!=null && (versione.intValue() != asps.getVersione().intValue()) ){
- continue;
- }
- if(idSoggetto!=null){
- if(idSoggetto.getTipo().equals(asps.getTipoSoggettoErogatore())==false){
- continue;
- }
- if(idSoggetto.getNome().equals(asps.getNomeSoggettoErogatore())==false){
- continue;
- }
- IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipo, nome,
- new IDSoggetto(idSoggetto.getTipo(),idSoggetto.getNome()),
- versione);
- String uri = idServizio.toString();
- if(uriAccordi.contains(uri)==false){
- idAccordi.add(idServizio);
- uriAccordi.add(uri);
- }
- }
- }catch(Exception e){
- // ignore
- }
- }
- }
-
-
- // Verifico
- if(idAccordi.size()==1){
- return idAccordi.get(0);
- }
- else {
- String filtro = "Nome["+nome+"]";
- if(tipo!=null){
- filtro = filtro + " Tipo["+tipo+"]";
- }
- if(idSoggetto!=null){
- filtro = filtro + " TipoSoggetto["+idSoggetto.getTipo()+"]";
- filtro = filtro + " NomeSoggetto["+idSoggetto.getNome()+"]";
- }
- if(idAccordi.size()<1){
- throw new ProtocolException("Non risultano accordi di servizio parte specifica che corrispondono al seguente criterio di ricerca: "+filtro);
- }
- else{
- throw new ProtocolException("Risultano più accordi di servizio parte specifica ("+uriAccordi.size()+") che corrispondono al seguente criterio di ricerca: "+filtro+""
- + "\nGli accordi sono: "+uriAccordi.toString());
- }
- }
- }
-
-
- }