ValidazioneDocumenti.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.validator;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.Fruitore;
import org.openspcoop2.core.registry.constants.ServiceBinding;
import org.openspcoop2.core.registry.constants.TipiDocumentoConversazione;
import org.openspcoop2.core.registry.constants.TipiDocumentoCoordinamento;
import org.openspcoop2.core.registry.constants.TipiDocumentoInterfaccia;
import org.openspcoop2.core.registry.constants.TipiDocumentoLivelloServizio;
import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
import org.openspcoop2.core.registry.constants.TipiDocumentoSicurezza;
import org.openspcoop2.protocol.basic.BasicComponentFactory;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.validator.IValidazioneDocumenti;
import org.openspcoop2.protocol.sdk.validator.ValidazioneResult;
import org.openspcoop2.utils.CopyStream;
import org.openspcoop2.utils.json.JSONUtils;
import org.openspcoop2.utils.json.YAMLUtils;
import org.openspcoop2.utils.rest.ApiFactory;
import org.openspcoop2.utils.rest.ApiFormats;
import org.openspcoop2.utils.rest.ApiReaderConfig;
import org.openspcoop2.utils.rest.IApiReader;
import org.openspcoop2.utils.rest.ParseWarningException;
import org.openspcoop2.utils.rest.api.Api;
import org.openspcoop2.utils.transport.http.HttpUtilities;
import org.openspcoop2.utils.wsdl.DefinitionWrapper;
import org.openspcoop2.utils.wsdl.WSDLUtilities;
import org.openspcoop2.utils.xacml.MarshallUtilities;
import org.openspcoop2.utils.xml.AbstractXMLUtils;
import org.openspcoop2.utils.xml.XMLUtils;
import org.openspcoop2.utils.xml.XSDUtils;
import org.w3c.dom.Document;
/**
* ValidazioneDocumenti
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ValidazioneDocumenti extends BasicComponentFactory implements IValidazioneDocumenti{
protected AbstractXMLUtils xmlUtils = null;
protected XSDUtils xsdUtils = null;
protected WSDLUtilities wsdlUtilities = null;
protected JSONUtils jsonUtils = null;
protected YAMLUtils yamlUtils = null;
public ValidazioneDocumenti(IProtocolFactory<?> factory) throws ProtocolException{
super(factory);
this.xmlUtils = XMLUtils.getInstance();
this.xsdUtils = new XSDUtils(this.xmlUtils);
this.wsdlUtilities = WSDLUtilities.getInstance(this.xmlUtils);
this.jsonUtils = JSONUtils.getInstance();
this.yamlUtils = YAMLUtils.getInstance();
}
@Override
public ValidazioneResult validaSpecificaInterfaccia(
AccordoServizioParteComune accordoServizioParteComune) {
String objectInEsame = null;
ValidazioneResult result = new ValidazioneResult();
result.setEsito(false);
if(ServiceBinding.SOAP.equals(accordoServizioParteComune.getServiceBinding())) {
// interfaccia wsdl Definitoria
try{
objectInEsame = "[InterfacciaWSDL Definitoria] ";
byte[]wsdlDefinitorio = null;
if(accordoServizioParteComune.getByteWsdlDefinitorio()!=null){
wsdlDefinitorio = accordoServizioParteComune.getByteWsdlDefinitorio();
}
else if(accordoServizioParteComune.getWsdlDefinitorio()!=null){
wsdlDefinitorio = this.readDocumento(accordoServizioParteComune.getWsdlDefinitorio());
}
if(wsdlDefinitorio!=null){
// Verifico che sia un documento xml valido
this.xmlUtils.newDocument(wsdlDefinitorio);
// Verifico che sia un xsd, leggendone il targetNamespace
this.xsdUtils.getTargetNamespace(wsdlDefinitorio);
}
}catch(Exception e){
result.setMessaggioErrore(objectInEsame+" Documento non valido: "+e.getMessage());
result.setException(e);
return result;
}
// interfaccia wsdl Concettuale
try{
objectInEsame = "[InterfacciaWSDL Concettuale] ";
byte[]wsdlConcettuale = null;
if(accordoServizioParteComune.getByteWsdlConcettuale()!=null){
wsdlConcettuale = accordoServizioParteComune.getByteWsdlConcettuale();
}
else if(accordoServizioParteComune.getWsdlConcettuale()!=null){
wsdlConcettuale = this.readDocumento(accordoServizioParteComune.getWsdlConcettuale());
}
if(wsdlConcettuale!=null){
// Verifico che sia un documento xml valido
Document d = this.xmlUtils.newDocument(wsdlConcettuale);
// Verifico che sia un wsdl, leggendone il targetNamespace
this.wsdlUtilities.getTargetNamespace(wsdlConcettuale);
// Costruisco wsdl
this.wsdlUtilities.removeSchemiIntoTypes(d);
DefinitionWrapper wsdl = new DefinitionWrapper(d,this.xmlUtils,false,false);
// Valido
wsdl.valida(false);
}
}catch(Exception e){
result.setMessaggioErrore(objectInEsame+" Documento non valido: "+e.getMessage());
result.setException(e);
return result;
}
// interfaccia wsdl Erogatore
try{
objectInEsame = "[InterfacciaWSDL Erogatore] ";
byte[]wsdlErogatore = null;
if(accordoServizioParteComune.getByteWsdlLogicoErogatore()!=null){
wsdlErogatore = accordoServizioParteComune.getByteWsdlLogicoErogatore();
}
else if(accordoServizioParteComune.getWsdlLogicoErogatore()!=null){
wsdlErogatore = this.readDocumento(accordoServizioParteComune.getWsdlLogicoErogatore());
}
if(wsdlErogatore!=null){
// Verifico che sia un documento xml valido
Document d = this.xmlUtils.newDocument(wsdlErogatore);
// Verifico che sia un wsdl, leggendone il targetNamespace
this.wsdlUtilities.getTargetNamespace(wsdlErogatore);
// Costruisco wsdl
this.wsdlUtilities.removeSchemiIntoTypes(d);
DefinitionWrapper wsdl = new DefinitionWrapper(d, this.xmlUtils,false,false);
// Valido
wsdl.valida(false);
}
}catch(Exception e){
result.setMessaggioErrore(objectInEsame+" Documento non valido: "+e.getMessage());
result.setException(e);
return result;
}
// interfaccia wsdl Fruitore
try{
objectInEsame = "[InterfacciaWSDL Fruitore] ";
byte[]wsdlFruitore = null;
if(accordoServizioParteComune.getByteWsdlLogicoFruitore()!=null){
wsdlFruitore = accordoServizioParteComune.getByteWsdlLogicoFruitore();
}
else if(accordoServizioParteComune.getWsdlLogicoFruitore()!=null){
wsdlFruitore = this.readDocumento(accordoServizioParteComune.getWsdlLogicoFruitore());
}
if(wsdlFruitore!=null){
// Verifico che sia un documento xml valido
Document d = this.xmlUtils.newDocument(wsdlFruitore);
// Verifico che sia un wsdl, leggendone il targetNamespace
this.wsdlUtilities.getTargetNamespace(wsdlFruitore);
// Costruisco wsdl
this.wsdlUtilities.removeSchemiIntoTypes(d);
DefinitionWrapper wsdl = new DefinitionWrapper(d,this.xmlUtils,false,false);
// Valido
wsdl.valida(false);
}
}catch(Exception e){
result.setMessaggioErrore(objectInEsame+" Documento non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
else {
// interfaccia
try{
byte[]wsdlConcettuale = null;
if(accordoServizioParteComune.getByteWsdlConcettuale()!=null){
wsdlConcettuale = accordoServizioParteComune.getByteWsdlConcettuale();
}
else if(accordoServizioParteComune.getWsdlConcettuale()!=null){
wsdlConcettuale = this.readDocumento(accordoServizioParteComune.getWsdlConcettuale());
}
if(wsdlConcettuale!=null){
if(accordoServizioParteComune.getFormatoSpecifica()!=null) {
ApiFormats format = null;
switch (accordoServizioParteComune.getFormatoSpecifica()) {
case WADL:
objectInEsame = "[Interfaccia WADL] ";
format=ApiFormats.WADL;
break;
case SWAGGER_2:
objectInEsame = "[Interfaccia Swagger 2] ";
format=ApiFormats.SWAGGER_2;
break;
case OPEN_API_3:
objectInEsame = "[Interfaccia OpenAPI 3] ";
format=ApiFormats.OPEN_API_3;
break;
default:
// altre interfacce non supportate per rest
break;
}
ApiReaderConfig config = new ApiReaderConfig();
config.setProcessInclude(false);
IApiReader apiReader = ApiFactory.newApiReader(format);
apiReader.init(this.log, wsdlConcettuale, config);
Api api = apiReader.read();
try {
api.validate();
}catch(ParseWarningException warning) {
result.setEsito(true);
result.setMessaggioWarning(objectInEsame+" Documento contenente anomalie: "+warning.getMessage());
return result;
}
}
}
}
catch(Exception e){
result.setMessaggioErrore(objectInEsame+" Documento non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
// result
result.setEsito(true);
return result;
}
@Override
public ValidazioneResult validaSpecificaConversazione(
AccordoServizioParteComune accordoServizioParteComune) {
ValidazioneResult result = new ValidazioneResult();
result.setEsito(true);
return result;
}
@Override
public ValidazioneResult validaSpecificaInterfaccia(
AccordoServizioParteSpecifica accordoServizioParteSpecifica,
AccordoServizioParteComune accordoServizioParteComune) {
ValidazioneResult result = new ValidazioneResult();
result.setEsito(false);
// Raccolta wsdl
String tipoWsdl = null;
byte[]wsdlImplementativoFruitore = null;
byte[]wsdlImplementativoErogatore = null;
byte[]wsdlLogicoFruitore = null;
byte[]wsdlLogicoErogatore = null;
try{
tipoWsdl = "ImplementativoFruitore";
if(accordoServizioParteSpecifica.getByteWsdlImplementativoFruitore()!=null){
wsdlImplementativoFruitore = accordoServizioParteSpecifica.getByteWsdlImplementativoFruitore();
}
else if(accordoServizioParteSpecifica.getWsdlImplementativoFruitore()!=null){
wsdlImplementativoFruitore = this.readDocumento(accordoServizioParteSpecifica.getWsdlImplementativoFruitore());
}
tipoWsdl = "ImplementativoErogatore";
if(accordoServizioParteSpecifica.getByteWsdlImplementativoErogatore()!=null){
wsdlImplementativoErogatore = accordoServizioParteSpecifica.getByteWsdlImplementativoErogatore();
}
else if(accordoServizioParteSpecifica.getWsdlImplementativoErogatore()!=null){
wsdlImplementativoErogatore = this.readDocumento(accordoServizioParteSpecifica.getWsdlImplementativoErogatore());
}
tipoWsdl = "LogicoFruitore";
if(accordoServizioParteComune.getByteWsdlLogicoFruitore()!=null){
wsdlLogicoFruitore = accordoServizioParteComune.getByteWsdlLogicoFruitore();
}
else if(accordoServizioParteComune.getWsdlLogicoFruitore()!=null){
wsdlLogicoFruitore = this.readDocumento(accordoServizioParteComune.getWsdlLogicoFruitore());
}
tipoWsdl = "LogicoErogatore";
if(accordoServizioParteComune.getByteWsdlLogicoErogatore()!=null){
wsdlLogicoErogatore = accordoServizioParteComune.getByteWsdlLogicoErogatore();
}
else if(accordoServizioParteComune.getWsdlLogicoErogatore()!=null){
wsdlLogicoErogatore = this.readDocumento(accordoServizioParteComune.getWsdlLogicoErogatore());
}
}catch(Exception e){
result.setMessaggioErrore("Raccolta wsdl "+tipoWsdl+" non riuscita: "+e.getMessage());
result.setException(e);
return result;
}
// WSDL Erogatore
List<String> portTypesWSDL_erogatore = new ArrayList<>();
tipoWsdl = "LogicoErogatore";
try{
if(wsdlLogicoErogatore!=null){
Document dParteComune = this.xmlUtils.newDocument(wsdlLogicoErogatore);
this.wsdlUtilities.removeSchemiIntoTypes(dParteComune);
DefinitionWrapper wsdlParteCoumune = new DefinitionWrapper(dParteComune,this.xmlUtils,false,false);
Iterator<?> it = wsdlParteCoumune.getAllPortTypes().keySet().iterator();
while(it.hasNext()){
javax.xml.namespace.QName pt = (javax.xml.namespace.QName) it.next();
portTypesWSDL_erogatore.add(pt.getLocalPart());
}
}
}catch(Exception e){
result.setMessaggioErrore("Lettura wsdl "+tipoWsdl+" (identificazione port types) non riuscita: "+e.getMessage());
result.setException(e);
return result;
}
if(portTypesWSDL_erogatore.size()==0){
if(wsdlImplementativoErogatore!=null){
result.setMessaggioErrore("Per poter fornire un WSDL Implementativo Erogatore, è necessario prima definire un wsdl logico erogatore valido nell'accordo di servizio parte comune");
return result;
}
}
// WSDL Fruitore
List<String> portTypesWSDL_fruitore = new ArrayList<>();
tipoWsdl = "LogicoFruitore";
try{
if(wsdlLogicoFruitore!=null){
Document dParteComune = this.xmlUtils.newDocument(wsdlLogicoFruitore);
this.wsdlUtilities.removeSchemiIntoTypes(dParteComune);
DefinitionWrapper wsdlParteCoumune = new DefinitionWrapper(dParteComune,this.xmlUtils,false,false);
Iterator<?> it = wsdlParteCoumune.getAllPortTypes().keySet().iterator();
while(it.hasNext()){
javax.xml.namespace.QName pt = (javax.xml.namespace.QName) it.next();
portTypesWSDL_fruitore.add(pt.getLocalPart());
}
}
}catch(Exception e){
result.setMessaggioErrore("Lettura wsdl "+tipoWsdl+" (identificazione port types) non riuscita: "+e.getMessage());
result.setException(e);
return result;
}
if(portTypesWSDL_fruitore.size()==0){
if(wsdlImplementativoFruitore!=null){
result.setMessaggioErrore("Per poter fornire un WSDL Implementativo Fruitore, è necessario prima definire un wsdl logico fruitore valido nell'accordo di servizio parte comune");
return result;
}
}
// Check Presenza WSDL Implementativo
// Check spostato nello stato finale
// if(wsdlImplementativoErogatore==null &&
// wsdlImplementativoFruitore==null){
// result.setMessaggioErrore("Non è presente alcun WSDL implementativo");
// return result;
// }
if(wsdlImplementativoErogatore!=null &&
wsdlImplementativoFruitore!=null){
result.setMessaggioErrore("Non è possibile definire sia il WSDL implementativo erogatore che il WSDL implementativo fruitore");
return result;
}
// Check WSDL Implementativo erogatore
try{
if(wsdlImplementativoErogatore!=null){
// Verifico che sia un documento xml valido
Document d = this.xmlUtils.newDocument(wsdlImplementativoErogatore);
// Verifico che sia un wsdl, leggendone il targetNamespace
this.wsdlUtilities.getTargetNamespace(wsdlImplementativoErogatore);
// Costruisco wsdl
this.wsdlUtilities.removeSchemiIntoTypes(d);
DefinitionWrapper wsdlParteSpecifica = new DefinitionWrapper(d,this.xmlUtils,false,false);
// Valida Bindings
wsdlParteSpecifica.validaBinding(portTypesWSDL_erogatore);
// Check presenza al massimo di un solo port type riferito dai vari binding
checkPortTypeInBinding(wsdlParteSpecifica);
}
}catch(Exception e){
result.setMessaggioErrore("WSDL Implementativo Erogatore non valido: "+e.getMessage());
result.setException(e);
return result;
}
// Check WSDL Implementativo fruitore
try{
if(wsdlImplementativoFruitore!=null){
// Verifico che sia un documento xml valido
Document d = this.xmlUtils.newDocument(wsdlImplementativoFruitore);
// Verifico che sia un wsdl, leggendone il targetNamespace
this.wsdlUtilities.getTargetNamespace(wsdlImplementativoFruitore);
// Costruisco wsdl
this.wsdlUtilities.removeSchemiIntoTypes(d);
DefinitionWrapper wsdlParteSpecifica = new DefinitionWrapper(d,this.xmlUtils,false,false);
// Valida Bindings
wsdlParteSpecifica.validaBinding(portTypesWSDL_fruitore);
// Check presenza al massimo di un solo port type riferito dai vari binding
checkPortTypeInBinding(wsdlParteSpecifica);
}
}catch(Exception e){
result.setMessaggioErrore("WSDL Implementativo Fruitore non valido: "+e.getMessage());
result.setException(e);
return result;
}
// result
result.setEsito(true);
return result;
}
private void checkPortTypeInBinding(DefinitionWrapper wsdlParteSpecifica) throws Exception{
Map<QName,QName> mapBindingToPortTypeImplemented = wsdlParteSpecifica.getMapPortTypesImplementedBinding();
List<String> portTypes = new ArrayList<>();
StringBuilder bf = new StringBuilder();
for (QName binding : mapBindingToPortTypeImplemented.keySet()) {
QName portType = mapBindingToPortTypeImplemented.get(binding);
String portTypeName = portType.getLocalPart();
if(portTypes.contains(portTypeName)==false){
portTypes.add(portTypeName);
if(bf.length()>0){
bf.append(",");
}
bf.append(portTypeName);
}
}
if(portTypes.size()>1){
throw new Exception("Trovato più di un port type implementato dai binding presenti: "+bf.toString());
}
}
@Override
public ValidazioneResult validaSpecificaInterfaccia(Fruitore fruitore, AccordoServizioParteSpecifica accordoServizioParteSpecifica , AccordoServizioParteComune accordoServizioParteComune){
AccordoServizioParteSpecifica as = new AccordoServizioParteSpecifica();
as.setByteWsdlImplementativoErogatore(fruitore.getByteWsdlImplementativoErogatore());
as.setByteWsdlImplementativoFruitore(fruitore.getByteWsdlImplementativoFruitore());
as.setWsdlImplementativoErogatore(fruitore.getWsdlImplementativoErogatore());
as.setWsdlImplementativoFruitore(fruitore.getWsdlImplementativoFruitore());
return this.validaSpecificaInterfaccia(as, accordoServizioParteComune);
}
@Override
public ValidazioneResult valida(Documento documento) {
ValidazioneResult result = new ValidazioneResult();
result.setEsito(false);
if(documento.getTipo()!=null) {
if(TipiDocumentoInterfaccia.WSDL.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoConversazione.WSBL.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoConversazione.BPEL.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoCoordinamento.BPEL.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoCoordinamento.WSCDL.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoLivelloServizio.WSAGREEMENT.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoLivelloServizio.WSLA.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoSemiformale.XML.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoSicurezza.WSPOLICY.toString().toLowerCase().equals(documento.getTipo().toLowerCase()) ||
TipiDocumentoSicurezza.XACML_POLICY.toString().toLowerCase().equals(documento.getTipo().toLowerCase())
){
// Valido che sia un documento XML corretto.
try{
byte[]doc = null;
if(documento.getByteContenuto()!=null){
doc = documento.getByteContenuto();
}
else if(documento.getFile()!=null){
doc = this.readDocumento(documento.getFile());
}
if(doc!=null){
// Verifico che sia un documento xml valido
this.xmlUtils.newDocument(doc);
}
if(TipiDocumentoSicurezza.XACML_POLICY.toString().toLowerCase().equals(documento.getTipo().toLowerCase())){
if(MarshallUtilities.unmarshallPolicy(doc)==null) {
throw new Exception("Policy non corretta");
}
}
}catch(Exception e){
result.setMessaggioErrore("Documento "+documento.getFile()+" (ruolo:"+documento.getRuolo()+") non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
else if(TipiDocumentoSemiformale.XSD.toString().toLowerCase().equals(documento.getTipo().toLowerCase())){
// Valido che sia un documento XSD corretto.
try{
byte[]doc = null;
if(documento.getByteContenuto()!=null){
doc = documento.getByteContenuto();
}
else if(documento.getFile()!=null){
doc = this.readDocumento(documento.getFile());
}
if(doc!=null){
// Verifico che sia un documento valido
this.xmlUtils.newDocument(doc);
if(this.xsdUtils.isXSDSchema(doc)==false) {
throw new Exception("non riconosciuto come documento xsd");
}
}
}catch(Exception e){
result.setMessaggioErrore("Documento "+documento.getFile()+" (ruolo:"+documento.getRuolo()+") non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
else if(TipiDocumentoSemiformale.JSON.toString().toLowerCase().equals(documento.getTipo().toLowerCase())){
// Valido che sia un documento JSON corretto.
try{
byte[]doc = null;
if(documento.getByteContenuto()!=null){
doc = documento.getByteContenuto();
}
else if(documento.getFile()!=null){
doc = this.readDocumento(documento.getFile());
}
if(doc!=null){
// Verifico che sia un documento valido
this.jsonUtils.getAsNode(doc);
if(this.jsonUtils.isJson(doc)==false) {
throw new Exception("non riconosciuto come documento json");
}
}
}catch(Exception e){
result.setMessaggioErrore("Documento "+documento.getFile()+" (ruolo:"+documento.getRuolo()+") non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
else if(TipiDocumentoSemiformale.YAML.toString().toLowerCase().equals(documento.getTipo().toLowerCase())){
// Valido che sia un documento YAML corretto.
try{
byte[]doc = null;
if(documento.getByteContenuto()!=null){
doc = documento.getByteContenuto();
}
else if(documento.getFile()!=null){
doc = this.readDocumento(documento.getFile());
}
if(doc!=null){
// Verifico che sia un documento valido
this.yamlUtils.getAsNode(doc);
if(this.yamlUtils.isYaml(doc)==false) {
throw new Exception("non riconosciuto come documento yaml");
}
}
}catch(Exception e){
result.setMessaggioErrore("Documento "+documento.getFile()+" (ruolo:"+documento.getRuolo()+") non valido: "+e.getMessage());
result.setException(e);
return result;
}
}
}
// result
result.setEsito(true);
return result;
}
@Override
public ValidazioneResult validaDocumenti(
AccordoServizioParteComune accordoServizioParteComune) {
// // wsdl
// ValidazioneDocumentiResult v = this.validaInterfacciaWsdlParteComune(accordoServizioParteComune);
// if(v.isEsito()==false){
// return v;
// }
//
// // conversazione
// v = this.validaSpecificaConversazione(accordoServizioParteComune);
// if(v.isEsito()==false){
// return v;
// }
// allegati
for (int i = 0; i < accordoServizioParteComune.sizeAllegatoList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteComune.getAllegato(i));
if(v.isEsito()==false){
return v;
}
}
// specifica semiformale
for (int i = 0; i < accordoServizioParteComune.sizeSpecificaSemiformaleList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteComune.getSpecificaSemiformale(i));
if(v.isEsito()==false){
return v;
}
}
// servizio composto
if(accordoServizioParteComune.getServizioComposto()!=null){
for (int i = 0; i < accordoServizioParteComune.getServizioComposto().sizeSpecificaCoordinamentoList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteComune.getServizioComposto().getSpecificaCoordinamento(i));
if(v.isEsito()==false){
return v;
}
}
}
ValidazioneResult result = new ValidazioneResult();
result.setEsito(true);
return result;
}
@Override
public ValidazioneResult validaDocumenti(
AccordoServizioParteSpecifica accordoServizioParteSpecifica) {
// allegati
for (int i = 0; i < accordoServizioParteSpecifica.sizeAllegatoList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteSpecifica.getAllegato(i));
if(v.isEsito()==false){
return v;
}
}
// specifica semiformale
for (int i = 0; i < accordoServizioParteSpecifica.sizeSpecificaSemiformaleList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteSpecifica.getSpecificaSemiformale(i));
if(v.isEsito()==false){
return v;
}
}
// specifica livello servizio
for (int i = 0; i < accordoServizioParteSpecifica.sizeSpecificaLivelloServizioList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteSpecifica.getSpecificaLivelloServizio(i));
if(v.isEsito()==false){
return v;
}
}
// specifica sicurezza
for (int i = 0; i < accordoServizioParteSpecifica.sizeSpecificaSicurezzaList(); i++) {
ValidazioneResult v = this.valida(accordoServizioParteSpecifica.getSpecificaSicurezza(i));
if(v.isEsito()==false){
return v;
}
}
ValidazioneResult result = new ValidazioneResult();
result.setEsito(true);
return result;
}
@Override
public ValidazioneResult validaDocumenti(
AccordoCooperazione accordoCooperazione) {
// allegati
for (int i = 0; i < accordoCooperazione.sizeAllegatoList(); i++) {
ValidazioneResult v = this.valida(accordoCooperazione.getAllegato(i));
if(v.isEsito()==false){
return v;
}
}
// specifica semiformale
for (int i = 0; i < accordoCooperazione.sizeSpecificaSemiformaleList(); i++) {
ValidazioneResult v = this.valida(accordoCooperazione.getSpecificaSemiformale(i));
if(v.isEsito()==false){
return v;
}
}
ValidazioneResult result = new ValidazioneResult();
result.setEsito(true);
return result;
}
protected byte[] readDocumento(String fileName) throws ProtocolException{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try{
if(fileName.startsWith("http://") || fileName.startsWith("file://")){
byte[] file = HttpUtilities.requestHTTPFile(fileName);
if(file==null)
throw new Exception("byte[] is null");
else
bout.write(file);
}else{
File f = new File(fileName);
if(f.exists()){
FileInputStream file = null;
try{
file = new FileInputStream(f);
// byte [] reads = new byte[Utilities.DIMENSIONE_BUFFER];
// int letti = 0;
// while( (letti=file.read(reads)) >=0 ){
// bout.write(reads,0,letti);
// }
CopyStream.copy(file, bout);
}finally{
try{
if(file!=null){
file.close();
}
}catch(Exception eClose){
// close
}
}
}
else{
throw new Exception("File ["+fileName+"] non esistente");
}
}
bout.flush();
bout.close();
if(bout.size()>0){
return bout.toByteArray();
}
}catch(Exception e){
this.log.warn("File "+fileName+", lettura documento non riuscita:",e);
}
throw new ProtocolException("Contenuto non letto?? File ["+fileName+"]");
}
}