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

first ingest
author dwinter
date Wed, 01 Dec 2010 17:35:51 +0100
parents
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 org.apache.http.HttpResponse;
import org.jdom.Attribute;
import org.jdom.Document;
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;


public class ComponentURLRedirector extends ServerResource{

	private String eScidocServer;
	private String eScidocPort;
	private String content_cat;
	private String eScidocUser;
	private String eScidocUserPW;
	
	public ComponentURLRedirector(String content_cat) throws IOException{
		this.content_cat = content_cat;
		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()
	{
		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 url;
		try {
			doc = new SAXBuilder().build(resp.getEntity().getContent());
	
	
		XPath xp= EScidocTools.getESciDocXpath("//escidocComponents:component[escidocComponents:properties/prop:content-category[text()='"+content_cat+"']]/escidocComponents:content/@xlink:href");
		Attribute item = (Attribute)xp.selectSingleNode(doc);	
		url = item.getValue();
		
		} catch (Exception e) {
			
			if (content_cat.equals("display_url")) // wemm display und error dann versuche genrische anzeige der bilder
				{
				url="./images";
				StringRepresentation repr = new StringRepresentation(url);
				getResponse().redirectPermanent(url);
				return repr;
				
			} else {
			setStatus(Status.SERVER_ERROR_INTERNAL);	
			
			return new StringRepresentation("<html><body>error3a</body></html>");
			}
		}
		
		
		if (!url.startsWith("http")) { // relative url 
			url="http://"+eScidocServer+":"+eScidocPort+url;
		}
			
		StringRepresentation repr = new StringRepresentation(url);
		getResponse().redirectPermanent(url);
		return repr;
	}
}