ArchiveAccordoServizioComposto.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.sdk.archive;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.id.IDAccordoCooperazione;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
/**
* ArchiveAccordoServizioComposto
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ArchiveAccordoServizioComposto extends ArchiveAccordoServizioParteComune {
public static String buildKey(String tipoSoggetto,String nomeSoggetto,String nomeAccordo,Integer versione) throws ProtocolException{
if(tipoSoggetto==null){
throw new ProtocolException("tipoSoggetto non fornito");
}
if(nomeSoggetto==null){
throw new ProtocolException("nomeSoggetto non fornito");
}
if(nomeAccordo==null){
throw new ProtocolException("nomeAccordo non fornito");
}
if(versione==null){
throw new ProtocolException("versione non fornita");
}
StringBuilder bf = new StringBuilder();
bf.append("AccordoServizioComposto_");
bf.append(tipoSoggetto);
bf.append("/");
bf.append(nomeSoggetto);
bf.append("_");
bf.append(nomeAccordo);
bf.append("_");
bf.append(versione);
return bf.toString();
}
@Override
public String key() throws ProtocolException {
String tipoSoggetto = "-";
String nomeSoggetto = "-";
String nomeAccordo = this.accordoServizioParteComune.getNome();
Integer versione = null;
if(this.accordoServizioParteComune.getSoggettoReferente()!=null){
if(this.accordoServizioParteComune.getSoggettoReferente().getTipo()!=null){
tipoSoggetto = this.accordoServizioParteComune.getSoggettoReferente().getTipo();
}
if(this.accordoServizioParteComune.getSoggettoReferente().getNome()!=null){
nomeSoggetto = this.accordoServizioParteComune.getSoggettoReferente().getNome();
}
}
if(this.accordoServizioParteComune.getVersione()!=null){
versione = this.accordoServizioParteComune.getVersione();
}
return ArchiveAccordoServizioComposto.buildKey(tipoSoggetto, nomeSoggetto,
nomeAccordo,versione);
}
private IDAccordoCooperazione idAccordoCooperazione;
private List<IDServizio> idServiziComponenti = null;
public ArchiveAccordoServizioComposto(IDSoggetto idSoggettoProprietario,AccordoServizioParteComune accordoServizioParteComune, ArchiveIdCorrelazione idCorrelazione)throws ProtocolException {
super(idSoggettoProprietario, accordoServizioParteComune,idCorrelazione);
this.idServiziComponenti = new ArrayList<IDServizio>();
}
public ArchiveAccordoServizioComposto(IDSoggetto idSoggettoProprietario,AccordoServizioParteComune accordoServizioParteComune,
ArchiveIdCorrelazione idCorrelazione,
boolean informationMissingManagementEnabled) throws ProtocolException {
super(idSoggettoProprietario, accordoServizioParteComune,idCorrelazione,informationMissingManagementEnabled);
this.idServiziComponenti = new ArrayList<IDServizio>();
}
public ArchiveAccordoServizioComposto(AccordoServizioParteComune accordoServizioParteComune, ArchiveIdCorrelazione idCorrelazione) throws ProtocolException {
super(accordoServizioParteComune,idCorrelazione);
this.idServiziComponenti = new ArrayList<IDServizio>();
}
public ArchiveAccordoServizioComposto(AccordoServizioParteComune accordoServizioParteComune,
ArchiveIdCorrelazione idCorrelazione,
boolean informationMissingManagementEnabled) throws ProtocolException {
super(accordoServizioParteComune,idCorrelazione, informationMissingManagementEnabled);
this.idServiziComponenti = new ArrayList<IDServizio>();
}
@Override
public void update(AccordoServizioParteComune accordoServizioComposto, boolean informationMissingManagementEnabled) throws ProtocolException{
super.update(accordoServizioComposto, informationMissingManagementEnabled);
if(accordoServizioComposto.getServizioComposto()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto non definito");
}
if(accordoServizioComposto.getServizioComposto().getAccordoCooperazione()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.nomeAccordoCooperazione non definito");
}
try{
this.idAccordoCooperazione = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(accordoServizioComposto.getServizioComposto().getAccordoCooperazione());
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}
// Questo controllo non ci vuole. Altrimenti non e' possibile esportare un accordo che non possiede servizi composti
// Comunque il controllo viene effettuato quando si cerca di portare un accordo allo stato finale.
// if(accordoServizioComposto.getServizioComposto().getServizioComponenteList().size()<=1){
// throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponenti trovati "+accordoServizioComposto.getServizioComposto().getServizioComponenteList().size()+" servizi, ne sono richiesti almeno 2");
// }
for (int i = 0; i < accordoServizioComposto.getServizioComposto().getServizioComponenteList().size(); i++) {
if(this.idServiziComponenti==null){
this.idServiziComponenti = new ArrayList<IDServizio>();
}
AccordoServizioParteComuneServizioCompostoServizioComponente sComponente = accordoServizioComposto.getServizioComposto().getServizioComponenteList().get(i);
if(sComponente==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponente["+i+"] non definito");
}
if(sComponente.getTipo()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponente["+i+"].tipo non definito");
}
if(sComponente.getNome()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponente["+i+"].nome non definito");
}
if(sComponente.getTipoSoggetto()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponente["+i+"].tipoSoggetto non definito");
}
if(sComponente.getNomeSoggetto()==null){
throw new ProtocolException("AccordoServizioComposto.servizioComposto.serviziComponente["+i+"].nomeSoggetto non definito");
}
try{
IDServizio idServizioComponente = IDServizioFactory.getInstance().getIDServizioFromValues(sComponente.getTipo(), sComponente.getNome(),
sComponente.getTipoSoggetto(), sComponente.getNomeSoggetto(),
sComponente.getVersione());
idServizioComponente.setAzione(sComponente.getAzione());
this.idServiziComponenti.add(idServizioComponente);
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}
}
}
public IDAccordoCooperazione getIdAccordoCooperazione() {
return this.idAccordoCooperazione;
}
public List<IDServizio> getIdServiziComponenti() {
return this.idServiziComponenti;
}
}