package us.deans.parrot;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

// import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import javax.sql.DataSource;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import us.deans.parrot.dataprovider.DataManager;

@WebServlet("/ParrotLoader")
public class ParrotLoader extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	private Logger logger = LogManager.getLogger(this.getClass());			// root logger
	private DataSource ds_cms;
	private DataSource ds_ref;
       
    public ParrotLoader() {
        super();
    }

	public void init() throws ServletException {
		
		super.init();
		
		logger.debug(">> Loading Parrot... (Parrot Pete saying 'Ello.')");
		

    	// get the configuration file through the servlet context.
		ServletContext ctx = null;
    	String configFile = "";
		try {
    		ctx = getServletContext();
    		configFile = ctx.getRealPath("/WEB-INF/parrot.properties"); 
    	} 
    	catch (Exception ex) {
    		ex.printStackTrace();
    	}

		// get an instance of the back-end data model, create a properties object, load it with the configuration and assign it to the data model. 
    	DataManager dm = DataManager.getInstance();
    	
    	Properties props = new Properties();
		
    	try {
    		props.load(new FileInputStream(configFile));
    	}
    	catch (IOException ex) {
    		ex.printStackTrace();
    	}
    	
    	// get data source through the initial context.
    	try {
    		Context initContext = new InitialContext();
    		Context envContext = (Context)initContext.lookup("java:comp/env");
    		ds_cms = (DataSource)envContext.lookup("jdbc/CMS1-WP1");
    		ds_ref = (DataSource)envContext.lookup("jdbc/REF1-WP1");
    	} 
    	catch (NamingException e) {
    		e.printStackTrace();
    	}   
    	
    	dm.setDataSource_CMS(ds_cms);
    	dm.setDataSource_REF(ds_ref);
    	
    	
    	this.getServletConfig().getServletContext().setAttribute("data_model", dm);
    	
		
	}


}
