view src/de/mpiwg/itgroup/escidoc/MPIWGServices/Restlet/services/redirect/DigilibRedirector.java @ 0:1aac45997235

first ingest
author dwinter
date Wed, 01 Dec 2010 17:35:51 +0100
parents
children
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 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.xpath.XPath;
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 DigilibRedirector extends ServerResource{

	private String eScidocServer;
	private String eScidocPort;
	private String digilibPath;
	private String eScidocUser;
	private String eScidocUserPW;
	public DigilibRedirector() 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");
		digilibPath=(String)prop.get("digilibPath");
		eScidocUser=(String)prop.get("eScidocUser");
		eScidocUserPW=(String)prop.get("eScidocUserPW");
		
	}
	@Get("html")
	public Representation getHtml()
	{
		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:imageFolder");
		Element item = (Element)xp.selectSingleNode(doc);	
		path = item.getTextTrim();
		path= ECHORessource.correct(path); // nur pfad nach online
		} catch (Exception e) {
			setStatus(Status.SERVER_ERROR_INTERNAL);
			return new StringRepresentation("<html><body>error3</body></html>");
		}
		
		
		StringRepresentation repr = new StringRepresentation(digilibPath+path);
		getResponse().redirectPermanent(digilibPath+path);
		return repr;
	}
}