package com.picdiary.rdf.servlet;

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

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

import com.hp.hpl.mesa.rdf.jena.*;
import com.hp.hpl.mesa.rdf.jena.vocabulary.*;
import com.hp.hpl.mesa.rdf.jena.model.*;
import com.hp.hpl.mesa.rdf.jena.common.*;
import com.hp.hpl.mesa.rdf.jena.mem.ModelMem;
import com.hp.hpl.jena.rdf.query.*;

public class Posts extends HttpServlet {
	protected String RDFDIR = "/home/mattb/public_html/mt/archives/";
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		try {
            Model model = new ModelMem();
            String[] files = new File(RDFDIR).list(
					new FilenameFilter() {
						public boolean accept(File dir,String name) {
							return name.endsWith(".rdf");
						}
					}
					);
            for(int i = 0; i<files.length; i++) {
                model.read("file:"+RDFDIR+files[i]);
            }
			if(request.getParameter("augment") != null) {
				Property subject = model.createProperty("http://purl.org/dc/elements/1.1/subject");
				Property inSubject = model.createProperty("http://www.picdiary.com/ns/subjectOf");
				StmtIterator iter = model.listStatements(new SelectorImpl(null, subject, (RDFNode) null));
				for(; iter.hasNext(); ) {
					Statement s = iter.next();
					((Resource)s.getObject()).addProperty(inSubject,s.getSubject());
				}
			}
			response.setContentType("text/xml");
			RDFWriter writer = model.getWriter("RDF/XML-ABBREV");
			writer.setNsPrefix("foaf","http://xmlns.com/foaf/0.1/");
			writer.setNsPrefix("wot","http://xmlns.com/wot/0.1/");
			writer.setNsPrefix("dc","http://purl.org/dc/elements/1.1/");
			writer.setNsPrefix("p","http://www.usefulinc.com/picdiary/");
			writer.write(model,response.getWriter(),"RDF/XML-ABBREV");
        } catch(Exception e) {
            throw new ServletException(e);
        }
    }
}
