package org.zhios.website.admin.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.zhios.website.admin.model.ConfFileOpt;
import org.zhios.website.admin.model.SysConfig;
import org.zhios.website.admin.model.UserManager;
import org.zhios.website.admin.pagelet.ErrorPL;
import org.zhios.website.admin.pagelet.PageLetObj;

/**
 * Servlet implementation class PageLetSubmitCtl
 */
@WebServlet("/PageLetSubmitCtl")
public class PageLetSubmitSL extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PageLetSubmitSL() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub		
		request.setCharacterEncoding("UTF-8");

		//check user.
		if(!UserManager.checkUser(request.getSession(false))){
			response.sendRedirect("error?id=err104");
			return;
		}

		String viewstr="";
		PageLetObj pagelet;
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
			DocumentBuilder builder = factory.newDocumentBuilder(); 
			Document doc = builder.parse(request.getInputStream());
			
			String style=doc.getElementsByTagName("style").item(0).getTextContent();
			String divid=doc.getElementsByTagName("divid").item(0).getTextContent();
			
			ConfFileOpt plconfig=new ConfFileOpt(SysConfig.ConfigPath+SysConfig.Language+"/pagelet.xml");
			String plstyle=plconfig.getNodeValue(style);
			if(!plstyle.isEmpty()){
				Class<?> tempclass = Class.forName(plstyle);
				Constructor<?> co = tempclass.getConstructor(String.class);
				pagelet=(PageLetObj)co.newInstance(divid);
			}
			else{
				pagelet=new ErrorPL();
			}
			
			viewstr=pagelet.getViewStr(doc);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		response.setContentType("text/html;charset=utf-8");  
		PrintWriter out = response.getWriter();
		out.println(viewstr);
		out.flush();
		out.close();
	}

}
