/*
 * SoapAccessBean.java
 *
 * Created on August 6, 2001, 3:59 PM
 */
package com.ibm.raleigh.saroehr.beans;
// import beans packages
import java.beans.*;
// import soap packages
import org.apache.soap.SOAPException;
import org.apache.soap.Constants;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
// import logging packages
import com.ibm.logging.*;

/**
 * SoapAccessBean provides a Soap WebServices Client
 * command bean pattern.
 * @author  Scott A. Roehrig@IBM Corporation
 * @version 1.0
 */
public class SoapAccessBean implements java.io.Serializable {
    // declare member variables
    private Call request;
    private java.util.Vector parameters;
    private FileHandler logHandler;
    private TraceLogger traceLogger;
    
        
    // declare methods

    /** creates new SoapAccessBean with parameters specified */
    public SoapAccessBean(String targetURI, String method) {
        traceLogger = new TraceLogger();
        try {
            request = new Call();
            request.setTargetObjectURI(targetURI);
            request.setMethodName(method);
            request.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
            parameters = new java.util.Vector();
        }
        catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    
     /** Getter for property logHandler.
     * @return Value of property logHandler.
     */
    public FileHandler getLogHandler() {
        return logHandler;
    }    

    /** Setter for property logHandler.
     * @param logHandler New value of property logHandler.
     */
    public void setLogHandler(String logFile) {
        logHandler = new FileHandler();
        logHandler.setFileName(logFile);
      
    }
    
    /** enables or disables logging */
    public void setLogging(boolean enabled) {
        traceLogger.setLogging(enabled);
        
    }
    
    /** parameters property setter method */
    public void setParameters(String paramName, Class  paramClass, Object paramValue, String encoding) {
        parameters.addElement(new Parameter(paramName, paramClass, paramValue, encoding));
        
    }
    
    /** parameters property getter method */
    public java.util.Vector getParameters() {
        return parameters;
    }
    
    /** processes client requests */
    public Object processRequest(String url) throws SOAPException {
        traceLogger.addHandler(logHandler);
        Object result = null;
        Response response = null;
        try {
            request.setParams(parameters);
            response = request.invoke(new java.net.URL(url), "");
            
            // verify result
            if (response.generatedFault() == true) {
                result = null;
            }
            else {
                result = response.getReturnValue().getValue();
            }
        }
        catch (java.net.MalformedURLException exception) {
            traceLogger.exception(IRecordType.TYPE_ERROR_EXC, this, exception.getMessage(), exception);
            exception.printStackTrace();
        }
        return result;
    }
    
}

