view src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/OrigRefRedirector.java @ 2:ffeb8be0bded

minor bugs / logging lib added
author dwinter
date Mon, 13 Dec 2010 11:13:02 +0100
parents 1aac45997235
children 498b68667ff3
line wrap: on
line source

package de.mpiwg.itgroup.escidoc.MPIWGServices.Restlet.services.redirect;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamSource;

import org.apache.http.HttpResponse;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.transform.JDOMResult;
import org.jdom.transform.JDOMSource;
import org.jdom.xpath.XPath;
import org.restlet.data.Form;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;

import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler;
import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools;
import de.mpiwg.itgroup.eSciDoc.echoObjects.ECHORessource;


public class OrigRefRedirector extends ServerResource{

	private String eScidocServer;
	private String eScidocPort;

	private String eScidocUser;
	private String eScidocUserPW;
	public OrigRefRedirector() throws IOException{
		InputStream is = getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/config/eScidocServer.config");
		Properties prop = new Properties();
		prop.load(is);
		eScidocServer= (String)prop.get("eScidocServer");
		eScidocPort=(String)prop.get("eScidocPort");
		eScidocUser=(String)prop.get("eScidocUser");
		eScidocUserPW=(String)prop.get("eScidocUserPW");
		
	}
	@Get("html")
	public Representation getHtml() throws JDOMException, IOException, TransformerFactoryConfigurationError, TransformerException
	{
		
		Form form =  getRequest().getResourceRef().getQueryAsForm();
	
		String mode=form.getValues("mode"); //xml or html default is html
		if(mode==null || mode.equals(""))
			mode="xml";
		
		String id = (String)getRequest().getAttributes().get("escidocId");
		EScidocBasicHandler handler = null;
		if (getContext().getAttributes().containsKey("escidocHandler")){
			handler = (EScidocBasicHandler) getContext().getAttributes().get("escidocHandler");
		}
		
		if (handler==null){
			handler = new EScidocBasicHandler(eScidocServer, Integer.valueOf(eScidocPort),eScidocUser,eScidocUserPW);
		}
		
		
		HttpResponse resp;
		try {
			resp = handler.eScidocGet("/ir/item/"+id);
		} catch (IOException e) {
			setStatus(Status.SERVER_ERROR_INTERNAL);
			return new StringRepresentation("<html><body>error1</body></html>");
		}
		int code = resp.getStatusLine().getStatusCode();
		if (code!=200){
			setStatus(new Status(code));
			return new StringRepresentation("<html><body>error2</body></html>");
			
		}
		
		Document doc;
		String path;
		try {
			doc = new SAXBuilder().build(resp.getEntity().getContent());
	
	
		XPath xp= EScidocTools.getESciDocXpath("//metadataRecords:md-record[@xlink:title='mpiwg-admin']/mpiwg:admin/mpiwg:orig-ref/@xlink:href");
		Attribute item = (Attribute)xp.selectSingleNode(doc);	
		path = item.getValue();
		} catch (Exception e) {
			setStatus(Status.SERVER_ERROR_INTERNAL);
			return new StringRepresentation("<html><body>error3</body></html>");
		}
		
		if(mode.equals("xml"))
		{
		StringRepresentation repr = new StringRepresentation(path);
		getResponse().redirectPermanent(path);
		return repr;
		} else if (mode.equals("html")){
			Document indexMeta = new SAXBuilder().build(path);
			InputStream xslt= getClass().getResourceAsStream("/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/staticPages/formatIndexMeta.xsl");
			//Document styleDoc =  new SAXBuilder().build(xslt);
			
			 Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslt));
			 JDOMSource inxml = new JDOMSource(indexMeta);
			 JDOMResult out = new JDOMResult();
			 transformer.transform(inxml, out);
			 //logger.debug(printXML(doc));
			
			 Document docresult = out.getDocument();
			 return new StringRepresentation(printXML(docresult),MediaType.TEXT_HTML);
		} else {
			setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
			return new StringRepresentation("<html><body>wrong value for parameter mode, only html or xml allowed.</body></html>");
		}
	}
	
		public String printXML(Document dom) throws IOException{
		 	XMLOutputter out = new XMLOutputter();
		 	
		 	String string = out.outputString(dom);
		 	return string;
	}
}