view src/de/mpiwg/itgroup/metadataManager/pid/DCTransformer.java @ 0:90a19cbda471

first ingest
author dwinter
date Wed, 24 Nov 2010 16:54:52 +0100
parents
children 38d823b66aff
line wrap: on
line source

package de.mpiwg.itgroup.metadataManager.pid;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

import org.xml.sax.InputSource;



public class DCTransformer {
	static public String MPIWG = "http://www.mpiwg-berlin.mpg.de/ns/mpiwg";

	public static String converterProvider = "http://127.0.0.1:28080/metadataMain";
	private String metaDataLink;
	private Logger logger = Logger.getLogger("transformerLogger");
	
	public DCTransformer(String metaDataLink) {
		
		this.metaDataLink=metaDataLink;
	}

	public Element getDCFromIndexMeta() {
		//Verbinde mit metadataprovider
		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
		
		
		try {
			config.setServerURL(new URL(converterProvider));
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
		XmlRpcClient client = new XmlRpcClient();
		client.setConfig(config);
		Object[] params = new Object[] { metaDataLink };

		String result;
		try {
			result = (String) client.execute("getDCFormatted", params);
		} catch (XmlRpcException e) {
			// TODO Auto-generated catch block
			logger.error("CANNOT connector to:"+converterProvider);
			e.printStackTrace();
			return null;
		}
			logger.debug("dC:"+result);
			
			SAXBuilder db = new SAXBuilder();
			InputStream resultStream;
			try {
				resultStream = new ByteArrayInputStream(result.getBytes("utf-8"));
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			Document dc;
			try {
				dc = db.build(resultStream);
			} catch (JDOMException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			
		return dc.getRootElement();
	}

	public Element getContentOfMetaTag() {
		SAXBuilder db = new SAXBuilder();
			
		Document dc;
		try {
			dc = db.build(metaDataLink);
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
		Element retElement = null;
		try {
			XPath xp = getXPath("//meta");
			retElement = (Element) xp.selectSingleNode(dc);
			
		} catch (JDOMException e) {
			//nothing to be done
		}
		if (retElement==null) { // versuche noch mal mit namespace 
			try {
				
				XPath xp = getXPath("//mpiwg:meta");
				retElement = (Element) xp.selectSingleNode(dc);
				
			} catch (JDOMException e) {
				//nothing to be done
			}
			
		}
		return retElement;
	}
	
	
	private XPath getXPath(String xpath) throws JDOMException{
		XPath xpathResources = XPath.newInstance(xpath);
		
		xpathResources.addNamespace("mpiwg",MPIWG);
		
		return xpathResources;
	}

	public String getImagePathFromIndexMeta() {
		SAXBuilder db = new SAXBuilder();
		
		Document dc;
		try {
			dc = db.build(metaDataLink);
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
		Element retElement = null;
		try {
			XPath xp = getXPath("//texttool/image");
			retElement = (Element) xp.selectSingleNode(dc);
			
		} catch (JDOMException e) {
			//nothing to be done
		}
		if (retElement==null) { // versuche noch mal mit namespace 
			try {
				XPath xp = getXPath("//mpiwg:texttool/mpiwg:image");
				retElement = (Element) xp.selectSingleNode(dc);
				
			} catch (JDOMException e) {
				//nothing to be done
			}
			
		}
		if (retElement==null)
			return "";
		return retElement.getTextTrim();
	}

}