package com.ebmwebsourcing.easybpel.usecase.ident;

import java.io.File;

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;
import com.ebmwebsourcing.easyviper.environment.test.util.MockServiceBuilder;

public class GererIdentClientService extends AbstractServiceImpl implements Service {


	public GererIdentClientService(ProviderEndpoint pep) throws BPELException {
		super(pep);
		this.setName(new QName("http://application.identclient.service.grc.com/", "GererIdentClientSessionEJB"));

		// Create rechercherAssuresGrcByCriteres operation
		rechercherAssuresGrcByCriteres();
		rechercherAssuresGrcByNir();
	}

	private void rechercherAssuresGrcByCriteres() throws BPELException {
		try {

			File in1 = new File(
			"./src/test/resources/exchange/exchange1/rechercherAssuresGrcByCriteres.xml");
			File out1 = new File(
			"./src/test/resources/exchange/exchange1/rechercherAssuresGrcByCriteresResponse.xml");

			Operation rechercherAssuresGrcByCriteres = MockServiceBuilder.buildOperation(
					"rechercherAssuresGrcByCriteres",
					this,
					in1,
					new QName("http://application.identclient.service.grc.com/" , "rechercherAssuresGrcByCriteresResponse"),
					out1,
					new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByCriteresResponse"),
					null, null, BPELExternalMessageImpl.class);
			this.addOperation(rechercherAssuresGrcByCriteres);


			File in2 = new File(
			"./src/test/resources/exchange/exchange2/rechercherAssuresGrcByCriteres.xml");
			File out2 = new File(
			"./src/test/resources/exchange/exchange2/rechercherAssuresGrcByCriteresResponse.xml");
			MockServiceBuilder.addMessageExchangeInstances2Operation(
					rechercherAssuresGrcByCriteres, 
					in2,
					new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByCriteres"), 
					out2,
					new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByCriteresResponse"),
					null, null, BPELExternalMessageImpl.class);

		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}

	private void rechercherAssuresGrcByNir() throws BPELException {
		try {
			Operation rechercherAssuresGrcByNir = new OperationImpl("rechercherAssuresGrcByNir", Operation.IN_OUT, this);
			this.addOperation(rechercherAssuresGrcByNir);

			BPELExternalMessage in1 = new BPELExternalMessageImpl();
			in1.setService(this.getName());
			in1.setEndpoint(this.getProviderEndpoint().getName());
			in1.setQName(new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByNir"));
			in1.setMessage("" +
					"<tns:rechercherAssuresGrcByNir xmlns:tns=\"http://application.identclient.service.grc.com/\">" +
					"  <tns:arg0 xmlns:ns0=\"http://user.identclient.service.grc.com\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"ns0:AssureDTO\">345</tns:arg0>" +
					"</tns:rechercherAssuresGrcByNir>"
			);
			BPELExternalMessage out1 = new BPELExternalMessageImpl();
			out1.setService(this.getName());
			out1.setEndpoint(this.getProviderEndpoint().getName());
			out1.setQName(new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByCriteresResponse"));
			out1.setMessage("" +
					"<app:rechercherAssuresGrcByNirResponse xmlns:app=\"http://application.identclient.service.grc.com/\" xmlns:user=\"http://user.identclient.service.grc.com\">" +
					"         <app:return>" +
					"            <!--Zero or more repetitions:-->" +
					"            <user:AssureDTO>" +
					"               <!--Optional:-->" +
					"               <user:courriel>?</user:courriel>" +
					"               <!--Optional:-->" +
					"               <user:idClient>?</user:idClient>" +
					"               <!--Optional:-->" +
					"               <user:idCram>?</user:idCram>" +
					"               <!--Optional:-->" +
					"               <user:idOrigine>?</user:idOrigine>" +
					"               <!--Optional:-->" +
					"               <user:representantDTO>" +
					"                  <!--Optional:-->" +
					"                  <user:idCram>?</user:idCram>" +
					"                  <!--Optional:-->" +
					"                  <user:idRepresentant>?</user:idRepresentant>" +
					"                  <!--Optional:-->" +
					"                  <user:nomRepresentant>?</user:nomRepresentant>" +
					"                  <!--Optional:-->" +
					"                  <user:telephonesRepresentant>" +
					"                     <!--Zero or more repetitions:-->" +
					"                     <user:TelephoneDTO>" +
					"                        <!--Optional:-->" +
					"                        <user:dtmaj>?</user:dtmaj>" +
					"                        <!--Optional:-->" +
					"                        <user:idClient>?</user:idClient>" +
					"                        <!--Optional:-->" +
					"                        <user:idCram>?</user:idCram>" +
					"                        <!--Optional:-->" +
					"                        <user:idRepresentant>?</user:idRepresentant>" +
					"                        <!--Optional:-->" +
					"                        <user:idTelephone>?</user:idTelephone>" +
					"                        <!--Optional:-->" +
					"                        <user:idTypeProprio>?</user:idTypeProprio>" +
					"                        <!--Optional:-->" +
					"                        <user:numero>?</user:numero>" +
					"                     </user:TelephoneDTO>" +
					"                  </user:telephonesRepresentant>" +
					"               </user:representantDTO>" +
					"               <!--Optional:-->" +
					"               <user:telephones>" +
					"                  <!--Zero or more repetitions:-->" +
					"                  <user:TelephoneDTO>" +
					"                     <!--Optional:-->" +
					"                     <user:dtmaj>?</user:dtmaj>" +
					"                     <!--Optional:-->" +
					"                     <user:idClient>?</user:idClient>" +
					"                     <!--Optional:-->" +
					"                     <user:idCram>?</user:idCram>" +
					"                     <!--Optional:-->" +
					"                     <user:idRepresentant>?</user:idRepresentant>" +
					"                     <!--Optional:-->" +
					"                     <user:idTelephone>?</user:idTelephone>" +
					"                     <!--Optional:-->" +
					"                     <user:idTypeProprio>?</user:idTypeProprio>" +
					"                     <!--Optional:-->" +
					"                     <user:numero>?</user:numero>" +
					"                  </user:TelephoneDTO>" +
					"               </user:telephones>" +
					"               <!--Optional:-->" +
					"               <user:anneeNaissance>?</user:anneeNaissance>" +
					"               <!--Optional:-->" +
					"               <user:autresIdentitesList/>" +
					"               <!--Optional:-->" +
					"               <user:codeLieuNaissance>?</user:codeLieuNaissance>" +
					"               <!--Optional:-->" +
					"               <user:dateDeces>?</user:dateDeces>" +
					"               <!--Optional:-->" +
					"               <user:dateMaj>?</user:dateMaj>" +
					"               <!--Optional:-->" +
					"               <user:dateNir>?</user:dateNir>" +
					"               <!--Optional:-->" +
					"               <user:deptNaissance>?</user:deptNaissance>" +
					"               <!--Optional:-->" +
					"               <user:idNivCertifNIR>?</user:idNivCertifNIR>" +
					"               <!--Optional:-->" +
					"               <user:idPersonne>?</user:idPersonne>" +
					"               <!--Optional:-->" +
					"               <user:idQualiteCivile>?</user:idQualiteCivile>" +
					"               <!--Optional:-->" +
					"               <user:jourNaissance>?</user:jourNaissance>" +
					"               <!--Optional:-->" +
					"               <user:libLieuNaissance>?</user:libLieuNaissance>" +
					"               <!--Optional:-->" +
					"               <user:moisNaissance>?</user:moisNaissance>" +
					"               <!--Optional:-->" +
					"               <user:nir>?</user:nir>" +
					"               <!--Optional:-->" +
					"               <user:nomMarital>?</user:nomMarital>" +
					"               <!--Optional:-->" +
					"               <user:nomPatronyme>?</user:nomPatronyme>" +
					"               <!--Optional:-->" +
					"               <user:prenomUsage>?</user:prenomUsage>" +
					"               <!--Optional:-->" +
					"               <user:prenoms>?</user:prenoms>" +
					"               <!--Optional:-->" +
					"               <user:sexe>?</user:sexe>" +
					"               <!--Optional:-->" +
					"               <user:version>?</user:version>" +
					"            </user:AssureDTO>" +
					"		</app:return>" +
					"</app:rechercherAssuresGrcByNirResponse>"
			);
			rechercherAssuresGrcByNir.addMessageExchangeInstances(in1, out1, null);


			BPELExternalMessage in2 = new BPELExternalMessageImpl();
			in2.setService(this.getName());
			in2.setEndpoint(this.getProviderEndpoint().getName());
			in2.setQName(new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByNir"));
			in2.setMessage("" +
					"<tns:rechercherAssuresGrcByNir xmlns:tns=\"http://application.identclient.service.grc.com/\">" +
					"  <tns:arg0 xmlns:ns0=\"http://user.identclient.service.grc.com\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"ns0:AssureDTO\">346</tns:arg0>" +
					"</tns:rechercherAssuresGrcByNir>"
			);
			BPELExternalMessage out2 = new BPELExternalMessageImpl();
			out2.setService(this.getName());
			out2.setEndpoint(this.getProviderEndpoint().getName());
			out2.setQName(new QName("http://application.identclient.service.grc.com/", "rechercherAssuresGrcByCriteresResponse"));
			out2.setMessage("" +
					"<app:rechercherAssuresGrcByNirResponse xmlns:app=\"http://application.identclient.service.grc.com/\" xmlns:tns1=\"http://user.identclient.service.grc.com\" >" +
					"	         <app:return />" +
					"</app:rechercherAssuresGrcByNirResponse>" 
			);
			rechercherAssuresGrcByNir.addMessageExchangeInstances(in2, out2, null);

		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}
}
