package ch3.ex3;
import org.apache.axis.client.ServiceClient;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.RPCElement;
import org.apache.axis.message.RPCParam;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
	* Klient usugi sieciowej do sprawdzania stanu magazynu
	*/
public class InventoryCheckClient {
	/**
	 * URL usugi
	 */
	String url;

	/**
	 * Adres e-mail, pod ktry ma by wysane potwierdzenie
	 */
	String email;

	/**
	 * Wskazanie klientowi adresu usugi sieciowej
	 */
	public InventoryCheckClient(String url, String email) {
		this.url = url;
		this.email = email;
	}

	/**
	 * Wywoanie usugi
	 */
	public boolean doCheck(String sku, int quantity) throws Exception {
		// Tworzymy element DOM dla nagwka email
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.newDocument();
		Element emailElem = doc.createElementNS(
			"http://www.skatestown.com/", "Email");
		emailElem.appendChild(doc.createTextNode(email));

		// Tworzymy komunikat SOAP z wywoaniem zdalnej procedury
		SOAPEnvelope reqEnv = new SOAPEnvelope();
		reqEnv.addHeader(new SOAPHeader(emailElem));
		Object[] params = new Object[] {sku, new Integer(quantity), };
		reqEnv.addBodyElement(new RPCElement("","doCheck", params));

		// Wywoanie usugi sieciowej
		ServiceClient call = new ServiceClient(url);
		SOAPEnvelope respEnv = call.invoke(reqEnv);

		// Odebranie odpowiedzi
		RPCElement respRPC = (RPCElement) respEnv.getFirstBody();
		RPCParam result = (RPCParam) respRPC.getParams().get(0);
		return ((Boolean) result.getValue()).booleanValue();
	}
}
