
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.sql.*;
import java.sql.Date;
import java.util.StringTokenizer;
import javax.servlet.*;
import javax.servlet.http.*;
//import jsky.coords.*;
import java.awt.geom.*;
import net.alanmaxwell.html.HTMLStrings;

import net.alanmaxwell.sql.SQLServerInfoJDBC;
import net.alanmaxwell.sql.SixSQLRetrieverThread;
import net.alanmaxwell.sql.SQLRetrieverThread6dF;
import net.mar.SQLRadial;
import net.mar.SQLMenu;
import net.mar.AnException;


public class UPDATECLASS extends HttpServlet {  // 1
  private int serviceCurrent = 0;
  private int serviceTotal = 0;

  static {

      try {
         // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          Class.forName("net.sourceforge.jtds.jdbc.Driver");
      } catch (ClassNotFoundException e) {
     System.out.println(e);
        }
        
  }
  // Access methods for service counter...
  protected synchronized void enteringServiceMethod() { //2
    serviceCurrent++;
    serviceTotal++;
  };

  protected synchronized void leavingServiceMethod() { //3
    serviceCurrent--;
  };

  protected synchronized int getServiceCurrent() { //4
    return serviceCurrent;
  };

  protected synchronized int getServiceTotal() { //5
    return serviceTotal;
  };

  private boolean shuttingDown = false;

  // Access methods for the shuttingDown flag...
  protected synchronized void setShuttingDown(boolean flag) { //6
    shuttingDown = flag;
  };

  protected synchronized boolean isShuttingDown() { //7
    return shuttingDown;
  };


  private String dirName;
  private String tmpWeb;
  public void init(ServletConfig config) throws ServletException {
    super.init(config);

  }

  // Override the service method to update the serviceCounter...
  protected void service(HttpServletRequest req,
                         HttpServletResponse resp)
                         throws ServletException,IOException {

    enteringServiceMethod();

    try
    {
      super.service(req, resp);
    }
    finally
    {
      leavingServiceMethod();
    } ;
  }; // end of service

 static String DBURL ="jdbc:jtds:sqlserver://thutmose:1433/SIXDF_DR3;user=userAdmin;password=userAdminpw";
 static String UPDATESTRING = "insert into galClass (showclass,cCode,fCode,pCode,name,notes,dateAdded,specid,sCode,zCode) values(?,?,?,?,?,?,?,?,?,?)";
 static String filepath ="/data/6dFGS/dr3_fits/class/";
 static String [] COLUMNS={"showclass","cCode","fCode","pCode","sCode","zCode","name","notes","specid"};
 private String getDateTime() {
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     java.util.Date date = new java.util.Date();
     return dateFormat.format(date);
 }  
 
 private static synchronized String  SAVEPROPS(Properties p, String targetname,String user) throws IOException{
     OutputStream propsFile;
     String filename=filepath+targetname.substring(1,3)+"/"+targetname+"_"+user+".props";
         propsFile = new FileOutputStream(filename);
         p.store(propsFile,null);
         propsFile.close();
         return filename;

} 

  protected void doGet(HttpServletRequest req, HttpServletResponse res)
                 throws ServletException, IOException {
      Connection conn=null;
      PrintWriter out=res.getWriter();
    try {
        conn = DriverManager.getConnection(DBURL);
    
      PreparedStatement pstmt = null;
      String name="";
      String targetname="";
      String dateAdded=getDateTime();
      String notes="";
      String cCode="0";
      String zCode="0";
      String fCode="1";
      String pCode="1";
      String sCode="1";
      String specid="0";
      
      if (req.getParameter("targetname") != null){
          targetname=req.getParameter("targetname");
      }
      if (req.getParameter("specid") != null){
          specid=req.getParameter("specid");
      }
      if (req.getParameter("cCode") != null){
          cCode=req.getParameter("cCode");
      }
      if (req.getParameter("sCode") != null){
          sCode=req.getParameter("sCode");
      }
      if (req.getParameter("zCode") != null){
          zCode=req.getParameter("zCode");
      }
      if (req.getParameter("fCode") != null){
          fCode=req.getParameter("fCode");
      }
      if (req.getParameter("pCode") != null){
          pCode=req.getParameter("pCode");
      }
      if (req.getParameter("name") != null){
          name=req.getParameter("name");
      }
      if (req.getParameter("notes") != null){
          notes=req.getParameter("notes");
      }
      pstmt = conn.prepareStatement(UPDATESTRING); // create a statement
      pstmt.setString(1, targetname); // set input parameter 1
      pstmt.setString(2, cCode); // set input parameter 2
      pstmt.setString(3, fCode); // set input parameter 2
      pstmt.setString(4, pCode); // set input parameter 2
      pstmt.setString(5, name); // set input parameter 3
      pstmt.setString(6, notes); // set input parameter 3
      pstmt.setString(7, dateAdded); // set input parameter 3
      pstmt.setString(8, specid); // set input parameter 3
      pstmt.setString(9, sCode);
      pstmt.setString(10, zCode);
      int rows =pstmt.executeUpdate(); // execute insert statement
      out.print(rows+" database row(s) updated for "+targetname);
      out.flush();
      res.flushBuffer();
      if (rows==1) {
          Properties tempProp = new Properties();
          tempProp.setProperty("targetname", targetname);
          tempProp.setProperty("cCode", cCode);
          tempProp.setProperty("fCode", fCode);
          tempProp.setProperty("pCode", pCode);
          tempProp.setProperty("name", name);
          tempProp.setProperty("notes", notes);
          tempProp.setProperty("dateAdded", dateAdded);
          tempProp.setProperty("specid", specid);
          tempProp.setProperty("sCode", sCode);
          tempProp.setProperty("zCode", zCode);
          out.print("<!-- "+SAVEPROPS(tempProp,targetname,name.toUpperCase())+" -->");
          
          out.print("<!-- "+rows+" rows saved to file -->");
      }
      
      
      pstmt.close();
      conn.close();
      conn=null;
    } catch (SQLException e) {
       out.print("ERROR: No records saved to database: SQL error: "+e);
    }
    catch (IOException ioe) {
        out.print("ERROR: No records saved to file: "+ioe);
     }
 
    finally {
        if (conn !=null) {
        try {
            conn.close();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        }
    }

  }; // END of doGet()

  protected void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
  {
    // Data received by an HTTP POST is handled the same way
    // as data sent with a HTTP GET request... simply pass on to above...
    doGet(req, res);
  }; // END of doPost()

  public String getServletInfo() {
    return "SQLGet v1.20 by Alan Maxwell";
  }; // END of getServletInfo()
};
