//Servlet to generate files,zipping,encrypting and transferring files

package extractor;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.Timestamp;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.*;
 import java.util.zip.*;
 import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.net.URL;
import java.net.URLConnection;
import java.security.spec.AlgorithmParameterSpec;
import java.io.*;
import javax.swing.*;


public class FileGeneratorServlet extends HttpServlet implements Serializable
	{

            static String stateCode=null;
			static String serverUrl=null;
			static String serverRootDir=null;
			static String serverSubDir=null;
			static String clientDirectory=null;
			static String connectionURL=null;
			static String driverName=null;
			static String userName=null;
			static String password=null;
			static String serverURLToLoad=null;
			static String date=null;

		    public void init(ServletConfig config) throws ServletException
				{
					 serverUrl=config.getInitParameter("serverUrl");
		 			 serverRootDir=config.getInitParameter("serverRootDir");
					 serverSubDir=config.getInitParameter("serverSubDir");
					 stateCode=config.getInitParameter("stateCode");
					 clientDirectory=config.getInitParameter("clientDirectory");
					 connectionURL=config.getInitParameter("connectionURL");
					 driverName=config.getInitParameter("driverName");
					 userName=config.getInitParameter("userName");
					 password=config.getInitParameter("password");
					 serverURLToLoad=config.getInitParameter("serverURLToLoad");
					 serverURLToLoad=serverURLToLoad+"?stateCode="+stateCode;
					 date=getSystemDate();
				}


		   public synchronized void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
				{
					String fromDate=null;
					String toDate=null;
					SecretKey key=null;
					String serverURL=null;
					try
					  {
		                  System.out.println("value of parameter is  "+serverUrl +"    "+serverRootDir+"   "+serverSubDir+"    "+stateCode);
						  fromDate=request.getParameter("fromDate");
						  toDate=request.getParameter("toDate");
						  System.out.println("from date is ="+fromDate+"    to date is ="+toDate);

//creating text files

						  createTextFiles(fromDate,toDate);

// zipping files and encrypt

						  key=createZipAndEncrypt();
						  System.out.println("secret key to send  is  "+key);

//transfering files to server"//10.1.103.64/FileUpload/Punjab/"+date+".enr";

						  String clientDir=clientDirectory+"/"+date+".enr";
						  String serverDir ="//"+serverUrl+"/"+serverRootDir+"/"+serverSubDir+"/"+date+".enr";
	                      String dstDirectory="//"+serverUrl+"/"+serverRootDir+"/"+serverSubDir+"/"+date ;
						   File file=new File(dstDirectory);
						   if(!file.isDirectory())
							  new File(dstDirectory).mkdir();

		                   File srcDir = new File(clientDir);
				           File dstDir = new File(serverDir);

						 //  MovingFile.copyDirectory(srcDir, dstDir);
								copyDirectory(srcDir, dstDir);
//sending secret key to server

						   sendKey(key);

						   response.sendRedirect(serverURLToLoad);


					}
				  catch(Exception e1)
				  {
                     e1.printStackTrace();
                     System.out.println("unable to generate files ");
		           }


			  }





  //*** method to create text Files

    public static synchronized void createTextFiles(String fromDate,String toDate)
		{

	          try
	          {
// Creating dealer MASTER files

				  String query_DLMB= " select 'DLMB$'||RC_NO||'$'||RC_NO||'$'||DM_TRADE_NAME||'$'||DEALER_ADDRESS1||'$'|| DEALER_ADDRESS2||'$'|| DEALER_ADDRESS3||'$$$$'||SUBSTR(LOCATION_ID,3,3)||'$$'|| BUSINESS_CONSTITUTION_DTLS||'$$'||to_char(VALIDITY_DATE,'dd-mon-yyyy')||'$'||to_char(CANCEL_DATE,'dd-mon-yyyy')||'$'||DEALER_STATUS "+
                                     " FROM ETM_DM_DEALER WHERE SUBSTR(RC_NO,5,1) <> 9 AND((RC_APPROVAL_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"') OR (MODIFIED_DATE BETWEEN  '"+fromDate+"' AND '"+toDate+"' ) OR (CANCEL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' )) AND RC_NO NOT LIKE 'T%' and rownum<10000 ORDER BY 1  ";
				  createFile(query_DLMB,"DLMB");

				  String query_BDWS= " SELECT DISTINCT 'BDWS$'||B.RC_NO||'$'||B.RC_NO||'$$'||B.ADDRESS1||'$'||B.ADDRESS2||'$'||B.ADDRESS3||'$$$' FROM ETT_DM_BUSS_PLACES B, ETM_DM_DEALER D "+
                                     " WHERE B.ADDRESS_TYPE='AD' AND B.BUSS_PLACE_TYPE='OF' AND B.STATE_CODE='03' AND B.RC_NO = D.RC_NO  AND((D.RC_APPROVAL_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"') OR (D.MODIFIED_DATE BETWEEN  '"+fromDate+"' AND '"+toDate+"' ) OR (D.CANCEL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' )) and rownum<10000 ";
                  createFile(query_BDWS,"BDWS");

				  String query_WDWS= " SELECT DISTINCT 'WDWS$'||W.RC_NO||'$'||W.RC_NO||'$$'||W.ADDRESS1||'$'||W.ADDRESS2||'$'||W.ADDRESS3||'$$$' FROM ETT_DM_BUSS_PLACES W, ETM_DM_DEALER D "+
                                     " WHERE W.ADDRESS_TYPE='AD' AND W.BUSS_PLACE_TYPE='GD' AND W.STATE_CODE='03' AND W.RC_NO = D.RC_NO AND((D.RC_APPROVAL_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"') OR (D.MODIFIED_DATE BETWEEN  '"+fromDate+"' AND '"+toDate+"' ) OR (D.CANCEL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' )) and rownum<10000";
                  createFile(query_WDWS,"WDWS");

				  String query_DLBO= " SELECT DISTINCT 'DLBO$'||BS.RC_NO||'$'||BS.RC_NO||'$$'||BS.ADDRESS1||'$'||BS.ADDRESS2||'$'||BS.ADDRESS3||'$$$$$' FROM ETT_DM_BUSS_PLACES BS, ETM_DM_DEALER D "+
                                     " WHERE BS.ADDRESS_TYPE='AD' AND BS.BUSS_PLACE_TYPE='OF' AND BS.STATE_CODE<>'03' AND BS.RC_NO =  D.RC_NO   AND((D.RC_APPROVAL_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"') OR (D.MODIFIED_DATE BETWEEN  '"+fromDate+"' AND '"+toDate+"' ) OR (D.CANCEL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' )) and rownum<10000 ";
                  createFile(query_DLBO,"DLBO");

//Creating C-Form files

				   String query_CIDL= " SELECT DISTINCT 'CIDL$'||B.RC_NO||'$'||B.RC_NO||'$'||A.DM_TRADE_NAME||'$'||SUBSTR(B.LOCATION_ID ,3,3)||'$$'||to_char(B.ISSUE_DATE,'dd-mon-yyyy')||'$'||B.SERIES||'$'||B.SERIAL_NO "+
                                      " FROM  TT_FI_RD_EQUEST_ISSUE_NEW B, ETM_DM_DEALER A  WHERE A.RC_NO = B.RC_NO AND B.APPROVAL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' AND B.FORM_NO='FR01' and rownum<10000";
				   createFile(query_CIDL,"CIDL");

				   String query_CUDL= " SELECT DISTINCT 'CUDL$'||A.RC_NO||'$'||A.RC_NO||'$'||B.SALES_TAX_NO||'$$'||B.DEALER_NAME||'$$$$$$$$'||B.SERIES||'$'||B.SERIAL_NO||'$'||COUNT(B.SERIES||B.SERIAL_NO)||'$'||SUM(B.AMOUNT)||'$$' "+
           		                      " FROM  ETT_FI_FORMS_UTILIZATION A, ETT_FI_FORMS_UTILIZATION_DTLS B WHERE  A.FORM_NO='FR01' AND A.FORMS_UTILIZATION_NO=B.FORMS_UTILIZATION_NO and rownum<10000 "+
			                          " AND B.CREATION_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"' GROUP BY A.RC_NO,B.SALES_TAX_NO, B.DEALER_NAME,B.SERIES, B.SERIAL_NO ";
				   createFile(query_CUDL,"CUDL");

				   String query_CBDL= " SELECT DISTINCT 'CBDL$'||a.RC_NO||'$'||a.RC_NO||'$'||b.SERIES||'$'||b.SERIAL_NO||'$'||b.INVOICE_NO||'$'||TO_CHAR(b.DISTRIBUTED_DATE,'DD-MON-YYYY')||'$'||AMOUNT||'$' FROM  ETT_FI_FORMS_UTILIZATION a, ETT_FI_FORMs_UTILIZATION_DTLS b "+
                                      " WHERE  a.form_no='FR01' AND a.FORMs_UTILIZATION_NO=b.FORMs_UTILIZATION_NO AND b.CREATION_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' and rownum<10000 ";
				   createFile(query_CBDL,"CBDL");

//Creating E1 Form files

					String query_E1ID= " SELECT DISTINCT 'E1ID$'||B.RC_NO||'$'||B.RC_NO||'$'||A.DM_TRADE_NAME||'$'||SUBSTR(B.LOCATION_ID ,3,3)||'$$'||to_char(B.ISSUE_DATE,'dd-mon-yyyy')||'$'||B.SERIES||'$'||B.SERIAL_NO "+
                                       " FROM  TT_FI_RD_EQUEST_ISSUE_NEW B, ETM_DM_DEALER A  WHERE A.RC_NO = B.RC_NO AND B.APPROVAL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' AND B.FORM_NO='FR0004' and rownum<10000 ";
					createFile(query_E1ID,"E1ID");

					String query_E1UD=" SELECT DISTINCT 'E1UD$'||A.RC_NO||'$$'||B.SALES_TAX_NO||'$$$$$$$$$$'||B.SERIES||'$'||B.SERIAL_NO||'$'||COUNT(B.SERIES||B.SERIAL_NO)||'$'||SUM(B.AMOUNT)||'$$' "+
           							  " FROM  ETT_FI_FORMS_UTILIZATION A, ETT_FI_FORMS_UTILIZATION_DTLS B WHERE  A.FORM_NO='FR0004' AND A.FORMS_UTILIZATION_NO=B.FORMS_UTILIZATION_NO and rownum<10000 "+
									  " AND B.CREATION_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"' GROUP BY A.RC_NO,B.SALES_TAX_NO, B.DEALER_NAME,B.SERIES, B.SERIAL_NO ";
					createFile(query_E1UD,"E1UD");

					String query_E1BD= " SELECT DISTINCT 'E1BD$'||a.RC_NO||'$'||a.RC_NO||'$'||b.SERIES||'$'||b.SERIAL_NO||'$'||b.INVOICE_NO||'$'||TO_CHAR(b.DISTRIBUTED_DATE,'DD-MON-YYYY')||'$'||AMOUNT||'$' FROM  ETT_FI_FORMS_UTILIZATION a, ETT_FI_FORMs_UTILIZATION_DTLS b "+
                                       " WHERE  a.form_no='FR0004' AND a.FORMs_UTILIZATION_NO=b.FORMs_UTILIZATION_NO AND b.CREATION_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' and rownum<10000 ";
					createFile(query_E1BD,"E1BD");

//Creating E2 Form files

					String query_E2ID= " SELECT DISTINCT 'E2ID$'||B.RC_NO||'$'||B.RC_NO||'$'||A.DM_TRADE_NAME||'$'||SUBSTR(B.LOCATION_ID ,3,3)||'$$'||to_char(B.ISSUE_DATE,'dd-mon-yyyy')||'$'||B.SERIES||'$'||B.SERIAL_NO "+
                                       " FROM  TT_FI_RD_EQUEST_ISSUE_NEW B, ETM_DM_DEALER A  WHERE A.RC_NO = B.RC_NO AND B.APPROVAL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' AND B.FORM_NO='FR0005' and rownum<10000 ";
					createFile(query_E2ID,"E2ID");

					String query_E2UD=" SELECT DISTINCT 'E2UD$'||A.RC_NO||'$$'||B.SALES_TAX_NO||'$$$$$$$$$$'||B.SERIES||'$'||B.SERIAL_NO||'$'||COUNT(B.SERIES||B.SERIAL_NO)||'$'||SUM(B.AMOUNT)||'$$' "+
           							  " FROM  ETT_FI_FORMS_UTILIZATION A, ETT_FI_FORMS_UTILIZATION_DTLS B WHERE  A.FORM_NO='FR0005' AND A.FORMS_UTILIZATION_NO=B.FORMS_UTILIZATION_NO and rownum<10000 "+
									  " AND B.CREATION_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"' GROUP BY A.RC_NO,B.SALES_TAX_NO, B.DEALER_NAME,B.SERIES, B.SERIAL_NO ";
					createFile(query_E2UD,"E2UD");

					String query_E2BD= " SELECT DISTINCT 'E2BD$'||a.RC_NO||'$'||a.RC_NO||'$'||b.SERIES||'$'||b.SERIAL_NO||'$'||b.INVOICE_NO||'$'||TO_CHAR(b.DISTRIBUTED_DATE,'DD-MON-YYYY')||'$'||AMOUNT||'$' FROM  ETT_FI_FORMS_UTILIZATION a, ETT_FI_FORMs_UTILIZATION_DTLS b "+
                                       " WHERE  a.form_no='FR0005' AND a.FORMs_UTILIZATION_NO=b.FORMs_UTILIZATION_NO AND b.CREATION_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' and rownum<10000 ";
					createFile(query_E2BD,"E2BD");

//Creating F-Form files

				   String query_FIDL= " SELECT DISTINCT 'FIDL$'||B.RC_NO||'$'||B.RC_NO||'$'||A.DM_TRADE_NAME||'$'||SUBSTR(B.LOCATION_ID ,3,3)||'$$'||to_char(B.ISSUE_DATE,'dd-mon-yyyy')||'$'||B.SERIES||'$'||B.SERIAL_NO "+
                                      " FROM  TT_FI_RD_EQUEST_ISSUE_NEW B, ETM_DM_DEALER A  WHERE A.RC_NO = B.RC_NO AND B.APPROVAL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' AND B.FORM_NO='FR0003' and rownum<1000 ";
				   createFile(query_FIDL,"FIDL");

				   String query_FUDL= " SELECT DISTINCT 'FUDL$'||A.RC_NO||'$'||A.RC_NO||'$'||B.SALES_TAX_NO||'$$'||B.DEALER_NAME||'$$$$$$$$'||B.SERIES||'$'||B.SERIAL_NO||'$'||COUNT(B.SERIES||B.SERIAL_NO)||'$'||SUM(B.AMOUNT)||'$$' "+
           		                      " FROM  ETT_FI_FORMS_UTILIZATION A, ETT_FI_FORMS_UTILIZATION_DTLS B WHERE  A.FORM_NO='FR0003' AND A.FORMS_UTILIZATION_NO=B.FORMS_UTILIZATION_NO and rownum<10000 "+
			                          " AND B.CREATION_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"' GROUP BY A.RC_NO,B.SALES_TAX_NO, B.DEALER_NAME,B.SERIES, B.SERIAL_NO ";
				   createFile(query_FUDL,"FUDL");

				   String query_FBDL= " SELECT DISTINCT 'FBDL$'||a.RC_NO||'$'||a.RC_NO||'$'||b.SERIES||'$'||b.SERIAL_NO||'$'||b.INVOICE_NO||'$'||TO_CHAR(b.DISTRIBUTED_DATE,'DD-MON-YYYY')||'$'||AMOUNT||'$' FROM  ETT_FI_FORMS_UTILIZATION a, ETT_FI_FORMs_UTILIZATION_DTLS b "+
                                      " WHERE  a.form_no='FR0003' AND a.FORMs_UTILIZATION_NO=b.FORMs_UTILIZATION_NO AND b.CREATION_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' and rownum<10000 ";
				   createFile(query_FBDL,"FBDL");

//Creating H-Form files

				   String query_HIDL= " SELECT DISTINCT 'HIDL$'||B.RC_NO||'$'||B.RC_NO||'$'||A.DM_TRADE_NAME||'$'||SUBSTR(B.LOCATION_ID ,3,3)||'$$'||to_char(B.ISSUE_DATE,'dd-mon-yyyy')||'$'||B.SERIES||'$'||B.SERIAL_NO "+
                                      " FROM  TT_FI_RD_EQUEST_ISSUE_NEW B, ETM_DM_DEALER A  WHERE A.RC_NO = B.RC_NO AND B.APPROVAL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' AND B.FORM_NO='FR0002' and rownum<10000 ";
				   createFile(query_HIDL,"HIDL");

				   String query_HUDL= " SELECT DISTINCT 'HUDL$'||A.RC_NO||'$'||A.RC_NO||'$'||B.SALES_TAX_NO||'$$'||B.DEALER_NAME||'$$$$$$$$'||B.SERIES||'$'||B.SERIAL_NO||'$'||COUNT(B.SERIES||B.SERIAL_NO)||'$'||SUM(B.AMOUNT)||'$$' "+
           		                      " FROM  ETT_FI_FORMS_UTILIZATION A, ETT_FI_FORMS_UTILIZATION_DTLS B WHERE  A.FORM_NO='FR0002' AND A.FORMS_UTILIZATION_NO=B.FORMS_UTILIZATION_NO and rownum<10000 "+
			                          " AND B.CREATION_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"' GROUP BY A.RC_NO,B.SALES_TAX_NO, B.DEALER_NAME,B.SERIES, B.SERIAL_NO ";
				   createFile(query_HUDL,"HUDL");

				   String query_HBDL= " SELECT DISTINCT 'HBDL$'||a.RC_NO||'$'||a.RC_NO||'$'||b.SERIES||'$'||b.SERIAL_NO||'$'||b.INVOICE_NO||'$'||TO_CHAR(b.DISTRIBUTED_DATE,'DD-MON-YYYY')||'$'||AMOUNT||'$' FROM  ETT_FI_FORMS_UTILIZATION a, ETT_FI_FORMs_UTILIZATION_DTLS b "+
                                      " WHERE  a.form_no='FR0002' AND a.FORMs_UTILIZATION_NO=b.FORMs_UTILIZATION_NO AND b.CREATION_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' and rownum<10000 ";
				   createFile(query_HBDL,"HBDL");

//CREATING PERIODIC RETURN FILES

                    String query_PRDL= " SELECT DISTINCT 'PRDL$'||A.RC_NO||'$$'||TO_CHAR(A.RETURN_PERIOD_FROM,'DD-MON-YYYY')||'$'||TO_CHAR(A.RETURN_PERIOD_TO,'DD-MON-YYYY')||'$'||TO_CHAR(A.FILING_DATE,'DD-MON-YYYY')||'$'||A.INTER_STATE_SALES||'$'||A.CST_LIABILITY||'$' FROM ETT_RA_VAT A,ETM_DM_DEALER D "+
                                       " WHERE A.RC_NO =  D.RC_NO   AND((D.RC_APPROVAL_DATE  BETWEEN '"+fromDate+"' AND '"+toDate+"') OR (D.MODIFIED_DATE BETWEEN  '"+fromDate+"' AND '"+toDate+"' ) OR (D.CANCEL_DATE BETWEEN '"+fromDate+"' AND '"+toDate+"' )) and rownum<10000 ";
					createFile(query_PRDL,"PRDL");






              }
			  catch(Exception e1)
				  {
                     e1.printStackTrace();
                     System.out.println("unable to make DLMB file");
		           }
          }




  //*** mathod to create text files

          public static synchronized void createFile(String query,String tableCode)
			  {
			     Connection con=null;
		 		 Statement stmnt=null;
	 			 ResultSet rs=null;
				 String  record;
				 BufferedWriter bw2 =null;
				 int i=0;

				 String directory=clientDirectory+"/"+date;
	             String originalFile=directory+"/"+tableCode+".txt";
                 try
                 {
					con=getStateConnection();
					File file=new File(directory);
					if(!file.isDirectory())
                       new File(directory).mkdir();

	                File f=new File(originalFile);
			        if(f.exists())
					  {
						f.delete();
						f.createNewFile();
			           }
					bw2 =new BufferedWriter(new FileWriter(originalFile));

					stmnt = con.createStatement();
                    rs = stmnt.executeQuery(query);
	                while(rs.next())
						{
					  	  record = rs.getString(1);
					  	  i++;
			  			  bw2.write(record);
		              	  bw2.newLine();
			            }

					 bw2.close();
					}
				 catch(Exception e1)
					 {
						e1.printStackTrace();
						System.out.println("Exception is "+e1);
		             }
				  finally
					  {
					     try
					     {
			               bw2.close();
						   if(rs!=null)rs.close();
						   if(stmnt!=null)stmnt.close();
						   if(con!=null)con.close();
					     }
					    catch(Exception e2)
							{
			  		          e2.printStackTrace();
							}
					  }

        }

// method to create zip files   and encrypt

     public static synchronized SecretKey createZipAndEncrypt()
       {

			UploadEncrypt uploadEncrypt = null;
			SecretKey key = null;
			Cipher cipherForDenr = null;
			BufferedInputStream in = null;
			int count;
			String directory=clientDirectory+"/"+date;
			File inFolder=new File(directory);
			File outFolder=new File(directory+".zip");
			String encryptFile = directory+".enr";
			String encryptFileLOC_remote = "//10.1.103.110/FileUpload/Punjab/";

//Zipping file

		   try
               {
					ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outFolder)));
					byte[] data    = new byte[1000];
					String files[] = inFolder.list();
					for (int i=0; i<files.length; i++)
						{
							in = new BufferedInputStream(new FileInputStream (inFolder.getPath() + "/" + files[i]), 1000);
							out.putNextEntry(new ZipEntry(files[i]));

							while((count = in.read(data,0,1000)) != -1)
							   {
                                  out.write(data, 0, count);
                                }
							 out.closeEntry();
						 }
					out.flush();
					out.close();
				}
            catch(Exception e)
              {
		          System.out.println("error in zipping");
                  e.printStackTrace();
              }


//	Encrypting file

			try
			{
				uploadEncrypt = new UploadEncrypt();
				cipherForDenr = uploadEncrypt.getDcipher();
				InputStream inputStream = new FileInputStream(outFolder);
				OutputStream outputStream = new FileOutputStream(encryptFile);

				System.out.println("before creating remote file");
				OutputStream outputStream_remote = new FileOutputStream(encryptFileLOC_remote);

				boolean isEnrFile = uploadEncrypt.encrypt(inputStream, outputStream);
				boolean isEnrFile_remote = uploadEncrypt.encrypt(inputStream, outputStream_remote);

				inputStream.close();
				outputStream.close();
				outputStream_remote.close();

				key = uploadEncrypt.getKey();
			}
           catch(Exception e)
              {
		         System.out.println("error in encryption");
                  e.printStackTrace();
			   }

			   return key;

          }


 //*** mathod to take system date

      public static synchronized String getSystemDate()
		  {
			String sysDate=null;
			String datetime=null;
			Connection con=null;
			Statement stmnt=null;
			ResultSet rs=null;

			try
			{
			   con=getStateConnection();
		   	   stmnt = con.createStatement();
               String query ="Select  to_char(sysdate,'dd-mon-yyyy')  from dual";
			   rs = stmnt.executeQuery(query );
               int i=0;
			   if(rs.next())
                  sysDate = rs.getString(1);

			  }
		   catch(Exception e1)
			   {
                   e1.printStackTrace();
		           System.out.println("Exception is "+e1);
		       }
		   finally
			   {
                 try{
				       if(rs!=null)rs.close();
					   if(stmnt!=null)stmnt.close();
					   if(con!=null)con.close();
					}
					catch(Exception e2)
						{
							e2.printStackTrace();
					        System.out.println("Exception in closing "+e2);
		   	            }
                }

          return sysDate;
        }

// method to send the key to server

   private synchronized void sendKey(SecretKey key)
    		 {
		        try {
                        String secretKeyFileName="//"+serverUrl+"/"+serverRootDir+"/"+serverSubDir+"/SecretKey.txt";
						File file = new File( secretKeyFileName );
						if(file.exists())
                           file.delete();
						file.createNewFile();

						FileOutputStream ostream = new FileOutputStream( file );
						ObjectOutputStream p = new ObjectOutputStream(ostream);

						p.writeObject(key);

						p.flush();
						ostream.close();

					} catch (Exception exception)
						{
			 				System.out.println("sendKey()");
						     exception.printStackTrace();
		                }
	        }


 //*** method to obtain connection

    public static Connection getStateConnection()
		{

          Connection connection_extract=null;
		  try
			{
			   try
			   {
				  Class.forName(driverName).newInstance();
		       }
			   catch (IllegalAccessException illegalAccessException)
				  {
		             illegalAccessException.printStackTrace();
				  }
			   catch (InstantiationException instantiationException)
				   {
			           instantiationException.printStackTrace();
					}
			}
			catch (ClassNotFoundException e1)
				{
					System.out.println("Driver error");
					e1.printStackTrace();
				}
            try
            {
				connection_extract = DriverManager.getConnection(connectionURL, userName , password);
            }
			catch (SQLException sqlException)
				{
                   System.out.println("Unable to connect to tinxsys database");
                   sqlException.printStackTrace();
                }
          return connection_extract;
       }
	  public static void copyDirectory(File srcDir, File dstDir) throws IOException
		  {
	 			System.out.println("srcDir "+srcDir);
	 			System.out.println("dstDir "+dstDir);
				try
		  		   {

			           if (srcDir.isDirectory())
						   {
							 if (!dstDir.exists())
	                            dstDir.mkdir();

					         String[] children = srcDir.list();
			                 for (int i=0; i<children.length; i++)
								 {
				                     copyDirectory(new File(srcDir, children[i]),
	                                 new File(dstDir, children[i]));
	                             }
						   }
					   else
					     {
	                        copyFile(srcDir, dstDir);
						 }
				   }
				catch (Exception e)
				{
					e.printStackTrace();
				}
	      }

	    public static void copyFile(File src, File dst) throws IOException
			{
				InputStream in = new FileInputStream(src);
				OutputStream out = new FileOutputStream(dst);

	// Transfer bytes from in to out

		        byte[] buf = new byte[1024];
			    int len;
				while ((len = in.read(buf)) > 0)
					{
	                   out.write(buf, 0, len);
	                }
				in.close();
				out.close();
	        }


}

