diff src/de/mpiwg/itgroup/eSciDoc/echoObjects/ECHOObject.java @ 0:c6929e63b0b8

first import
author dwinter
date Wed, 24 Nov 2010 16:52:07 +0100
parents
children 58b52df9763c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpiwg/itgroup/eSciDoc/echoObjects/ECHOObject.java	Wed Nov 24 16:52:07 2010 +0100
@@ -0,0 +1,95 @@
+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 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;
+	}
+}