Mercurial > hg > eSciDocImport
view src/de/mpiwg/itgroup/eSciDoc/echoObjects/ECHORessource.java @ 21:a3f9a9ecdd42 default tip
UTF-8 problem bei AddConeIds solved
Neue Funktion zum Austuschen der Cone id'S beim editor
author | dwinter |
---|---|
date | Mon, 28 Oct 2013 14:53:43 +0100 |
parents | b6cf6462d709 |
children |
line wrap: on
line source
package de.mpiwg.itgroup.eSciDoc.echoObjects; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.codec.binary.Hex; 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 org.apache.log4j.Level; import org.apache.log4j.Logger; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.jdom.xpath.XPath; import com.sun.org.apache.xalan.internal.xsltc.dom.DOMWSFilter; import com.sun.org.apache.xerces.internal.parsers.SAXParser; import de.mpiwg.itgroup.eSciDoc.Tools.EScidocBasicHandler; import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools; import de.mpiwg.itgroup.eSciDoc.utils.eSciDocXmlObject; 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 String indexMetaMD5stored; 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"; CMM ="/cmm/content-model/escidoc:131281"; 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; } public String getIndexMetaMD5onServer() { String digest=""; try { URL url = new URL(metaData); InputStream is = url.openStream(); MessageDigest md = MessageDigest.getInstance("MD5"); digest = getDigest(is, md, 2048); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return digest; } public static String getDigest(InputStream is, MessageDigest md, int byteArraySize) throws NoSuchAlgorithmException, IOException { md.reset(); byte[] bytes = new byte[byteArraySize]; int numBytes; while ((numBytes = is.read(bytes)) != -1) { md.update(bytes, 0, numBytes); } byte[] digest = md.digest(); String result = new String(Hex.encodeHex(digest)); return result; } public String getIndexMetaMD5stored() { return indexMetaMD5stored; } public String getEScidocId() { return eScidocId; } // schreibe die escidoc:id in die index.meta public void writeEsciDocIDToIndexMeta(eSciDocXmlObject eSciDocXmlObject) { String txt; try { txt = eSciDocXmlObject.getESciDocObjId(); writeEsciDocIDToIndexMeta(txt); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void writeEsciDocIDToIndexMeta(String objid) { String driType="escidoc"; String txt; Element result; try { txt = objid; URL url = new URL(metaData); InputStream is = url.openStream(); Document doc = new SAXBuilder().build(is); XPath xp = XPath.newInstance("//meta/dri[@type=\""+driType+"\"]"); result = (Element)xp.selectSingleNode(doc); if (result!=null){ result.setText(txt); } else { XPath xpMeta = XPath.newInstance("//meta"); Element metaTag = (Element)xpMeta.selectSingleNode(doc); if (metaTag==null){ return; } else { Element dri = new Element("dri"); dri.setAttribute("type",driType); dri.setText(txt); metaTag.addContent(dri); } } XMLOutputter xo = new XMLOutputter(); //String outpath ="/tmp/out/"+archivePath; String outpath =archivePath; //File parent = new File(outpath); //parent.mkdirs(); File oldFile = new File(outpath+"/index.meta"); boolean f = oldFile.renameTo(new File(outpath+"/index.meta.old")); if (!f){ Logger lg = Logger.getLogger("transformerLogger"); lg.error("cannot: write "+outpath+"/index.meta.old"); lg.error("cannot: but will proceed to write new index.meta"); } FileOutputStream out = new FileOutputStream(outpath+"/index.meta"); xo.output(doc, out); Logger lg = Logger.getLogger("transformerLogger"); lg.info("changed:"+outpath+" -- added escidoc: "+txt); out.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }