import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

/**
 * 「オリジナルレシピ投稿掲示板プログラム」
 *  レシピ投稿サーブレット
 */
public class ToukouServlet extends HttpServlet {
  
  //レシピを保存するファイルのパス
  private String recipeFilePath = "C:/WebTechs/tomcat4.0.1/webapps/okusama2/text/recipes.txt";
  
  /**
   *  レシピの投稿を受け付ける
   *  (投稿には、HTTP POSTメソッドを用いる)
   */
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {    
    
    //***** 投稿者がログインしているかを調べる *****
    
    HttpSession session = request.getSession(false);//セッションを取得
    
    //ログインしてなかった場合、エラーページを作成する
    if(session == null){
      createErrorPage(response);
      return;//ここで、メソッドを終了する
    }
    
    //***** レシピの投稿を受け付ける *****
    
    //セッションとHTTPリクエストのパラメータから、レシピを構成する情報を取り出す
    String contributor = (String)session.getAttribute("name");//セッションからログインしたユーザ名を取り出し、それを投稿者とする
    String title = request.getParameter("title"); //タイトル
    String content = request.getParameter("content"); //レシピ内容
    
    //日本語コードを正しい形に変換する
    title = convertToUnicode(title);
    content = convertToUnicode(content);
    
    //投稿された時刻を取得する
    String date = (new java.util.Date()).toString();
    
    
    //***** 受け付けたレシピをファイルに書き込む *****
    
    //改行を正しい形に変換する
    //(改行コードが含まれると、書き込んだ際、1行に収まらなくなってしまう)
    //contributor = convertReturnCode(contributor);
    title = convertReturnCode(title);
    content = convertReturnCode(content);
    
    //ファイルに書き込むためのストリームを作成する
    BufferedWriter writer = new BufferedWriter( new FileWriter(recipeFilePath, true) ); //このtrueはファイルへの追記を意味する
    
    //レシピを、contributor, title, date, content の順で書き込む
    writer.write(contributor);
    writer.newLine();
    writer.write(title);
    writer.newLine();
    writer.write(date);
    writer.newLine();
    writer.write(content);
    writer.newLine();
    
    //ストリームを閉じる
    writer.close();
    
    
    //***** 感謝のメッセージのHTMLを出力する *****
    //結果を出力するための準備
    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    
    //感謝のHTMLを出力する
    out.println("<html>");
    out.println("<head><title>ありがとうございました。</title></head>");
    out.println("<body bgcolor='#33CCFF' text='#000000'>");
    out.println("<font size='big'><b>投稿ありがとうございました。");
    out.println("<br>おいしい料理ができたら、また教えてくださいね☆</b></font><br><br>");
    out.println("[ <a href=\"IchiranServlet\">レシピ一覧画面へ</a> ]");
    out.println("</body>");
    out.println("</html>");
    
    //HTML出力のあとかたづけをする
    out.close();
  }
  
  /**
   *投稿者がログインしていなかった場合の処理
   */
  public void createErrorPage(HttpServletResponse response)throws IOException{
    //結果を出力するための準備
    response.setContentType("text/html; charset=shift_jis");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>奥様Web-再ログイン</title>");
    out.println("</head>");
    out.println("<body bgcolor=\"#33CCFF\">");
    out.println("<h1>再ログインしてください</h1>");
    out.println("<p><a href=\"../html/login.html\">ログインページへ</a></p>");
    out.println("</body>");
    out.println("</html>");
  }
  /**
   *  日本語コードを正しい形に変換する
   */
  private String convertToUnicode(String s) throws UnsupportedEncodingException {
    return new String(s.getBytes("8859_1"),"JISAutoDetect");
  }
  
  /**
   *  改行を正しい形に変換する
   */
  private String convertReturnCode(String s) {
    StringTokenizer tokenizer = new StringTokenizer(s, "\n\r");
    String outStr = new String();
    
    while( tokenizer.hasMoreTokens() ) {
      outStr += tokenizer.nextToken();
      if( tokenizer.hasMoreTokens() ){
        outStr += "<BR>";
      }
    }
    
    return outStr;
  }
}
