Mercurial > hg > eSciDocImport
view src/de/mpiwg/itgroup/eSciDoc/Tools/AddMPIWGIdentifiers.java @ 13:9164f3f4b232
minor
author | dwinter |
---|---|
date | Thu, 13 Sep 2012 13:01:36 +0200 |
parents | a844f6948dd8 |
children |
line wrap: on
line source
package de.mpiwg.itgroup.eSciDoc.Tools; import java.io.IOException; import java.util.HashMap; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.log4j.BasicConfigurator; 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.xpath.XPath; import sun.util.logging.resources.logging; import com.sun.org.apache.xerces.internal.parsers.SAXParser; import de.mpiwg.itgroup.eSciDoc.exceptions.ESciDocXmlObjectException; import de.mpiwg.itgroup.eSciDoc.utils.eSciDocXmlObject; public class AddMPIWGIdentifiers { /** * Erzeuge MPIWG identifier in den administrativen MPIWG Metadaten. * Solange der Identifier nicht in den Metadaten (index.meta) steht, wird dazu der Filename genommen. * @param args * @throws ESciDocXmlObjectException * @throws JDOMException * @throws IOException * @throws ClientProtocolException * @throws IllegalStateException */ public static void main(String[] args) throws IllegalStateException, ClientProtocolException, IOException, JDOMException, ESciDocXmlObjectException { // TODO Auto-generated method stub BasicConfigurator.configure(); Logger logger = Logger.getRootLogger(); logger.setLevel(Level.INFO); EScidocBasicHandler connector = new EScidocBasicHandler( "escidoc-test.mpiwg-berlin.mpg.de", 8080, "dwinter", "XXXX"); if(args.length<2){ System.out.println("Usage: startrecord maximumrecords"); System.exit(-1); } String MAX_REC = args[1]; String start = args[0]; String objectXPath = "//escidocItem:item"; String query = "?maximumRecords=" + String.valueOf(MAX_REC) + "&startRecord=" + String.valueOf(start); String command = "/ir/context/escidoc:12001/resources/members"; for (eSciDocXmlObject obj : connector.getObjectsFromFilterResult( command + query, objectXPath)) { Document doc = obj.getDocument(); Boolean changed=false; XPath archivePathXP = EScidocTools.getESciDocXpath("//mpiwg:admin/mpiwg:archivePath"); XPath mpiwgMDXP= EScidocTools.getESciDocXpath("//mpiwg:admin"); XPath mpiwgIdentifierXP= EScidocTools.getESciDocXpath("//mpiwg:admin/mpiwg:identifier"); Element archivePathNode = (Element) archivePathXP.selectSingleNode(doc); if(archivePathNode==null) // kein Treffer continue; Element mpiwgIDNode = (Element) mpiwgIdentifierXP.selectSingleNode(doc); if(mpiwgIDNode!=null){ // kein Treffer System.out.println("ID already exists:"+mpiwgIDNode.getTextTrim()); continue; } String archivePath=archivePathNode.getTextTrim(); String[] pathElements=archivePath.split("/"); int length=pathElements.length; String mpiwgID=pathElements[length-1]; Element mpiwgMDNode= (Element) mpiwgMDXP.selectSingleNode(doc); if(mpiwgID.equals("")) mpiwgID=handleEmptyID(doc,mpiwgMDNode); mpiwgIDNode= new Element("identifier", EScidocTools.MPIWG); mpiwgIDNode.setText(mpiwgID); mpiwgMDNode.addContent(mpiwgIDNode); //correct release number, some objecte don't have an release number, why?? Element latestRelease = (Element)EScidocBasicHandler.getXPath(doc.getRootElement(),"//escidocItem:properties/prop:latest-release/release:number",true); if(latestRelease==null){ logger.info("not released yet:"+obj.getESciDocId()); } else { String rn= latestRelease.getTextTrim(); if (rn.equals("")){ String latestVersionNumber = ((Element)EScidocBasicHandler.getXPath(doc.getRootElement(),"//escidocItem:properties/prop:version/version:number",true)).getTextTrim(); logger.info("have to add relase number!"); logger.info("Will add:"+latestVersionNumber); latestRelease.setText(latestVersionNumber); } } System.out.println("Adding:"+mpiwgID); changed=true; //System.out.println(obj.printXML()); if (changed){ Boolean retVal = connector.updateItem(obj); System.out.println("Replaced:"+obj.getESciDocId()); HttpResponse retValu = connector.submitAnObject(obj, "adding identifier"); System.out.println(EScidocBasicHandler.convertStreamToString(retValu.getEntity().getContent())); HttpResponse resObj = connector.eScidocGet(obj.getESciDocId()); HttpEntity ent = resObj.getEntity(); if (ent!=null){ obj= new eSciDocXmlObject(ent.getContent()); } else { System.out.println("Can not retrieve:" + obj.getESciDocId()); continue; } HttpResponse reValue2 = connector.releaseAnObject(obj, "repairing publishing info"); System.out.println(EScidocBasicHandler.convertStreamToString(reValue2.getEntity().getContent())); } } } private static String handleEmptyID(Document doc, Element mpiwgMDNode) throws JDOMException, IOException { XPath xlinkXP = EScidocTools.getESciDocXpath("//escidocComponents:component[escidocComponents:properties/prop:content-category/text()='index_meta']/@xlink:href"); SAXBuilder sb = new SAXBuilder(); Object node = xlinkXP.selectSingleNode(doc); Attribute attr =(Attribute) node; String md = attr.getValue(); Document doc2 = sb.build("http://escidoc-test.mpiwg-berlin.mpg.de:8080"+md+"/content"); XPath apXP= EScidocTools.getESciDocXpath("//resource/archive-path"); XPath imXP= EScidocTools.getESciDocXpath("//texttool/image"); Element apNode = (Element)apXP.selectSingleNode(doc2); String ap=""; if(apNode!=null) { ap = apNode.getTextTrim(); XPath apNewXP= EScidocTools.getESciDocXpath(".//mpiwg:archivePath"); Element apNewNode = (Element) apNewXP.selectSingleNode(mpiwgMDNode); apNewNode.setText(ap); } Element imNode = (Element)imXP.selectSingleNode(doc2); if(imNode!=null) { String im = imNode.getTextTrim(); XPath imNewXP= EScidocTools.getESciDocXpath(".//mpiwg:imageFolder"); Element imNewNode = (Element) imNewXP.selectSingleNode(mpiwgMDNode); imNewNode.setText(ap+"/"+im); } String[] pathElements=ap.split("/"); int length=pathElements.length; return pathElements[length-1]; } }