/* $Id: GlanceExport.java,v 1.1 2003/04/19 05:09:56 ryanlee Exp $
 */

import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

import com.hp.hpl.mesa.rdf.jena.common.*;
import com.hp.hpl.mesa.rdf.jena.mem.ModelMem;
import com.hp.hpl.mesa.rdf.jena.model.*;
import com.hp.hpl.mesa.rdf.jena.vocabulary.RDF;
import com.hp.hpl.mesa.rdf.jena.vocabulary.RSS;

import vocabulary.DC;
import vocabulary.GLANCE;

import util.Base64Decoder;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

public class GlanceExport extends HttpServlet {
    ResourceBundle rb = ResourceBundle.getBundle("LocalStrings");
    PrintWriter out = null;

    public void init(ServletConfig config)
	throws ServletException {
	super.init(config);
    }

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response) 
	throws IOException, ServletException  {
	
	// get the users session
	HttpSession session = request.getSession();
	
	// get the model stored in the session
	Model glance = (Model) session.getAttribute("model");
	Model personal = (Model) session.getAttribute("personal");
	int custom = 0;
	
	// get authentication information
	String auth = request.getHeader("Authorization");
	
	// if no auth, then challenge for authorization
	if (auth == null) {
	    response.sendError(response.SC_UNAUTHORIZED);
	    return;
	}

	String userpassEncoded = auth.substring(6);
	String userpassDecoded = Base64Decoder.decode(userpassEncoded);
	String user = null;
	user = GlanceAuth.getUsername(userpassDecoded);
	String authuri = rb.getString("glance.authuri");

	// if no user in URI, then redirect
	if (request.getParameter("user") == null) {
	    Enumeration params = request.getParameterNames();
	    String finaluri = authuri + "?user=" + user;
	    String pName;
	    String [] pValue;
	    while(params.hasMoreElements()) {
		pName  = (String) params.nextElement();
		pValue = request.getParameterValues(pName);
		for (int j = 0; j < pValue.length; j++) {
		    finaluri += "&" + pName + "=" + URLEncoder.encode(pValue[j]);
		}
	    }
	    response.sendRedirect(finaluri);
	    return;
	}
	
	// don't cache the output
	response.setHeader("Cache-Control", "no-cache");

	// get output
        out = response.getWriter();
	
	// set the actual thing being printed to be one or the other
	if (personal != null) {
	    custom = 1;
	} else if (glance == null) {
	    // if no model exisits, create one
	    glance = new ModelMem();
	    
	    // configure base model
	    String configuri = rb.getString("glance.configuri");
	    
	    try {
		Glance.readFeed(glance, configuri, auth);
	    } catch (Exception e) {
		System.out.println(e);
	    }
       	}

	// load member feeds
	String configmemberuri = rb.getString("glance.configmemberuri");
	
	try {
	    Glance.readFeed(glance, configmemberuri, auth);
	} catch (Exception e) {
	    System.out.println(e);
	}
	    
	// load team feeds if appropriate
	String configteamuri = rb.getString("glance.configteamuri");
	
	try {
	    Glance.readFeed(glance, configteamuri, auth);
	} catch (Exception e) {
	    System.out.println(e);
	}
	
	// save model
	session.setAttribute("model", glance);
		
	try {
	    response.setContentType("text/xml");
	    
	    if (custom == 1) {
		personal.write(out);
	    } else {
		glance.write(out);
	    }
	} catch (Exception e) {
	    System.out.println(e);
	}
	out.close();
    }
    
    public void doPost(HttpServletRequest request,
		       HttpServletResponse response)
	throws IOException, ServletException {
        doGet(request, response);
    }
}
