/*
* Written by: Di Wang
* Original date: Jan 2007
* Modified date: Jan 2009	
*/

package service;

import java.rmi.RemoteException;

//This class is to wrap the invokation of the different web service method 
public class DBAccessWSClient {
	service.DBAccessWSStub stub;

	public DBAccessWSClient() {
		try {
			stub = new DBAccessWSStub();
		} catch (Exception e) {
			stub = null;
		}
	}

	public DBAccessWSStub.ConnResult connectDB(String RDBMS, String Database,
			String username, String password, String IP, String port)
			throws java.rmi.RemoteException {
		// Construct the uri using the received parameters

		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;

		// set the parameter
		DBAccessWSStub.ConnectDB request = new DBAccessWSStub.ConnectDB();
		request.setUri(uri);
		request.setUsername(username);
		request.setPassword(password);
		DBAccessWSStub.ConnectDBResponse response = null;

		// call the service use stub
		response = stub.connectDB(request);

		// return the service result
		DBAccessWSStub.ConnResult result = response.get_return();
		return result;
	}

	public DBAccessWSStub.DisconnResult disconnectDB(String RDBMS,
			String Database, String username, String password, String IP,
			String port) throws java.rmi.RemoteException {
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;

		// set the parameter
		DBAccessWSStub.DisconnectDB request = new DBAccessWSStub.DisconnectDB();
		request.setUri(uri);
		request.setUser(username);
		DBAccessWSStub.DisconnectDBResponse response = null;

		// call the service use stub
		response = stub.disconnectDB(request);

		// return the service result
		DBAccessWSStub.DisconnResult result = response.get_return();
		return result;
	}

	public DBAccessWSStub.Schema getSchema(String RDBMS, String Instance,
			String Database, String username, String password, String IP,
			String port) throws java.rmi.RemoteException {
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;
		System.out.println("uri: " + uri);
		// set the parameter
		DBAccessWSStub.GetSchema request = new DBAccessWSStub.GetSchema();
		request.setUri(uri);
		request.setUser(username);
		request.setInstance(Instance);
		request.setDatabase(Database);
		DBAccessWSStub.GetSchemaResponse response = null;

		// call the service use stub
		response = stub.getSchema(request);

		// return the service result
		DBAccessWSStub.Schema result = response.get_return();
		return result;
	}

	public DBAccessWSStub.TableStructure getStructure(String RDBMS,
			String Instance, String Database, String username, String password,
			String IP, String port, String tableName)
			throws java.rmi.RemoteException {
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;
		DBAccessWSStub.GetStructureResponse response = null;
		System.out.println("username:" + username);
		System.out.println("tableName: " + tableName);
		System.out.println("uri:" + uri);

		// set the parameter
		DBAccessWSStub.GetStructure request = new DBAccessWSStub.GetStructure();
		request.setTablename(tableName);
		request.setUri(uri);
		request.setUsername(username);

		// call the service use stub
		response = stub.getStructure(request);

		// return the service result
		DBAccessWSStub.TableStructure result = response.get_return();
		return result;

	}

	public DBAccessWSStub.TableData getTableData(String RDBMS, String Instance,
			String Database, String username, String password, String IP,
			String port, String tableName) throws java.rmi.RemoteException {
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;
		System.out.println("In gettabledata servlet. \n username:" + username);
		System.out.println("tableName: " + tableName);
		System.out.println("uri:" + uri);

		DBAccessWSStub.GetDataResponse response = null;
		DBAccessWSStub.GetData request = new DBAccessWSStub.GetData();

		// set the parameter
		request.setTable(tableName);
		request.setUri(uri);
		request.setUser(username);

		// call the service use stub
		response = stub.getData(request);

		// return the service result
		DBAccessWSStub.TableData result = response.get_return();
		return result;
	}

	public DBAccessWSStub.DMLResult[] applyDMLOperation(String RDBMS,
			String Instance, String Database, String username, String password,
			String IP, String port, DBAccessWSStub.DMLInfo dmlInfos[])
			throws java.rmi.RemoteException {
		DBAccessWSStub.DMLResult result[];
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;

		System.out.println("In applyDMLOperaion service. \nusername:"
				+ username);
		System.out.println("uri: " + uri);

		DBAccessWSStub.ApplyDMLOperationResponse response = null;
		DBAccessWSStub.ApplyDMLOperation request = new DBAccessWSStub.ApplyDMLOperation();

		System.out.println("dmlInfos.length: " + dmlInfos.length);
		// set the parameter
		request.setDml(dmlInfos);
		request.setUrl(uri);
		request.setUsername(username);

		// call the service use stub
		response = stub.applyDMLOperation(request);

		// return the service result
		result = response.get_return();

		return result;
	}

	public DBAccessWSStub.FKValue[] getFKValues(String RDBMS, String Instance,
			String Database, String username, String password, String IP,
			String port, String fkColNames[], String tableName)
			throws java.rmi.RemoteException {
		DBAccessWSStub.FKValue result[];
		// String uri = "jdbc:" + RDBMS + "://" + IP + ":" + port + "/" +
		// Instance;
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;
		System.out.println("In getFKvalues service. \nusername:" + username);
		System.out.println("uri: " + uri);

		DBAccessWSStub.GetFKValueResponse response = null;
		DBAccessWSStub.GetFKValue request = new DBAccessWSStub.GetFKValue();

		System.out.println("fkColNames.length: " + fkColNames.length);
		// set the parameter
		request.setFkcolname(fkColNames);
		request.setUri(uri);
		request.setUsername(username);
		request.setTablename(tableName);

		// call the service use stub
		response = stub.GetFKValue(request);

		// return the service result
		result = response.get_return();

		return result;

	}

	public DBAccessWSStub.InsertResult[] InsertRecords(String RDBMS,
			String Instance, String Database, String username, String password,
			String IP, String port, DBAccessWSStub.InsertInfo insertInfos[])
			throws java.rmi.RemoteException {
		DBAccessWSStub.InsertResult result[];
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":"
				+ Database;
		// String uri = "jdbc:" + RDBMS + "://" + IP + ":" + port + "/" +
		// Instance;
		System.out.println("In insertRecord service. \nusername:" + username);
		System.out.println("uri: " + uri);

		DBAccessWSStub.InsertResponse response = null;
		DBAccessWSStub.Insert request = new DBAccessWSStub.Insert();

		System.out.println("insertInfos.length: " + insertInfos.length);
		// set the parameter
		request.setInsinfo(insertInfos);
		request.setUri(uri);
		request.setUsername(username);

		// call the service use stub
		response = stub.Insert(request);

		// return the service result
		result = response.get_return();

		return result;

	}

	public boolean refreshCP(String RDBMS, String Instance, String Database,
			String username, String password, String IP, String port)
			throws java.rmi.RemoteException {
		boolean result;
		String uri = "jdbc:" + RDBMS + ":thin:@" + IP + ":" + port + ":" + Database;
		//String uri = "jdbc:" + RDBMS + "://" + IP + ":" + port + "/" + Instance;
		System.out.println("In refreshCP service. \nusername:" + username);
		System.out.println("uri: " + uri);

		DBAccessWSStub.RefreshCPResponse response = null;
		DBAccessWSStub.RefreshCP request = new DBAccessWSStub.RefreshCP();

		// set the parameter
		request.setUri(uri);
		request.setUsername(username);

		// call the service use stub
		response = stub.refreshCP(request);

		// return the service result
		result = response.get_return();

		return result;
	}
}
