package com.ebmwebsourcing.easybpel.usecase.ident;

import javax.xml.namespace.QName;

import com.ebmwebsourcing.easybpel.model.bpel.api.BPELException;
import com.ebmwebsourcing.easybpel.model.bpel.api.message.BPELExternalMessage;
import com.ebmwebsourcing.easybpel.model.bpel.impl.message.BPELExternalMessageImpl;
import com.ebmwebsourcing.easyviper.core.api.CoreException;
import com.ebmwebsourcing.easyviper.environment.test.env.api.Operation;
import com.ebmwebsourcing.easyviper.environment.test.env.api.ProviderEndpoint;
import com.ebmwebsourcing.easyviper.environment.test.env.api.Service;
import com.ebmwebsourcing.easyviper.environment.test.env.impl.AbstractServiceImpl;
import com.ebmwebsourcing.easyviper.environment.test.env.impl.OperationImpl;

public class AWSNIDENTCRAMProxyHeaderService extends AbstractServiceImpl implements Service {


	public AWSNIDENTCRAMProxyHeaderService(ProviderEndpoint pep) throws BPELException {
		super(pep);
		this.setName(new QName("http://arnidtcrws.acsar.cnav.fr/", "AWSNIDENTCRAM-ProxyHeader"));

		// Create rechercherAssuresGrcByCriteres operation
		consulterEclMini();
		consulterNir();
	}

	private void consulterEclMini() throws BPELException {
		try {
			BPELExternalMessage in = new BPELExternalMessageImpl();
			in.setService(this.getName());
			in.setEndpoint(this.getProviderEndpoint().getName());
			in.setQName(new QName("http://arnidtcrws.acsar.cnav.fr/", "AWSNIDENTCRAM_consulterEclMini"));
			in.setMessage("" +
					"<tns:consulterEclMiniElement xmlns:tns=\"http://arnidtcrws.acsar.cnav.fr/types/\">" +
					" <ns1:nir xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\">?</ns1:nir>" + 
					" <ns1:nom xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\">?</ns1:nom>" + 
					" <ns1:listePrenoms xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:dtNais xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\">NaNNaNNaN</ns1:dtNais>" + 
					" <ns1:nomUsg xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:sexe xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\">?</ns1:sexe>" + 
					" <ns1:codLieNaiDem xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\">??</ns1:codLieNaiDem>" + 
					" <ns1:codMnlPayNaiDem xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:naiDept xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:naiCmn xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:naiPays xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					" <ns1:naiLoc xmlns:ns1=\"http://arnidtcrws.acsar.cnav.fr/types/\" />" + 
					"</tns:consulterEclMiniElement>" 
			);
			BPELExternalMessage out = new BPELExternalMessageImpl();
			out.setService(this.getName());
			out.setEndpoint(this.getProviderEndpoint().getName());
			out.setQName(new QName("http://arnidtcrws.acsar.cnav.fr/", "rechercherAssuresGrcByCriteresResponse"));
			out.setMessage("" +
					"<typ:consulterEclMiniResponseElement xmlns:typ=\"http://arnidtcrws.acsar.cnav.fr/types/\">" +
					"	         <typ:result>" +
					"	            <typ:pointeurVoisin/>" +
					"	            <typ:pointeurIdentiteCramAffich>" +
					"	               <typ:codMnlPayNai>?</typ:codMnlPayNai>" +
					"	               <typ:codSex>?</typ:codSex>" +
					"	               <typ:libPay>?</typ:libPay>" +
					"	               <typ:libLoc>?</typ:libLoc>" +
					"	               <typ:nomNai>?</typ:nomNai>" +
					"	               <typ:libParoisse>?</typ:libParoisse>" +
					"	               <typ:nomUsg>?</typ:nomUsg>" +
					"	               <typ:libRgn>?</typ:libRgn>" +
					"	               <typ:libLieuDit>?</typ:libLieuDit>" +
					"	               <typ:codLieNai>?</typ:codLieNai>" +
					"	               <typ:libDep>?</typ:libDep>" +
					"	               <typ:nirActif>?</typ:nirActif>" +
					"	               <typ:lstPrn>?</typ:lstPrn>" +
					"	               <typ:dtNai>?</typ:dtNai>" +
					"	               <typ:dtoEcl>?</typ:dtoEcl>" +
					"	               <typ:libCanton>?</typ:libCanton>" +
					"	               <typ:libDiocese>?</typ:libDiocese>" +
					"	               <typ:libArrondt>?</typ:libArrondt>" +
					"	               <typ:libCmn>?</typ:libCmn>" +
					"	               <typ:libDouar>?</typ:libDouar>" +
					"	               <typ:lstPrnPere>?</typ:lstPrnPere>" +
					"	               <typ:nomAlias>?</typ:nomAlias>" +
					"	               <typ:nomNaiPere>?</typ:nomNaiPere>" +
					"	               <typ:nomNaiMere>?</typ:nomNaiMere>" +
					"	               <typ:codePieceEcl>?</typ:codePieceEcl>" +
					"	               <typ:codeCertification>?</typ:codeCertification>" +
					"	               <typ:nomDit>?</typ:nomDit>" +
					"	               <typ:cle>?</typ:cle>" +
					"	               <typ:lstPrnMere>?</typ:lstPrnMere>" +
					"	               <typ:annot>" +
					"	                  <typ:natIst>?</typ:natIst>" +
					"	                  <typ:codOrgFrnIst>?</typ:codOrgFrnIst>" +
					"	                  <typ:codIst>?</typ:codIst>" +
					"	                  <typ:libCodIst>?</typ:libCodIst>" +
					"	                  <typ:libNatIst>?</typ:libNatIst>" +
					"	               </typ:annot>" +
					"	               <typ:dtDeces>?</typ:dtDeces>" +
					"	               <typ:nomSnm>?</typ:nomSnm>" +
					"	               <typ:libelleDtoEcl>?</typ:libelleDtoEcl>" +
					"	               <typ:libelleCodePieceEcl>?</typ:libelleCodePieceEcl>" +
					"	               <typ:lieuNaiss>?</typ:lieuNaiss>" +
					"	               <typ:libelleSexe>?</typ:libelleSexe>" +
					"	               <typ:libelleDtDeces>?</typ:libelleDtDeces>" +
					"	               <typ:libelleDtNai>?</typ:libelleDtNai>" +
					"	               <typ:nirAffichable>?</typ:nirAffichable>" +
					"	               <typ:libelleCodeCertification>?</typ:libelleCodeCertification>" +
					"	            </typ:pointeurIdentiteCramAffich>" +
					"	            <typ:codResIdentification>?</typ:codResIdentification>" +
					"	         </typ:result>" +
					"</typ:consulterEclMiniResponseElement>"
			);
			Operation sendAppelOffre = new OperationImpl("consulterEclMini", Operation.IN_OUT, this);
			sendAppelOffre.addMessageExchangeInstances(in, out, null);
			this.addOperation(sendAppelOffre);
		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}

	private void consulterNir() throws BPELException {
		try {
			Operation consulterNir = new OperationImpl("consulterNir", Operation.IN_OUT, this);
			this.addOperation(consulterNir);
			
			
			BPELExternalMessage in = new BPELExternalMessageImpl();
			in.setService(this.getName());
			in.setEndpoint(this.getProviderEndpoint().getName());
			in.setQName(new QName("http://arnidtcrws.acsar.cnav.fr/", "AWSNIDENTCRAM_consulterNir"));
			in.setMessage("" +
					"<tns:consulterNirElement xmlns:tns=\"http://arnidtcrws.acsar.cnav.fr/types/\">" +
					"  <tns:nir xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"xsd:string\">346</tns:nir>" +
					"  <tns:header xmlns:tns=\"http://petals.ow2.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"tns:headerType\">" +
					"    <tns:identifiantDemandeur xsi:type=\"string\">347</tns:identifiantDemandeur>" +
					"    <tns:organisme xsi:type=\"string\">348</tns:organisme>" +
					"  </tns:header>" +
					"</tns:consulterNirElement>" 
			);
			BPELExternalMessage out = new BPELExternalMessageImpl();
			out.setService(this.getName());
			out.setEndpoint(this.getProviderEndpoint().getName());
			out.setQName(new QName("http://arnidtcrws.acsar.cnav.fr/", "consulterNirResponseElement"));
			out.setMessage("" +
					"<typ:consulterNirResponseElement xmlns:typ=\"http://arnidtcrws.acsar.cnav.fr/types/\">" +
					"         <typ:result>" +
					"            <typ:pointeurVoisin>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabNirDate>" +
					"                  <typ:nir>?</typ:nir>" +
					"                  <typ:codevoisinconsult>?</typ:codevoisinconsult>" +
					"                  <typ:note>?</typ:note>" +
					"                  <typ:date>?</typ:date>" +
					"               </typ:tabNirDate>" +
					"            </typ:pointeurVoisin>" +
					"            <typ:pointeurIdentiteCramAffich>" +
					"               <typ:codMnlPayNai>?</typ:codMnlPayNai>" +
					"               <typ:codSex>?</typ:codSex>" +
					"               <typ:libPay>?</typ:libPay>" +
					"               <typ:libLoc>?</typ:libLoc>" +
					"               <typ:nomNai>?</typ:nomNai>" +
					"               <typ:libParoisse>?</typ:libParoisse>" +
					"               <typ:nomUsg>?</typ:nomUsg>" +
					"               <typ:libRgn>?</typ:libRgn>" +
					"               <typ:libLieuDit>?</typ:libLieuDit>" +
					"               <typ:codLieNai>?</typ:codLieNai>" +
					"               <typ:libDep>?</typ:libDep>" +
					"               <typ:nirActif>?</typ:nirActif>" +
					"               <typ:lstPrn>?</typ:lstPrn>" +
					"               <typ:dtNai>?</typ:dtNai>" +
					"               <typ:dtoEcl>?</typ:dtoEcl>" +
					"               <typ:libCanton>?</typ:libCanton>" +
					"               <typ:libDiocese>?</typ:libDiocese>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabIdentAssure>" +
					"                  <typ:nir>?</typ:nir>" +
					"                  <typ:nirFomatte>?</typ:nirFomatte>" +
					"                  <typ:dateFormatte>?</typ:dateFormatte>" +
					"                  <typ:date>?</typ:date>" +
					"               </typ:tabIdentAssure>" +
					"               <typ:libArrondt>?</typ:libArrondt>" +
					"               <typ:libCmn>?</typ:libCmn>" +
					"               <typ:libDouar>?</typ:libDouar>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabNationalite>" +
					"                  <typ:libOrgNteCeeRes>?</typ:libOrgNteCeeRes>" +
					"                  <typ:codOrgNteCeeRes>?</typ:codOrgNteCeeRes>" +
					"                  <typ:codNteCeeRes>?</typ:codNteCeeRes>" +
					"                  <typ:dtoCodNteCeeRes>?</typ:dtoCodNteCeeRes>" +
					"                  <typ:dtoCodNteCeeResFor>?</typ:dtoCodNteCeeResFor>" +
					"                  <typ:libCodNteCeeRes>?</typ:libCodNteCeeRes>" +
					"               </typ:tabNationalite>" +
					"               <typ:lstPrnPere>?</typ:lstPrnPere>" +
					"               <typ:nomAlias>?</typ:nomAlias>" +
					"               <typ:nomNaiPere>?</typ:nomNaiPere>" +
					"               <typ:nomNaiMere>?</typ:nomNaiMere>" +
					"               <typ:codePieceEcl>?</typ:codePieceEcl>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabMarital>" +
					"                  <typ:codOrgFrnMarRes>?</typ:codOrgFrnMarRes>" +
					"                  <typ:nomMarRes>?</typ:nomMarRes>" +
					"                  <typ:dtoNomMarRes>?</typ:dtoNomMarRes>" +
					"                  <typ:libOrgFrnMarRes>?</typ:libOrgFrnMarRes>" +
					"                  <typ:dtoNomMarResFor>?</typ:dtoNomMarResFor>" +
					"               </typ:tabMarital>" +
					"               <typ:codeCertification>?</typ:codeCertification>" +
					"               <typ:nomDit>?</typ:nomDit>" +
					"               <typ:cle>?</typ:cle>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabDeces>" +
					"                  <typ:codCerDceRes>?</typ:codCerDceRes>" +
					"                  <typ:libDioceseDce>?</typ:libDioceseDce>" +
					"                  <typ:libLieuDitDce>?</typ:libLieuDitDce>" +
					"                  <typ:libParoisseDce>?</typ:libParoisseDce>" +
					"                  <typ:libLocDce>?</typ:libLocDce>" +
					"                  <typ:dtDceRes>?</typ:dtDceRes>" +
					"                  <typ:libDouarDce>?</typ:libDouarDce>" +
					"                  <typ:libCantonDce>?</typ:libCantonDce>" +
					"                  <typ:numPceDceRes>?</typ:numPceDceRes>" +
					"                  <typ:libRgnDce>?</typ:libRgnDce>" +
					"                  <typ:codMnlPayDceRes>?</typ:codMnlPayDceRes>" +
					"                  <typ:codPceDceRes>?</typ:codPceDceRes>" +
					"                  <typ:codSitFamDceRes>?</typ:codSitFamDceRes>" +
					"                  <typ:codLieDceRes>?</typ:codLieDceRes>" +
					"                  <typ:libOrgFrnDceRes>?</typ:libOrgFrnDceRes>" +
					"                  <typ:dtoDceRes>?</typ:dtoDceRes>" +
					"                  <typ:libCmnDce>?</typ:libCmnDce>" +
					"                  <typ:libArrondtDce>?</typ:libArrondtDce>" +
					"                  <typ:codOrgFrnDceRes>?</typ:codOrgFrnDceRes>" +
					"                  <typ:libDepDce>?</typ:libDepDce>" +
					"                  <typ:libPayDce>?</typ:libPayDce>" +
					"                  <typ:libCodSitFamDceRes>?</typ:libCodSitFamDceRes>" +
					"                  <typ:libCodPceDceRes>?</typ:libCodPceDceRes>" +
					"                  <typ:dtoDceResFor>?</typ:dtoDceResFor>" +
					"                  <typ:libCodCerDceRes>?</typ:libCodCerDceRes>" +
					"                  <typ:dtDceResFor>?</typ:dtDceResFor>" +
					"               </typ:tabDeces>" +
					"               <typ:lstPrnMere>?</typ:lstPrnMere>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabHistIde>" +
					"                  <typ:eltIdePrc2>?</typ:eltIdePrc2>" +
					"                  <typ:libOrgFrnEltIde>?</typ:libOrgFrnEltIde>" +
					"                  <typ:codOrgFrnEltIde>?</typ:codOrgFrnEltIde>" +
					"                  <typ:dteIdePrc>?</typ:dteIdePrc>" +
					"                  <typ:eltIdePrc1>?</typ:eltIdePrc1>" +
					"                  <typ:codTypIde>?</typ:codTypIde>" +
					"                  <typ:dtfIdePrc>?</typ:dtfIdePrc>" +
					"                  <typ:libCodTypIde>?</typ:libCodTypIde>" +
					"                  <typ:dteIdePrcFor>?</typ:dteIdePrcFor>" +
					"                  <typ:dtfIdePrcFor>?</typ:dtfIdePrcFor>" +
					"               </typ:tabHistIde>" +
					"               <typ:annot>" +
					"                  <typ:natIst>?</typ:natIst>" +
					"                  <typ:codOrgFrnIst>?</typ:codOrgFrnIst>" +
					"                  <typ:codIst>?</typ:codIst>" +
					"                  <typ:libCodIst>?</typ:libCodIst>" +
					"                  <typ:libNatIst>?</typ:libNatIst>" +
					"               </typ:annot>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabAutreImmat>" +
					"                  <typ:nsaRes>?</typ:nsaRes>" +
					"                  <typ:codOrgFrnNsaRes>?</typ:codOrgFrnNsaRes>" +
					"                  <typ:libOrgFrnNsaRes>?</typ:libOrgFrnNsaRes>" +
					"                  <typ:dtoNsaRes>?</typ:dtoNsaRes>" +
					"                  <typ:dtoNsaResFor>?</typ:dtoNsaResFor>" +
					"               </typ:tabAutreImmat>" +
					"               <!--Zero or more repetitions:-->" +
					"               <typ:tabHistNir>" +
					"                  <typ:codMtfModNir>?</typ:codMtfModNir>" +
					"                  <typ:sieNaiPrc>?</typ:sieNaiPrc>" +
					"                  <typ:numAsrPrc>?</typ:numAsrPrc>" +
					"                  <typ:dtfNumAsrPrc>?</typ:dtfNumAsrPrc>" +
					"                  <typ:dteNumAsrPrc>?</typ:dteNumAsrPrc>" +
					"                  <typ:dtfNumAsrPrcFor>?</typ:dtfNumAsrPrcFor>" +
					"                  <typ:libCodMtfModNir>?</typ:libCodMtfModNir>" +
					"                  <typ:dteNumAsrPrcFor>?</typ:dteNumAsrPrcFor>" +
					"               </typ:tabHistNir>" +
					"               <typ:dtDeces>?</typ:dtDeces>" +
					"               <typ:nomSnm>?</typ:nomSnm>" +
					"               <typ:libelleDtoEcl>?</typ:libelleDtoEcl>" +
					"               <typ:libelleCodePieceEcl>?</typ:libelleCodePieceEcl>" +
					"               <typ:lieuNaiss>?</typ:lieuNaiss>" +
					"               <typ:libelleSexe>?</typ:libelleSexe>" +
					"               <typ:libelleDtDeces>?</typ:libelleDtDeces>" +
					"               <typ:libelleDtNai>?</typ:libelleDtNai>" +
					"               <typ:nirAffichable>?</typ:nirAffichable>" +
					"               <typ:libelleCodeCertification>?</typ:libelleCodeCertification>" +
					"            </typ:pointeurIdentiteCramAffich>" +
					"            <typ:codResIdentification>?</typ:codResIdentification>" +
					"         </typ:result>" +
					"</typ:consulterNirResponseElement>"
			);
			consulterNir.addMessageExchangeInstances(in, out, null);
			
		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}
}
