ZIPReadUtils.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.protocol.basic.archive;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.activation.FileDataSource;
import org.openspcoop2.core.allarmi.constants.RuoloPorta;
import org.openspcoop2.core.config.Configurazione;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.config.constants.TipoAutorizzazione;
import org.openspcoop2.core.config.driver.ExtendedInfoManager;
import org.openspcoop2.core.config.utils.ConfigurazionePdDUtils;
import org.openspcoop2.core.constants.ProprietariProtocolProperty;
import org.openspcoop2.core.controllo_traffico.constants.RuoloPolicy;
import org.openspcoop2.core.id.IDPortaApplicativa;
import org.openspcoop2.core.id.IDPortaDelegata;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.mapping.MappingErogazionePortaApplicativa;
import org.openspcoop2.core.mapping.MappingFruizionePortaDelegata;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Azione;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.Gruppo;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.Operation;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.PortaDominio;
import org.openspcoop2.core.registry.ProtocolProperty;
import org.openspcoop2.core.registry.Resource;
import org.openspcoop2.core.registry.Ruolo;
import org.openspcoop2.core.registry.Scope;
import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.core.registry.utils.RegistroServiziUtils;
import org.openspcoop2.protocol.abstraction.Erogazione;
import org.openspcoop2.protocol.abstraction.Fruizione;
import org.openspcoop2.protocol.abstraction.constants.CostantiAbstraction;
import org.openspcoop2.protocol.abstraction.csv.Deserializer;
import org.openspcoop2.protocol.abstraction.template.TemplateErogazione;
import org.openspcoop2.protocol.abstraction.template.TemplateFruizione;
import org.openspcoop2.protocol.basic.Costanti;
import org.openspcoop2.protocol.basic.archive.abstraction.ErogazioneConverter;
import org.openspcoop2.protocol.basic.archive.abstraction.FruizioneConverter;
import org.openspcoop2.protocol.information_missing.Openspcoop2;
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.ArchiveActivePolicy;
import org.openspcoop2.protocol.sdk.archive.ArchiveAllarme;
import org.openspcoop2.protocol.sdk.archive.ArchiveAttributeAuthority;
import org.openspcoop2.protocol.sdk.archive.ArchiveConfigurationPolicy;
import org.openspcoop2.protocol.sdk.archive.ArchiveFruitore;
import org.openspcoop2.protocol.sdk.archive.ArchiveGruppo;
import org.openspcoop2.protocol.sdk.archive.ArchiveIdCorrelazione;
import org.openspcoop2.protocol.sdk.archive.ArchivePdd;
import org.openspcoop2.protocol.sdk.archive.ArchivePluginArchivio;
import org.openspcoop2.protocol.sdk.archive.ArchivePluginClasse;
import org.openspcoop2.protocol.sdk.archive.ArchivePortaApplicativa;
import org.openspcoop2.protocol.sdk.archive.ArchivePortaDelegata;
import org.openspcoop2.protocol.sdk.archive.ArchiveRuolo;
import org.openspcoop2.protocol.sdk.archive.ArchiveScope;
import org.openspcoop2.protocol.sdk.archive.ArchiveServizioApplicativo;
import org.openspcoop2.protocol.sdk.archive.ArchiveSoggetto;
import org.openspcoop2.protocol.sdk.archive.ArchiveTokenPolicy;
import org.openspcoop2.protocol.sdk.archive.ArchiveUrlInvocazioneRegola;
import org.openspcoop2.protocol.sdk.archive.MapPlaceholder;
import org.openspcoop2.protocol.sdk.constants.ArchiveVersion;
import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
import org.openspcoop2.utils.Utilities;
import org.openspcoop2.utils.io.ZipUtilities;
import org.openspcoop2.utils.resources.FileSystemUtilities;
import org.slf4j.Logger;
/**
* Classe utilizzata per lavorare sui package
*
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ZIPReadUtils {
protected Logger log = null;
protected IRegistryReader registryReader;
protected IConfigIntegrationReader configIntegrationReader;
protected org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer jaxbRegistryDeserializer = null;
protected org.openspcoop2.core.config.utils.serializer.JaxbDeserializer jaxbConfigDeserializer = null;
protected org.openspcoop2.core.plugins.utils.serializer.JaxbDeserializer jaxbPluginDeserializer = null;
protected org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer jaxbControlloTrafficoDeserializer = null;
protected org.openspcoop2.core.allarmi.utils.serializer.JaxbDeserializer jaxbAllarmeDeserializer = null;
protected org.openspcoop2.protocol.information_missing.utils.serializer.JaxbDeserializer jaxbInformationMissingDeserializer = null;
private org.openspcoop2.protocol.abstraction.utils.serializer.JaxbDeserializer jaxbAbstractionDeserializer = null;
private ErogazioneConverter _erogazioneConverter = null;
private FruizioneConverter _fruizioneConverter = null;
private ErogazioneConverter getErogazioneConverter() throws ProtocolException {
if(this._erogazioneConverter==null) {
_initializeConverter();
}
return this._erogazioneConverter;
}
private FruizioneConverter getFruizioneConverter() throws ProtocolException {
if(this._fruizioneConverter==null) {
_initializeConverter();
}
return this._fruizioneConverter;
}
private synchronized void _initializeConverter() throws ProtocolException {
if(this._erogazioneConverter==null) {
this._erogazioneConverter = new ErogazioneConverter(this.log,this);
}
if(this._fruizioneConverter==null) {
this._fruizioneConverter = new FruizioneConverter(this.log,this);
}
}
private TemplateErogazione templateErogazione;
private List<Erogazione> erogazioni;
private List<byte[]> csvErogazioni;
private byte[]csvFormatErogazione;
private byte[]csvMappingErogazione;
private byte[]csvTemplateErogazione;
private synchronized void initializeErogazioni() throws ProtocolException{
if(this.templateErogazione==null){
this.templateErogazione = new TemplateErogazione();
this.erogazioni = new ArrayList<Erogazione>();
this.csvErogazioni = new ArrayList<byte[]>();
}
}
private TemplateFruizione templateFruizione;
private List<Fruizione> fruizioni;
private List<byte[]> csvFruizioni;
private byte[]csvFormatFruizione;
private byte[]csvMappingFruizione;
private byte[]csvTemplateFruizione;
private synchronized void initializeFruizioni() throws ProtocolException{
if(this.templateFruizione==null){
this.templateFruizione = new TemplateFruizione();
this.fruizioni = new ArrayList<Fruizione>();
this.csvFruizioni = new ArrayList<byte[]>();
}
}
public ZIPReadUtils(Logger log,IRegistryReader registryReader,IConfigIntegrationReader configIntegrationReader) throws ProtocolException{
this.log = log;
this.registryReader = registryReader;
this.configIntegrationReader = configIntegrationReader;
this.jaxbRegistryDeserializer = new org.openspcoop2.core.registry.utils.serializer.JaxbDeserializer();
this.jaxbConfigDeserializer = new org.openspcoop2.core.config.utils.serializer.JaxbDeserializer();
this.jaxbPluginDeserializer = new org.openspcoop2.core.plugins.utils.serializer.JaxbDeserializer();
this.jaxbControlloTrafficoDeserializer = new org.openspcoop2.core.controllo_traffico.utils.serializer.JaxbDeserializer();
this.jaxbAllarmeDeserializer = new org.openspcoop2.core.allarmi.utils.serializer.JaxbDeserializer();
this.jaxbInformationMissingDeserializer = new org.openspcoop2.protocol.information_missing.utils.serializer.JaxbDeserializer();
// abstract
this.jaxbAbstractionDeserializer = new org.openspcoop2.protocol.abstraction.utils.serializer.JaxbDeserializer();
}
/* ----- Unmarshall ----- */
/**
* Ritorna la rappresentazione java di un archivio
*
* @param zip byte[]
* @return Archive
* @throws ProtocolException
*/
public Archive getArchive(byte[] zip,MapPlaceholder placeholder,boolean validationDocuments) throws ProtocolException{
File tmp = null;
FileOutputStream fout = null;
try{
tmp = FileSystemUtilities.createTempFile("openspcoop", "."+org.openspcoop2.protocol.basic.Costanti.OPENSPCOOP_ARCHIVE_EXT);
fout = new FileOutputStream(tmp);
fout.write(zip);
fout.flush();
fout.close();
return getArchive(tmp,placeholder,validationDocuments);
}catch(Exception e){
// if(tmp!=null)
// throw new ProtocolException("["+tmp.getAbsolutePath()+"] "+ e.getMessage(),e);
// else
throw new ProtocolException(e.getMessage(),e);
}finally{
try{
if(fout!=null)
fout.close();
if(tmp!=null) {
if(!tmp.delete()) {
// ignore
}
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un archivio
*
* @param fileName File
* @return Archive
* @throws ProtocolException
*/
public Archive getArchive(String fileName,MapPlaceholder placeholder,boolean validationDocuments) throws ProtocolException{
return getArchive(new File(fileName),placeholder,validationDocuments);
}
/**
* Ritorna la rappresentazione java di un archivio
*
* @param zip File
* @return Archive
* @throws ProtocolException
*/
public Archive getArchive(File zip,MapPlaceholder placeholder,boolean validationDocuments) throws ProtocolException{
ZipFile zipFile = null;
try{
zipFile = new ZipFile(zip);
return getArchive(zipFile,placeholder,validationDocuments);
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}finally{
try{
if(zipFile!=null)
zipFile.close();
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un archivio
*
* @param m InputStream
* @return Archive
* @throws ProtocolException
*/
public Archive getArchive(InputStream m,MapPlaceholder placeholder,boolean validationDocuments) throws ProtocolException{
ByteArrayOutputStream bout = null;
try{
bout = new ByteArrayOutputStream();
byte[]read = new byte[1024];
int letti = 0;
while( (letti=m.read(read))>=0 ){
bout.write(read, 0, letti);
}
bout.flush();
bout.close();
m.close();
return getArchive(bout.toByteArray(),placeholder,validationDocuments);
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}finally{
try{
if(bout!=null){
bout.close();
}
}catch(Exception eClose){
// close
}
}
}
/**
* Ritorna la rappresentazione java di un archivio
*
* @param zip File
* @return Archive
* @throws ProtocolException
*/
public Archive getArchive(ZipFile zip,MapPlaceholder placeholder,boolean validationDocuments) throws ProtocolException{
try{
Archive archivio = new Archive();
if(placeholder==null){
placeholder = new MapPlaceholder();
}
ArchiveIdCorrelazione idCorrelazione = new ArchiveIdCorrelazione(ZIPUtils.ID_CORRELAZIONE_DEFAULT);
idCorrelazione.setDescrizione(zip.getName()); // come descrizione viene usato il nome dell'archivio zip
// ArchiveVersion
ArchiveVersion archiveVersion = ArchiveVersion.V_UNDEFINED;
String openspcoopVersion = null;
// ExtendedInfoManager
ExtendedInfoManager extendedInfoManager = ExtendedInfoManager.getInstance();
Map<String, PortaDelegata> mapKeyForExtendedInfoPortaDelegata = new HashMap<>();
boolean existsExtendsConfigForPortaDelegata = extendedInfoManager.newInstanceExtendedInfoPortaDelegata()!=null;
Map<String, PortaApplicativa> mapKeyForExtendedInfoPortaApplicativa = new HashMap<>();
boolean existsExtendsConfigForPortaApplicativa = extendedInfoManager.newInstanceExtendedInfoPortaApplicativa()!=null;
// Map per identificativi soggetti
Map<String, IDSoggetto> mapKeySoggetti = new HashMap<>();
// Map per identificativi fruitori
Map<String, IDSoggetto> mapKeyFruitori = new HashMap<>();
// Map per identificativi accordi
Map<String, IdentificativoAccordo> mapKeyAccordi = new HashMap<>();
// Map per identificativi documenti
Map<String, IdentificativoDocumento> mapKeyDocumenti = new HashMap<>();
// Map per identificativi protocol properties
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties = new HashMap<>();
// Map per nomi-file e nomi servizi applicativi
Map<String, IdentificativoServizioApplicativo> mapKeyServiziApplicativi = new HashMap<>();
String rootDir = null;
Iterator<ZipEntry> it = ZipUtilities.entries(zip, true);
while (it.hasNext()) {
ZipEntry zipEntry = it.next();
String entryName = ZipUtilities.operativeSystemConversion(zipEntry.getName());
/**System.out.println("FILE NAME: "+entryName);
System.out.println("SIZE: "+entry.getSize());*/
// Il codice dopo fissa il problema di inserire una directory nel package.
// Commentare la riga sotto per ripristinare il vecchio comportamento.
if(rootDir==null){
// Calcolo ROOT DIR
rootDir=ZipUtilities.getRootDir(entryName);
}
if(zipEntry.isDirectory()) {
continue; // directory
}
else {
FileDataSource fds = new FileDataSource(entryName);
String nome = fds.getName();
String tipo = nome.substring(nome.lastIndexOf(".")+1,nome.length());
tipo = tipo.toUpperCase();
//System.out.println("VERIFICARE NAME["+nome+"] TIPO["+tipo+"]");
InputStream inputStream = zip.getInputStream(zipEntry);
byte[]content = Utilities.getAsByteArray(inputStream);
// NOTA: non deve essere effettuato qua poiche il contenuto pu0 non essere 'xml'.
// vedi csv ....
//xml = placeholder.replace(xml);
//ByteArrayInputStream bin = new ByteArrayInputStream(xml);
ByteArrayInputStream bin = null;
try{
// ********** archiveVersion ****************
if(entryName.equals((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_VERSION_FILE_NAME)) ){
archiveVersion = ArchiveVersion.toArchiveVersion(content);
openspcoopVersion = ArchiveVersion.toProductVersion(content);
this.log.debug("Version ["+archiveVersion+"] product["+openspcoopVersion+"]");
}
// ********** configurazione ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_CONFIGURAZIONE_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar)){
this.readConfigurazioneExtended(archivio, bin, xml, entryName, validationDocuments, extendedInfoManager);
}
else{
bin = new ByteArrayInputStream(xml);
this.readConfigurazione(archivio, bin, xml, entryName, validationDocuments);
}
}
// ********** configurazione - url di invocazione ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_URL_INVOCAZIONE_REGOLE_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readUrlInvocazioneRegola(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else {
bin = new ByteArrayInputStream(xml);
this.readUrlInvocazione(archivio, bin, xml, entryName, validationDocuments);
}
}
// ********** controllo traffico ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_CONFIG_POLICY_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readControlloTraffico_configurazionePolicy(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_CONTROLLO_TRAFFICO_ACTIVE_POLICY_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readControlloTraffico_attivazionePolicy(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else {
bin = new ByteArrayInputStream(xml);
this.readControlloTraffico_configurazione(archivio, bin, xml, entryName, validationDocuments);
}
}
// ********** allarmi ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_ALLARMI_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readAllarme(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
// ********** token policies ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_VALIDATION_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readTokenValidationPolicy(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_TOKEN_POLICIES_RETRIEVE_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readTokenRetrievePolicy(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso");
}
}
// ********** attribute authority ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_ATTRIBUTE_AUTHORITY_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ATTRIBUTE_AUTHORITY_RETRIEVE_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readAttributeAuthority(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso");
}
}
// ********** plugins ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_CLASSI_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readPluginClasse(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else if(entryName.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_PLUGINS_ARCHIVI_DIR+File.separatorChar)){
bin = new ByteArrayInputStream(xml);
this.readPluginArchivio(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso");
}
}
// ********** pdd ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_PORTE_DOMINIO_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readPortaDominio(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
// ********** gruppi ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_GRUPPI_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readGruppo(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
// ********** ruoli ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_RUOLI_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readRuolo(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
// ********** scope ****************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_SCOPE_DIR+File.separatorChar)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readScope(archivio, bin, xml, entryName, validationDocuments, idCorrelazione);
}
// ********** informationMissing ********************
else if(entryName.equals((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_INFORMATION_MISSING)) ){
byte[] xml = placeholder.replace(content);
bin = new ByteArrayInputStream(xml);
this.readInformationMissing(archivio, bin, xml, entryName, validationDocuments);
}
// ********** soggetti/* ********************
else if(entryName.startsWith((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+File.separatorChar)) ){
byte[] xml = null;
if(entryName.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT)) {
xml = content; // System.out.println("NO PLACEHOLDER PER '"+entryName+"'");
}
else {
xml = placeholder.replace(content);
}
bin = new ByteArrayInputStream(xml);
String name = entryName.substring((rootDir+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+File.separatorChar).length());
if(name.contains((File.separatorChar+""))==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto e ulteriori file e/o directory che definiscono gli elementi del soggetto");
}
else{
// comprendo tipo e nome soggetto
String tipoNomeSoggetto = name.substring(0,name.indexOf(File.separatorChar));
if(tipoNomeSoggetto==null || "".equals(tipoNomeSoggetto) || !tipoNomeSoggetto.contains("_")){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>");
}
tipoNomeSoggetto = tipoNomeSoggetto.trim();
String tipoSoggetto = null;
String nomeSoggetto = null;
if(tipoNomeSoggetto.equals("_")){
// caso eccezionale senza ne tipo ne nome
}
else if(tipoNomeSoggetto.startsWith("_")){
// caso eccezionale con solo il nome
nomeSoggetto = tipoNomeSoggetto.substring(1);
}
else if(tipoNomeSoggetto.endsWith("_")){
// caso eccezionale con solo il tipo
tipoSoggetto = tipoNomeSoggetto.substring(0,tipoNomeSoggetto.length()-1);
}
else{
// caso normale
tipoSoggetto = tipoNomeSoggetto.split("_")[0];
nomeSoggetto = tipoNomeSoggetto.split("_")[1];
if(tipoSoggetto==null || "".equals(tipoSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: tipo non identificato");
}
if(nomeSoggetto==null || "".equals(nomeSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: nome non identificato");
}
}
// provo a vedere se ho già gestito l'entry come chiave identificativo del soggetto
if(mapKeySoggetti.containsKey(tipoNomeSoggetto)) {
IDSoggetto id = mapKeySoggetti.get(tipoNomeSoggetto);
if(id!=null) {
// converto dati identificativi del soggetto
tipoSoggetto = id.getTipo();
nomeSoggetto = id.getNome();
}
}
// comprendo parte restante
String nomeFile = name.substring((tipoNomeSoggetto.length()+1),name.length());
if(nomeFile==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto e ulteriori file e/o directory che definiscono gli elementi del soggetto: non sono stati trovati ulteriori file");
}
if(!nomeFile.contains((File.separatorChar+""))){
// ------------ soggetto --------------------
if(Costanti.OPENSPCOOP2_ARCHIVE_SOGGETTI_FILE_NAME_ID.equals(nomeFile)) {
String s = null;
try {
s = new String(xml);
if(s.endsWith("\n") && s.length()>1){
s = s.substring(0, s.length()-1);
}
IDSoggetto idSoggetto = IDSoggetto.toIDSoggetto(s);
mapKeySoggetti.put(tipoNomeSoggetto, idSoggetto);
}catch(Exception e) {
throw new ProtocolException("Elemento ["+entryName+"] contiene degli identificativi del soggetto ("+s+") non validi rispetto al pattern atteso (tipo/nome): "
+e.getMessage(),e);
}
}
else {
this.readSoggetto(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto, validationDocuments, idCorrelazione);
}
}
else{
// ------------ protocolProperties del soggetto ------------
if(nomeFile.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar)){
org.openspcoop2.core.registry.Soggetto soggettoRegistroServizi = null;
String key = ArchiveSoggetto.buildKey(tipoSoggetto, nomeSoggetto);
if(archivio.getSoggetti().containsKey(key)){
soggettoRegistroServizi = archivio.getSoggetti().get(key).getSoggettoRegistro();
}
else {
throw new ProtocolException("Elemento ["+entryName+"] errato. Non risulta la definizione del soggetto ["+tipoSoggetto+"/"+nomeSoggetto+"]");
}
List<ProtocolProperty> listPP = new ArrayList<>();
if(soggettoRegistroServizi.sizeProtocolPropertyList()>0) {
for (ProtocolProperty protocolProperty : soggettoRegistroServizi.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.SOGGETTO.name());
}
listPP.add(protocolProperty);
}
}
processProtocolProperty(nomeFile, archiveVersion, entryName, xml,
ProprietarioProprietaProtocollo.SOGGETTO,
tipoSoggetto, nomeSoggetto, null, null,
null, null,
mapKeyProtocolProperties, listPP, null);
}
// ------------ servizio applicativo --------------------
else if(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_SERVIZI_APPLICATIVI_DIR+File.separatorChar)) ){
String nomeFileServizioApplicativo = nomeFile.substring((Costanti.OPENSPCOOP2_ARCHIVE_SERVIZI_APPLICATIVI_DIR+File.separatorChar).length());
//System.out.println("nomeFileServizioApplicativo: "+nomeFileServizioApplicativo);
if(nomeFileServizioApplicativo.contains((File.separatorChar+""))==false){
ServizioApplicativo sa = this.readServizioApplicativo(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto, validationDocuments, idCorrelazione);
IdentificativoServizioApplicativo identificativoServizioApplicativo = new IdentificativoServizioApplicativo();
identificativoServizioApplicativo.nome = sa.getNome();
identificativoServizioApplicativo.tipoSoggetto = tipoSoggetto;
identificativoServizioApplicativo.nomeSoggetto = nomeSoggetto;
String nomeFileServizioApplicativoSenzaEstensioni = nomeFileServizioApplicativo.substring(0, nomeFileServizioApplicativo.indexOf(".xml"));
//System.out.println("ADD KEY["+nomeFileServizioApplicativoSenzaEstensioni+"] nome["+identificativoServizioApplicativo.nome+"]");
mapKeyServiziApplicativi.put(nomeFileServizioApplicativoSenzaEstensioni, identificativoServizioApplicativo);
}
else {
String nomeFileServizioApplicativoSenzaEstensioni = nomeFileServizioApplicativo.substring(0, nomeFileServizioApplicativo.indexOf(File.separatorChar+""));
//System.out.println("nomeFileServizioApplicativoSenzaEstensioni: "+nomeFileServizioApplicativoSenzaEstensioni);
//String nomeServizioApplicativo = nomeFileServizioApplicativo.substring(0, nomeFileServizioApplicativo.indexOf(File.separatorChar));
String nomeServizioApplicativo = null;
if(mapKeyServiziApplicativi.containsKey(nomeFileServizioApplicativoSenzaEstensioni)){
nomeServizioApplicativo = mapKeyServiziApplicativi.get(nomeFileServizioApplicativoSenzaEstensioni).nome;
}
else {
throw new ProtocolException("Elemento ["+entryName+"] errato. Non risulta la definizione dell'applicativo con nome file '"+nomeFileServizioApplicativoSenzaEstensioni+"' (soggetto "+tipoSoggetto+"/"+nomeSoggetto+")");
}
String nomeFileSenzaServizioApplicativo = nomeFileServizioApplicativo.substring(nomeFileServizioApplicativo.indexOf(File.separatorChar)+1);
this.readProprietaServizioApplicativo(archivio, content, entryName, tipoSoggetto, nomeSoggetto, nomeServizioApplicativo, nomeFileSenzaServizioApplicativo,
archiveVersion, mapKeyProtocolProperties);
}
}
// ------------ porta delegata --------------------
else if(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_PORTE_DELEGATE_DIR+File.separatorChar)) ){
if(nomeFile.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar)){
String key = this.getKeyPortaForExtendedInfo(tipoNomeSoggetto, nomeFile);
PortaDelegata pd = mapKeyForExtendedInfoPortaDelegata.get(key);
this.readPortaDelegataExtended(pd, bin, xml, entryName, validationDocuments, extendedInfoManager);
}
else{
PortaDelegata pd = this.readPortaDelegata(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto, validationDocuments, idCorrelazione);
if(existsExtendsConfigForPortaDelegata){
String key = this.getKeyPortaForExtendedInfo(tipoNomeSoggetto, nomeFile);
mapKeyForExtendedInfoPortaDelegata.put(key, pd);
}
}
}
// ------------ porta applicativa --------------------
else if(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_PORTE_APPLICATIVE_DIR+File.separatorChar)) ){
if(nomeFile.contains(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_DIR+File.separatorChar)){
String key = this.getKeyPortaForExtendedInfo(tipoNomeSoggetto, nomeFile);
PortaApplicativa pa = mapKeyForExtendedInfoPortaApplicativa.get(key);
this.readPortaApplicativaExtended(pa, bin, xml, entryName, validationDocuments, extendedInfoManager);
}
else{
PortaApplicativa pa = this.readPortaApplicativa(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto, validationDocuments, idCorrelazione);
if(existsExtendsConfigForPortaApplicativa){
String key = this.getKeyPortaForExtendedInfo(tipoNomeSoggetto, nomeFile);
mapKeyForExtendedInfoPortaApplicativa.put(key, pa);
}
}
}
// ------------ accordi -------------------
else if( (nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR+File.separatorChar)))
||
(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR+File.separatorChar)))
||
(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar)))
||
(nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar))) ){
String nomeFileAccordo = null;
String directoryAccordo = null;
if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR+File.separatorChar)) ){
directoryAccordo = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR;
}
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR+File.separatorChar)) ){
directoryAccordo = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR;
}
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar)) ){
directoryAccordo = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR;
}
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar)) ){
directoryAccordo = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR;
}
nomeFileAccordo = nomeFile.substring((directoryAccordo+File.separatorChar).length());
if(nomeFileAccordo.contains((File.separatorChar+""))==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura <nome>[_<versione>] che descrive l'accordo e ulteriori file e/o directory che definiscono gli elementi dell'accordo");
}
else{
// nome file contenente nome accordo e versione (codificati in maniera compatibile al file system)
String nomeVersioneAccordo = nomeFileAccordo.substring(0,nomeFileAccordo.indexOf(File.separatorChar));
if(nomeVersioneAccordo==null || "".equals(nomeVersioneAccordo) || "_".equals(nomeVersioneAccordo) ||
nomeVersioneAccordo.startsWith("_") || nomeVersioneAccordo.endsWith("_")){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura <nome>[_<versione>] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa <nome>[_<versione>]");
}
nomeVersioneAccordo = nomeVersioneAccordo.trim();
// comprendo parte restante
String nomeFileSenzaAccordo = nomeFileAccordo.substring((nomeVersioneAccordo.length()+1),nomeFileAccordo.length());
if(nomeFileSenzaAccordo==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura <nome>[_<versione> che descrive l'accordo e ulteriori file e/o directory che definiscono gli elementi dell'accordo: non sono stati trovati ulteriori file");
}
// ------------ accordo servizio parte comune -------------------
// ------------ accordo servizio composto -------------------
// ------------ accordo cooperazione -------------------
if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR+File.separatorChar)) ||
nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR+File.separatorChar)) ||
nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar))
){
// comprendo nome ed eventuale versione dell'accordo
String versioneAccordo = null;
String nomeAccordo = null;
boolean findIdAccordo = false;
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
if(nomeVersioneAccordo.contains("_")){
nomeAccordo = nomeVersioneAccordo.split("_")[0];
versioneAccordo = nomeVersioneAccordo.split("_")[1];
if(versioneAccordo==null || "".equals(versioneAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura <nome>[_<versione>] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa <nome>[_<versione>]: versione non identificata");
}
}
else{
nomeAccordo = nomeVersioneAccordo;
}
if(nomeAccordo==null || "".equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura <nome>[_<versione>] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa <nome>[_<versione>]: nome non identificato");
}
}
else{
IdentificativoAccordo idAccordo = null;
String keyAccordo = getKeyAccordo(tipoSoggetto, nomeSoggetto, nomeVersioneAccordo, nomeFile);
if( nomeFileSenzaAccordo.equals(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME) ){
String identificativo = this.readLineId(xml);
if(identificativo.contains(" ")){
nomeAccordo = identificativo.split(" ")[0];
versioneAccordo = identificativo.split(" ")[1];
if(versioneAccordo==null || "".equals(versioneAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presente una struttura '<nome> <versione>' che descrive l'identificativo dell'accordo: versione non identificata");
}
}
else{
nomeAccordo = identificativo;
}
if(nomeAccordo==null || "".equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presenta una struttura '<nome>[ <versione>]' che descrive identificativo dell'accordo: nome non identificato");
}
idAccordo = new IdentificativoAccordo();
idAccordo.nome = nomeAccordo;
idAccordo.versione = versioneAccordo;
mapKeyAccordi.put(keyAccordo, idAccordo);
findIdAccordo = true;
}
else{
idAccordo = mapKeyAccordi.get(keyAccordo);
if(idAccordo==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è stato trovato precedentemente il file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"] contenente l'identificativo dell'accordo");
}
nomeAccordo = idAccordo.nome;
versioneAccordo = idAccordo.versione;
}
}
if(!findIdAccordo){
// ------------ accordo servizio parte comune -------------------
if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR+File.separatorChar)) ){
this.readAccordoServizioParteComune(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto,
nomeFileSenzaAccordo,nomeAccordo,versioneAccordo,false, validationDocuments, idCorrelazione,
archiveVersion, mapKeyDocumenti, mapKeyProtocolProperties);
}
// ------------ accordo servizio composto -------------------
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR+File.separatorChar)) ){
this.readAccordoServizioParteComune(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto,
nomeFileSenzaAccordo,nomeAccordo,versioneAccordo,true, validationDocuments, idCorrelazione,
archiveVersion, mapKeyDocumenti, mapKeyProtocolProperties);
}
// ------------ accordo cooperazione -------------------
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar)) ){
this.readAccordoCooperazione(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto,
nomeFileSenzaAccordo,nomeAccordo,versioneAccordo, validationDocuments, idCorrelazione,
archiveVersion, mapKeyDocumenti, mapKeyProtocolProperties);
}
}
}
// ------------ accordo servizio parte specifica -------------------
else if( nomeFile.startsWith((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar)) ){
// comprendo tipo, nome ed eventuale versione dell'accordo
String versioneServizio = null;
String nomeServizio = null;
String tipoServizio = null;
boolean findIdAccordo = false;
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
// parte specifica tipo_nome[_versione]
if(nomeVersioneAccordo.contains("_")==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]");
}
int indexType = nomeVersioneAccordo.indexOf("_");
if(indexType<=0){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: tipo non trovato (index:"+indexType+")");
}
tipoServizio = nomeVersioneAccordo.substring(0, indexType);
if(indexType==nomeVersioneAccordo.length()){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: nome e versione non trovati");
}
String _nomeVersione = nomeVersioneAccordo.substring(indexType, nomeVersioneAccordo.length());
if(_nomeVersione==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: nome e versione non trovati");
}
if(_nomeVersione.contains("_")==false){
nomeServizio = _nomeVersione;
}
else{
int indexVersione = _nomeVersione.lastIndexOf("_");
if(indexVersione<=0){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: versione non trovata (index:"+indexVersione+")");
}
nomeServizio = _nomeVersione.substring(0, indexVersione);
if(indexVersione==_nomeVersione.length()){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: versione non trovata dopo aver localizzato il nome");
}
versioneServizio = _nomeVersione.substring(indexVersione, _nomeVersione.length());
if(versioneServizio==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+directoryAccordo+
"] deve essere presenta una ulteriore directory contenente la struttura tipo_nome[_versione] che descrive l'accordo. Il nome utilizzato per la directory non e' conforme alla struttura attesa tipo_nome[_versione]: versione non trovata");
}
}
}
else{
IdentificativoAccordo idAccordo = null;
String keyAccordo = getKeyAccordo(tipoSoggetto, nomeSoggetto, nomeVersioneAccordo, nomeFile);
if( nomeFileSenzaAccordo.equals(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME) ){
String identificativo = this.readLineId(xml);
if(!identificativo.contains(" ")){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presente una struttura '<tipo> <nome> <versione>' che descrive l'identificativo dell'accordo: ' ' non trovato");
}
String [] tmp = identificativo.split(" ");
if(tmp.length>2){
tipoServizio = identificativo.split(" ")[0];
nomeServizio = identificativo.split(" ")[1];
versioneServizio = identificativo.split(" ")[2];
if(versioneServizio==null || "".equals(versioneServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presente una struttura '<tipo> <nome> <versione>' che descrive l'identificativo dell'accordo: versione non identificata");
}
}
else{
tipoServizio = identificativo.split(" ")[0];
nomeServizio = identificativo.split(" ")[1];
}
if(tipoServizio==null || "".equals(tipoServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presenta una struttura '<tipo> <nome> [<versione>]' che descrive identificativo dell'accordo: tipo non identificato");
}
if(nomeServizio==null || "".equals(nomeServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Il Contenuto ["+identificativo+
"] non è corretto, deve essere presenta una struttura '<tipo> <nome> [<versione>]' che descrive identificativo dell'accordo: nome non identificato");
}
idAccordo = new IdentificativoAccordo();
idAccordo.tipo = tipoServizio;
idAccordo.nome = nomeServizio;
idAccordo.versione = versioneServizio;
mapKeyAccordi.put(keyAccordo, idAccordo);
findIdAccordo = true;
}
else{
idAccordo = mapKeyAccordi.get(keyAccordo);
if(idAccordo==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è stato trovato precedentemente il file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"] contenente l'identificativo dell'accordo");
}
tipoServizio = idAccordo.tipo;
nomeServizio = idAccordo.nome;
versioneServizio = idAccordo.versione;
}
}
if(findIdAccordo==false){
// ------------ accordo servizio parte specifica -------------------
this.readAccordoServizioParteSpecifica(archivio, bin, xml, entryName, tipoSoggetto, nomeSoggetto,
nomeFileSenzaAccordo,tipoServizio,nomeServizio,versioneServizio, validationDocuments, idCorrelazione,
archiveVersion, mapKeyDocumenti, mapKeyProtocolProperties,
mapKeyFruitori);
}
}
}
}
// others ?
else{
throw new ProtocolException("Elemento ["+entryName+"] non atteso");
}
}
}
}
// others ?
else{
bin = new ByteArrayInputStream(content);
this.readExternalArchive(rootDir, archivio, bin, content, entryName, validationDocuments);
}
}finally{
try{
if(inputStream!=null){
inputStream.close();
}
}catch(Exception eClose){
// close
}
try{
if(bin!=null){
bin.close();
}
}catch(Exception eClose){
// close
}
}
}
}
// finalize
this.finalizeArchive(archivio,validationDocuments);
return archivio;
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}
}
private String getKeyAccordo(String tipoSoggetto, String nomeSoggetto, String nomeVersioneAccordo, String nomeFile){
StringBuilder bf = new StringBuilder();
bf.append(tipoSoggetto==null?"":tipoSoggetto);
bf.append("_");
bf.append(nomeSoggetto==null?"":nomeSoggetto);
bf.append("_");
bf.append(nomeVersioneAccordo==null?"":nomeVersioneAccordo);
bf.append("_");
if( nomeFile.contains((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR+File.separatorChar)) ){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_COMUNE_DIR);
}
else if( nomeFile.contains((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR+File.separatorChar)) ){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_COMPOSTO_DIR);
}
else if( nomeFile.contains((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR+File.separatorChar)) ){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_DIR);
}
else if( nomeFile.contains((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR+File.separatorChar)) ){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_COOPERAZIONE_DIR);
}
return bf.toString();
}
private String getKeyDocumento(String tipoSoggetto, String nomeSoggetto, String nomeAccordo, String versioneAccordo, String nomeFile, String nomeDocumento){
StringBuilder bf = new StringBuilder();
bf.append(this.getKeyAccordo(tipoSoggetto, nomeSoggetto,
(nomeAccordo==null?"":nomeAccordo) + (versioneAccordo==null?"":versioneAccordo),
nomeFile));
bf.append("_");
if(nomeFile.contains(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar)){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI);
}
else if(nomeFile.contains(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar)){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI);
}
else if(nomeFile.contains(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO+File.separatorChar)){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO);
}
else if(nomeFile.contains(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA+File.separatorChar)){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA);
}
else if(nomeFile.contains(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO+File.separatorChar)){
bf.append(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO);
}
bf.append("_");
bf.append(nomeDocumento);
return bf.toString();
}
private String getKeyProtocolProperty(String tipoSoggetto, String nomeSoggetto, String nomeAccordo, String versioneAccordo,
String tipoSoggettoFruitore, String nomeSoggettoFruitore,
ProprietarioProprietaProtocollo proprietario,
String nomeDocumento){
StringBuilder bf = new StringBuilder();
bf.append(proprietario.name());
bf.append("_");
if(ProprietarioProprietaProtocollo.ACCORDO_COOPERAZIONE.equals(proprietario) ||
ProprietarioProprietaProtocollo.ACCORDO_SERVIZIO_PARTE_COMUNE.equals(proprietario) ||
ProprietarioProprietaProtocollo.ACCORDO_SERVIZIO_PARTE_SPECIFICA.equals(proprietario) ||
ProprietarioProprietaProtocollo.FRUITORE.equals(proprietario) ) {
bf.append(tipoSoggetto==null?"":tipoSoggetto);
bf.append("_");
bf.append(nomeSoggetto==null?"":nomeSoggetto);
bf.append("_");
String nomeVersioneAccordo = (nomeAccordo==null?"":nomeAccordo) + (versioneAccordo==null?"":versioneAccordo);
bf.append(nomeVersioneAccordo);
}
else if(ProprietarioProprietaProtocollo.SOGGETTO.equals(proprietario) ||
ProprietarioProprietaProtocollo.SERVIZIO_APPLICATIVO.equals(proprietario)) {
bf.append(tipoSoggetto==null?"":tipoSoggetto);
bf.append("_");
bf.append(nomeSoggetto==null?"":nomeSoggetto);
}
bf.append("_");
if(ProprietarioProprietaProtocollo.FRUITORE.equals(proprietario)) {
bf.append(tipoSoggetto==null?"":tipoSoggettoFruitore);
bf.append("_");
bf.append(nomeSoggetto==null?"":nomeSoggettoFruitore);
bf.append("_");
}
if(ProprietarioProprietaProtocollo.SERVIZIO_APPLICATIVO.equals(proprietario)) {
bf.append(nomeAccordo==null?"":nomeAccordo);
bf.append("_");
}
bf.append("_");
bf.append(nomeDocumento);
return bf.toString();
}
private String getKeyPortaForExtendedInfo(String tipoNomeSoggetto, String nomeFile){
String nomePortaSuFileSystem = nomeFile.substring(nomeFile.lastIndexOf(File.separatorChar));
if(nomePortaSuFileSystem.endsWith(".xml")){
nomePortaSuFileSystem = nomePortaSuFileSystem.substring(0,nomePortaSuFileSystem.length()-4);
}
else if(nomePortaSuFileSystem.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_EXTENDED_FILE_EXT)){
nomePortaSuFileSystem = nomeFile.substring(0,nomeFile.lastIndexOf(File.separatorChar));
if(nomePortaSuFileSystem.contains(File.separatorChar+"")){
nomePortaSuFileSystem = nomePortaSuFileSystem.substring(nomePortaSuFileSystem.lastIndexOf(File.separatorChar));
}
}
String key = tipoNomeSoggetto + nomePortaSuFileSystem;
return key;
}
public void finalizeArchive(Archive archivio,boolean validationDocuments) throws ProtocolException{
if(this.csvErogazioni!=null){
Deserializer deserializer = new Deserializer(validationDocuments, this.log);
for (byte[] erogazioneCsv : this.csvErogazioni) {
this.erogazioni.addAll(deserializer.toErogazione(this.csvTemplateErogazione, this.csvFormatErogazione, this.csvMappingErogazione, erogazioneCsv));
}
}
if(this.erogazioni!=null){
for (Erogazione erogazione : this.erogazioni) {
this.getErogazioneConverter().fillArchive(archivio, erogazione, this.templateErogazione, this.registryReader, this.configIntegrationReader, validationDocuments);
}
}
if(this.csvFruizioni!=null){
Deserializer deserializer = new Deserializer(validationDocuments, this.log);
for (byte[] fruizioneCsv : this.csvFruizioni) {
this.fruizioni.addAll(deserializer.toFruizione(this.csvTemplateFruizione, this.csvFormatFruizione, this.csvMappingFruizione, fruizioneCsv));
}
}
if(this.fruizioni!=null){
for (Fruizione fruizione : this.fruizioni) {
this.getFruizioneConverter().fillArchive(archivio, fruizione, this.templateFruizione, this.registryReader, this.configIntegrationReader, validationDocuments);
}
}
}
public void readExternalArchive(String rootDir, Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments) throws ProtocolException{
if(entryName.startsWith((rootDir+CostantiAbstraction.EROGAZIONI_DIR+File.separatorChar)) ){
String name = entryName.substring((rootDir+CostantiAbstraction.EROGAZIONI_DIR+File.separatorChar).length());
if(name.contains((File.separatorChar+""))){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+CostantiAbstraction.EROGAZIONI_DIR+
"] non devono essere presenti ulteriori directory");
}
if(this.templateErogazione==null){
this.initializeErogazioni();
}
if(name.equals(CostantiAbstraction.TEMPLATE_FILE) ){
this.templateErogazione.updateTemplates(xml);
}
else if(name.equals(CostantiAbstraction.CSV_FORMAT_FILE) ){
this.csvFormatErogazione = xml;
}
else if(name.equals(CostantiAbstraction.CSV_MAPPING_FILE) ){
this.csvMappingErogazione = xml;
}
else if(name.equals(CostantiAbstraction.CSV_TEMPLATE_FILE) ){
this.csvTemplateErogazione = xml;
}
else if(name.endsWith(CostantiAbstraction.XML_EXTENSION)){
try{
if(validationDocuments){
org.openspcoop2.protocol.abstraction.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Erogazione erogazione = this.jaxbAbstractionDeserializer.readErogazione(xml);
this.erogazioni.add(erogazione);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (erogazione) non valida rispetto allo schema (Abstraction): "
+eDeserializer.getMessage(),eDeserializer);
}
}
else if(name.endsWith(CostantiAbstraction.CSV_EXTENSION)){
this.csvErogazioni.add(xml);
}
else{
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Sono supportati solamente i formati 'xml' e 'csv' oltre a poter fornire i seguente files: '"+
CostantiAbstraction.TEMPLATE_FILE+"','"+
CostantiAbstraction.CSV_FORMAT_FILE+"','"+
CostantiAbstraction.CSV_MAPPING_FILE+"','"+
CostantiAbstraction.CSV_TEMPLATE_FILE+"'");
}
}
else if(entryName.startsWith((rootDir+CostantiAbstraction.FRUIZIONI_DIR+File.separatorChar)) ){
String name = entryName.substring((rootDir+CostantiAbstraction.FRUIZIONI_DIR+File.separatorChar).length());
if(name.contains((File.separatorChar+""))){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+CostantiAbstraction.FRUIZIONI_DIR+
"] non devono essere presenti ulteriori directory");
}
if(this.templateFruizione==null){
this.initializeFruizioni();
}
if(name.equals(CostantiAbstraction.TEMPLATE_FILE) ){
this.templateFruizione.updateTemplates(xml);
}
else if(name.equals(CostantiAbstraction.CSV_FORMAT_FILE) ){
this.csvFormatFruizione = xml;
}
else if(name.equals(CostantiAbstraction.CSV_MAPPING_FILE) ){
this.csvMappingFruizione = xml;
}
else if(name.equals(CostantiAbstraction.CSV_TEMPLATE_FILE) ){
this.csvTemplateFruizione = xml;
}
else if(name.endsWith(CostantiAbstraction.XML_EXTENSION)){
try{
if(validationDocuments){
org.openspcoop2.protocol.abstraction.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Fruizione fruizione = this.jaxbAbstractionDeserializer.readFruizione(xml);
this.fruizioni.add(fruizione);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (fruizione) non valida rispetto allo schema (Abstraction): "
+eDeserializer.getMessage(),eDeserializer);
}
}
else if(name.endsWith(CostantiAbstraction.CSV_EXTENSION)){
this.csvFruizioni.add(xml);
}
else{
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Sono supportati solamente i formati 'xml' e 'csv' oltre a poter fornire i seguenti files: '"+
CostantiAbstraction.TEMPLATE_FILE+"','"+
CostantiAbstraction.CSV_FORMAT_FILE+"','"+
CostantiAbstraction.CSV_MAPPING_FILE+"','"+
CostantiAbstraction.CSV_TEMPLATE_FILE+"'");
}
}
else{
throw new ProtocolException("Elemento ["+entryName+"] non atteso");
}
}
public void readConfigurazione(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Configurazione configurazione = this.jaxbConfigDeserializer.readConfigurazione(xml);
if(archivio.getConfigurazionePdD()!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una configurazione della pdd");
}
archivio.setConfigurazionePdD(configurazione);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (configurazione) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readConfigurazioneExtended(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments,ExtendedInfoManager extendedInfoManager) throws ProtocolException{
try{
if(archivio.getConfigurazionePdD()==null){
//throw new ProtocolException("Non è possibile indicare una configurazione estesa senza indicare anche la configurazione generale");
// Caso speciale dove è presente solo l'extended info
archivio.setConfigurazionePdD(new Configurazione());
}
Object o = extendedInfoManager.newInstanceExtendedInfoConfigurazione().deserialize(this.log, archivio.getConfigurazionePdD(), xml);
archivio.getConfigurazionePdD().addExtendedInfo(o);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (configurazione-extended) non valida: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readControlloTraffico_configurazione(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.controllo_traffico.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale configurazione = this.jaxbControlloTrafficoDeserializer.readConfigurazioneGenerale(xml);
if(archivio.getControlloTraffico_configurazione()!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una configurazione di controllo del traffico");
}
archivio.setControlloTraffico_configurazione(configurazione);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (configurazione) non valida rispetto allo schema (ControlloTraffico): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readControlloTraffico_configurazionePolicy(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.controllo_traffico.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.controllo_traffico.ConfigurazionePolicy policy = this.jaxbControlloTrafficoDeserializer.readConfigurazionePolicy(xml);
String key = ArchiveConfigurationPolicy.buildKey(policy.getIdPolicy());
if(archivio.getControlloTraffico_configurationPolicies().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una configurazione di policy con key ["+key+"]");
}
archivio.getControlloTraffico_configurationPolicies().add(key,new ArchiveConfigurationPolicy(policy,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (configurazione-policy) non valida rispetto allo schema (ControlloTraffico): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readControlloTraffico_attivazionePolicy(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.controllo_traffico.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.controllo_traffico.AttivazionePolicy policy = this.jaxbControlloTrafficoDeserializer.readAttivazionePolicy(xml);
RuoloPolicy ruoloPorta = null;
String nomePorta = null;
if(policy!=null && policy.getFiltro()!=null) {
ruoloPorta = policy.getFiltro().getRuoloPorta();
nomePorta = policy.getFiltro().getNomePorta();
}
if(policy==null) {
throw new ProtocolException("Policy is null");
}
String key = ArchiveActivePolicy.buildKey(ruoloPorta, nomePorta, policy.getAlias());
if(archivio.getControlloTraffico_activePolicies().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere più di un'attivazione di policy con key ["+key+"]");
}
archivio.getControlloTraffico_activePolicies().add(key,new ArchiveActivePolicy(policy,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (attivazione-policy) non valida rispetto allo schema (ControlloTraffico): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readAllarme(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.allarmi.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.allarmi.Allarme allarme = this.jaxbAllarmeDeserializer.readAllarme(xml);
RuoloPorta ruoloPorta = null;
String nomePorta = null;
if(allarme!=null && allarme.getFiltro()!=null) {
ruoloPorta = allarme.getFiltro().getRuoloPorta();
nomePorta = allarme.getFiltro().getNomePorta();
}
if(allarme==null) {
throw new ProtocolException("Allarme is null");
}
String key = ArchiveAllarme.buildKey(ruoloPorta, nomePorta, allarme.getAlias());
if(archivio.getAllarmi().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere più di un'allarme con key ["+key+"]");
}
archivio.getAllarmi().add(key,new ArchiveAllarme(allarme,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (allarme) non valida rispetto allo schema (Allarmi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readTokenValidationPolicy(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.GenericProperties policy = this.jaxbConfigDeserializer.readGenericProperties(xml);
String key = ArchiveTokenPolicy.buildKey(policy.getTipo(), policy.getNome());
if(archivio.getToken_validation_policies().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una policy di token validation con key ["+key+"]");
}
archivio.getToken_validation_policies().add(key,new ArchiveTokenPolicy(policy,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (token-policy) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readTokenRetrievePolicy(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.GenericProperties policy = this.jaxbConfigDeserializer.readGenericProperties(xml);
String key = ArchiveTokenPolicy.buildKey(policy.getTipo(), policy.getNome());
if(archivio.getToken_retrieve_policies().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una policy di token retrieve con key ["+key+"]");
}
archivio.getToken_retrieve_policies().add(key,new ArchiveTokenPolicy(policy,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (token-policy) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readAttributeAuthority(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.GenericProperties policy = this.jaxbConfigDeserializer.readGenericProperties(xml);
String key = ArchiveAttributeAuthority.buildKey(policy.getTipo(), policy.getNome());
if(archivio.getAttributeAuthorities().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una attribute authority con key ["+key+"]");
}
archivio.getAttributeAuthorities().add(key,new ArchiveAttributeAuthority(policy,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (attribute authority) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readPluginClasse(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.plugins.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.plugins.Plugin plugin = this.jaxbPluginDeserializer.readPlugin(xml);
String key = ArchivePluginClasse.buildKey(plugin.getTipoPlugin(), plugin.getTipo());
if(archivio.getPlugin_classi().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un plugin con key ["+key+"]");
}
archivio.getPlugin_classi().add(key,new ArchivePluginClasse(plugin,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (plugin-classe) non valida rispetto allo schema (Plugins): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readPluginArchivio(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.RegistroPlugin plugin = this.jaxbConfigDeserializer.readRegistroPlugin(xml);
String key = ArchivePluginArchivio.buildKey(plugin.getNome());
if(archivio.getPlugin_archivi().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un archivio plugin con key ["+key+"]");
}
archivio.getPlugin_archivi().add(key,new ArchivePluginArchivio(plugin,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (plugin-archivio) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readUrlInvocazioneRegola(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.ConfigurazioneUrlInvocazioneRegola regola = this.jaxbConfigDeserializer.readConfigurazioneUrlInvocazioneRegola(xml);
String key = ArchiveUrlInvocazioneRegola.buildKey(regola.getNome());
if(archivio.getConfigurazionePdD_urlInvocazione_regole().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una regola proxy pass con key ["+key+"]");
}
archivio.getConfigurazionePdD_urlInvocazione_regole().add(key,new ArchiveUrlInvocazioneRegola(regola,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (regola proxy-pass) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readUrlInvocazione(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
org.openspcoop2.core.config.ConfigurazioneUrlInvocazione configurazioneUrlInvocazione = this.jaxbConfigDeserializer.readConfigurazioneUrlInvocazione(xml);
if(archivio.getConfigurazionePdD_urlInvocazione()!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una configurazione della url di invocazione");
}
archivio.setConfigurazionePdD_urlInvocazione(configurazioneUrlInvocazione);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (configurazione url invocazione) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readPortaDominio(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
PortaDominio pdd = this.jaxbRegistryDeserializer.readPortaDominio(xml);
String key = ArchivePdd.buildKey(pdd.getNome());
if(archivio.getPdd().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una pdd con key ["+key+"]");
}
archivio.getPdd().add(key,new ArchivePdd(pdd,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (porta-dominio) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readGruppo(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Gruppo gruppo = this.jaxbRegistryDeserializer.readGruppo(xml);
String key = ArchiveGruppo.buildKey(gruppo.getNome());
if(archivio.getGruppi().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un gruppo con key ["+key+"]");
}
archivio.getGruppi().add(key,new ArchiveGruppo(gruppo,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (gruppo) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readRuolo(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Ruolo ruolo = this.jaxbRegistryDeserializer.readRuolo(xml);
String key = ArchiveRuolo.buildKey(ruolo.getNome());
if(archivio.getRuoli().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un ruolo con key ["+key+"]");
}
archivio.getRuoli().add(key,new ArchiveRuolo(ruolo,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (ruolo) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readScope(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
Scope scope = this.jaxbRegistryDeserializer.readScope(xml);
String key = ArchiveScope.buildKey(scope.getNome());
if(archivio.getScope().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di uno scope con key ["+key+"]");
}
archivio.getScope().add(key,new ArchiveScope(scope,idCorrelazione));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (scope) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readInformationMissing(Archive archivio,InputStream bin,byte[]xml,String entryName,boolean validationDocuments) throws ProtocolException{
try{
// verifica
Openspcoop2 informationMissingOp2 = null;
if(archivio.getInformationMissing()!=null){
informationMissingOp2 = archivio.getInformationMissing();
}
// conversione
if(informationMissingOp2!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Una definizione xml di informationMissing e' presente piu' di una volta");
}
if(validationDocuments){
org.openspcoop2.protocol.information_missing.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
informationMissingOp2 = this.jaxbInformationMissingDeserializer.readOpenspcoop2(xml);
// add
archivio.setInformationMissing(informationMissingOp2);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (informationMissing) non valida rispetto allo schema informationMissing.xsd: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readSoggetto(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
boolean registro = false;
String schema = null;
if(RegistroServiziUtils.isRegistroServizi(xml, CostantiRegistroServizi.LOCAL_NAME_SOGGETTO)){
registro = true;
schema = "RegistroServizi";
}
else if(ConfigurazionePdDUtils.isConfigurazionePdD(xml, CostantiConfigurazione.LOCAL_NAME_SOGGETTO)){
registro = false;
schema = "ConfigurazionePdD";
}
else{
throw new ProtocolException("Elemento ["+entryName+"] errato. Attesa una definizione del soggetto che contenga informazioni di registro (namespace: "+
CostantiRegistroServizi.TARGET_NAMESPACE+") o di configurazione ("+CostantiConfigurazione.TARGET_NAMESPACE+")");
}
try{
// verifica
if(tipoSoggetto==null || nomeSoggetto==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è possibile fornire una definizione di soggetto all'interna di una directory che non definisce il tipo o il nome del soggetto");
}
org.openspcoop2.core.registry.Soggetto soggettoRegistroServizi = null;
org.openspcoop2.core.config.Soggetto soggettoConfigurazione = null;
String key = ArchiveSoggetto.buildKey(tipoSoggetto, nomeSoggetto);
if(archivio.getSoggetti().containsKey(key)){
ArchiveSoggetto archiveSoggetto = archivio.getSoggetti().remove(key);
soggettoRegistroServizi = archiveSoggetto.getSoggettoRegistro();
soggettoConfigurazione = archiveSoggetto.getSoggettoConfigurazione();
}
// conversione
if(registro){
if(soggettoRegistroServizi!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Una definizione xml del soggetto con tipologia ("+schema+") e' presente piu' di una volta");
}
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
soggettoRegistroServizi = this.jaxbRegistryDeserializer.readSoggetto(xml);
if(!tipoSoggetto.equals(soggettoRegistroServizi.getTipo())){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml del soggetto ("+schema+") contiene un tipo ["+
soggettoRegistroServizi.getTipo()+"] differente da quello indicato ["+tipoSoggetto+"] nella directory che contiene la definizione");
}
if(!nomeSoggetto.equals(soggettoRegistroServizi.getNome())){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml del soggetto ("+schema+") contiene un nome ["+
soggettoRegistroServizi.getNome()+"] differente da quello indicato ["+nomeSoggetto+"] nella directory che contiene la definizione");
}
}
else {
if(soggettoConfigurazione!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Una definizione xml del soggetto con tipologia ("+schema+") e' presente piu' di una volta");
}
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
soggettoConfigurazione = this.jaxbConfigDeserializer.readSoggetto(xml);
if(!tipoSoggetto.equals(soggettoConfigurazione.getTipo())){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml del soggetto ("+schema+") contiene un tipo ["+
soggettoConfigurazione.getTipo()+"] differente da quello indicato ["+tipoSoggetto+"] nella directory che contiene la definizione");
}
if(!nomeSoggetto.equals(soggettoConfigurazione.getNome())){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml del soggetto ("+schema+") contiene un nome ["+
soggettoConfigurazione.getNome()+"] differente da quello indicato ["+nomeSoggetto+"] nella directory che contiene la definizione");
}
}
// add
if(soggettoConfigurazione!=null && soggettoRegistroServizi!=null)
archivio.getSoggetti().add(key,new ArchiveSoggetto(soggettoConfigurazione, soggettoRegistroServizi, idCorrelazione));
else if(soggettoConfigurazione!=null){
archivio.getSoggetti().add(key,new ArchiveSoggetto(soggettoConfigurazione, idCorrelazione));
}
else{
archivio.getSoggetti().add(key,new ArchiveSoggetto(soggettoRegistroServizi, idCorrelazione));
}
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (soggetto) non valida rispetto allo schema ("+schema+"): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public ServizioApplicativo readServizioApplicativo(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,boolean validationDocuments,
ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
ServizioApplicativo sa = this.jaxbConfigDeserializer.readServizioApplicativo(xml);
sa.setTipoSoggettoProprietario(tipoSoggetto);
sa.setNomeSoggettoProprietario(nomeSoggetto);
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
String key = ArchiveServizioApplicativo.buildKey(tipoSoggettoKey, nomeSoggettoKey, sa.getNome());
if(archivio.getServiziApplicativi().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un servizio applicativo con key ["+key+"]");
}
archivio.getServiziApplicativi().add(key,new ArchiveServizioApplicativo(sa,idCorrelazione,true));
return sa;
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (servizio-applicativo) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readProprietaServizioApplicativo(Archive archivio,byte[]content,String entryName, String tipoSoggetto, String nomeSoggetto, String nomeSA,
String nomeFileSenzaServizioApplicativo, ArchiveVersion archiveVersion,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties) throws ProtocolException {
org.openspcoop2.core.config.ServizioApplicativo servizioApplicativo = null;
String key = ArchiveServizioApplicativo.buildKey(tipoSoggetto, nomeSoggetto, nomeSA);
if(archivio.getServiziApplicativi().containsKey(key)){
servizioApplicativo = archivio.getServiziApplicativi().get(key).getServizioApplicativo();
}
else {
throw new ProtocolException("Elemento ["+entryName+"] errato. Non risulta la definizione dell'applicativo ["+tipoSoggetto+"/"+nomeSoggetto+" "+nomeSA+"]");
}
List<org.openspcoop2.core.config.ProtocolProperty> listPP = new ArrayList<>();
if(servizioApplicativo.sizeProtocolPropertyList()>0) {
for (org.openspcoop2.core.config.ProtocolProperty protocolProperty : servizioApplicativo.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.SERVIZIO_APPLICATIVO.name());
}
listPP.add(protocolProperty);
}
}
processProtocolPropertyConfig(nomeFileSenzaServizioApplicativo, archiveVersion, entryName, content,
ProprietarioProprietaProtocollo.SERVIZIO_APPLICATIVO,
tipoSoggetto, nomeSoggetto, nomeSA,
mapKeyProtocolProperties, listPP, null);
}
public PortaDelegata readPortaDelegata(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
PortaDelegata pd = this.jaxbConfigDeserializer.readPortaDelegata(xml);
// backward compatibility
if("openspcoop".equals(pd.getAutorizzazione())){
pd.setAutorizzazione(TipoAutorizzazione.AUTHENTICATED.getValue());
}
pd.setTipoSoggettoProprietario(tipoSoggetto);
pd.setNomeSoggettoProprietario(nomeSoggetto);
String nome = pd.getNome();
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
String key = ArchivePortaDelegata.buildKey(tipoSoggettoKey, nomeSoggettoKey, nome);
if(archivio.getPorteDelegate().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una porta con key ["+key+"]");
}
archivio.getPorteDelegate().add(key,new ArchivePortaDelegata(pd,idCorrelazione,true));
return pd;
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (porta-delegata) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readPortaDelegataExtended(PortaDelegata pd,InputStream bin,byte[]xml,String entryName,boolean validationDocuments,ExtendedInfoManager extendedInfoManager) throws ProtocolException{
try{
if(pd==null){
throw new ProtocolException("Non è possibile indicare una configurazione estesa senza indicare anche la definizione della porta delegata");
}
Object o = extendedInfoManager.newInstanceExtendedInfoPortaDelegata().deserialize(this.log, pd, xml);
pd.addExtendedInfo(o);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (porta-delegata-extended) non valida: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public PortaApplicativa readPortaApplicativa(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException{
try{
if(validationDocuments){
org.openspcoop2.core.config.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
PortaApplicativa pa = this.jaxbConfigDeserializer.readPortaApplicativa(xml);
pa.setTipoSoggettoProprietario(tipoSoggetto);
pa.setNomeSoggettoProprietario(nomeSoggetto);
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
String key = ArchivePortaApplicativa.buildKey(tipoSoggettoKey, nomeSoggettoKey, pa.getNome());
if(archivio.getPorteApplicative().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di una porta con key ["+key+"]");
}
archivio.getPorteApplicative().add(key,new ArchivePortaApplicativa(pa,idCorrelazione,true));
return pa;
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (porta-applicativa) non valida rispetto allo schema (ConfigurazionePdD): "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readPortaApplicativaExtended(PortaApplicativa pa,InputStream bin,byte[]xml,String entryName,boolean validationDocuments,ExtendedInfoManager extendedInfoManager) throws ProtocolException{
try{
if(pa==null){
throw new ProtocolException("Non è possibile indicare una configurazione estesa senza indicare anche la definizione della porta applicativa");
}
Object o = extendedInfoManager.newInstanceExtendedInfoPortaApplicativa().deserialize(this.log, pa, xml);
pa.addExtendedInfo(o);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (porta-applicativa-extended) non valida: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public static final String USE_VERSION_XML_BEAN = "USE_VERSION_XML_BEAN";
public void readAccordoServizioParteComune(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,
String nomeFileSenzaAccordo,String nomeAccordo,String versioneAccordo, boolean servizioComposto,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione,
ArchiveVersion archiveVersion,
Map<String, IdentificativoDocumento> mapKeyDocumenti,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties) throws ProtocolException{
Integer versioneAccordoInt = null;
try{
if(versioneAccordo!=null && USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
versioneAccordoInt = Integer.parseInt(versioneAccordo);
}
}catch(Exception e){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) nel path contiene una versione errata: "+e.getMessage());
}
String key = null;
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
Integer versioneKey = (versioneAccordoInt!=null ? versioneAccordoInt : -1 );
if(servizioComposto){
key = ArchiveAccordoServizioComposto.buildKey(tipoSoggettoKey, nomeSoggettoKey, nomeAccordo, versioneKey);
}else{
key = ArchiveAccordoServizioParteComune.buildKey(tipoSoggettoKey, nomeSoggettoKey, nomeAccordo, versioneKey);
}
if(nomeFileSenzaAccordo.contains((File.separatorChar+""))==false){
// definizione dell'accordo
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
AccordoServizioParteComune aspc = this.jaxbRegistryDeserializer.readAccordoServizioParteComune(xml);
// soggetto referente
if(aspc.getSoggettoReferente()==null){
aspc.setSoggettoReferente(new IdSoggetto());
}
if(tipoSoggetto!=null){
if(aspc.getSoggettoReferente().getTipo()!=null && !aspc.getSoggettoReferente().getTipo().equals(tipoSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un soggetto referente con tipo ["+
aspc.getSoggettoReferente().getTipo()+"] differente da quello indicato ["+tipoSoggetto+"] nella directory che contiene la definizione");
}
}
if(nomeSoggetto!=null){
if(aspc.getSoggettoReferente().getNome()!=null && !aspc.getSoggettoReferente().getNome().equals(nomeSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un soggetto referente con nome ["+
aspc.getSoggettoReferente().getNome()+"] differente da quello indicato ["+nomeSoggetto+"] nella directory che contiene la definizione");
}
}
aspc.getSoggettoReferente().setTipo(tipoSoggetto);
aspc.getSoggettoReferente().setNome(nomeSoggetto);
// nome e versione check quello indicato nell'accordo rispetto a quello indicato
// - nome della directory (old version)
// - file idAccordo (new version)
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
String convertName = ZIPUtils.oldMethod_convertCharNonPermessiQualsiasiSistemaOperativo(aspc.getNome(),false);
if(!convertName.equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
aspc.getNome()+"] (fileSystemName:"+convertName+") differente da quello indicato ["+nomeAccordo+"] nella directory che contiene la definizione");
}
if(USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
if(versioneAccordoInt!=null){
if(aspc.getVersione()!=null){
if(aspc.getVersione().intValue()!= versioneAccordoInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
aspc.getVersione()+"] (fileSystemName:"+versioneAccordo+") differente da quella indicato ["+versioneAccordoInt+"] nella directory che contiene la definizione");
}
}
aspc.setVersione(versioneAccordoInt);
}
}
}
else{
if(!aspc.getNome().equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
aspc.getNome()+"] differente da quello indicato ["+nomeAccordo+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
if(USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
if(versioneAccordoInt!=null){
if(aspc.getVersione()!=null && aspc.getVersione().intValue()!= versioneAccordoInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
aspc.getVersione()+"] differente da quella indicata ["+versioneAccordoInt+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
}
aspc.setVersione(versioneAccordoInt);
}
}
// servizio composto
if(servizioComposto){
if(aspc.getServizioComposto()==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) non contiene le informazioni obbligatorie in un servizio composto");
}
if(archivio.getAccordiServizioComposto().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un accordo con key ["+key+"]");
}
archivio.getAccordiServizioComposto().add(key,new ArchiveAccordoServizioComposto(aspc,idCorrelazione,true));
}
else{
if(aspc.getServizioComposto()!=null){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene le informazioni per un servizio composto, ma l'accordo e' stato definito tra gli accordi di servizio parte comune");
}
if(archivio.getAccordiServizioParteComune().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un accordo con key ["+key+"]");
}
archivio.getAccordiServizioParteComune().add(key,new ArchiveAccordoServizioParteComune(aspc,idCorrelazione,true));
}
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (accordo-servizio-parte-comune) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
else{
// recupero archivio precedentemente letto
AccordoServizioParteComune as = null;
if(servizioComposto){
if(archivio.getAccordiServizioComposto().containsKey(key)==false){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire dei documenti di un accordo senza fornire la definizione xml dell'accordo");
}
as = archivio.getAccordiServizioComposto().get(key).getAccordoServizioParteComune();
}else{
if(archivio.getAccordiServizioParteComune().containsKey(key)==false){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire dei documenti di un accordo senza fornire la definizione xml dell'accordo");
}
as = archivio.getAccordiServizioParteComune().get(key).getAccordoServizioParteComune();
}
// wsdl
if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar)){
if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_INTERFACCIA_DEFINITORIA)){
as.setByteWsdlDefinitorio(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL)){
as.setByteWsdlConcettuale(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_EROGATORE_WSDL)){
as.setByteWsdlLogicoErogatore(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_LOGICO_FRUITORE_WSDL)){
as.setByteWsdlLogicoFruitore(xml);
}
}
// specifica conversazioni
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_CONVERSAZIONI+File.separatorChar)){
if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_CONCETTUALE)){
as.setByteSpecificaConversazioneConcettuale(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_EROGATORE)){
as.setByteSpecificaConversazioneErogatore(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SPECIFICA_CONVERSIONE_LOGICA_FRUITORE)){
as.setByteSpecificaConversazioneFruitore(xml);
}
}
// allegati
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar)){
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, mapKeyDocumenti, as.getAllegatoList());
}
// specificheSemiformali
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar)){
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, mapKeyDocumenti, as.getSpecificaSemiformaleList());
}
// specificheCoordinamento
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO+File.separatorChar)){
if(servizioComposto==false){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire dei documenti di specifica di coordinamento per un accordo non registrato come servizio composto");
}
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_COORDINAMENTO, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, mapKeyDocumenti, as.getServizioComposto().getSpecificaCoordinamentoList());
}
// protocolProperties
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar)){
List<ProtocolProperty> listPP = new ArrayList<>();
HashMap<String,Long> mapIdToLong = new HashMap<>();
_updateListProtocolProperties(as, listPP, mapIdToLong);
processProtocolProperty(nomeFileSenzaAccordo, archiveVersion, entryName, xml,
ProprietarioProprietaProtocollo.ACCORDO_SERVIZIO_PARTE_COMUNE,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo,
null, null,
mapKeyProtocolProperties, listPP, mapIdToLong);
}
}
}
private void _updateListProtocolProperties(AccordoServizioParteComune as,
List<ProtocolProperty> listPP, HashMap<String,Long> mapIdToLong) {
long idLongForMap = 1;
if(as.sizeProtocolPropertyList()>0) {
for (ProtocolProperty protocolProperty : as.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE.name());
}
listPP.add(protocolProperty);
}
}
if(as.sizeAzioneList()>0) {
for (Azione az : as.getAzioneList()) {
if(az.sizeProtocolPropertyList()>0) {
String key = buildKeyPPAccordoParteComuneItem(ProprietariProtocolProperty.AZIONE_ACCORDO, az.getNome());
Long idLong = idLongForMap++;
mapIdToLong.put(key,idLong);
for (ProtocolProperty protocolProperty : az.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.AZIONE_ACCORDO.name());
}
protocolProperty.setIdProprietario(idLong);
listPP.add(protocolProperty);
}
}
}
}
if(as.sizePortTypeList()>0) {
for (PortType pt : as.getPortTypeList()) {
if(pt.sizeProtocolPropertyList()>0) {
String key = buildKeyPPAccordoParteComuneItem(ProprietariProtocolProperty.PORT_TYPE, pt.getNome());
Long idLong = idLongForMap++;
mapIdToLong.put(key,idLong);
for (ProtocolProperty protocolProperty : pt.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.PORT_TYPE.name());
}
protocolProperty.setIdProprietario(idLong);
listPP.add(protocolProperty);
}
}
if(pt.sizeAzioneList()>0) {
for (Operation op : pt.getAzioneList()) {
if(op.sizeProtocolPropertyList()>0) {
String key = buildKeyPPAccordoParteComuneItem(ProprietariProtocolProperty.OPERATION, op.getNome());
Long idLong = idLongForMap++;
mapIdToLong.put(key,idLong);
for (ProtocolProperty protocolProperty : op.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.OPERATION.name());
}
protocolProperty.setIdProprietario(idLong);
listPP.add(protocolProperty);
}
}
}
}
}
}
if(as.sizeResourceList()>0) {
for (Resource resource : as.getResourceList()) {
if(resource.sizeProtocolPropertyList()>0) {
String key = buildKeyPPAccordoParteComuneItem(ProprietariProtocolProperty.RESOURCE, resource.getNome());
Long idLong = idLongForMap++;
mapIdToLong.put(key,idLong);
for (ProtocolProperty protocolProperty : resource.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.RESOURCE.name());
}
protocolProperty.setIdProprietario(idLong);
listPP.add(protocolProperty);
}
}
}
}
}
public void readAccordoServizioParteSpecifica(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,
String nomeFileSenzaAccordo,String tipoServizio,String nomeServizio,String versioneServizio,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione,
ArchiveVersion archiveVersion,
Map<String, IdentificativoDocumento> mapKeyDocumenti,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties,
Map<String, IDSoggetto> mapKeyFruitori) throws ProtocolException{
Integer versioneServizioInt = null;
try{
if(versioneServizio!=null && USE_VERSION_XML_BEAN.equals(versioneServizio)==false){
versioneServizioInt = Integer.parseInt(versioneServizio);
}
}catch(Exception e){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) nel path contiene una versione errata: "+e.getMessage());
}
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
Integer versioneKey = (versioneServizioInt!=null ? versioneServizioInt : -1 );
String key = ArchiveAccordoServizioParteSpecifica.buildKey(tipoSoggettoKey, nomeSoggettoKey, tipoServizio, nomeServizio, versioneKey);
if(!nomeFileSenzaAccordo.contains((File.separatorChar+""))){
// definizione dell'accordo
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
AccordoServizioParteSpecifica asps = this.jaxbRegistryDeserializer.readAccordoServizioParteSpecifica(xml);
// soggetto erogatore
asps.setTipoSoggettoErogatore(tipoSoggetto);
asps.setNomeSoggettoErogatore(nomeSoggetto);
// nome e versione check quello indicato nell'accordo rispetto a quello indicato
// - nome della directory (old version)
// - file idAccordo (new version)
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
String convertName = ZIPUtils.oldMethod_convertCharNonPermessiQualsiasiSistemaOperativo(asps.getNome(),false);
if(!convertName.equals(nomeServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
asps.getNome()+"] (fileSystemName:"+convertName+") differente da quello indicato ["+nomeServizio+"] nella directory che contiene la definizione");
}
String convertTipo = ZIPUtils.oldMethod_convertCharNonPermessiQualsiasiSistemaOperativo(asps.getTipo(),false);
if(!convertTipo.equals(tipoServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un tipo ["+
asps.getTipo()+"] (fileSystemName:"+convertTipo+") differente da quello indicato ["+tipoServizio+"] nella directory che contiene la definizione");
}
if(USE_VERSION_XML_BEAN.equals(versioneServizio)==false){
if(versioneServizioInt!=null){
if(asps.getVersione()!=null){
if(asps.getVersione().intValue()!= versioneServizioInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
asps.getVersione()+"] (fileSystemName:"+versioneServizio+") differente da quella indicato ["+versioneServizioInt+"] nella directory che contiene la definizione");
}
}
asps.setVersione(versioneServizioInt);
}
}
}
else{
if(!asps.getNome().equals(nomeServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
asps.getNome()+"] differente da quello indicato ["+nomeServizio+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
if(!asps.getTipo().equals(tipoServizio)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un tipo ["+
asps.getNome()+"] differente da quello indicato ["+tipoServizio+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
if(USE_VERSION_XML_BEAN.equals(versioneServizio)==false){
if(versioneServizioInt!=null){
if(asps.getVersione()!=null && asps.getVersione().intValue()!= versioneServizioInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
asps.getVersione()+"] differente da quella indicata ["+versioneServizio+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
}
asps.setVersione(versioneServizioInt);
}
}
// check fruizioni
if(asps.sizeFruitoreList()>0){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) non deve contenere fruizioni (eventuali fruizioni devono essere configurate nella struttura apposita)");
}
// add
if(archivio.getAccordiServizioParteSpecifica().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un accordo con key ["+key+"]");
}
archivio.getAccordiServizioParteSpecifica().add(key,new ArchiveAccordoServizioParteSpecifica(asps,idCorrelazione,true));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (accordo-servizio-parte-specifica) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
else{
// recupero archivio precedentemente letto
ArchiveAccordoServizioParteSpecifica archiveASPS = null;
AccordoServizioParteSpecifica as = null;
if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar)==false){
if(archivio.getAccordiServizioParteSpecifica().containsKey(key)==false){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire dei documenti di un accordo senza fornire la definizione xml dell'accordo");
}
archiveASPS = archivio.getAccordiServizioParteSpecifica().get(key);
as = archiveASPS.getAccordoServizioParteSpecifica();
}
// mapping PA
if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_MAPPING+File.separatorChar) &&
nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_SERVIZIO_PARTE_SPECIFICA_MAPPING_PA_SUFFIX)){
readAccordoServizioParteSpecifica_PortaApplicativaAssociata(archiveASPS, bin, xml, entryName);
}
// wsdl
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar)){
if(as!=null) {
if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_EROGATORE_WSDL)){
as.setByteWsdlImplementativoErogatore(xml);
}
else if(nomeFileSenzaAccordo.equalsIgnoreCase(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_WSDL+File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_IMPLEMENTATIVO_FRUITORE_WSDL)){
as.setByteWsdlImplementativoFruitore(xml);
}
}
}
// allegati
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar)){
if(as!=null) {
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio, mapKeyDocumenti, as.getAllegatoList());
}
}
// specificheSemiformali
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar)){
if(as!=null) {
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio, mapKeyDocumenti, as.getSpecificaSemiformaleList());
}
}
// specificheLivelliServizio
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO+File.separatorChar)){
if(as!=null) {
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_LIVELLI_SERVIZIO, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio, mapKeyDocumenti, as.getSpecificaLivelloServizioList());
}
}
// specificheSicurezza
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA+File.separatorChar)){
if(as!=null) {
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SICUREZZA, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio, mapKeyDocumenti, as.getSpecificaSicurezzaList());
}
}
// protocolProperties
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar)){
List<ProtocolProperty> listPP = new ArrayList<>();
if(as!=null && as.sizeProtocolPropertyList()>0) {
for (ProtocolProperty protocolProperty : as.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_SPECIFICA.name());
}
listPP.add(protocolProperty);
}
}
processProtocolProperty(nomeFileSenzaAccordo, archiveVersion, entryName, xml,
ProprietarioProprietaProtocollo.ACCORDO_SERVIZIO_PARTE_SPECIFICA,
tipoSoggetto, nomeSoggetto, tipoServizio+"/"+nomeServizio, versioneServizio,
null, null,
mapKeyProtocolProperties, listPP, null);
}
// fruitori (politiche di sicurezza)
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar) &&
nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_SERVIZI_APPLICATIVI_AUTORIZZATI)){
// NOP per backward compatibility
}
// fruitori (Mapping Fruitore - PortaDelegata)
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar) &&
nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_MAPPING_PD_SUFFIX)){
this.readAccordoServizioParteSpecifica_Fruitore_PortaDelegataAssociata(archivio, bin, xml, entryName,
nomeFileSenzaAccordo,
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio,
validationDocuments, idCorrelazione,
mapKeyFruitori);
}
// fruitori
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar)){
this.readAccordoServizioParteSpecifica_Fruitore(archivio, bin, xml, entryName,
nomeFileSenzaAccordo.substring((Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar).length()),
tipoSoggetto, nomeSoggetto, tipoServizio, nomeServizio, versioneServizio,
validationDocuments, idCorrelazione,
archiveVersion,
mapKeyProtocolProperties,
mapKeyFruitori);
}
}
}
public void readAccordoServizioParteSpecifica_PortaApplicativaAssociata(ArchiveAccordoServizioParteSpecifica archiveASPS,InputStream bin,byte[]xml,String entryName) throws ProtocolException{
// *** leggo porta applicativa associata ****
try{
if(archiveASPS==null){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire il mapping con la PA senza fornire la definizione xml dell'accordo di servizio parte specifica");
}
String idLine = this.readLineId(xml);
if(idLine==null || "".equals(idLine)){
throw new ProtocolException("id non contiene valori");
}
if(idLine.endsWith("\n")) {
idLine = idLine.substring(0, idLine.length()-1);
}
String [] tmp = idLine.split(" ");
if(tmp.length<3) {
throw new ProtocolException("Attesi almeno tre valori separati da spazio (nomeRegola nomePorta isDefault [descrizione])");
}
String nomeRegola = tmp[0];
String nomePorta = tmp[1];
boolean isDefault = false;
try {
isDefault = Boolean.parseBoolean(tmp[2]);
}catch(Exception e) {
throw new ProtocolException("Attesi tre valori separati da spazio (nomeRegola nomePorta isDefault) in cui l'ultimo valore di tipo booleano: "+e.getMessage(),e);
}
String descrizione = null;
if(tmp.length>3) {
String primeTreInfo = nomeRegola +" "+nomePorta+" "+isDefault+" ";
descrizione = idLine.substring(primeTreInfo.length());
}
MappingErogazionePortaApplicativa mapping = new MappingErogazionePortaApplicativa();
mapping.setNome(nomeRegola);
mapping.setIdServizio(IDServizioFactory.getInstance().getIDServizioFromAccordo(archiveASPS.getAccordoServizioParteSpecifica()));
IDPortaApplicativa idPA = new IDPortaApplicativa();
idPA.setNome(nomePorta);
mapping.setIdPortaApplicativa(idPA);
mapping.setDefault(isDefault);
mapping.setDescrizione(descrizione);
if(archiveASPS.getMappingPorteApplicativeAssociate()==null) {
archiveASPS.setMappingPorteApplicativeAssociate(new ArrayList<>());
}
archiveASPS.getMappingPorteApplicativeAssociate().add(mapping);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura id (mapping asps-pa) non valida: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readAccordoServizioParteSpecifica_Fruitore(Archive archivio,InputStream bin,byte[]xml,String entryName,String nomeFileSenzaAccordo,
String tipoSoggetto, String nomeSoggetto, String tipoServizio, String nomeServizio, String versioneServizio,
boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione,
ArchiveVersion archiveVersion,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties,
Map<String, IDSoggetto> mapKeyFruitori) throws ProtocolException{
Integer versioneServizioInt = null;
try{
if(versioneServizio!=null && !USE_VERSION_XML_BEAN.equals(versioneServizio)){
versioneServizioInt = Integer.parseInt(versioneServizio);
}
}catch(Exception e){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) nel path contiene una versione errata: "+e.getMessage());
}
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
Integer versioneKey = (versioneServizioInt!=null ? versioneServizioInt : -1 );
if(!nomeFileSenzaAccordo.contains((File.separatorChar+""))){
if(entryName.endsWith(".id")) {
// dati identificativi del fruitore
String s = null;
try {
// comprendo tipo e nome soggetto
String tipoNomeSoggettoFruitore = nomeFileSenzaAccordo.substring(nomeFileSenzaAccordo.indexOf(File.separatorChar)+1,(nomeFileSenzaAccordo.length()-".id".length()));
if(tipoNomeSoggettoFruitore==null || "".equals(tipoNomeSoggettoFruitore) || !tipoNomeSoggettoFruitore.contains("_")){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>");
}
s = new String(xml);
if(s.endsWith("\n") && s.length()>1){
s = s.substring(0, s.length()-1);
}
IDSoggetto idSoggetto = IDSoggetto.toIDSoggetto(s);
mapKeyFruitori.put(tipoNomeSoggettoFruitore, idSoggetto);
}catch(Exception e) {
throw new ProtocolException("Elemento ["+entryName+"] contiene degli identificativi del frutore ("+s+") non validi rispetto al pattern atteso (tipo/nome): "
+e.getMessage(),e);
}
}
else {
// definizione del fruitore
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
if(USE_VERSION_XML_BEAN.equals(versioneServizio)){
// devo recuperare la versione dell'accordo
String keyAccordo = ArchiveAccordoServizioParteSpecifica.buildKey(tipoSoggettoKey, nomeSoggettoKey, nomeServizio, tipoServizio, versioneKey);
versioneKey = archivio.getAccordiServizioParteSpecifica().get(keyAccordo).getAccordoServizioParteSpecifica().getVersione();
versioneServizioInt = versioneKey;
}
Fruitore fruitore = this.jaxbRegistryDeserializer.readFruitore(xml);
String keyFruitore = ArchiveFruitore.buildKey(fruitore.getTipo(), fruitore.getNome(), tipoSoggettoKey, nomeSoggettoKey, tipoServizio, nomeServizio, versioneServizioInt);
if(archivio.getAccordiFruitori().containsKey(keyFruitore)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un fruitore con key ["+keyFruitore+"]");
}
IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio, tipoSoggetto, nomeSoggetto, versioneServizioInt);
archivio.getAccordiFruitori().add(keyFruitore,new ArchiveFruitore(idServizio,fruitore,idCorrelazione,true));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (fruitore) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
}
else {
// comprendo tipo e nome soggetto fruitore
String tipoNomeSoggettoFruitore = nomeFileSenzaAccordo.substring(0,nomeFileSenzaAccordo.indexOf(File.separatorChar));
if(tipoNomeSoggettoFruitore==null || "".equals(tipoNomeSoggettoFruitore) || !tipoNomeSoggettoFruitore.contains("_")){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>");
}
tipoNomeSoggettoFruitore = tipoNomeSoggettoFruitore.trim();
String tipoSoggettoFruitore = null;
String nomeSoggettoFruitore = null;
if(tipoNomeSoggettoFruitore.equals("_")){
// caso eccezionale senza ne tipo ne nome
}
else if(tipoNomeSoggettoFruitore.startsWith("_")){
// caso eccezionale con solo il nome
nomeSoggettoFruitore = tipoNomeSoggettoFruitore.substring(1);
}
else if(tipoNomeSoggettoFruitore.endsWith("_")){
// caso eccezionale con solo il tipo
tipoSoggettoFruitore = tipoNomeSoggettoFruitore.substring(0,tipoNomeSoggettoFruitore.length()-1);
}
else{
// caso normale
tipoSoggettoFruitore = tipoNomeSoggettoFruitore.split("_")[0];
nomeSoggettoFruitore = tipoNomeSoggettoFruitore.split("_")[1];
if(tipoSoggettoFruitore==null || "".equals(tipoSoggettoFruitore)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: tipo non identificato");
}
if(nomeSoggettoFruitore==null || "".equals(nomeSoggettoFruitore)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+
"] deve essere presenta una ulteriore directory contenente la struttura <tipo>_<nome> che descrive il soggetto. Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: nome non identificato");
}
}
// provo a vedere se ho già gestito l'entry come chiave identificativo del soggetto
if(mapKeyFruitori!=null && mapKeyFruitori.containsKey(tipoNomeSoggettoFruitore)) {
IDSoggetto id = mapKeyFruitori.get(tipoNomeSoggettoFruitore);
if(id!=null) {
// converto dati identificativi del soggetto
tipoSoggettoFruitore = id.getTipo();
nomeSoggettoFruitore = id.getNome();
}
}
// recupero archivio precedentemente letto
String keyFruitore = ArchiveFruitore.buildKey(tipoSoggettoFruitore, nomeSoggettoFruitore, tipoSoggettoKey, nomeSoggettoKey, tipoServizio, nomeServizio, versioneServizioInt);
ArchiveFruitore archiveFruitore = null;
Fruitore fruitore = null;
if(!archivio.getAccordiFruitori().containsKey(keyFruitore)){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire delle proprietà di protocollo di un fruitore senza fornire la definizione xml del fruitore");
}
archiveFruitore = archivio.getAccordiFruitori().get(keyFruitore);
fruitore = archiveFruitore.getFruitore();
nomeFileSenzaAccordo = nomeFileSenzaAccordo.substring((tipoNomeSoggettoFruitore+File.separatorChar).length());
if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar)){
List<ProtocolProperty> listPP = new ArrayList<>();
if(fruitore.sizeProtocolPropertyList()>0) {
for (ProtocolProperty protocolProperty : fruitore.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.FRUITORE.name());
}
listPP.add(protocolProperty);
}
}
processProtocolProperty(nomeFileSenzaAccordo, archiveVersion, entryName, xml,
ProprietarioProprietaProtocollo.FRUITORE,
tipoSoggetto, nomeSoggetto, tipoServizio+"/"+nomeServizio, versioneServizio,
tipoSoggettoFruitore, nomeSoggettoFruitore,
mapKeyProtocolProperties, listPP, null);
}
}
}
public void readAccordoServizioParteSpecifica_Fruitore_PortaDelegataAssociata(Archive archivio,InputStream bin,byte[]xml,String entryName,
String nomeFileSenzaAccordo,
String tipoSoggetto, String nomeSoggetto, String tipoServizio, String nomeServizio, String versioneServizio,
boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione,
Map<String, IDSoggetto> mapKeyFruitori) throws ProtocolException{
// *** comprendo tipo e nome fruitore ****
String prefixError = "Elemento ["+entryName+"] errato. Dopo la directory ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+
"] il file che termina con ["+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_MAPPING_PD_SUFFIX+
"] deve essere contenuto in una directory definita tramite la struttura <tipo>_<nome> che descrive il soggetto fruitore.";
// comprendo tipo e nome soggetto
String nomeServizioMappingPD = nomeFileSenzaAccordo.substring(nomeFileSenzaAccordo.lastIndexOf(File.separatorChar),nomeFileSenzaAccordo.length());
String tipoNomeSoggettoFruitore = nomeFileSenzaAccordo.substring((Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_DIR+File.separatorChar).length(),
nomeFileSenzaAccordo.length()-
/**(File.separatorChar+Costanti.OPENSPCOOP2_ARCHIVE_FRUITORE_MAPPING_PD).length());*/
nomeServizioMappingPD.length());
if(tipoNomeSoggettoFruitore==null || "".equals(tipoNomeSoggettoFruitore) || !tipoNomeSoggettoFruitore.contains("_")){
throw new ProtocolException(prefixError+" Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>");
}
tipoNomeSoggettoFruitore = tipoNomeSoggettoFruitore.trim();
String tipoSoggettoFruitore = null;
String nomeSoggettoFruitore = null;
if(tipoNomeSoggettoFruitore.equals("_")){
// caso eccezionale senza ne tipo ne nome
}
else if(tipoNomeSoggettoFruitore.startsWith("_")){
// caso eccezionale con solo il nome
nomeSoggettoFruitore = tipoNomeSoggettoFruitore.substring(1);
}
else if(tipoNomeSoggettoFruitore.endsWith("_")){
// caso eccezionale con solo il tipo
tipoSoggettoFruitore = tipoNomeSoggettoFruitore.substring(0,tipoNomeSoggettoFruitore.length()-1);
}
else{
// caso normale
tipoSoggettoFruitore = tipoNomeSoggettoFruitore.split("_")[0];
nomeSoggettoFruitore = tipoNomeSoggettoFruitore.split("_")[1];
if(tipoSoggettoFruitore==null || "".equals(tipoSoggettoFruitore)){
throw new ProtocolException(prefixError+" Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: tipo non identificato");
}
if(nomeSoggettoFruitore==null || "".equals(nomeSoggettoFruitore)){
throw new ProtocolException(prefixError+" Il nome utilizzato per la directory non e' conforme alla struttura attesa <tipo>_<nome>: nome non identificato");
}
}
// provo a vedere se ho già gestito l'entry come chiave identificativo del soggetto
if(mapKeyFruitori!=null && mapKeyFruitori.containsKey(tipoNomeSoggettoFruitore)) {
IDSoggetto id = mapKeyFruitori.get(tipoNomeSoggettoFruitore);
if(id!=null) {
// converto dati identificativi del soggetto
tipoSoggettoFruitore = id.getTipo();
nomeSoggettoFruitore = id.getNome();
}
}
// *** leggo porta delegata associata ****
Integer versioneServizioInt = null;
try{
if(versioneServizio!=null && !USE_VERSION_XML_BEAN.equals(versioneServizio)){
versioneServizioInt = Integer.parseInt(versioneServizio);
}
}catch(Exception e){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) nel path contiene una versione errata: "+e.getMessage());
}
String tipoSoggettoFruitoreKey = (tipoSoggettoFruitore!=null ? tipoSoggettoFruitore : "" );
String nomeSoggettoFruitoreKey = (nomeSoggettoFruitore!=null ? nomeSoggettoFruitore : "" );
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
Integer versioneKey = (versioneServizioInt!=null ? versioneServizioInt : -1 );
try{
String idLine = this.readLineId(xml);
if(idLine==null || "".equals(idLine)){
throw new ProtocolException("id non contiene valori");
}
if(idLine.endsWith("\n")) {
idLine = idLine.substring(0, idLine.length()-1);
}
String [] tmp = idLine.split(" ");
if(tmp.length<3) {
throw new ProtocolException("Attesi almeno tre valori separati da spazio (nomeRegola nomePorta isDefault [descrizione])");
}
String nomeRegola = tmp[0];
String nomePorta = tmp[1];
boolean isDefault = false;
try {
isDefault = Boolean.parseBoolean(tmp[2]);
}catch(Exception e) {
throw new ProtocolException("Attesi tre valori separati da spazio (nomeRegola nomePorta isDefault) in cui l'ultimo valore di tipo booleano: "+e.getMessage(),e);
}
String descrizione = null;
if(tmp.length>3) {
String primeTreInfo = nomeRegola +" "+nomePorta+" "+isDefault+" ";
descrizione = idLine.substring(primeTreInfo.length());
}
String keyFruitore = ArchiveFruitore.buildKey(tipoSoggettoFruitoreKey, nomeSoggettoFruitoreKey, tipoSoggettoKey, nomeSoggettoKey, tipoServizio, nomeServizio, versioneKey);
if(!archivio.getAccordiFruitori().containsKey(keyFruitore)){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire un mapping con la porta delegata senza fornire la definizione xml della fruizione");
}
ArchiveFruitore archiveFruitore = archivio.getAccordiFruitori().get(keyFruitore);
MappingFruizionePortaDelegata mapping = new MappingFruizionePortaDelegata();
mapping.setNome(nomeRegola);
mapping.setIdServizio(archiveFruitore.getIdAccordoServizioParteSpecifica());
mapping.setIdFruitore(archiveFruitore.getIdSoggettoFruitore());
IDPortaDelegata idPD = new IDPortaDelegata();
idPD.setNome(nomePorta);
mapping.setIdPortaDelegata(idPD);
mapping.setDefault(isDefault);
mapping.setDescrizione(descrizione);
if(archiveFruitore.getMappingPorteDelegateAssociate()==null) {
archiveFruitore.setMappingPorteDelegateAssociate(new ArrayList<>());
}
archiveFruitore.getMappingPorteDelegateAssociate().add(mapping);
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura csv (mapping fruizione-pd) non valida: "
+eDeserializer.getMessage(),eDeserializer);
}
}
public void readAccordoCooperazione(Archive archivio,InputStream bin,byte[]xml,String entryName,String tipoSoggetto,String nomeSoggetto,
String nomeFileSenzaAccordo,String nomeAccordo,String versioneAccordo,boolean validationDocuments, ArchiveIdCorrelazione idCorrelazione,
ArchiveVersion archiveVersion,
Map<String, IdentificativoDocumento> mapKeyDocumenti,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties) throws ProtocolException{
Integer versioneAccordoInt = null;
try{
if(versioneAccordo!=null && USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
versioneAccordoInt = Integer.parseInt(versioneAccordo);
}
}catch(Exception e){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) nel path contiene una versione errata: "+e.getMessage());
}
String tipoSoggettoKey = (tipoSoggetto!=null ? tipoSoggetto : "" );
String nomeSoggettoKey = (nomeSoggetto!=null ? nomeSoggetto : "" );
Integer versioneKey = (versioneAccordoInt!=null ? versioneAccordoInt : -1 );
String key = ArchiveAccordoCooperazione.buildKey(tipoSoggettoKey, nomeSoggettoKey, nomeAccordo, versioneKey);
if(nomeFileSenzaAccordo.contains((File.separatorChar+""))==false){
// definizione dell'accordo
try{
if(validationDocuments){
org.openspcoop2.core.registry.utils.XSDValidator.getXSDValidator(this.log).valida(bin);
}
AccordoCooperazione ac = this.jaxbRegistryDeserializer.readAccordoCooperazione(xml);
// soggetto referente
if(ac.getSoggettoReferente()==null){
ac.setSoggettoReferente(new IdSoggetto());
}
if(tipoSoggetto!=null){
if(ac.getSoggettoReferente().getTipo()!=null && !ac.getSoggettoReferente().getTipo().equals(tipoSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un soggetto referente con tipo ["+
ac.getSoggettoReferente().getTipo()+"] differente da quello indicato ["+tipoSoggetto+"] nella directory che contiene la definizione");
}
}
if(nomeSoggetto!=null){
if(ac.getSoggettoReferente().getNome()!=null && !ac.getSoggettoReferente().getNome().equals(nomeSoggetto)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un soggetto referente con nome ["+
ac.getSoggettoReferente().getNome()+"] differente da quello indicato ["+nomeSoggetto+"] nella directory che contiene la definizione");
}
}
ac.getSoggettoReferente().setTipo(tipoSoggetto);
ac.getSoggettoReferente().setNome(nomeSoggetto);
// nome e versione check quello indicato nell'accordo rispetto a quello indicato
// - nome della directory (old version)
// - file idAccordo (new version)
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
String convertName = ZIPUtils.oldMethod_convertCharNonPermessiQualsiasiSistemaOperativo(ac.getNome(),false);
if(!convertName.equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
ac.getNome()+"] (fileSystemName:"+convertName+") differente da quello indicato ["+nomeAccordo+"] nella directory che contiene la definizione");
}
if(USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
if(versioneAccordoInt!=null){
if(ac.getVersione()!=null){
if(ac.getVersione().intValue()!= versioneAccordoInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
ac.getVersione()+"] (fileSystemName:"+versioneAccordo+") differente da quella indicato ["+versioneAccordoInt+"] nella directory che contiene la definizione");
}
}
ac.setVersione(versioneAccordoInt);
}
}
}
else{
if(!ac.getNome().equals(nomeAccordo)){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene un nome ["+
ac.getNome()+"] differente da quello indicato ["+nomeAccordo+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
if(USE_VERSION_XML_BEAN.equals(versioneAccordo)==false){
if(versioneAccordoInt!=null){
if(ac.getVersione()!=null && ac.getVersione().intValue()!= versioneAccordoInt.intValue()){
throw new ProtocolException("Elemento ["+entryName+"] errato. La definizione xml dell'accordo (RegistroServizi) contiene una versione ["+
ac.getVersione()+"] differente da quella indicata ["+versioneAccordo+"] nel file ["+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME+"]");
}
}
ac.setVersione(versioneAccordoInt);
}
}
// add
if(archivio.getAccordiCooperazione().containsKey(key)){
throw new ProtocolException("Elemento ["+entryName+"] errato. Risulta esistere piu' di un accordo con key ["+key+"]");
}
archivio.getAccordiCooperazione().add(key,new ArchiveAccordoCooperazione(ac,idCorrelazione,true));
}catch(Exception eDeserializer){
String xmlString = this.toStringXmlElementForErrorMessage(xml);
throw new ProtocolException(xmlString+"Elemento ["+entryName+"] contiene una struttura xml (accordo-cooperazione) non valida rispetto allo schema (RegistroServizi): "
+eDeserializer.getMessage(),eDeserializer);
}
}
else{
// recupero archivio precedentemente letto
AccordoCooperazione ac = null;
if(archivio.getAccordiCooperazione().containsKey(key)==false){
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire dei documenti di un accordo senza fornire la definizione xml dell'accordo");
}
ac = archivio.getAccordiCooperazione().get(key).getAccordoCooperazione();
// allegati
if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI+File.separatorChar)){
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_ALLEGATI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, mapKeyDocumenti, ac.getAllegatoList());
}
// specificheSemiformali
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI+File.separatorChar)){
processDocument(nomeFileSenzaAccordo, Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_SPECIFICHE_SEMIFORMALI, archiveVersion, entryName, xml,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, mapKeyDocumenti, ac.getSpecificaSemiformaleList());
}
// protocolProperties
else if(nomeFileSenzaAccordo.startsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar)){
List<ProtocolProperty> listPP = new ArrayList<>();
if(ac.sizeProtocolPropertyList()>0) {
for (ProtocolProperty protocolProperty : ac.getProtocolPropertyList()) {
if(protocolProperty.getTipoProprietario()==null) {
protocolProperty.setTipoProprietario(ProprietariProtocolProperty.ACCORDO_COOPERAZIONE.name());
}
listPP.add(protocolProperty);
}
}
processProtocolProperty(nomeFileSenzaAccordo, archiveVersion, entryName, xml,
ProprietarioProprietaProtocollo.ACCORDO_COOPERAZIONE,
tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo,
null, null,
mapKeyProtocolProperties, listPP, null);
}
}
}
private void processDocument(String nomeFileSenzaAccordo,String tipoDir, ArchiveVersion archiveVersion, String entryName, byte[] xml,
String tipoSoggetto, String nomeSoggetto, String tipoServizio, String nomeServizio, String versioneServizio,
Map<String, IdentificativoDocumento> mapKeyDocumenti, List<Documento> documenti) throws ProtocolException{
this.processDocument(nomeFileSenzaAccordo, tipoDir, archiveVersion, entryName, xml, tipoSoggetto, nomeSoggetto,
tipoServizio+nomeServizio, versioneServizio, mapKeyDocumenti, documenti);
}
private void processDocument(String nomeFileSenzaAccordo,String tipoDir, ArchiveVersion archiveVersion, String entryName, byte[] xml,
String tipoSoggetto, String nomeSoggetto, String nomeAccordo, String versioneAccordo,
Map<String, IdentificativoDocumento> mapKeyDocumenti, List<Documento> documenti) throws ProtocolException{
String nomeDocumento = nomeFileSenzaAccordo.substring((tipoDir+File.separatorChar).length());
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
this.getDocument(documenti, nomeDocumento, null, entryName, archiveVersion).setByteContenuto(xml);
}else{
String nomeDocumentoSenzaEstensione = nomeDocumento;
if(nomeDocumento.contains(".")==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Per i documenti è attesa una estensione");
}
nomeDocumentoSenzaEstensione = nomeDocumento.substring(0,nomeDocumento.lastIndexOf("."));
String keyDocumento = getKeyDocumento(tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo, entryName, nomeDocumentoSenzaEstensione);
if(nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID)){
String tmp = new String(xml);
IdentificativoDocumento identificativoDocumento = new IdentificativoDocumento();
identificativoDocumento.tipo = tmp.split(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR)[0];
identificativoDocumento.nome = tmp.substring(identificativoDocumento.tipo.length()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR.length());
// fix file editati a mano
identificativoDocumento.tipo = identificativoDocumento.tipo.trim();
identificativoDocumento.nome = identificativoDocumento.nome.trim();
if(identificativoDocumento.nome.endsWith("\n") && identificativoDocumento.nome.length()>1) {
identificativoDocumento.nome = identificativoDocumento.nome.substring(0, identificativoDocumento.nome.length()-1);
}
mapKeyDocumenti.put(keyDocumento, identificativoDocumento);
}
else if(nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT)){
IdentificativoDocumento identificativoDocumento = mapKeyDocumenti.get(keyDocumento);
if(identificativoDocumento==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è stato rilevato precedentemente il corrispettivo file contenente l'identificativo (con estensione '"+
Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID+"')");
}
this.getDocument(documenti, identificativoDocumento.nome, identificativoDocumento.tipo, entryName, archiveVersion).setByteContenuto(xml);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso.");
}
}
}
private Documento getDocument(List<Documento> documenti, String nome, String tipo, String entryName, ArchiveVersion archiveVersion) throws ProtocolException{
List<Character> permitPoint = new ArrayList<Character>();
permitPoint.add('.');
for (Documento documento : documenti) {
String fileName = documento.getFile();
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
fileName = ZIPUtils.oldMethod_convertCharNonPermessiQualsiasiSistemaOperativo(fileName,true,permitPoint);
}
if(nome.equals(fileName)){
if(ArchiveVersion.V_UNDEFINED.equals(archiveVersion)){
return documento;
}
else{
if(tipo.equals(documento.getTipo())){
return documento;
}
}
}
}
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire un documento di un accordo senza definirlo anche all'interno della definizione xml dell'accordo");
}
private void processProtocolProperty(String nomeFileSenzaAccordo,ArchiveVersion archiveVersion, String entryName, byte[] xml,
ProprietarioProprietaProtocollo proprietario,
String tipoSoggetto, String nomeSoggetto, String nomeAccordo, String versioneAccordo,
String tipoSoggettoFruitore, String nomeSoggettoFruitore,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties,
List<ProtocolProperty> protocolProperties,
HashMap<String,Long> mapIdToLong) throws ProtocolException{
String nomePP = nomeFileSenzaAccordo.substring((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar).length());
String nomePPSenzaEstensione = nomePP;
if(nomePP.contains(".")==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Per le protocol properties è attesa una estensione");
}
nomePPSenzaEstensione = nomePP.substring(0,nomePP.lastIndexOf("."));
String keyProtocolProperty = getKeyProtocolProperty(tipoSoggetto, nomeSoggetto, nomeAccordo, versioneAccordo,
tipoSoggettoFruitore, nomeSoggettoFruitore, proprietario, nomePPSenzaEstensione);
if(nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID)){
String tmp = new String(xml);
IdentificativoProprietaProtocollo identificativoPP = new IdentificativoProprietaProtocollo();
identificativoPP.tipo = ProprietariProtocolProperty.valueOf(tmp.split(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR)[0]);
int prefixLength = identificativoPP.tipo.name().length()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR.length();
if(ProprietariProtocolProperty.AZIONE_ACCORDO.equals(identificativoPP.tipo) ||
ProprietariProtocolProperty.PORT_TYPE.equals(identificativoPP.tipo) ||
ProprietariProtocolProperty.OPERATION.equals(identificativoPP.tipo) ||
ProprietariProtocolProperty.RESOURCE.equals(identificativoPP.tipo)) {
identificativoPP.idProprietario = tmp.split(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR)[1];
prefixLength+=identificativoPP.idProprietario.length()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR.length();
}
identificativoPP.nome = tmp.substring(prefixLength);
mapKeyProtocolProperties.put(keyProtocolProperty, identificativoPP);
}
else if(nomeFileSenzaAccordo.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT)){
IdentificativoProprietaProtocollo identificativoPP = mapKeyProtocolProperties.get(keyProtocolProperty);
if(identificativoPP==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è stato rilevato precedentemente il corrispettivo file contenente l'identificativo (con estensione '"+
Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID+"')");
}
this.getProtocolProperty(proprietario, protocolProperties,
identificativoPP.nome, identificativoPP.tipo,
identificativoPP.idProprietario, mapIdToLong,
entryName).setByteFile(xml);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso.");
}
}
private String buildKeyPPAccordoParteComuneItem(ProprietariProtocolProperty tipo,String idProprietario) {
return tipo.name()+"_"+idProprietario;
}
private ProtocolProperty getProtocolProperty(ProprietarioProprietaProtocollo proprietario,
List<ProtocolProperty> protocolProperties, String nome, ProprietariProtocolProperty tipo,
String idProprietario, HashMap<String,Long> mapIdToLong,
String entryName) throws ProtocolException{
for (ProtocolProperty pp : protocolProperties) {
if(pp.getTipoProprietario().equals(tipo.name()) && pp.getName().equals(nome)) {
if(mapIdToLong==null || ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE.equals(tipo)) {
return pp;
}
else {
String key = buildKeyPPAccordoParteComuneItem(tipo, idProprietario);
Long l = mapIdToLong.get(key);
if(l.longValue() == pp.getIdProprietario().longValue()) {
return pp;
}
}
}
}
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire una proprietà di protocollo senza definirlo anche all'interno della definizione xml ("+proprietario.name()+")");
}
private void processProtocolPropertyConfig(String nomeFileSenzaId,ArchiveVersion archiveVersion, String entryName, byte[] xml,
ProprietarioProprietaProtocollo proprietario,
String tipoSoggetto, String nomeSoggetto, String nome,
Map<String, IdentificativoProprietaProtocollo> mapKeyProtocolProperties,
List<org.openspcoop2.core.config.ProtocolProperty> protocolProperties,
HashMap<String,Long> mapIdToLong) throws ProtocolException{
String nomePP = nomeFileSenzaId.substring((Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_DIR_PROTOCOL_PROPERTIES+File.separatorChar).length());
String nomePPSenzaEstensione = nomePP;
if(nomePP.contains(".")==false){
throw new ProtocolException("Elemento ["+entryName+"] errato. Per le protocol properties è attesa una estensione");
}
nomePPSenzaEstensione = nomePP.substring(0,nomePP.lastIndexOf("."));
String keyProtocolProperty = getKeyProtocolProperty(tipoSoggetto, nomeSoggetto, nome, null, null, null, proprietario, nomePPSenzaEstensione);
if(nomeFileSenzaId.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID)){
String tmp = new String(xml);
IdentificativoProprietaProtocollo identificativoPP = new IdentificativoProprietaProtocollo();
identificativoPP.tipo = ProprietariProtocolProperty.valueOf(tmp.split(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR)[0]);
int prefixLength = identificativoPP.tipo.name().length()+Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_ID_FILE_NAME_INTERNAL_SEPARATOR.length();
identificativoPP.nome = tmp.substring(prefixLength);
mapKeyProtocolProperties.put(keyProtocolProperty, identificativoPP);
}
else if(nomeFileSenzaId.endsWith(Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_CONTENT)){
IdentificativoProprietaProtocollo identificativoPP = mapKeyProtocolProperties.get(keyProtocolProperty);
if(identificativoPP==null){
throw new ProtocolException("Elemento ["+entryName+"] errato. Non è stato rilevato precedentemente il corrispettivo file contenente l'identificativo (con estensione '"+
Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_ATTACHMENT_SUFFIX_ID+"')");
}
this.getProtocolPropertyConfig(proprietario, protocolProperties,
identificativoPP.nome, identificativoPP.tipo,
identificativoPP.idProprietario, mapIdToLong,
entryName).setByteFile(xml);
}
else {
throw new ProtocolException("Elemento ["+entryName+"] non atteso.");
}
}
private org.openspcoop2.core.config.ProtocolProperty getProtocolPropertyConfig(ProprietarioProprietaProtocollo proprietario,
List<org.openspcoop2.core.config.ProtocolProperty> protocolProperties, String nome, ProprietariProtocolProperty tipo,
String idProprietario, HashMap<String,Long> mapIdToLong,
String entryName) throws ProtocolException{
for (org.openspcoop2.core.config.ProtocolProperty pp : protocolProperties) {
if(pp.getTipoProprietario().equals(tipo.name()) && pp.getName().equals(nome)) {
return pp;
}
}
throw new ProtocolException("Elemento ["+entryName+"] non atteso. Non è possibile fornire una proprietà di protocollo senza definirlo anche all'interno della definizione xml ("+proprietario.name()+")");
}
protected String toStringXmlElementForErrorMessage(byte[]xml){
return xml!=null ? "Xml: ["+new String(xml)+"] \n" : "Xml Undefined. \n";
}
private String readLineId(byte[] xml) throws IOException {
// Elimino eventuali \n
StringReader sr = new StringReader(new String(xml));
BufferedReader br = new BufferedReader(sr);
String identificativo = br.readLine();
br.close();
sr.close();
return identificativo;
}
}
class IdentificativoAccordo{
protected String tipo; // solo per aps
protected String nome;
protected String versione;
}
class IdentificativoDocumento{
protected String nome;
protected String tipo;
}
class IdentificativoProprietaProtocollo{
protected String nome;
protected String idProprietario;
protected ProprietariProtocolProperty tipo;
}
class IdentificativoServizioApplicativo{
protected String tipoSoggetto;
protected String nomeSoggetto;
protected String nome;
}
enum ProprietarioProprietaProtocollo{
SOGGETTO,
ACCORDO_COOPERAZIONE,
ACCORDO_SERVIZIO_PARTE_COMUNE,
ACCORDO_SERVIZIO_PARTE_SPECIFICA,
FRUITORE,
SERVIZIO_APPLICATIVO
}