/*
*	Written by: Di Wang (wangdi@wpi.edu)
*	Orinial date: Jan 2007
*	Modification date: Feb 2009
*/


package data.insert;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.*;
import service.DBAccessWSStub.InsertInfo;

import org.json.*;
import org.json.simple.*;
import org.json.simple.parser.*;

/**
 * Servlet implementation class for Servlet: insertRecords
 * 
 */
public class insertRecords extends javax.servlet.http.HttpServlet implements
		javax.servlet.Servlet {
	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	DBAccessWSClient client = new DBAccessWSClient();

	public insertRecords() {
		super();
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		if (request.getSession().getAttribute("username") == null) {
			response.getWriter().write("please come in a normal way");
			response.getWriter().close();
			return;
		}

		// get values from session
		System.out.println("insertRecords called~");
		String RDBMS = (String) request.getSession().getAttribute("RDBMS");
		String Instance = (String) request.getSession()
				.getAttribute("Instance");
		String Database = (String) request.getSession()
				.getAttribute("Database");
		String username = (String) request.getSession().getAttribute(
				"DBusername");
		String password = (String) request.getSession().getAttribute(
				"DBpassword");
		String DBIP = (String) request.getSession().getAttribute("DBIP");
		String DBport = (String) request.getSession().getAttribute("DBport");

		// fetch the parameters from request
		String tableName = request.getParameter("tableName");
		String insertInfoString = request.getParameter("insertInfoString");
		System.out.println("tableName: " + tableName);
		System.out.println("insertInfoString: " + insertInfoString);

		// parse the json string
		JSONArray insertInfosJSON = (JSONArray) JSONValue
				.parse(insertInfoString);
		DBAccessWSStub.InsertInfo[] infos = new DBAccessWSStub.InsertInfo[insertInfosJSON
				.size()];
		for (int i = 0; i < insertInfosJSON.size(); i++) {
			infos[i] = new DBAccessWSStub.InsertInfo();
			infos[i].setTableName(tableName);
			JSONArray insertInfoJSON = (JSONArray) insertInfosJSON.get(i);
			String values[] = new String[insertInfoJSON.size()];
			for (int j = 0; j < insertInfoJSON.size(); j++) {
				values[j] = (String) insertInfoJSON.get(j);
			}
			infos[i].setValues(values);
		}

		//call the web service to insert records
		DBAccessWSStub.InsertResult[] results = client.InsertRecords(RDBMS,
				Instance, Database, username, password, DBIP, DBport, infos);		
		System.out.println("results.length: " + results.length);
		
		//convert the results into json array
		JSONArray resultsJSON = new JSONArray();
		for(int i = 0;i < results.length;i++){
			JSONObject resultJSON = new JSONObject();
			resultJSON.put("opeSql", results[i].getOpeSql());
			resultJSON.put("returnMsg", results[i].getReturnMsg());
			resultJSON.put("isSucceed", String.valueOf(results[i].getIsSucceed()));
			resultsJSON.add(resultJSON);
			System.out.println("insert[" + i + "].opeSql" + results[i].getOpeSql());
			System.out.println("insert[" + i + "].returnMsg" + results[i].getReturnMsg());
			System.out.println("insert[" + i + "].isSucceed" + results[i].getIsSucceed());
		}
		
		//write the json string to client
		response.setContentType("text/json");
		String resultString = resultsJSON.toString();
		response.getWriter().write(resultString);
		
//		write the insert results into a temp file in json way
		File f = new File("e:/ResultDetail/");
		System.out.println(f.getAbsolutePath());
		FileWriter fw = new FileWriter("e:/ResultDetail/" + request.getSession().getId() + "_insert",false);
		fw.write(resultString);
		fw.close();
		System.out.println("write file:" + request.getSession().getId() + "_insert");
		System.out.println("content: " + resultString);
		response.getWriter().close();
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
}
