view src/de/mpiwg/itgroup/eSciDoc/echoObjects/ECHOObject.java @ 3:58b52df9763c

added update functionality if index.meta has changed
author dwinter
date Wed, 12 Jan 2011 11:00:14 +0100
parents c6929e63b0b8
children
line wrap: on
line source

package de.mpiwg.itgroup.eSciDoc.echoObjects;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;


import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler;
import de.mpiwg.itgroup.metadataManager.pid.PidGenerator;

public class ECHOObject {
	Logger logger = Logger.getRootLogger();
	public String CMM; // to be overwritten oder initialized with the CMM of this model.
	public String name;
	public String echoUrl;
	public String pid;
	public String metadataMananagerUrl;
	public String context;
	public String description ="";
	public String eScidocId;
	public String lastModificationDate;
	
	public ECHOObject() throws IOException{
		Properties echoProperties = new Properties();
		echoProperties.load(getClass().getResourceAsStream("/de/mpiwg/itgroup/eSciDoc/config/echo.properties"));
		
		metadataMananagerUrl = (String) echoProperties.get("metaDataManager");
		
	}
	
	public String getOrCreatePID() throws Exception {
		Object[] parameters = new Object[] {};

		String pid = null;
		
		//Verbinde mit ECHO
		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
		try {
			config.setServerURL(new URL(echoUrl));
		} catch (MalformedURLException e1) {
			logger.info("PID-Generator: cannot contact"+echoUrl);
			pid = null;
		}
		XmlRpcClient client = new XmlRpcClient();
		client.setConfig(config);
		// Hole pid aus ECHO
		try {
			pid = (String) client.execute("getPID", parameters);
		} catch (Exception e) {
			logger.info("PID-Generator: cannot contact"+echoUrl);
			pid = null;
		}
		// Falls dort noch keine ist, erzeuge ein neue
		if (pid == null)
		{
			pid = getPid();
			
		}
		else
			logger.info("PID from ECHO:" + pid);
	
		this.pid=pid;
return pid;
}

	public String getPid() throws Exception, IOException {
		String pid;
		HttpClient hc = new DefaultHttpClient();
		HttpPost pm = new HttpPost(metadataMananagerUrl+"/PID");
		HttpResponse ret;
		try {
			ret = hc.execute(pm);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new Exception("cannot generate PID");
		}
		pid=EScidocBasicHandler.convertStreamToString(ret.getEntity().getContent());
		if (ret.getStatusLine().getStatusCode()>300){
			//TODO define better Exceptions
			throw new Exception("cannot generate PID");
		}
		return pid;
	}

	
}