// $Header: /var/lib/cvs/diagnosis-contents/ws/DiagClient.java,v 1.1.1.1 2005/01/26 04:03:33 miyachi Exp $
package diagnosis.ws;

import diagnosis.xml.Request;
import diagnosis.xml.Response;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.utils.Options;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.w3c.dom.Element;

import java.net.URL;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;


public class DiagClient
{
    private static Log log = LogFactory.getLog(DiagClient.class);

    public Response doit(String[] args) throws Exception
    {
        Options opts = new Options(args);
        opts.setDefaultURL("http://localhost:8080/axis/services/DiagService");

        Service service = new Service();
        Call call = (Call) service.createCall();

        call.setTargetEndpointAddress(new URL(opts.getURL()));

        Request request = createRequest(opts.getRemainingArgs());

        log.trace("request: " + request);

        SOAPBodyElement[] input = new SOAPBodyElement[1];

        input[0] = new SOAPBodyElement(request.getDocument().getDocumentElement());

        Vector elems  = (Vector) call.invoke(input);

        SOAPBodyElement elem = (SOAPBodyElement) elems.get(0);
        Element e = elem.getAsDOM();

        Response response = new Response(e);

        log.trace("response: " + response);

        return response;
    }

    private Request createRequest(String[] symptomCodeArray)
    {
        List symptomCodeList = new ArrayList();

        for (int i = 0; i < symptomCodeArray.length; i++)
        {
            symptomCodeList.add(symptomCodeArray[i]);
        }

        int keyword = -1;

        int searchMode = 0;

        Request request = new Request(symptomCodeList, keyword, searchMode);

        return request;
    }
}

