All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.squirrel_sql.plugins.sqlval.WebServiceSession Maven / Gradle / Ivy

package net.sourceforge.squirrel_sql.plugins.sqlval;
/*
 * Copyright (C) 2002-2003 Colin Bell and Olof Edlund
 * [email protected]
 *
 * This code is based on the example web service client code originally written
 * by Olof Edlund.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

import com.mimer.ws.validateSQL.SessionData;

public class WebServiceSession
{
	/** Preferences. */
	private final WebServicePreferences _prefs;

	/** Session properties. */
	private final WebServiceSessionProperties _sessionProps;

	private SessionData _sessionData;

	public WebServiceSession(WebServicePreferences prefs, WebServiceSessionProperties sessionProps)
	{
		super();
		if (prefs == null)
		{
			throw new IllegalArgumentException("WebServicePreferences == null");
		}
		if (sessionProps == null)
		{
			throw new IllegalArgumentException("WebServiceSessionProperties == null");
		}
		_prefs = prefs;
		_sessionProps = sessionProps;
	}

	public boolean isOpen()
	{
		return _sessionData != null;
	}

	/**
	 * Open a sesion to the web service.
	 */
	public void open() throws RemoteException, ServiceException
	{
		Service l_service = new Service();
		Call l_call = (Call)l_service.createCall();

		//Set the target server and name space
		l_call.setTargetEndpointAddress(IWebServiceURL.WEB_SERVICE_URL);
		l_call.setOperationName(new QName("SQL99Validator", "openSession"));

		// Supply the user name. If you use anonymous you will be logged in and
		// the pw will be ignored
		l_call.addParameter("a_userName", XMLType.XSD_STRING, ParameterMode.IN);

		// The pw. If user name is anonymous this can be anything. But it has to
		// be supplied anyway.
		l_call.addParameter("a_password", XMLType.XSD_STRING, ParameterMode.IN);

		//The name of the calling client program.
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_callingProgram", XMLType.XSD_STRING, ParameterMode.IN);

		//And the version of the calling program.
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_callingProgramVersion", XMLType.XSD_STRING, ParameterMode.IN);

		//The target DBMS, could be Mimer SQL Engine, Oracle, ...
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_targetDbms", XMLType.XSD_STRING, ParameterMode.IN);

		//The version of the target DBMS
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_targetDbmsVersion", XMLType.XSD_STRING, ParameterMode.IN);

		//The connection Technology used, could be ODBC, JDBC, ADO
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_connectionTechnology", XMLType.XSD_STRING, ParameterMode.IN);

		//Version
		//This is optional. If you don't want to give out this info, please enter "N/A"
		l_call.addParameter("a_connectionTechnologyVersion", XMLType.XSD_STRING, ParameterMode.IN);

		//Set this to 1 if your application is interactive where the user enters queries and then runs them
		//Set it to 2 if it is non interactive, such as for instance a JDBC Bridge driver that intercepts SQL
		l_call.addParameter("a_interactive", XMLType.XSD_INT, ParameterMode.IN);

		QName l_qn = new QName(IWebServiceURL.REQUEST_URL, "SessionData");

		l_call.registerTypeMapping(SessionData.class, l_qn,
			new org.apache.axis.encoding.ser.BeanSerializerFactory(SessionData.class, l_qn),
			new org.apache.axis.encoding.ser.BeanDeserializerFactory(SessionData.class, l_qn));

		//Set the return type
		l_call.setReturnType(l_qn);

		// Open the session.
		final boolean anonLogon = _prefs.getUseAnonymousLogon();
		final boolean anonClient = _prefs.getUseAnonymousClient();
		final boolean anonDBMS = _sessionProps.getUseAnonymousDBMS();

		final Object[] parms = new Object[]
		{
			anonLogon ? "anonymous" : _prefs.getUserName(),
			anonLogon ? "N/A" : _prefs.retrievePassword(),
			anonClient ? "N/A" : _prefs.getClientName(),
			anonClient ? "N/A" : _prefs.getClientVersion(),
			anonDBMS ? "N/A" : _sessionProps.getTargetDBMSName(),
			anonDBMS ? "N/A" : _sessionProps.getTargetDBMSVersion(),
			anonDBMS ? "N/A" : _sessionProps.getConnectionTechnology(),
			anonDBMS ? "N/A" : _sessionProps.getConnectionTechnologyVersion(),
			Integer.valueOf(1)	// 1 = interactive, 0 = batch
		};
		_sessionData = (SessionData)l_call.invoke(parms);
	}

	/**
	 * Close the session.
	 */
	public void close()
	{
		_sessionData = null;
	}

	/**
	 * Return the target URL to the open session.
	 * 
	 * @return	Target URL.
	 * 
	 * @throws	IllegalStateException
	 * 			Thrown if connection has not yet been opened.
	 */
	String getTargetURL()
	{
		validateState();
		return _sessionData.getTarget();
	}

	/**
	 * Return the ID of the web service session.
	 * 
	 * @return	session ID
	 * 
	 * @throws	IllegalStateException
	 * 			Thrown if connection has not yet been opened.
	 */
	int getSessionID()
	{
		validateState();
		return _sessionData.getSessionId();
	}

	/**
	 * Return the key of the web service session.
	 * 
	 * @return	session key
	 * 
	 * @throws	IllegalStateException
	 * 			Thrown if connection has not yet been opened.
	 */
	int getSessionKey()
	{
		validateState();
		return _sessionData.getSessionKey();
	}

	private void validateState()
	{
		if (_sessionData == null)
		{
			throw new IllegalStateException("Connection to web service has not been opened");
		}
	}
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy