package eu.stork.documentservice.utils;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

import eu.stork.documentservice.DocumentService;
import eu.stork.documentservice.exceptions.DocumentServiceException;

public class ExternalDocservice {
	
	/**
	 * Get document from external DTL
	 * @param documentTransferRequest the document transfer request (attribute query)
	 * @param dtlUrl the URL of external DTL
	 * @return the document found
	 * @throws DocumentServiceException
	 */
	public static byte[] getDocument(String documentTransferRequest, String dtlUrl) throws DocumentServiceException
	{
		if (documentTransferRequest != null && !documentTransferRequest.isEmpty())
		{								
			if (dtlUrl != null && !dtlUrl.isEmpty())
			{
				try 
				{
					URL url = new URL(dtlUrl);					
				  
					QName qname = new QName("http://stork.eu",
					    "DocumentService");
	
					Service service = Service.create(url, qname);
					DocumentService docservice = service.getPort(DocumentService.class);
					  
					BindingProvider bp = (BindingProvider) docservice;
				    SOAPBinding binding = (SOAPBinding) bp.getBinding();
				    binding.setMTOMEnabled(true);
				      
				    return docservice.getDocument(documentTransferRequest, dtlUrl);
				}
				 catch (MalformedURLException e) {
					   e.printStackTrace();
					   throw new DocumentServiceException("DTL url is invalid.", e);
				 }
				catch (Exception e) {
					e.printStackTrace();
					   throw new DocumentServiceException(e);
				}
			}
			else
				throw new DocumentServiceException("DTL url is empty.");
		}
		else
			throw new DocumentServiceException("Document transfer request is empty.");
	}

	/**
	 * Get document mime from external DTL
	 * @param docId the document id
	 * @param dtlUrl the URL of external DTL
	 * @return the document mime found
	 * @throws DocumentServiceException
	 */
	public static String getDocumentMime(String docId, String dtlUrl) throws DocumentServiceException
	{
		if (docId != null && !docId.isEmpty())
		{								
			if (dtlUrl != null && !dtlUrl.isEmpty())
			{
				try 
				{
					URL url = new URL(dtlUrl);					
				  
					QName qname = new QName("http://stork.eu",
					    "DocumentService");
	
					Service service = Service.create(url, qname);
					DocumentService docservice = service.getPort(DocumentService.class);
					  
					BindingProvider bp = (BindingProvider) docservice;
				    SOAPBinding binding = (SOAPBinding) bp.getBinding();
				    binding.setMTOMEnabled(true);
				      
				    return docservice.getDocumentMime(docId, dtlUrl);
				}
				 catch (MalformedURLException e) {
					   e.printStackTrace();
					   throw new DocumentServiceException("DTL url is invalid.", e);
				 }
				catch (Exception e) {
					e.printStackTrace();
					   throw new DocumentServiceException(e);
				}
			}
			else
				throw new DocumentServiceException("DTL url is empty.");
		}
		else
			throw new DocumentServiceException("Document Id is empty.");
	}
}