ImporterInformationMissingUtils.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.engine.archive;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.xml.namespace.QName;
- import org.openspcoop2.core.config.Credenziali;
- import org.openspcoop2.core.config.InvocazioneServizio;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDAccordoCooperazione;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.AccordoCooperazione;
- import org.openspcoop2.core.registry.AccordoServizioParteComune;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.Connettore;
- import org.openspcoop2.core.registry.Fruitore;
- import org.openspcoop2.core.registry.IdSoggetto;
- import org.openspcoop2.core.registry.Operation;
- import org.openspcoop2.core.registry.PortType;
- import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
- import org.openspcoop2.core.registry.constants.TipologiaServizio;
- import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.xml.MessageXMLUtils;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.engine.constants.Costanti;
- import org.openspcoop2.protocol.information_missing.ConditionType;
- import org.openspcoop2.protocol.information_missing.ConditionsType;
- import org.openspcoop2.protocol.information_missing.Openspcoop2;
- import org.openspcoop2.protocol.information_missing.Operazione;
- import org.openspcoop2.protocol.information_missing.ProprietaRequisitoInput;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.archive.Archive;
- import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoCooperazione;
- import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioComposto;
- import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteComune;
- import org.openspcoop2.protocol.sdk.archive.ArchiveAccordoServizioParteSpecifica;
- import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
- import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
- import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
- import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
- import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
- import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
- import org.openspcoop2.protocol.sdk.validator.IValidazioneDocumenti;
- import org.openspcoop2.protocol.sdk.validator.ValidazioneResult;
- import org.openspcoop2.utils.wsdl.DefinitionWrapper;
- import org.openspcoop2.utils.xml.AbstractXMLUtils;
- import org.w3c.dom.Document;
- /**
- * ImporterInformationMissingUtils
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ImporterInformationMissingUtils {
- private IDAccordoCooperazioneFactory idAccordoCooperazioneFactory = null;
- private IDAccordoFactory idAccordoFactory = null;
- private IDServizioFactory idServizioFactory = null;
- private ImportInformationMissingCollection importInformationMissingCollection = null;
- private boolean validateDocuments = false;
- private IProtocolFactory<?> protocolFactory;
- private IValidazioneDocumenti validatoreDocumenti;
- private AbstractXMLUtils xmlUtils;
- private IRegistryReader registryReader;
- private Archive archive;
- private ProtocolFactoryManager protocolFactoryManager;
-
- public ImporterInformationMissingUtils(ImportInformationMissingCollection importInformationMissingCollection,IRegistryReader registryReader,
- boolean validateDocuments,IProtocolFactory<?> protocolFactory, String userLogin, Archive archive) throws Exception{
- this.idAccordoCooperazioneFactory = IDAccordoCooperazioneFactory.getInstance();
- this.idAccordoFactory = IDAccordoFactory.getInstance();
- this.idServizioFactory = IDServizioFactory.getInstance();
- this.importInformationMissingCollection = importInformationMissingCollection;
- this.validateDocuments = validateDocuments;
- this.protocolFactory = protocolFactory;
- this.validatoreDocumenti = this.protocolFactory.createValidazioneDocumenti();
- this.xmlUtils = MessageXMLUtils.DEFAULT;
- this.registryReader = registryReader;
- this.archive = archive;
- this.protocolFactoryManager = ProtocolFactoryManager.getInstance();
- }
-
-
-
- public void validateAndFillInformationMissing(Openspcoop2 archiveInformationMissingWizard, boolean delete) throws Exception{
-
- ImportInformationMissingException infoException = null;
- String objectId = null;
- String objectIdDescription = null;
- ImportInformationMissing importInformationMissing = null;
- boolean throwException = false;
- try{
-
- // -------- requisiti --------------
- if(!throwException && archiveInformationMissingWizard.getWizard()!=null &&
- archiveInformationMissingWizard.getWizard().getRequisiti()!=null &&
- archiveInformationMissingWizard.getWizard().getRequisiti().getInput()!=null &&
- archiveInformationMissingWizard.getWizard().getRequisiti().getInput().sizeProprietaList()>0) {
-
- boolean existsRequisitiInput = false;
- for (ProprietaRequisitoInput pInput : archiveInformationMissingWizard.getWizard().getRequisiti().getInput().getProprietaList()) {
- if(!delete || pInput.isUseInDelete()) {
- existsRequisitiInput = true;
- break;
- }
- }
-
- if(existsRequisitiInput) {
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = Costanti.REQUISITI_INPUT_RACCOLTI;
- objectIdDescription = archiveInformationMissingWizard.getWizard().getRequisiti().getInput().getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- if(importInformationMissing==null || importInformationMissing.getRequisitiInput()==null || importInformationMissing.getRequisitiInput().isEmpty()){
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingRequisitiInfoInput(true);
- infoException.setMissingRequisitiInfoInputObject(archiveInformationMissingWizard.getWizard().getRequisiti().getInput());
- throwException = true;
- }
-
- if(throwException) {
- throw infoException;
- }
-
- }
-
- }
-
- HashMap<String, String> requisitiInput = null;
- if(this.importInformationMissingCollection!=null && this.importInformationMissingCollection.exists(org.openspcoop2.protocol.engine.constants.Costanti.REQUISITI_INPUT_RACCOLTI)) {
- ImportInformationMissing miss = this.importInformationMissingCollection.get(org.openspcoop2.protocol.engine.constants.Costanti.REQUISITI_INPUT_RACCOLTI);
- if(miss!=null) {
- requisitiInput = miss.getRequisitiInput();
- }
- }
-
-
-
- int indexInputPage = 0;
-
- for (Operazione archiveInformationMissing: archiveInformationMissingWizard.getOperazioneList()) {
-
- indexInputPage ++;
-
- if(throwException) {
- break;
- }
-
-
- // -------- Accordi di Servizio Parte Comune (Gestione Referente nei protocolli che non lo supportano) --------
- ImporterInformationMissingSetter.setInformationMissingReferenteAPI(this.archive, this.registryReader);
-
-
-
- // -------- soggetto --------------
-
- if(!throwException && archiveInformationMissing.sizeSoggettoList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeSoggettoList(); i++) {
- org.openspcoop2.protocol.information_missing.Soggetto soggettoMissingInfo =
- archiveInformationMissing.getSoggetto(i);
-
- if(soggettoMissingInfo.getConditions()!=null) {
- if(checkConditions(soggettoMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingSoggetto-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = soggettoMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (soggettoMissingInfo.getTipo()) {
- case RIFERIMENTO:
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int j = 0; j < this.archive.getSoggetti().size(); j++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(j);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- updateInfo = true;
- }else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoSoggetto(true);
- if(soggettoMissingInfo.getTipoPdd()!=null)
- infoException.setMissingInfoSoggetto_tipoPdD(soggettoMissingInfo.getTipoPdd().getValue());
- throwException = true;
- }
- break;
- case CONNETTORE:
- if(delete==false) {
- if(importInformationMissing!=null && importInformationMissing.getInvocazioneServizio()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoInvocazioneServizio(true);
- if(soggettoMissingInfo.getTipoPdd()!=null)
- infoException.setMissingInfoSoggetto_tipoPdD(soggettoMissingInfo.getTipoPdd().getValue());
- throwException = true;
- }
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(soggettoMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(soggettoMissingInfo.getHeader());
- infoException.setMissingInfoFooter(soggettoMissingInfo.getFooter());
- infoException.setMissingInfoDefault(soggettoMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- IDSoggetto importInformationMissing_soggetto = null;
- Connettore importInformationMissing_connettore = null;
- if(importInformationMissing!=null){
- importInformationMissing_soggetto = importInformationMissing.getSoggetto();
- importInformationMissing_connettore = importInformationMissing.getConnettore();
- }
- ImporterInformationMissingSetter.setInformationMissingSoggetto(this.archive, soggettoMissingInfo,
- importInformationMissing_soggetto, importInformationMissing_connettore);
- }
- else{
- break;
- }
-
- }
- }
-
- // -------- input --------------
-
- if(!throwException && archiveInformationMissing.sizeInputList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeInputList(); i++) {
- org.openspcoop2.protocol.information_missing.Input inputMissingInfo =
- archiveInformationMissing.getInput(i);
- if(delete) {
- boolean foundPropertyUseInDelete = false;
- for (int j = 0; j < inputMissingInfo.sizeProprietaList(); j++) {
- if(inputMissingInfo.getProprieta(j).isUseInDelete()) {
- foundPropertyUseInDelete = true;
- break;
- }
- }
- if(!foundPropertyUseInDelete) {
- continue;
- }
- }
-
- if(inputMissingInfo.getConditions()!=null) {
- if(checkConditions(inputMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingInput-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = inputMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- if(importInformationMissing==null || importInformationMissing.getInputPlaceholder()==null){
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoInput(true);
- infoException.setMissingInfoInputObject(inputMissingInfo);
- throwException = true;
- }
-
- if(throwException) {
- break;
- }
-
- }
- }
-
- // -------- servizioApplicativo --------------
-
- if(!throwException && archiveInformationMissing.sizeServizioApplicativoList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeServizioApplicativoList(); i++) {
- org.openspcoop2.protocol.information_missing.ServizioApplicativo saMissingInfo =
- archiveInformationMissing.getServizioApplicativo(i);
-
- if(saMissingInfo.getConditions()!=null) {
- if(checkConditions(saMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingServizioApplicativo-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = saMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (saMissingInfo.getTipo()) {
- case RIFERIMENTO:
- // nop; non gestito (Da realizzare per assegnare lo stesso servizio applicativo a piu' porte)
- break;
- case CONNETTORE:
- if(delete==false) {
- if(importInformationMissing!=null && importInformationMissing.getInvocazioneServizio()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoInvocazioneServizio(true);
- throwException = true;
- }
- }
- break;
- case CREDENZIALI_ACCESSO_PDD:
- if(delete==false) {
- if(importInformationMissing!=null && importInformationMissing.getCredenziali()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoCredenziali(true);
- throwException = true;
- }
- }
- break;
- case ALLINEA_CREDENZIALI_PD:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(saMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(saMissingInfo.getHeader());
- infoException.setMissingInfoFooter(saMissingInfo.getFooter());
- infoException.setMissingInfoDefault(saMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- InvocazioneServizio importInformationMissing_invocazioneServizio = null;
- Credenziali importInformationMissing_credenziali = null;
- if(importInformationMissing!=null){
- importInformationMissing_invocazioneServizio = importInformationMissing.getInvocazioneServizio();
- importInformationMissing_credenziali = importInformationMissing.getCredenziali();
- }
- ImporterInformationMissingSetter.setInformationMissingServizioApplicativo(this.archive, saMissingInfo,
- importInformationMissing_invocazioneServizio,importInformationMissing_credenziali);
- }
- else{
- break;
- }
- }
- }
-
- // -------- accordiCooperazione --------------
-
- if(!throwException && archiveInformationMissing.sizeAccordoCooperazioneList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeAccordoCooperazioneList(); i++) {
- org.openspcoop2.protocol.information_missing.AccordoCooperazione acMissingInfo =
- archiveInformationMissing.getAccordoCooperazione(i);
-
- if(acMissingInfo.getConditions()!=null) {
- if(checkConditions(acMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingAccordoCooperazione-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = acMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (acMissingInfo.getTipo()) {
- case RIFERIMENTO:
- if(importInformationMissing!=null && importInformationMissing.getIdAccordoCooperazione()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoAccordoCooperazione(true);
- throwException = true;
- }
- break;
- case STATO_ARCHIVIO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(acMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(acMissingInfo.getHeader());
- infoException.setMissingInfoFooter(acMissingInfo.getFooter());
- infoException.setMissingInfoDefault(acMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- IDAccordoCooperazione importInformationMissing_idAccordoCooperazione = null;
- if(importInformationMissing!=null){
- importInformationMissing_idAccordoCooperazione = importInformationMissing.getIdAccordoCooperazione();
- }
- ImporterInformationMissingSetter.setInformationMissingAccordoCooperazione(this.archive, acMissingInfo,
- importInformationMissing_idAccordoCooperazione);
- }
- else{
- break;
- }
- }
- }
-
-
- // -------- accordiServizioParteComune --------------
-
- if(!throwException && archiveInformationMissing.sizeAccordoServizioParteComuneList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioParteComuneList(); i++) {
- org.openspcoop2.protocol.information_missing.AccordoServizioParteComune asMissingInfo =
- archiveInformationMissing.getAccordoServizioParteComune(i);
-
- if(asMissingInfo.getConditions()!=null) {
- if(checkConditions(asMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingAccordoServizioParteComune-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = asMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (asMissingInfo.getTipo()) {
- case RIFERIMENTO:
- if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoAccordoServizioParteComune(true);
- throwException = true;
- }
- break;
- case STATO_ARCHIVIO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(asMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(asMissingInfo.getHeader());
- infoException.setMissingInfoFooter(asMissingInfo.getFooter());
- infoException.setMissingInfoDefault(asMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- IDAccordo importInformationMissing_idAccordo = null;
- if(importInformationMissing!=null){
- importInformationMissing_idAccordo = importInformationMissing.getIdAccordoServizioParteComune();
- }
- ImporterInformationMissingSetter.setInformationMissingAccordoServizioParteComune(this.archive, asMissingInfo,
- importInformationMissing_idAccordo);
- }
- else{
- break;
- }
- }
- }
-
-
- // -------- accordoServizioParteSpecifica --------------
-
- if(!throwException && archiveInformationMissing.sizeAccordoServizioParteSpecificaList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioParteSpecificaList(); i++) {
- org.openspcoop2.protocol.information_missing.AccordoServizioParteSpecifica aspsMissingInfo =
- archiveInformationMissing.getAccordoServizioParteSpecifica(i);
-
- if(aspsMissingInfo.getConditions()!=null) {
- if(checkConditions(aspsMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingAPS-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = aspsMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (aspsMissingInfo.getTipo()) {
- case CONNETTORE:
- if(delete==false) {
- if(importInformationMissing!=null && importInformationMissing.getConnettore()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoConnettore(true);
- throwException = true;
- }
- }
- break;
- case STATO_ARCHIVIO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(aspsMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(aspsMissingInfo.getHeader());
- infoException.setMissingInfoFooter(aspsMissingInfo.getFooter());
- infoException.setMissingInfoDefault(aspsMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- Connettore importInformationMissing_connettore = null;
- if(importInformationMissing!=null){
- importInformationMissing_connettore = importInformationMissing.getConnettore();
- }
- ImporterInformationMissingSetter.setInformationMissingAccordoServizioParteSpecifica(this.archive, aspsMissingInfo,
- importInformationMissing_connettore);
- }
- else{
- break;
- }
- }
- }
-
- // -------- accordiServizioComposto --------------
-
- if(!throwException && archiveInformationMissing.sizeAccordoServizioCompostoList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeAccordoServizioCompostoList(); i++) {
- org.openspcoop2.protocol.information_missing.AccordoServizioParteComune asMissingInfo =
- archiveInformationMissing.getAccordoServizioComposto(i);
-
- if(asMissingInfo.getConditions()!=null) {
- if(checkConditions(asMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingAccordoServizioComposto-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = asMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (asMissingInfo.getTipo()) {
- case RIFERIMENTO:
- if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoAccordoServizioParteComune(true);
- throwException = true;
- }
- break;
- case STATO_ARCHIVIO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(asMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(asMissingInfo.getHeader());
- infoException.setMissingInfoFooter(asMissingInfo.getFooter());
- infoException.setMissingInfoDefault(asMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- IDAccordo importInformationMissing_idAccordo = null;
- if(importInformationMissing!=null){
- importInformationMissing_idAccordo = importInformationMissing.getIdAccordoServizioParteComune();
- }
- ImporterInformationMissingSetter.setInformationMissingAccordoServizioComposto(this.archive, asMissingInfo,
- importInformationMissing_idAccordo);
- }
- else{
- break;
- }
- }
- }
-
- // -------- fruitori --------------
-
- if(!throwException && archiveInformationMissing.sizeFruitoreList()>0){
- for (int i = 0; i < archiveInformationMissing.sizeFruitoreList(); i++) {
- org.openspcoop2.protocol.information_missing.Fruitore fruitoreMissingInfo =
- archiveInformationMissing.getFruitore(i);
-
- if(fruitoreMissingInfo.getConditions()!=null) {
- if(checkConditions(fruitoreMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingFruitore-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = fruitoreMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (fruitoreMissingInfo.getTipo()) {
- case CONNETTORE:
- if(delete==false) {
- if(importInformationMissing!=null && importInformationMissing.getConnettore()!=null){
- updateInfo = true;
- }
- else{
- infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMissingInfoConnettore(true);
- throwException = true;
- }
- }
- break;
- case STATO_ARCHIVIO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(fruitoreMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(fruitoreMissingInfo.getHeader());
- infoException.setMissingInfoFooter(fruitoreMissingInfo.getFooter());
- infoException.setMissingInfoDefault(fruitoreMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- Connettore importInformationMissing_connettore = null;
- if(importInformationMissing!=null){
- importInformationMissing_connettore = importInformationMissing.getConnettore();
- }
- ImporterInformationMissingSetter.setInformationMissingFruitore(this.archive, fruitoreMissingInfo,
- importInformationMissing_connettore);
- }
- else{
- break;
- }
- }
- }
-
- // -------- porte delegate --------------
-
- if(!throwException && archiveInformationMissing.sizePortaDelegataList()>0){
- for (int i = 0; i < archiveInformationMissing.sizePortaDelegataList(); i++) {
- org.openspcoop2.protocol.information_missing.PortaDelegata portaMissingInfo =
- archiveInformationMissing.getPortaDelegata(i);
-
- if(portaMissingInfo.getConditions()!=null) {
- if(checkConditions(portaMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingPortaDelegata-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = portaMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (portaMissingInfo.getTipo()) {
- case STATO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(portaMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(portaMissingInfo.getHeader());
- infoException.setMissingInfoFooter(portaMissingInfo.getFooter());
- infoException.setMissingInfoDefault(portaMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- ImporterInformationMissingSetter.setInformationMissingPortaDelegata(this.archive, portaMissingInfo);
- }
- else{
- break;
- }
- }
- }
-
- // -------- porte applicative --------------
-
- if(!throwException && archiveInformationMissing.sizePortaApplicativaList()>0){
- for (int i = 0; i < archiveInformationMissing.sizePortaApplicativaList(); i++) {
- org.openspcoop2.protocol.information_missing.PortaApplicativa portaMissingInfo =
- archiveInformationMissing.getPortaApplicativa(i);
-
- if(portaMissingInfo.getConditions()!=null) {
- if(checkConditions(portaMissingInfo.getConditions(),requisitiInput)==false) {
- continue;
- }
- }
-
- // *** object id ***
-
- importInformationMissing = null;
- objectId = "[[InformationMissingPortaApplicativa-"+indexInputPage+"-"+i+"]]";
- objectIdDescription = portaMissingInfo.getDescrizione();
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- // *** campi da verificare ***
- boolean updateInfo = false;
- switch (portaMissingInfo.getTipo()) {
- case STATO:
- if(delete==false) {
- updateInfo = true;
- }
- break;
- }
- if(infoException!=null) {
- infoException.setMissingInfoProtocollo(portaMissingInfo.getProtocollo());
- infoException.setMissingInfoHeader(portaMissingInfo.getHeader());
- infoException.setMissingInfoFooter(portaMissingInfo.getFooter());
- infoException.setMissingInfoDefault(portaMissingInfo.getDefault());
- }
-
- if(!throwException && updateInfo){
- // Se non sono state lanciate eccezioni a questo punto posso usare le informazioni salvate di information missing per riempire
- // le informazioni mancanti negli altri archivi, altrimenti poi i metodi sottostanti lanceranno le relative informazioni
- // di information missing
- ImporterInformationMissingSetter.setInformationMissingPortaApplicativa(this.archive, portaMissingInfo);
- }
- else{
- break;
- }
- }
- }
-
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException){
- throw infoException;
- }
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
- public static boolean checkConditions(ConditionsType conditions, HashMap<String, String> map) {
- if(conditions==null) {
- return false;
- }
- boolean result = _checkConditions(conditions, map);
- if(conditions!=null && conditions.isNot()) {
- return !result;
- }
- else {
- return result;
- }
- }
- private static boolean _checkConditions(ConditionsType conditions, HashMap<String, String> map) {
- boolean and = conditions!=null && conditions.isAnd();
- if(conditions!=null && conditions.sizeProprietaList()>0) {
- for (ConditionType cType : conditions.getProprietaList()) {
- if(map==null || map.isEmpty() || map.containsKey(cType.getNome())==false) {
- if(cType.isNot()==false && and) {
- return false;
- }
- }
- String value = null;
- if(map!=null){
- value = map.get(cType.getNome());
- }
-
- if(value==null) {
- if(and) {
- return false;
- }
- else {
- continue; // vedo il prossimo, al massimo in fondo torno false se non sono and
- }
- }
-
- if(cType.isNot()) {
- if(cType.getValore().equals(value)) {
- if(and) {
- return false;
- }
- }
- else {
- if(and==false) {
- return true;
- }
- }
- }
- else {
- if(cType.getValore().equals(value)==false) {
- if(and) {
- return false;
- }
- }
- else {
- if(and==false) {
- return true;
- }
- }
- }
-
- }
- }
- if(and) {
- return true;
- }
- else {
- return false;
- }
- }
-
-
- public void validateAndFillServizioApplicativo(ArchiveServizioApplicativo archiveServizioApplicativo) throws Exception{
-
- // *** object id ***
-
- ServizioApplicativo sa = archiveServizioApplicativo.getServizioApplicativo();
- String uri = sa.getNome();
- if(sa.getTipoSoggettoProprietario()!=null && sa.getNomeSoggettoProprietario()!=null){
- uri = uri +":"+sa.getTipoSoggettoProprietario()+"/"+sa.getNomeSoggettoProprietario();
- }
- String objectId = "[[SA]]"+uri;
- String objectIdDescription = "Servizio Applicativo ["+uri+"]";
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- try{
-
- // *** campi da verificare ***
-
- String tipoSoggettoProprietario = sa.getTipoSoggettoProprietario();
- String nomeSoggettoProprietario = sa.getNomeSoggettoProprietario();
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- sa.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
- sa.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica documenti presenti all'interno dell'archivio ***
- // non esistono
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
-
-
- public void validateAndFillPortaDelegata(ArchivePortaDelegata archivePortaDelegata) throws Exception{
-
- // *** object id ***
-
- PortaDelegata pd = archivePortaDelegata.getPortaDelegata();
- String uri = pd.getNome();
- if(pd.getTipoSoggettoProprietario()!=null && pd.getNomeSoggettoProprietario()!=null){
- uri = uri +":"+pd.getTipoSoggettoProprietario()+"/"+pd.getNomeSoggettoProprietario();
- }
- String objectId = "[[PD]]"+uri;
- String objectIdDescription = "PortaDelegata ["+uri+"]";
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- try{
-
- // *** campi da verificare ***
-
- String tipoSoggettoProprietario = pd.getTipoSoggettoProprietario();
- String nomeSoggettoProprietario = pd.getNomeSoggettoProprietario();
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- pd.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
- pd.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica documenti presenti all'interno dell'archivio ***
- // non esistono
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
-
-
-
- public void validateAndFillPortaApplicativa(ArchivePortaApplicativa archivePortaApplicativa) throws Exception{
-
- // *** object id ***
-
- PortaApplicativa pa = archivePortaApplicativa.getPortaApplicativa();
- String uri = pa.getNome();
- if(pa.getTipoSoggettoProprietario()!=null && pa.getNomeSoggettoProprietario()!=null){
- uri = uri +":"+pa.getTipoSoggettoProprietario()+"/"+pa.getNomeSoggettoProprietario();
- }
- String objectId = "[[PD]]"+uri;
- String objectIdDescription = "PortaApplicativa ["+uri+"]";
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- try{
-
- // *** campi da verificare ***
-
- String tipoSoggettoProprietario = pa.getTipoSoggettoProprietario();
- String nomeSoggettoProprietario = pa.getNomeSoggettoProprietario();
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(tipoSoggettoProprietario==null || nomeSoggettoProprietario==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- pa.setTipoSoggettoProprietario(importInformationMissing.getSoggetto().getTipo());
- pa.setNomeSoggettoProprietario(importInformationMissing.getSoggetto().getNome());
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica documenti presenti all'interno dell'archivio ***
- // non esistono
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
-
-
- public void validateAndFillAccordoCooperazione(ArchiveAccordoCooperazione archiveAccordoCooperazione) throws Exception{
-
- // *** object id ***
-
- AccordoCooperazione ac = archiveAccordoCooperazione.getAccordoCooperazione();
- String uri = this.idAccordoCooperazioneFactory.getUriFromAccordo(ac);
- String objectId = "[[AC]]"+uri;
- String objectIdDescription = "Accordo di Cooperazione ["+uri+"]";
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
- try{
-
- // *** campi da verificare ***
-
- IdSoggetto acSoggettoReferente = ac.getSoggettoReferente();
- Integer versione = ac.getVersione();
- if( (acSoggettoReferente==null || acSoggettoReferente.getTipo()==null || acSoggettoReferente.getNome()==null)
- ||
- versione==null){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(acSoggettoReferente==null || acSoggettoReferente.getTipo()==null || acSoggettoReferente.getNome()==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- IdSoggetto acSoggettoReferenteNew = new IdSoggetto();
- acSoggettoReferenteNew.setTipo(importInformationMissing.getSoggetto().getTipo());
- acSoggettoReferenteNew.setNome(importInformationMissing.getSoggetto().getNome());
- ac.setSoggettoReferente(acSoggettoReferenteNew);
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // versione
- if(versione==null){
- if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
- ac.setVersione(importInformationMissing.getVersione());
- }else{
- infoException.setMissingInfoVersione(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica documenti presenti all'interno dell'archivio ***
-
- if(this.validateDocuments){
-
- ValidazioneResult result = this.validatoreDocumenti.validaDocumenti(ac);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- }
-
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
- public void validateAndFillAccordoServizioParteComune(ArchiveAccordoServizioParteComune archiveAspc,boolean checkCorrelazioneAsincrona) throws Exception{
- this.validateAndFillAccordoServizioEngine(archiveAspc.getAccordoServizioParteComune(),checkCorrelazioneAsincrona);
- }
- public void validateAndFillAccordoServizioParteComune(ArchiveAccordoServizioComposto archiveAsc,boolean checkCorrelazioneAsincrona) throws Exception{
- this.validateAndFillAccordoServizioEngine(archiveAsc.getAccordoServizioParteComune(),checkCorrelazioneAsincrona);
- }
- private void validateAndFillAccordoServizioEngine(AccordoServizioParteComune aspc,boolean checkCorrelazioneAsincrona) throws Exception{
-
- // *** object id ***
-
- String uri = this.idAccordoFactory.getUriFromAccordo(aspc);
- String tipoAccordo = "[[ASPC]]";
- if(aspc.getServizioComposto()!=null){
- tipoAccordo = "[[ASC]]";
- }
- String objectId = tipoAccordo+uri;
- String objectIdDescription = "Accordo di Servizio Parte Comune ["+uri+"]";
- if(aspc.getServizioComposto()!=null){
- objectIdDescription = "Accordo di Servizio Composto ["+uri+"]";
- if(aspc.getServizioComposto().getAccordoCooperazione()!=null && !"".equals(aspc.getServizioComposto().getAccordoCooperazione().trim())){
- objectIdDescription = objectIdDescription + " (rifAccordo: "+aspc.getServizioComposto().getAccordoCooperazione()+")";
- }
- }
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
-
- try{
-
- // *** campi da verificare ***
-
- IdSoggetto aspcSoggettoReferente = aspc.getSoggettoReferente();
- Integer versione = aspc.getVersione();
- boolean informazioniProfiloServiziPresenti = this.isInformazioniProfiloServiziPresenti(aspc,checkCorrelazioneAsincrona);
- String uriAccordoCooperazione = null;
- if(aspc.getServizioComposto()!=null){
- if(aspc.getServizioComposto().getAccordoCooperazione()!=null && !"".equals(aspc.getServizioComposto().getAccordoCooperazione().trim())){
- uriAccordoCooperazione = aspc.getServizioComposto().getAccordoCooperazione();
- }
- }
-
- if( (aspcSoggettoReferente==null || aspcSoggettoReferente.getTipo()==null || aspcSoggettoReferente.getNome()==null)
- ||
- versione==null
- ||
- !informazioniProfiloServiziPresenti
- ||
- ( (aspc.getServizioComposto()!=null) && (uriAccordoCooperazione==null) )
- ){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(aspcSoggettoReferente==null || aspcSoggettoReferente.getTipo()==null || aspcSoggettoReferente.getNome()==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- IdSoggetto aspcSoggettoReferenteNew = new IdSoggetto();
- aspcSoggettoReferenteNew.setTipo(importInformationMissing.getSoggetto().getTipo());
- aspcSoggettoReferenteNew.setNome(importInformationMissing.getSoggetto().getNome());
- aspc.setSoggettoReferente(aspcSoggettoReferenteNew);
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // versione
- if(versione==null){
- if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
- aspc.setVersione(importInformationMissing.getVersione());
- }else{
- infoException.setMissingInfoVersione(true);
- throwException = true;
- }
- }
-
- // info sui servizi
- if(!informazioniProfiloServiziPresenti){
- if(importInformationMissing!=null && importInformationMissing.sizePortTypeList()>0){
- for(int i=0; i<importInformationMissing.sizePortTypeList(); i++){
- aspc.addPortType(importInformationMissing.getPortType(i));
- }
- }
- // ricalcolo se adesso tutte le informazioni sono valide
- informazioniProfiloServiziPresenti = this.isInformazioniProfiloServiziPresenti(aspc,checkCorrelazioneAsincrona);
- if(!informazioniProfiloServiziPresenti){
- infoException.setMissingInfoProfiliServizi(true);
- // elimino tanto verranno ricreati dall'interfaccia
- while(aspc.sizePortTypeList()>0){
- aspc.removePortType(0);
- }
- infoException.setObject(aspc);
- infoException.setClassObject(aspc.getClass());
- throwException = true;
- }
- }
-
- // accordoCooperazione
- if( (aspc.getServizioComposto()!=null) && (uriAccordoCooperazione==null) ){
- if(importInformationMissing!=null && importInformationMissing.getIdAccordoCooperazione()!=null){
- aspc.getServizioComposto().setAccordoCooperazione(this.idAccordoCooperazioneFactory.getUriFromIDAccordo(importInformationMissing.getIdAccordoCooperazione()));
- }else{
- infoException.setMissingInfoAccordoCooperazione(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica documenti presenti all'interno del package ***
-
- if(this.validateDocuments){
-
- ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(aspc);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- result = this.validatoreDocumenti.validaSpecificaConversazione(aspc);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- result = this.validatoreDocumenti.validaDocumenti(aspc);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- }
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
- }
-
- private boolean isInformazioniProfiloServiziPresenti(AccordoServizioParteComune aspc,boolean checkCorrelazioneAsincrona){
- if(aspc==null){
- return false;
- }
-
- if(aspc.getProfiloCollaborazione()==null && aspc.sizePortTypeList()<=0){
- return false;
- }
-
- if(aspc.sizePortTypeList()>0){
- for (int i = 0; i < aspc.sizePortTypeList(); i++) {
- PortType pt = aspc.getPortType(i);
- if(pt==null){
- return false;
- }
- //String profiloCollaborazionePT = pt.getProfiloCollaborazione();
- if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(pt.getProfiloPT())){
- // default
- if(aspc.getProfiloCollaborazione()==null){
- return false;
- }
- //profiloCollaborazionePT = aspc.getProfiloCollaborazione();
- }
- else{
- // ridefinisci
- if(pt.getProfiloCollaborazione()==null && aspc.getProfiloCollaborazione()==null){
- return false;
- }
- }
- for (int j = 0; j < pt.sizeAzioneList(); j++) {
- Operation op = pt.getAzione(j);
- //String profiloCollaborazioneAzione = null;
- if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(op.getProfAzione())){
- // default
- if(aspc.getProfiloCollaborazione()==null && pt.getProfiloCollaborazione()==null){
- return false;
- }
- //profiloCollaborazioneAzione = profiloCollaborazionePT;
- }
- else{
- // ridefinisci
- if(op.getProfiloCollaborazione()==null && pt.getProfiloCollaborazione()==null && aspc.getProfiloCollaborazione()==null){
- return false;
- }
- //profiloCollaborazioneAzione = op.getProfiloCollaborazione();
- }
-
- // check correlazione asincrona
- // Si creano dipendenze circolari.
- // Inoltre non e' possibile importare un package, se prima non e' stato importato quello del correlato.
- // if(checkCorrelazioneAsincrona){
- // if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneAzione) ||
- // CostantiRegistroServizi.ASINCRONO_SIMMETRICO.equals(profiloCollaborazioneAzione)){
- // if(op.getCorrelata()==null){
- // // search correlazione
- // if(existsCorrelazioneAsincrona(aspc.getPortTypeList(), pt.getNome(), op.getNome())==false){
- // return false;
- // }
- // }
- // }
- // }
- }
- }
- }
- else{
-
- }
-
- return true;
- }
-
- // private boolean existsCorrelazioneAsincrona(List<PortType> listPortTypes, String ptName, String opName){
- // for (PortType portType : listPortTypes) {
- // for (Operation operation : portType.getAzioneList()) {
- // if(operation.getNome().equals(opName) && portType.getNome().equals(ptName)){
- // continue;
- // }
- // if(operation.getCorrelata()!=null && opName.equals(operation.getCorrelata())){
- // if(operation.getCorrelataServizio()==null && portType.getNome().equals(ptName)){
- // return true; // correlazione verso altra azione dello stesso port type indicato come parametro;
- // }
- // if(operation.getCorrelataServizio()!=null && operation.getCorrelataServizio().equals(ptName)){
- // return true; // correlazione verso il servizio e l'azione indicata come parametro;
- // }
- // }
- // }
- // }
- // return false;
- // }
-
- public void validateAndFillAccordoServizioParteSpecifica(ArchiveAccordoServizioParteSpecifica archiveAsps,
- Map<String, IDSoggetto> mapIdSoggettoDefault,
- Map<String, Boolean> mapAPIconReferente) throws Exception{
-
- // *** object id ***
- AccordoServizioParteSpecifica asps = archiveAsps.getAccordoServizioParteSpecifica();
- String uri = null;
- if(asps.getTipoSoggettoErogatore()==null || asps.getNomeSoggettoErogatore()==null || asps.getVersione()==null) {
- uri = asps.getTipo()+"/"+asps.getNome();
- }
- else {
- uri = this.idServizioFactory.getUriFromAccordo(asps);
- }
- String objectId = "[[ASPS]]"+uri;
- String objectIdDescription = "Accordo di Servizio Parte Specifica ["+uri+"]";
- if(asps.getAccordoServizioParteComune()!=null && !"".equals(asps.getAccordoServizioParteComune().trim())){
- objectIdDescription = objectIdDescription +" (rifParteComune: "+asps.getAccordoServizioParteComune()+")";
- }
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
-
- try{
- // *** Verifica riferimento Parte Comune ***
- AccordoServizioParteComune aspc = null;
- if(asps.getAccordoServizioParteComune()!=null && !"".equals(asps.getAccordoServizioParteComune().trim())){
- String uriAPC = asps.getAccordoServizioParteComune();
- try{
-
- // Il riferimento potrebbe contenere un nome dinamico rispetto all'erogatore
- if(uriAPC!=null) {
- uriAPC = ImporterInformationMissingSetter.replaceSoggettoProprietarioOrDefault(this.registryReader, uriAPC, asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
- uriAPC = ImporterInformationMissingSetter.replaceSoggettoErogatore(uriAPC, asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore());
- }
-
- IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromUri(uriAPC);
-
- // Gestione SoggettoReferente per verifica riferimento Parte Comune ***
- IProtocolFactory<?> protocolFactory = this.protocolFactoryManager.getProtocolFactoryByOrganizationType(asps.getTipoSoggettoErogatore());
- boolean APIconReferente = mapAPIconReferente.get(protocolFactory.getProtocol());
- if(!APIconReferente) {
- IDSoggetto soggettoDefaultProtocollo = mapIdSoggettoDefault.get(protocolFactory.getProtocol());
- if(!idAccordo.getSoggettoReferente().equals(soggettoDefaultProtocollo)) {
- idAccordo.getSoggettoReferente().setTipo(soggettoDefaultProtocollo.getTipo());
- idAccordo.getSoggettoReferente().setNome(soggettoDefaultProtocollo.getNome());
- }
- }
-
- // Verifica
- aspc = this.registryReader.getAccordoServizioParteComune(idAccordo);
- if(aspc==null){
- throw new Exception("getAccordoServizioParteComune return null");
- }
- //}catch(RegistryNotFound notFound){
- }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getAccordiServizioParteComune()!=null && this.archive.getAccordiServizioParteComune().size()>0){
- for (int i = 0; i < this.archive.getAccordiServizioParteComune().size(); i++) {
- ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioParteComune().get(i);
- IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
- if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
- found = true;
- aspc = archiveAccordo.getAccordoServizioParteComune();
- break;
- }
- }
- }
- if(!found){
- if(this.archive.getAccordiServizioComposto()!=null && this.archive.getAccordiServizioComposto().size()>0){
- for (int i = 0; i < this.archive.getAccordiServizioComposto().size(); i++) {
- ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioComposto().get(i);
- IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
- if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
- found = true;
- aspc = archiveAccordo.getAccordoServizioParteComune();
- break;
- }
- }
- }
- }
- if(!found){
- throw new ProtocolException("Accordo di Servizio Parte Comune ["+uriAPC+"], riferito dall'archivio, non esiste",notFound);
- }
- }
- }
-
-
- // *** campi da verificare ***
- String tipoSoggettoErogatore = asps.getTipoSoggettoErogatore();
- String nomeSoggettoErogatore = asps.getNomeSoggettoErogatore();
- Integer versione = asps.getVersione();
-
- if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null || versione==null || aspc==null ){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- asps.setTipoSoggettoErogatore(importInformationMissing.getSoggetto().getTipo());
- asps.setNomeSoggettoErogatore(importInformationMissing.getSoggetto().getNome());
- // if(asps.getServizio().getConnettore().getNome()==null){
- // String nomeConn = "CNT_" + importInformationMissing.getSoggetto().getTipo() + "/" + importInformationMissing.getSoggetto().getNome() + "_" +
- // asps.getServizio().getTipo() + "/" + asps.getServizio().getNome();
- // asps.getServizio().getConnettore().setNome(nomeConn);
- // }
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // versione
- if(versione==null){
- if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
- asps.setVersione(importInformationMissing.getVersione());
- }else{
- infoException.setMissingInfoVersione(true);
- throwException = true;
- }
- }
-
- // accordoServizioParteComune
- if(aspc==null){
- if(importInformationMissing!=null && importInformationMissing.getIdAccordoServizioParteComune()!=null){
- asps.setAccordoServizioParteComune(this.idAccordoFactory.getUriFromIDAccordo(importInformationMissing.getIdAccordoServizioParteComune()));
- }else{
- infoException.setMissingInfoAccordoServizioParteComune(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- if(aspc!=null){
-
- // *** Verifica documenti presenti all'interno del package ***
- List<String> serviziIdentificatiNellaParteComune = this.letturaServiziDefinitiParteComune(asps, aspc);
- if(this.validateDocuments){
-
- ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(asps, aspc);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- result = this.validatoreDocumenti.validaDocumenti(asps);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- verificaMappingPortTypeBindingInRiferimentoParteComune(asps, aspc, serviziIdentificatiNellaParteComune);
-
- }
-
-
- // *** Verifica portType riferito ***
- if(importInformationMissing!=null && importInformationMissing.getPortTypeImplemented()!=null){
- // Il nome deve essere gia' corretto dentro l'archivio. Altrimenti tutti i riferimenti poi (mapping.id, porte applicative ....) sono sbagliati.
- // if(asps.getPortType()!=null && asps.getPortType().equals(asps.getNome())){
- // asps.setNome(importInformationMissing.getPortTypeImplemented());
- // }
- asps.setPortType(importInformationMissing.getPortTypeImplemented());
- }
- if(asps.getPortType()!=null){
- if(serviziIdentificatiNellaParteComune.contains(asps.getPortType())==false){
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- infoException.setMismatchPortTypeRifServiziParteComune(true, asps.getPortType(), serviziIdentificatiNellaParteComune);
- throw infoException;
- }
- }
-
- }
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
-
- }
-
- private List<String> letturaServiziDefinitiParteComune(Fruitore fruitore,AccordoServizioParteSpecifica asps,AccordoServizioParteComune aspc){
- Boolean correlato = null;
-
- // Identificazione attraverso WSDL Implementativo
- if(fruitore.getByteWsdlImplementativoErogatore()!=null){
- correlato = false;
- }
- else if(fruitore.getByteWsdlImplementativoFruitore()!=null){
- correlato = true;
- }
- else if(asps.getByteWsdlImplementativoErogatore()!=null){
- correlato = false;
- }
- else if(asps.getByteWsdlImplementativoFruitore()!=null){
- correlato = true;
- }
-
- // Identificazione attraverso tipologia
- if(correlato==null){
- TipologiaServizio tipologiaServizio = TipologiaServizio.NORMALE;
- if(asps!=null){
- tipologiaServizio = asps.getTipologiaServizio();
- }
- correlato = TipologiaServizio.CORRELATO.equals(tipologiaServizio);
- }
-
- return this.letturaServiziDefinitiParteComune(correlato, aspc);
- }
- private List<String> letturaServiziDefinitiParteComune(AccordoServizioParteSpecifica asps,AccordoServizioParteComune aspc){
- Boolean correlato = null;
-
- // Identificazione attraverso WSDL Implementativo
- if(asps!=null && asps.getByteWsdlImplementativoErogatore()!=null){
- correlato = false;
- }
- else if(asps!=null && asps.getByteWsdlImplementativoFruitore()!=null){
- correlato = true;
- }
-
- // Identificazione attraverso tipologia
- if(correlato==null){
- TipologiaServizio tipologiaServizio = TipologiaServizio.NORMALE;
- if(asps!=null){
- tipologiaServizio = asps.getTipologiaServizio();
- }
- correlato = TipologiaServizio.CORRELATO.equals(tipologiaServizio);
- }
-
- return this.letturaServiziDefinitiParteComune(correlato, aspc);
- }
- private List<String> letturaServiziDefinitiParteComune(boolean correlato,AccordoServizioParteComune aspc){
- List<String> serviziIdentificatiNellaParteComune = new ArrayList<>();
-
- // Lettura Accordo di Servizio Parte Comune di OpenSPCoop
- // NOTA: aspc di openspcoop contiene sia le parti comuni "normali" che quelle "servizio composto"
- for(int i=0; i<aspc.sizePortTypeList(); i++){
- // faccio vedere solo i servizi correlati o i servizi normali, a seconda se e' stato fornito il wsdl implementativo fruitore o erogatore
- PortType pt = aspc.getPortType(i);
- boolean servizioCorrelato = false;
- for(int j=0; j<pt.sizeAzioneList(); j++){
- Operation op = pt.getAzione(j);
- // NOTA: solo un asincrono simmetrico o asincrono asimmetrico (verso servizio diverso) e' correlato!
- if(op.getCorrelataServizio()!=null && !pt.getNome().equals(op.getCorrelataServizio()) && op.getCorrelata()!=null){
- servizioCorrelato = true;
- break;
- }
- }
- if(correlato){
- if(servizioCorrelato){
- serviziIdentificatiNellaParteComune.add(aspc.getPortType(i).getNome());
- }
- }else{
- if(!servizioCorrelato){
- serviziIdentificatiNellaParteComune.add(aspc.getPortType(i).getNome());
- }
- }
- }
-
- return serviziIdentificatiNellaParteComune;
- }
-
- private void verificaMappingPortTypeBindingInRiferimentoParteComune(Fruitore fruitore,AccordoServizioParteSpecifica asps,
- AccordoServizioParteComune aspc,
- List<String> serviziIdentificatiNellaParteComune) throws Exception {
- // Identificazione WSDL Implementativo
- byte[]wsdlImplementativo = null;
- String tipoWSDL = "WSDL Implementativo";
- if(fruitore.getByteWsdlImplementativoErogatore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
- tipoWSDL = "WSDL Implementativo Erogatore";
- }
- else if(fruitore.getByteWsdlImplementativoFruitore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
- tipoWSDL = "WSDL Implementativo Fruitore";
- }
- else if(asps.getByteWsdlImplementativoErogatore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
- tipoWSDL = "WSDL Implementativo Erogatore";
- }
- else if(asps.getByteWsdlImplementativoFruitore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
- tipoWSDL = "WSDL Implementativo Fruitore";
- }
- if(wsdlImplementativo!=null){
- this.verificaMappingPortTypeBindingInRiferimentoParteComune(wsdlImplementativo, tipoWSDL, aspc, serviziIdentificatiNellaParteComune);
- }
- }
- private void verificaMappingPortTypeBindingInRiferimentoParteComune(AccordoServizioParteSpecifica asps,
- AccordoServizioParteComune aspc,
- List<String> serviziIdentificatiNellaParteComune) throws Exception {
- // Identificazione WSDL Implementativo
- byte[]wsdlImplementativo = null;
- String tipoWSDL = "WSDL Implementativo";
- if(asps.getByteWsdlImplementativoErogatore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoErogatore();
- tipoWSDL = "WSDL Implementativo Erogatore";
- }
- else if(asps.getByteWsdlImplementativoFruitore()!=null){
- wsdlImplementativo = asps.getByteWsdlImplementativoFruitore();
- tipoWSDL = "WSDL Implementativo Fruitore";
- }
- if(wsdlImplementativo!=null){
- this.verificaMappingPortTypeBindingInRiferimentoParteComune(wsdlImplementativo, tipoWSDL, aspc, serviziIdentificatiNellaParteComune);
- }
- }
- private void verificaMappingPortTypeBindingInRiferimentoParteComune( byte[]wsdlImplementativo,String tipoWSDL,
- AccordoServizioParteComune aspc,
- List<String> serviziIdentificatiNellaParteComune) throws Exception {
-
- List<String> portTypesImplemented = new ArrayList<>();
- try{
-
- // Lettura WSDL Parte Specifica
- Document d = this.xmlUtils.newDocument(wsdlImplementativo);
- DefinitionWrapper wsdl = new DefinitionWrapper(d,this.xmlUtils,false,false);
- Map<QName,QName> mapBindingToPortTypeImplemented = wsdl.getMapPortTypesImplementedBinding();
- for (QName binding : mapBindingToPortTypeImplemented.keySet()) {
- QName portType = mapBindingToPortTypeImplemented.get(binding);
- String portTypeName = portType.getLocalPart();
- if(portTypesImplemented.contains(portTypeName)==false){
- portTypesImplemented.add(portTypeName);
- }
- }
- }catch(Exception e){
- String msgErrore = "La verifica dei port-types, implementati dai binding del "+tipoWSDL+", rispetto ai servizi definiti nell'accordo di servizio parte comune, ha riscontrato un errore: "+e.getMessage();
- this.protocolFactory.getLogger().error(msgErrore,e);
- throw new Exception(msgErrore,e);
- }
-
- // Controllo
- for (String pt : portTypesImplemented) {
- boolean trovato = false;
- for (String servizioOpenSPCoop : serviziIdentificatiNellaParteComune) {
- if(pt.equals(servizioOpenSPCoop)){
- trovato=true;
- break;
- }
- }
- if(!trovato){
- throw new Exception("Il PortType "+pt+" implementato nei binding presenti nel "+tipoWSDL+" non è uno dei servizi definiti nell'accordo di servizio parte comune");
- }
- }
- }
-
-
-
- @SuppressWarnings("deprecation")
- public void validateAndFillFruitore(ArchiveFruitore archiveFruitore) throws Exception{
-
- // *** object id ***
- Fruitore fruitore = archiveFruitore.getFruitore();
- IDServizio asps = archiveFruitore.getIdAccordoServizioParteSpecifica();
- String uri = fruitore.getTipo()+"/"+fruitore.getNome()+"_"+this.idServizioFactory.getUriFromIDServizio(asps);
- String objectId = "[[Fruitore]]"+uri;
- String objectIdDescription = "Fruitore ["+fruitore.getTipo()+"/"+fruitore.getNome()
- +"] dell'Accordo di Servizio Parte Specifica ["+this.idServizioFactory.getUriFromIDServizio(asps)+"]";
- ImportInformationMissing importInformationMissing = null;
- if(this.importInformationMissingCollection!=null){
- importInformationMissing = this.importInformationMissingCollection.get(objectId);
- }
-
-
- try{
-
- // *** campi da verificare ***
- String tipoSoggettoErogatore = null;
- String nomeSoggettoErogatore = null;
- if(asps.getSoggettoErogatore()!=null){
- tipoSoggettoErogatore = asps.getSoggettoErogatore().getTipo();
- nomeSoggettoErogatore = asps.getSoggettoErogatore().getNome();
- }
- Integer versione = asps.getVersione();
-
- if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null || versione==null ){
-
- // provo ad utilizzare le informazioni eventualmente presenti nell'oggetto importInformationMissing
- // se non sono presenti nemmeno in tale oggetto, sollevo eccezione
- ImportInformationMissingException infoException = new ImportInformationMissingException(objectId,objectIdDescription);
- boolean throwException = false;
-
- // soggetto
- if(tipoSoggettoErogatore==null || nomeSoggettoErogatore==null){
- if(importInformationMissing!=null && importInformationMissing.getSoggetto()!=null){
- if(!this.registryReader.existsSoggetto(importInformationMissing.getSoggetto())){
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getSoggetti()!=null && this.archive.getSoggetti().size()>0){
- for (int i = 0; i < this.archive.getSoggetti().size(); i++) {
- ArchiveSoggetto archiveSoggetto = this.archive.getSoggetti().get(i);
- if(archiveSoggetto.getIdSoggetto().equals(importInformationMissing.getSoggetto())){
- found = true;
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Il Soggetto "+importInformationMissing.getSoggetto().toString()+" non esiste (indicato in ImportInformationMissing parameter??)");
- }
- }
- if(asps.getSoggettoErogatore()==null){
- asps.setSoggettoErogatore(importInformationMissing.getSoggetto());
- }
- }else{
- infoException.setMissingInfoSoggetto(true);
- throwException = true;
- }
- }
-
- // versione
- if(versione==null){
- if(importInformationMissing!=null && importInformationMissing.getVersione()!=null){
- asps.setVersione(importInformationMissing.getVersione());
- }else{
- infoException.setMissingInfoVersione(true);
- throwException = true;
- }
- }
-
- // se e' stata rilevata una mancanza sollevo eccezione
- if(throwException)
- throw infoException;
- }
-
-
- // *** Verifica riferimento Parte Specifica ***
- AccordoServizioParteSpecifica accordoAsps = null;
- try{
- accordoAsps = this.registryReader.getAccordoServizioParteSpecifica(asps);
- if(accordoAsps==null){
- throw new Exception("getAccordoServizioParteSpecifica return null");
- }
- //}catch(RegistryNotFound notFound){
- }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getAccordiServizioParteSpecifica()!=null && this.archive.getAccordiServizioParteSpecifica().size()>0){
- for (int i = 0; i < this.archive.getAccordiServizioParteSpecifica().size(); i++) {
- ArchiveAccordoServizioParteSpecifica archiveAccordo = this.archive.getAccordiServizioParteSpecifica().get(i);
- IDServizio idAccordo = this.idServizioFactory.getIDServizioFromAccordo(archiveAccordo.getAccordoServizioParteSpecifica());
- if(idAccordo.equals(asps)){
- found = true;
- accordoAsps = archiveAccordo.getAccordoServizioParteSpecifica();
- break;
- }
- }
- }
- if(!found){
- throw new ProtocolException("Accordo di Servizio Parte Specifica ["+asps+"], riferito dall'archivio fruitore, non esiste",notFound);
- }
- }
-
-
-
- // *** Verifica riferimento Parte Comune ***
- AccordoServizioParteComune aspc = null;
- String uriAPC = null;
- try{
- // Il riferimento potrebbe contenere un nome dinamico rispetto all'erogatore
- uriAPC = accordoAsps.getAccordoServizioParteComune();
- if(uriAPC!=null) {
- uriAPC = ImporterInformationMissingSetter.replaceSoggettoProprietarioOrDefault(this.registryReader, uriAPC, asps.getSoggettoErogatore().getTipo(), asps.getSoggettoErogatore().getNome());
- uriAPC = ImporterInformationMissingSetter.replaceSoggettoErogatore(uriAPC, asps.getSoggettoErogatore().getTipo(), asps.getSoggettoErogatore().getNome());
- }
-
- aspc = this.registryReader.getAccordoServizioParteComune(this.idAccordoFactory.getIDAccordoFromUri(uriAPC));
- if(aspc==null){
- throw new Exception("getAccordoServizioParteComune return null");
- }
- //}catch(RegistryNotFound notFound){
- }catch(Exception notFound){ // Se non esiste il soggetto, il metodo sopra ritorna null, poichè il driver non ritorna notFound. Questo succede se il soggetto è nell'archivio
- // verifico che non esista nell'archivio che sto importanto
- boolean found = false;
- if(this.archive.getAccordiServizioParteComune()!=null && this.archive.getAccordiServizioParteComune().size()>0){
- for (int i = 0; i < this.archive.getAccordiServizioParteComune().size(); i++) {
- ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioParteComune().get(i);
- IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
- if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
- found = true;
- aspc = archiveAccordo.getAccordoServizioParteComune();
- break;
- }
- }
- }
- if(!found){
- if(this.archive.getAccordiServizioComposto()!=null && this.archive.getAccordiServizioComposto().size()>0){
- for (int i = 0; i < this.archive.getAccordiServizioComposto().size(); i++) {
- ArchiveAccordoServizioParteComune archiveAccordo = this.archive.getAccordiServizioComposto().get(i);
- IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(archiveAccordo.getAccordoServizioParteComune());
- if(idAccordo.equals(this.idAccordoFactory.getIDAccordoFromUri(uriAPC))){
- found = true;
- aspc = archiveAccordo.getAccordoServizioParteComune();
- break;
- }
- }
- }
- }
- if(!found){
- throw new ProtocolException("Accordo di Servizio Parte Comune ["+uriAPC+
- "], riferito dall'accordo parte specifica dell'archivio fruitore, non esiste",notFound);
- }
- }
-
-
-
- // *** Verifica documenti presenti all'interno del package ***
- List<String> serviziIdentificatiNellaParteComune = this.letturaServiziDefinitiParteComune(fruitore,accordoAsps, aspc);
- if(this.validateDocuments){
-
- ValidazioneResult result = this.validatoreDocumenti.validaSpecificaInterfaccia(fruitore,accordoAsps, aspc);
- if(result.isEsito()==false){
- if(result.getException()!=null)
- throw new Exception(result.getMessaggioErrore(),result.getException());
- else
- throw new Exception(result.getMessaggioErrore());
- }
-
- verificaMappingPortTypeBindingInRiferimentoParteComune(fruitore, accordoAsps, aspc, serviziIdentificatiNellaParteComune);
-
- }
-
- }catch(ImportInformationMissingException e){
- throw e;
- }catch(Exception e){
- throw new Exception(objectIdDescription+" validazione fallita: "+e.getMessage(),e);
- }
-
- }
- }