package com.ebmwebsourcing.easybpel.usecase.seinedemo;

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 ThalesService extends AbstractServiceImpl implements Service {


	public ThalesService(ProviderEndpoint pep) throws BPELException {
		super(pep);
		this.setName(new QName("http://seinedemo.ebmwebsourcing.com/Thales/", "ThalesService"));

		// Create operation
		this.createDownloadThalesDatasetOperation();
		this.createUploadThalesDatasetOperation();
	}

	private void createDownloadThalesDatasetOperation() throws BPELException {
		try {
			Operation downloadThalesDataset = new OperationImpl("DownloadThalesDataset", Operation.IN_OUT, this);

			BPELExternalMessage in = new BPELExternalMessageImpl();
			in.setService(this.getName());
			in.setEndpoint(this.getProviderEndpoint().getName());
			in.setQName(new QName("http://seinedemo.ebmwebsourcing.com/Thales/", "DownloadThalesDataset"));
			in.setMessage("<tns:DownloadThalesDatasetRequest_ThalesDatasetId xmlns:tns=\"http://seinedemo.ebmwebsourcing.com/Thales/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"xsd:string\">" +			  
			  	"45" +
			 "</tns:DownloadThalesDatasetRequest_ThalesDatasetId>"
			 );
			
			BPELExternalMessage out = new BPELExternalMessageImpl();
			out.setService(this.getName());
			out.setEndpoint(this.getProviderEndpoint().getName());
			out.setQName(new QName("http://seinedemo.ebmwebsourcing.com/Thales/", "DownloadThalesDataset"));
			out.setMessage("" +
					"<thal:DownloadThalesDatasetResponse_ThalesDataset xmlns:thal=\"http://seinedemo.ebmwebsourcing.com/Thales/\" xmlns:jaws=\"http://ValueObjects/Thales/jaws\">" +
					         "<thal:documents>" +
					         	"<jaws:document_description_english>75</jaws:document_description_english>" +
					         	"<jaws:document_title>58</jaws:document_title>" +
					         	"<jaws:id>888</jaws:id>" +
					         "</thal:documents>" +
					"</thal:DownloadThalesDatasetResponse_ThalesDataset>"
			);
			downloadThalesDataset.addMessageExchangeInstances(in, out, null);

			this.addOperation(downloadThalesDataset);
		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}
	private void createUploadThalesDatasetOperation() throws BPELException {
		try {
			Operation uploadThalesDataset = new OperationImpl("UploadThalesDataset", Operation.IN_OUT, this);

			BPELExternalMessage in = new BPELExternalMessageImpl();
			in.setService(this.getName());
			in.setEndpoint(this.getProviderEndpoint().getName());
			in.setQName(new QName("http://seinedemo.ebmwebsourcing.com/Thales/", "UploadThalesDataset"));
			in.setMessage("" +
					"<tns:UploadThalesDatasetRequest_ThalesDatasetId_ThalesDataset xmlns:tns=\"http://seinedemo.ebmwebsourcing.com/Thales/\">" +
						"<tns:ThalesDatasetId xmlns:tns=\"http://Thales/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"xsd:string\">45</tns:ThalesDatasetId>" +
						"<tns:ThalesDataset xmlns:tns=\"http://Thales/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"tns:Thales_Dataset_Type\">" +
							"<thal:documents xmlns:thal=\"http://seinedemo.ebmwebsourcing.com/Thales/\">" +
							"<jaws:document_description_english xmlns:jaws=\"http://ValueObjects/Thales/jaws\">75</jaws:document_description_english>" +
							"<jaws:document_title xmlns:jaws=\"http://ValueObjects/Thales/jaws\">58</jaws:document_title>" +
							"<jaws:id xmlns:jaws=\"http://ValueObjects/Thales/jaws\">888</jaws:id>" +
							"</thal:documents>" +
						"</tns:ThalesDataset>" +
					"</tns:UploadThalesDatasetRequest_ThalesDatasetId_ThalesDataset>"
			 );
			
			BPELExternalMessage out = new BPELExternalMessageImpl();
			out.setService(this.getName());
			out.setEndpoint(this.getProviderEndpoint().getName());
			out.setQName(new QName("http://seinedemo.ebmwebsourcing.com/Thales/", "UploadThalesDataset"));
			out.setMessage("" +
					"<tns:UploadThalesDatasetRequest_ThalesBoolean xmlns:tns=\"http://seinedemo.ebmwebsourcing.com/Thales/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +			  
				  	"true" +
				 "</tns:UploadThalesDatasetRequest_ThalesBoolean>"
			);
			uploadThalesDataset.addMessageExchangeInstances(in, out, null);

			this.addOperation(uploadThalesDataset);
		} catch (CoreException e) {
			throw new BPELException(e);
		}
	}

}
