Mercurial > hg > eSciDocImport
diff src/de/mpiwg/itgroup/eSciDoc/echoObjects/ECHORessource.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/ECHORessource.java Wed Nov 24 16:52:07 2010 +0100 @@ -0,0 +1,193 @@ +package de.mpiwg.itgroup.eSciDoc.echoObjects; + +import java.io.IOException; +import java.net.URI; +import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +import org.apache.http.Header; +import org.apache.http.HttpException; +import org.apache.http.HttpHost; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.BasicHttpContext; +import org.apache.http.protocol.ExecutionContext; +import org.apache.http.protocol.HttpContext; + +import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler; +import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools; +import de.mpiwg.itgroup.metadataManager.pid.DCTransformer; + +public class ECHORessource extends ECHOObject{ + + + public String archivePath; + public String metaData =""; + public String fullText =""; + private String textServletUrl; + private String dirInfoUrl; + public String link; + + + public ECHORessource() throws IOException{ + super(); + CMM ="/cmm/content-model/escidoc:11003"; + Properties echoProperties = new Properties(); + echoProperties.load(getClass().getResourceAsStream("/de/mpiwg/itgroup/eSciDoc/config/echo.properties")); + + textServletUrl = (String) echoProperties.get("textServletUrl"); + dirInfoUrl = (String) echoProperties.get("dirInfoUrl"); + + } + + + public ECHORessource(String name, String archivePath, String echoUrl) throws IOException { + this(); + CMM ="/cmm/content-model/escidoc:11003"; + this.name = name; + this.archivePath = archivePath; + this.echoUrl = echoUrl; + this.link = getLinkFromUrl(echoUrl); + + + } + + /** Holt die URL auf die das ECHO Objekt redirected + * @param echoUrl + * @return + */ + private String getLinkFromUrl(String echoUrl) { + if (echoUrl==null) + return null; + HttpContext localContext = new BasicHttpContext(); + HttpClient hc = new DefaultHttpClient(); + HttpGet get = new HttpGet(echoUrl); + HttpResponse response; + HttpUriRequest req; + HttpHost target; + + try { + response = hc.execute(get,localContext); + req = (HttpUriRequest) localContext.getAttribute( + ExecutionContext.HTTP_REQUEST); + target = (HttpHost) localContext.getAttribute( + ExecutionContext.HTTP_TARGET_HOST); + + + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ""; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ""; + } + URI ret = req.getURI(); + + return target.toString()+ret.toString(); + } + + + public String toString(){ + String format="NAME: %s; archivePAth: %s; metaData: %s; fullText %s; url %s"; + + return String.format(format, name,archivePath,metaData,fullText,echoUrl); + + } + + + /** + * Baue Metadatalink um, dass er auf das Servlet zeigt. + * @param ml + * @return + */ + public String correctML(String ml) { + Pattern p = Pattern.compile("experimental/(.*)"); + Matcher m = p.matcher(ml); + String pf; + if (m.find()) + pf = "experimental/" + m.group(1); + else { + p = Pattern.compile("permanent/(.*)"); + m = p.matcher(ml); + if (m.find()) + pf = "permanent/" + m.group(1); + else + return ml; + } + return textServletUrl + pf; + } + + static public String correct(String ml){ + Pattern p = Pattern.compile("experimental/(.*)"); + Matcher m = p.matcher(ml); + String pf; + if (m.find()) + pf = "experimental/" + m.group(1); + else { + p = Pattern.compile("permanent/(.*)"); + m = p.matcher(ml); + if (m.find()) + pf = "permanent/" + m.group(1); + else + return ml; + } + return pf; + } + + + public String getImageFolderPath() { + DCTransformer trans = new DCTransformer(metaData); + String path = trans.getImagePathFromIndexMeta(); + if (path==null || path.equals("")){ + path=archivePath+"/pageimg"; + } else { + path=archivePath+"/"+path; + } + + String testPath=correct(path); // get rid of everything before eperimental or permanent + if(testPath(testPath)) + return path; + + return null; + } + + + private boolean testPath(String path) { + HttpClient client = new DefaultHttpClient(); + HttpGet get; + try { + get = new HttpGet(dirInfoUrl+path); + } catch (RuntimeException e){ + e.printStackTrace(); + return false; + } + + try { + HttpResponse response = client.execute(get); + String body = EScidocBasicHandler.convertStreamToString(response.getEntity().getContent());; + + Pattern p = Pattern.compile("<dir>(.*)</dir>",Pattern.DOTALL); + Matcher m = p.matcher(body); + if (m.find()){ // dir body leer + if (m.group(1).equals("")) + return false; + else + return true; + } + + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return false; + } +}