/*
	게시물을 list 를 보여줄때....
*/

import java.io.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.etri.groupware.*;
import com.etri.groupware.bbs.*;

public class BBSFirstServlet extends HttpServlet
{
	GroupwareControllerInterface groupwareController=null;
	BBSControllerInterface bbsController = null;
	Properties pro=null;
	
	public void init(ServletConfig sc) throws ServletException
	{
		super.init(sc);
		
		//그룹웨어 컨트롤러를 생성한다. 먼저 프라퍼티를 생성한다.
		pro = new Properties();
		
		//DB매너저 구현 클래스 이름 설정
		pro.put("OrganizationDBManagerClassName", "PandaSoftOrganizationDBManager");
		pro.put("BBSDBManagerClassName", "PandaSoftBBSDBManager");
		pro.put("EDADBManagerClassName", "PandaSoftEDADBManager");
		pro.put("MailDBManagerClassName", "PandaSoftMailDBManger");
		
		try
		{
			groupwareController = GroupwareController.init( pro );
			System.out.println("그룹웨어 컨트롤러 생성을 마쳤습니다.");
			
			//게시판 관리 컨트롤러를 가져온다.
			bbsController = groupwareController.createBBSController();
			System.out.println("게시판 컨트롤러 생성도 무사히 마쳤습니다.");
		}
		catch(Exception e)
		{}
	}

	public void destroy()
	{
		super.destroy();
		DBConnectionManager.instance.release();
		System.out.println("destory 끝...");
	}
	
	/*----------------------------------------------------------------- */
	/**
	 [메소드이름]: doGet<br>
	 [기능]: 사용자별로 새게시물과 키워드검색 결과를 보여주는 서블릿<br>
	 [파라미터]: HttpServletRequest req, HttpServletResponse res<br>
	 [호출자] : 사용자<br>
	 */
	/*--------------------------------------------------------------- */		
	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException
	{		      
		
		// session 확인하는곳....		
		HttpSession session = req.getSession(true);
		
		boolean authentication = false ;
		String kind = null ;
		String id = null ;
		String name = null ;
		String team = null;
		String department = null;
		
		if ((session.isNew()))
		{
			session.invalidate();
			res.sendRedirect("../Login.html");
		}
	    else if(session.getValue("Authentication").equals("true")){
	    	authentication = true;
            kind = (String)session.getValue("Kind");
            id = (String)session.getValue("Id");
            name = (String)session.getValue("Name");          
            team = (String)session.getValue("Team");
            department = (String)session.getValue("Department");
       }
       else {
            session.invalidate();
            res.sendRedirect("../Login.html");
       }
	   // session 확인 끝!!!
	   	   
	   try
	   {
	   		OptionProperty option=null;		// 개인의 option property
			
			//해당 id에 맞는 option property를 가져와서 넘긴다.
			//그런데 어떤 게시판인지를 지정해줘야 합니다.					
			option = bbsController.getPersonalOption( id );	
						
			res.setContentType("text/html;charset=euc-kr");
			// 캐쉬를 못하도록..
			res.setHeader("cache-control", "no-cache");			
			PrintWriter out =new PrintWriter(new OutputStreamWriter( res.getOutputStream(),"EUC-KR"));
			
			if ( option == null )
			{
				out.println("<html><head><title> 게시판 </title></head>");		
				out.println("<basefont size=2>");
				out.println( "<body bgcolor=white text=\"#0000FF\" link=\"#0000FF\" alink=\"#FF2020\" vlink=\"#000000\">" ) ;
				
				// 게시판 우측에 들어가는 이미지...
				out.println("<p align=right><img src='../image/우측_게시판.gif'></p>");
				
				out.println("<p align=center>"+ name + " 님의 게시판 Option이 설정되어 있지 않습니다.<br><br>");
				out.println( " 게시판 Option을 설정하여 주십시요.<br><br>");
				out.println("<a href=\"/servlet/BBSOptionPropertyServlet\">Option 설정하기</a><br></p>");
				out.println("</body></html>");
				out.close();
			}
			else			
			{
				// 사용자의 부서게시판, 팀게시판, 동아리 게시판의 새로운 게시물수 체크, 
				String companyBoard ="", departmentBoard ="",  teamBoard = "", clubBoard = "";			
				String[][][] bbsTree= bbsController.getBBStree ( ) ;			
				String[] club= bbsController.getClub( id );
				
				for ( int o=0 ; !(bbsTree[o][0][0].equals("null")) ; o++ ) 
				{
					for ( int p=1 ; !(bbsTree[o][p][0].equals("null") ) ; p++)
					{
						for ( int q=1; !(bbsTree[o][p][q].equals("null" ) ) ; q++)
						{
							if ( "회사".equals( bbsTree[o][0][0] ) && p==1)
							{	
								// 회사 전체 게시판   === > 전사원
								companyBoard = companyBoard + bbsTree[o][p][q] + ";";
							}
							else if ( department.equals( bbsTree[o][0][0] ) )
							{
								if ( bbsTree[o][p][0].equals("팀")  )
								{	
									// 부서 게시판... 
									departmentBoard = departmentBoard + bbsTree[o][p][q] + ";";
								}
								else if(bbsTree[o][p][0].equals( team ) || team.equals( "null") )
								{
									// 팀 게시판...
									teamBoard = teamBoard + bbsTree[o][p][q] + ";";
								}					
							}
							else if ( bbsTree[o][0][0].equals("동아리") && p==1)
							{
								// 동아리 게시판							
								if ( club != null )
								{
									String clubName = bbsTree[o][p][q].substring(4);
									System.out.println( "게시판은 " + clubName );
									for (int no=0; no < club.length; no++)
									{												
										if ( clubName.equals( club[no] ) ) 
											clubBoard = clubBoard + bbsTree[o][p][q] + ";";
										System.out.println( "동아리[ " + no + " ] = " + club[no]);
									}								
								}		// 동아리가 있을때			
												
							 }	
							 
						}		// q = > end
					}		// p => end
				}		// o => end	
				
				int companyStateNo=0, departmentStateNo=0,  teamStateNo=0, clubStateNo = 0;
				int companyKeyNo=0, departmentKeyNo=0, teamKeyNo=0, clubKeyNo = 0;
				
				// 회사게시판
				for ( int i=0; i < companyBoard.length() ; )
				{
					int no = companyBoard.indexOf(";", i);
					String boardName = companyBoard.substring( i, no );
					Item[] list = bbsController.listItem( boardName, option );
					
					// 새게시물이 몇개있는지.. => 미개봉 게시물...
					if ( list.length > 1)
					{
						for ( int j=1; j < list.length ; j++)
						{
							BBSResultStatus bbsResult = bbsController.checkDocumentOpen( id, list[j].getNumber() );
							if ( bbsResult.getResultStatus() != 0 )
								companyStateNo = companyStateNo + 1;
						}
					}
					
					// 키워드 검색 게시물이 몇개 있는지... 				
					if ( option.getTitle().equals("null") && option.getAuthor().equals("null") && option.getContent().equals("null") )
					{
						System.out.println("회사 : 검색 기능이 지정되지 않았습니다.");				
					}
					else
					{
						String keywordTitle = null, keywordAuthor = null, keywordContent = null;
						if ( !option.getTitle().equals("null") )		keywordTitle = option.getTitle();
						if ( !option.getAuthor().equals("null") )		keywordAuthor = option.getAuthor();
						if ( !option.getContent().equals("null") )		keywordContent = option.getContent();
						
						SearchProperty keyword = 	new SearchProperty( keywordTitle, keywordAuthor, keywordContent );
						Item[] keywordList = bbsController.searchItems( boardName, keyword, option);	
						
						companyKeyNo = companyKeyNo + keywordList.length - 1;		
					}
					i = ++no;
				}	
	
				// 부서게시판
				for ( int i=0; i < departmentBoard.length() ; )
				{
					int no = departmentBoard.indexOf(";", i);
					String boardName = departmentBoard.substring( i, no );
					Item[] list = bbsController.listItem( boardName, option );
					
					// 새게시물이 몇개있는지.. => 미개봉 게시물...
					if ( list.length > 1)
					{
						for ( int j=1; j < list.length ; j++)
						{
							BBSResultStatus bbsResult = bbsController.checkDocumentOpen( id, list[j].getNumber() );
							if ( bbsResult.getResultStatus() != 0 )
								departmentStateNo = departmentStateNo + 1;
						}
					}
					
					// 키워드 검색 게시물이 몇개 있는지... 
					if ( option.getTitle().equals("null") && option.getAuthor().equals("null") && option.getContent().equals("null") )
					{
						System.out.println("부서 : 검색 기능이 지정되지 않았습니다.");				
					}
					else
					{
						String keywordTitle = null, keywordAuthor = null, keywordContent = null;
						if ( !option.getTitle().equals("null") )		keywordTitle = option.getTitle();
						if ( !option.getAuthor().equals("null") )		keywordAuthor = option.getAuthor();
						if ( !option.getContent().equals("null") )		keywordContent = option.getContent();
						
						SearchProperty keyword = 	new SearchProperty( keywordTitle, keywordAuthor, keywordContent );
						Item[] keywordList = bbsController.searchItems( boardName, keyword, option);	
						
						departmentKeyNo = departmentKeyNo + keywordList.length - 1;		
					}	
					i = ++no;
				}	
				
				// 팀게시판에 새게시물이 몇개 있는지
				for ( int i=0; i < teamBoard.length() ; )
				{
					int no = teamBoard.indexOf(";", i);
					String boardName = teamBoard.substring( i, no );
					Item[] list = bbsController.listItem( boardName, option );
					
					// 새게시물이 몇개있는지.. => 미개봉 게시물...
					if ( list.length > 1)
					{
						for ( int j=1; j < list.length ; j++)
						{
							BBSResultStatus bbsResult = bbsController.checkDocumentOpen( id, list[j].getNumber() );
							if ( bbsResult.getResultStatus() != 0 )
								teamStateNo = teamStateNo + 1;
						}
					}
					
					// 키워드 검색 게시물이 몇개 있는지... 				
					if ( option.getTitle().equals("null") && option.getAuthor().equals("null") && option.getContent().equals("null") )
					{
						System.out.println("팀 : 검색 기능이 지정되지 않았습니다.");				
					}
					else
					{
						String keywordTitle = null, keywordAuthor = null, keywordContent = null;
						if ( !option.getTitle().equals("null") )		keywordTitle = option.getTitle();
						if ( !option.getAuthor().equals("null") )		keywordAuthor = option.getAuthor();
						if ( !option.getContent().equals("null") )		keywordContent = option.getContent();
						
						SearchProperty keyword = 	new SearchProperty( keywordTitle, keywordAuthor, keywordContent );
						Item[] keywordList = bbsController.searchItems( boardName, keyword, option);	
						
						teamKeyNo = teamKeyNo + keywordList.length - 1;		
					}	
					i = ++no;
				}
				System.out.println("팀 게시판의 새게시물은 " + teamStateNo + ", 검색 게시물은 " + teamKeyNo );
				
				
				// 동아리 게시판에 새게시물이 몇개있는지... 
				for ( int i=0; i < clubBoard.length() ; )
				{
					int no = clubBoard.indexOf(";", i);
					String boardName = clubBoard.substring( i, no );
					Item[] list = bbsController.listItem( boardName, option );
					
					// 새게시물이 몇개있는지.. => 미개봉 게시물...
					if ( list.length > 1 )
					{
						for ( int j=1; j < list.length ; j++)
						{
							BBSResultStatus bbsResult = bbsController.checkDocumentOpen( id, list[j].getNumber() );
							if ( bbsResult.getResultStatus() != 0 )
								clubStateNo = clubStateNo + 1;
						}
					}
					
					// 키워드 검색 게시물이 몇개 있는지... 				
					if ( option.getTitle().equals("null") && option.getAuthor().equals("null") && option.getContent().equals("null") )
					{
						System.out.println("검색 기능이 지정되지 않았습니다.");				
					}
					else
					{
						String keywordTitle = null, keywordAuthor = null, keywordContent = null;
						if ( !option.getTitle().equals("null") )		keywordTitle = option.getTitle();
						if ( !option.getAuthor().equals("null") )		keywordAuthor = option.getAuthor();
						if ( !option.getContent().equals("null") )		keywordContent = option.getContent();
						
						SearchProperty keyword = 	new SearchProperty( keywordTitle, keywordAuthor, keywordContent );
						Item[] keywordList = bbsController.searchItems( boardName, keyword, option);	
						
						clubKeyNo = clubKeyNo + keywordList.length - 1;		
					}	
					i = ++no;
				}
				
				// 전체 합계
				int totalStateNo = companyStateNo + departmentStateNo + teamStateNo + clubStateNo;
				int totalKeyNo = companyKeyNo + departmentKeyNo + teamKeyNo + clubKeyNo;
				
				Calendar today = Calendar.getInstance();
				String date = today.get(Calendar.YEAR) + " 년 " + (today.get(Calendar.MONTH)+1)  + " 월 " + today.get(Calendar.DAY_OF_MONTH) + " 일";
	
				out.println("<html><head><title> 게시판 </title></head>");		
				out.println("<basefont size=2>");
				out.println( "<body bgcolor=white  text=\"#0000FF\" link=\"#0000FF\" alink=\"#FF2020\" vlink=\"#000000\">" ) ;		
				
				// 게시판 우측에 들어가는 이미지...
				out.println("<p align=right><img src='../image/우측_게시판.gif'></p>");				
								
				out.println(" <table width=350 align=center>");				
				out.println("<tr><td><hr width=350 align=left></td></tr>");

				out.println("<tr><td align=left background='/image/BBS_back01.jpg'><font size=2 color=brown>");
				if ( totalStateNo > 0 )
				{
					out.println( "<br><img src='/image/BBS_Paw_rd.gif'><br><b>&nbsp;&nbsp;&nbsp;&nbsp;새로등록된 게시물이 총 "+ totalStateNo +" 개</b><br><br>");
					out.println("&nbsp;&nbsp;회사 게시판 " + companyStateNo + " 개 등록 <br><br>");
					out.println("&nbsp;&nbsp;부서 게시판 " + departmentStateNo + " 개 등록 <br><br>");
					out.println("&nbsp;&nbsp;팀  게시판 " + teamStateNo + " 개 등록 <br><br>");
					out.println("&nbsp;&nbsp;동아리  게시판 " + clubStateNo + " 개 등록 <br><br>");
				}
				else
				{
					out.println("<br><img src='/image/BBS_Paw_rd.gif'><br><b>&nbsp;&nbsp;&nbsp;&nbsp;새로등록된 게시물이 없습니다.</b><br><br>");
					out.println(" 첫 게시판으로 이동하시려면 <a href='/servlet/BBSListServlet?boardName="+option.getFirstBoard() 
						+ "'> 여기 </a>를 선택하세요.<br><br>");
				}
				out.println("</font></td></tr>");
				
				out.println("<tr><td><hr width=350 align=left></td></tr>");
				
				out.println("<tr><td align=left background='/image/BBS_back02.gif'><font size=2 color=brown>");
				if ( option.getTitle().equals("null") && option.getAuthor().equals("null") && option.getContent().equals("null") )
				{
					out.println( "<br><img src='/image/BBS_Leaf_c.gif'><br><b>&nbsp;&nbsp;&nbsp;&nbsp;Option의 키워드 검색이 설정되어 있지 않습니다.</b><br><br>");
				}
				else if ( totalKeyNo > 0)
				{
					out.println("<br><img src='/image/BBS_Leaf_c.gif'><br><b>&nbsp;&nbsp;&nbsp;&nbsp;Option의 키워드로 검색된 게시물이 총 "+ totalKeyNo +" 개 </b><br><br>");
					out.println("&nbsp;&nbsp;회사  게시판 " + companyKeyNo + " 개 등록 <br><br>");
					out.println("&nbsp;&nbsp;부서  게시판  " + departmentKeyNo + " 개 등록 <br><br>");
					out.println("&nbsp;&nbsp;팀   게시판 " + teamKeyNo + " 개 등록 <br><br>");	
					out.println("&nbsp;&nbsp;동아리  게시판 " + clubKeyNo + " 개 등록 <br><br>");
				}
				else
				{
					out.println( "<br><img src='/image/BBS_Leaf_c.gif'><br><b>&nbsp;&nbsp;&nbsp;&nbsp;Option의 키워드로 검색된 게시물이 없습니다.</b><br><br>");
				}
				out.println("</font></td></tr>");
				
				out.println("<tr><td><hr width=350 align=left></td></tr>");				
				out.println("</table>");
	
				out.println("</body></html>");
				out.close();
			}

		}
		catch (Exception e)
		{
			System.out.println("====> BBSFirstServlet");
			System.out.println( e.toString() );
		}

	}	
	
}