/**
 * DEVELOP BY RITESH TIWARI ON 12/11/13
 */
package ibase.webitm.ejb.mfg;

import ibase.system.config.ConnDriver;
import ibase.webitm.ejb.ValidatorEJB;
import ibase.webitm.utility.GenericUtility;
import ibase.webitm.utility.ITMException;

import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import javax.ejb.Stateless;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

// added for ejb3
@Stateless
public class WoTransferIC extends ValidatorEJB implements WoTransferICLocal,WoTransferICRemote
{
	public String itemChanged(String xmlString, String xmlString1,String xmlString2, String objContext, String currentColumn,String editFlag, String xtraParams) throws RemoteException,ITMException
	{
		System.out.println("@@@@@@@ itemChanged called");
		Document dom = null;
		Document dom1 = null;
		Document dom2 = null;
		String valueXmlString = "";
		try
		{
			if (xmlString != null && xmlString.trim().length() > 0)
			{
				dom = parseString(xmlString);
			}
			if (xmlString1 != null && xmlString1.trim().length() > 0)
			{
				dom1 = parseString(xmlString1);
			}
			if (xmlString2 != null && xmlString2.trim().length() > 0)
			{
				dom2 = parseString(xmlString2);
			}
			valueXmlString = itemChanged(dom, dom1, dom2, objContext,
					currentColumn, editFlag, xtraParams);
		} catch (Exception e)
		{
			System.out.println("Exception :[itemChanged( String, String )] :==>\n"+ e.getMessage());
		}
		return valueXmlString;

	}

	public String itemChanged(Document dom, Document dom1, Document dom2,String objContext, String currentColumn, String editFlag,String xtraParams) throws RemoteException, ITMException
	{
		System.out.println("@@@@@@@ itemChanged called");
		StringBuffer valueXmlString = new StringBuffer();
		NodeList parentNodeList = null;
		NodeList childNodeList = null;
		Node parentNode = null;
		Node childNode = null;
		Node parentNode1 = null;
		String childNodeName = null;
		String sql = "";
		String locCode = "",descr="",worder="";
		double batchQuantity=0.0;
		int currentFormNo = 0;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		GenericUtility genericUtility = null;
		ConnDriver connDriver = null;
		String campNoStr = "";
		try
		{
			genericUtility = GenericUtility.getInstance();
			connDriver =  new ConnDriver();
			conn = connDriver.getConnectDB("DriverITM");
			conn.setAutoCommit(false);
			connDriver = null;
			if (objContext != null && objContext.trim().length() > 0)
			{
				currentFormNo = Integer.parseInt(objContext.trim());
			}
			valueXmlString = new StringBuffer("<?xml version = \"1.0\"?> <Root> <header> <editFlag>");
			valueXmlString.append(editFlag).append("</editFlag> </header>");
			switch (currentFormNo)
			{
			 case 1:
				parentNodeList = dom.getElementsByTagName("Detail1");
				parentNode = parentNodeList.item(0);
				childNodeList = parentNode.getChildNodes();
				valueXmlString.append("<Detail1>");
				int childNodeListLength = childNodeList.getLength();
				
				if (currentColumn.trim().equalsIgnoreCase("campgn_no"))
				{
					campNoStr = genericUtility.getColumnValue("campgn_no", dom);
					System.out.println("::campgn_no::received -" + campNoStr);
					if(campNoStr !=null && campNoStr.trim().length() > 0)
					{
						valueXmlString.append("<work_order protect='1'>").append("<![CDATA[]]>").append("</work_order>");
						valueXmlString.append("<batch_quantity protect='1'></batch_quantity>");
					}else
					{
						valueXmlString.append("<work_order protect='0'>").append("<![CDATA[]]>").append("</work_order>");
						valueXmlString.append("<batch_quantity protect='0'></batch_quantity>");
					}
				}
				if (currentColumn.trim().equalsIgnoreCase("loc_code__to"))
				{
					locCode = genericUtility.getColumnValue("loc_code__to", dom);
					System.out.println("::descr::loc_code - " + locCode);
					sql = " select descr from location where loc_code = ? "; 
					pstmt = conn.prepareStatement(sql);
					pstmt.setString(1, locCode);
					rs = pstmt.executeQuery();
					if(rs.next())
					{
						descr = rs.getString("descr");
					}
					if (pstmt != null)
						pstmt.close();
					pstmt = null;
					if (rs != null)
						rs.close();
					rs = null;
					valueXmlString.append("<descr>").append("<![CDATA["+ descr +"]]>").append("</descr>");
				}
				if (currentColumn.trim().equalsIgnoreCase("work_order"))
				{
					worder = genericUtility.getColumnValue("work_order", dom);
					System.out.println("::descr::loc_code - " + locCode);
					sql = " select quantity from workorder where work_order = ? "; 
					pstmt = conn.prepareStatement(sql);
					pstmt.setString(1, worder);
					rs = pstmt.executeQuery();
					if(rs.next())
					{
						batchQuantity = rs.getDouble("quantity");
					}
					if (pstmt != null)
						pstmt.close();
					pstmt = null;
					if (rs != null)
						rs.close();
					rs = null;
					valueXmlString.append("<batch_quantity>").append("<![CDATA["+ batchQuantity +"]]>").append("</batch_quantity>");
				}
				valueXmlString.append("</Detail1>");
		    }
			valueXmlString.append("</Root>");

		} catch (Exception e)
		{
			e.printStackTrace();
			System.out.println("Exception ::" + e.getMessage());
			throw new ITMException(e);
		} finally
		{
			try
			{
				if (conn != null)
				{
					if (pstmt != null)
						pstmt.close();
					pstmt = null;
					if (rs != null)
						rs.close();
					rs = null;
					conn.close();
					conn = null;
				}
			} catch (Exception d)
			{
				d.printStackTrace();
			}
		}
		return valueXmlString.toString();
	}
}
