Mercurial > hg > mpdl-group
view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/escidoc/TestESciDoc.java @ 6:2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 08 Feb 2011 14:54:09 +0100 |
parents | 408254cf2f1d |
children | 5df60f24e997 |
line wrap: on
line source
package de.mpg.mpiwg.berlin.mpdl.escidoc; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.Scanner; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.quartz.impl.StdSchedulerFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; import de.mpg.mpiwg.berlin.mpdl.general.MpdlConstants; import de.mpg.mpiwg.berlin.mpdl.schedule.MpdlChainScheduler; import de.mpg.mpiwg.berlin.mpdl.util.XmlUtil; public class TestESciDoc { private String cookieId; private ESciDocRestSession eSciDocRestSession; private String organizationalUnit = MpdlConstants.MPDL_ESCIDOC_OUM_ID; private String fullContextId = MpdlConstants.MPDL_ESCIDOC_CONTEXT_ID; private String archimedesContainerId = MpdlConstants.MPDL_ESCIDOC_ARCHIMEDES_CONTAINER_ID; private String echoContainerId = MpdlConstants.MPDL_ESCIDOC_ECHO_CONTAINER_ID; public static void main(String[] args) { try { /* byte[] ligatureBytes = new byte[5]; ligatureBytes[0] = (byte) Integer.parseInt("61", 16); ligatureBytes[1] = (byte) Integer.parseInt("74", 16); ligatureBytes[2] = (byte) Integer.parseInt("EE", 16); ligatureBytes[3] = (byte) Integer.parseInt("A2", 16); ligatureBytes[4] = (byte) Integer.parseInt("BF", 16); String ligature = new String(ligatureBytes, "utf-8"); char[] chars = new char[3]; chars[0] = ligature.charAt(0); chars[1] = ligature.charAt(1); chars[2] = ligature.charAt(2); int codepoint = Character.codePointAt(chars, 2); int num = Character.getNumericValue(ligature.charAt(2)); int type = Character.getType(ligature.charAt(2)); */ TestESciDoc test = new TestESciDoc(); test.init("jwillenborg"); // init eSciDoc-Session with cookie as user jwillenborg // test.grant("urte", "admin"); String uid = test.getUserId("urte"); String users = test.getAllUsers(); String grantAdmin = test.getGrantHrefByUserNameAndRoleName("urte", "escidoc:role-system-administrator"); String grants = test.getGrantsByUserName("urte"); String bla = ""; // test.testSchemaValidation(); // test.deleteItem("/ir/item/escidoc:48488"); // test.deleteContainer("/ir/container/escidoc:48486"); /* String containerId = test.createContainer("testJoey1"); System.out.println("Begin: " + (new Date()).getTime()); Date successDate = test.addMembersToContainer("/ir/container/escidoc:41646"); System.out.println("End: " + (new Date()).getTime()); */ // String contextId = test.createContext(test.organizationalUnit, "MPDL-XML-Test", "MPDL-XML-Test", "MpdlType"); // test.openContext("escidoc:38600"); // String containerId = test.createContainer("eXistArchimedesContainer"); // System.out.println(containerId); // String containerId = test.createContainer("eXistEchoContainer"); /* for (int i=0; i< 443; i++) { MetadataRecord mdRecordImage = new MetadataRecord(); mdRecordImage.setIdentifier("file_" + i); mdRecordImage.setTitle("ECHO scanned page: " + i); String fileName = "000" + i; String srcUrl = "http://echo.mpiwg-berlin.mpg.de/zogilib?fn=/permanent/library/" + "163127KK" + "/pageimg/" + fileName; // TODO String itemId = test.createItem("mpiwg:47114711", mdRecordImage, fileName, "image/jpeg", "JPEG_DEFAULT", "external-url", srcUrl); System.out.println(i + ". " + itemId + " created"); } */ /* String srcUrlAlvarus = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/echo/la/alvarus_1509_lat_V40_10.xml"; Date pubYearAlvarus = XmlUtil.getInstance().toDate("1509-01-01T00:00:00.000Z"); MetadataRecord mdAlvarus = new MetadataRecord("/echo/la/alvarus_1509_lat_V40_10.xml", "la", "Alvarus, Thomas", "Liber de triplici motu proportionibus annexis magiſtri Aluari Thome Ulixboneñ philoſophicas Suiſeth calculationes ex parte declarans", null, null, "text/xml", pubYearAlvarus); String result = test.createItemInContainer(test.echoContainerId, mdAlvarus.getIdentifier(), mdAlvarus, srcUrlAlvarus); String srcUrlBenedetti = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/echo/la/Benedetti_1585.xml"; Date pubYearBenedetti = XmlUtil.getInstance().toDate("1585-01-01T00:00:00.000Z"); MetadataRecord mdBenedetti = new MetadataRecord("/echo/la/Benedetti_1585.xml", "la", "Benedetti, Giovanni Battista de", "Diversarum Speculationum mathematicum, & physicarum liber", null, null, "text/xml", pubYearBenedetti); String result = test.createItemInContainer(test.echoContainerId, mdBenedetti.getIdentifier(), mdBenedetti, srcUrlBenedetti); String srcUrlEuclid = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/echo/el/Euclid-300.xml"; Date pubYearEuclid = XmlUtil.getInstance().toDate("0300-01-01T00:00:00.000Z"); MetadataRecord mdEuclid = new MetadataRecord("/echo/el/Euclid-300.xml", "el", "Euclid", "Στοιχεῖα", null, null, "text/xml", pubYearEuclid); String result = test.createItemInContainer(test.echoContainerId, mdEuclid.getIdentifier(), mdEuclid, srcUrlEuclid); String srcUrlEuclid2 = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/echo/zh/Euclid_1966_V8.xml"; Date pubYearEuclid2 = XmlUtil.getInstance().toDate("0300-01-01T00:00:00.000Z"); MetadataRecord mdEuclid2 = new MetadataRecord("/echo/zh/Euclid_1966_V8.xml", "zh", "Euclid", "Jihe yuanben, 幾何原本", null, null, "text/xml", pubYearEuclid2); String result = test.createItemInContainer(test.echoContainerId, mdEuclid2.getIdentifier(), mdEuclid2, "/echo/zh/Euclid_1966_V8.xml", "text/xml", "any fulltext", "internal-managed", srcUrlEuclid2); String items = test.getItemsByContainerIdAndFilter(test.echoContainerId, null); */ } catch (Exception e) { e.printStackTrace(); } } private void init(String userName) throws ApplicationException { Scanner in = new Scanner(System.in); System.out.print("Username: " + userName + ", Password: "); String password = in.nextLine(); in.close(); cookieId = ESciDocRestSession.login(userName, password); eSciDocRestSession = ESciDocRestSession.getInstance(cookieId); fullContextId = MpdlConstants.MPDL_ESCIDOC_CONTEXT_ID; } private void testSchemaValidation() throws ApplicationException { String[] rncSchemaFiles = { "echo/echo.rnc", "echo/modules/echo-datatype.rnc", "echo/modules/echo-handwritten.rnc", "echo/modules/echo-start.rnc", "echo/modules/echo-attribute.rnc", "echo/modules/echo-de.rnc", "echo/modules/echo-import-mathml.rnc", "echo/modules/echo-text.rnc", "echo/modules/echo-block-scholarly.rnc", "echo/modules/echo-div.rnc", "echo/modules/echo-import-xhtml.rnc", "echo/modules/echo-textflows.rnc", "echo/modules/echo-block.rnc", "echo/modules/echo-figure.rnc", "echo/modules/echo-mathematics.rnc", "echo/modules/echo-chinese-text.rnc", "echo/modules/echo-float.rnc", "echo/modules/echo-metadata.rnc", "echo/modules/echo-content-scholarly.rnc", "echo/modules/echo-gap.rnc", "echo/modules/echo-milestone.rnc", "echo/modules/echo-content.rnc", "echo/modules/echo-gis.rnc", "echo/modules/echo-note.rnc", "xhtml/xhtml-datatypes.rnc", "xhtml/xhtml-list.rnc", "xhtml/xhtml-attribs.rnc", "xhtml/xhtml-basic-table.rnc" }; String[] schemas = { "echo-schema/dcterms.xsd", "echo-schema/echo-datatype.xsd", "echo-schema/echo-handwritten.xsd", "echo-schema/echo-start.xsd", "echo-schema/xhtml-datatypes.xsd", "echo-schema/echo-attribute.xsd", "echo-schema/echo-de.xsd", "echo-schema/ echo-import-mathml.xsd", "echo-schema/echo-text.xsd", "echo-schema/xhtml-list.xsd", "echo-schema/echo-block-scholarly.xsd", "echo-schema/echo-div.xsd", "echo-schema/echo-import-xhtml.xsd", "echo-schema/echo-textflows.xsd", "echo-schema/xlink.xsd", "echo-schema/echo-block.xsd", "echo-schema/echo-figure.xsd", "echo-schema/echo-mathematics.xsd", "echo-schema/echo.xsd", "echo-schema/xml.xsd", "echo-schema/echo-chinese-text.xsd", "echo-schema/echo-float.xsd", "echo-schema/ echo-metadata.xsd", "echo-schema/local.xsd", "echo-schema/xsi.xsd", "echo-schema/echo-content-scholarly.xsd", "echo-schema/echo-gap.xsd", "echo-schema/echo-milestone.xsd", "echo-schema/xhtml-attribs.xsd", "echo-schema/echo-content.xsd", "echo-schema/echo-gis.xsd", "echo-schema/echo-note.xsd", "echo-schema/xhtml-basic-table.xsd" }; File xmlFile = new File("/Users/jwillenborg/texts/echo/SongYingxing_1637.xml"); // validate(xmlFile, schemas); validateByRelaxNG(xmlFile, rncSchemaFiles); } private void validateDocumentBuilder(File xmlFile, String[] schemaFileNames) throws ApplicationException { String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; String W3C_XML_SCHEMA = XMLConstants.W3C_XML_SCHEMA_NS_URI; Node root = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); dbf.setAttribute(JAXP_SCHEMA_SOURCE, schemaFileNames); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(xmlFile); root = doc.getFirstChild(); String bla = ""; } catch (Exception e) { throw new ApplicationException(e); } } public void validateByRelaxNG(File xmlFile, String[] schemaFileNames) throws ApplicationException { // System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.XMLSyntaxSchemaFactory"); System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory"); // RELAX NG factory SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI); // Compile the schema. Schema schema = null; try { URL schemaUrl = new URL("http://mpdl-test.mpiwg-berlin.mpg.de:30030/exist/rest/db/mpdl/schema/echo/echo.rnc"); schema = factory.newSchema(schemaUrl); } catch (SAXException e) { throw new ApplicationException(e); } catch (MalformedURLException e) { throw new ApplicationException(e); } // Get a validator from the schema. Validator validator = schema.newValidator(); // Check the document InputSource inputSource = new InputSource(xmlFile.getPath()); Source source = new SAXSource(inputSource); try { validator.validate(source); } catch (SAXException e) { throw new ApplicationException(e); } catch (IOException e) { throw new ApplicationException(e); } } private void validate(File xmlFile, String[] schemaFileNames) throws ApplicationException { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // Compile the schema. Schema schema = null; Source[] schemaInputSources = new SAXSource[schemaFileNames.length]; for (int i=0; i<schemaFileNames.length; i++) { String schemaFileName = "mpdl/extensions/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/escidoc/" + schemaFileNames[i]; InputSource inputSource = new InputSource(schemaFileName); Source source = new SAXSource(inputSource); schemaInputSources[i] = source; } try { schema = factory.newSchema(schemaInputSources); } catch (SAXException e) { throw new ApplicationException(e); } // Get a validator from the schema. Validator validator = schema.newValidator(); // Check the document InputSource inputSource = new InputSource(xmlFile.getPath()); Source source = new SAXSource(inputSource); // DOMSource source = new DOMSource(docNode); // TODO evtl. nur per Node aufrufen try { validator.validate(source); } catch (SAXException e) { throw new ApplicationException(e); } catch (IOException e) { throw new ApplicationException(e); } } private String getUserId(String userName) throws ApplicationException { String userId = eSciDocRestSession.getUserId(userName); return userId; } private String getAllUsers() throws ApplicationException { String users = eSciDocRestSession.getAllUsers(); return users; } private String getGrantsByUserName(String userName) throws ApplicationException { String grant = eSciDocRestSession.getGrantsByUserName(userName); return grant; } private String getGrantHrefByUserNameAndRoleName(String userName, String roleName) throws ApplicationException { String grant = eSciDocRestSession.getGrantHrefByUserNameAndRoleName(userName, roleName); return grant; } private void grant(String userId, String role) throws ApplicationException { eSciDocRestSession.grant(userId, role); } private String createContext(String organizationalUnit, String name, String description, String type) throws ApplicationException { fullContextId = eSciDocRestSession.createContext(organizationalUnit, name, description, type); return fullContextId; } private void openContext(String contextId) throws ApplicationException { eSciDocRestSession.openContext(contextId); } private String createContainer(String containerName) throws ApplicationException { MetadataRecord mdContainerEcho = new MetadataRecord(containerName, null, null, null, null, null, null, null, null); String containerId = eSciDocRestSession.createContainer(containerName, mdContainerEcho); // String nextContainerId = eSciDocRestSession.createContainerInContainer(containerName, mdContainerEcho, "/ir/container/escidoc:25163"); // String bla = eSciDocRestSession.createItemInContainer("bla", mdContainerEcho, "bla.xml", "text/xml", "any fulltext", "internal-managed", "/ir/container/escidoc:25164", "http://test.com"); String pageImageUrl = "http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler?fn=/permanent/archimedes/monte_mecha_037_it_1581/037-01-pageimg&pn=1&dh=600"; // TODO // String pageItemId = eSciDocRestSession.createItemInContainer(containerId, "bla", mdContainerEcho, "/permanent/archimedes/monte_mecha_037_it_1581", "image/jpeg", "JPEG_DEFAULT", "external-url", pageImageUrl); // TODO // pageItemId = eSciDocRestSession.createItemInContainer("/ir/container/escidoc:25164", "bla", mdContainerEcho, "/permanent/archimedes/monte_mecha_037_it_1581", "image/jpeg", "JPEG_DEFAULT", "external-url", pageImageUrl); // TODO // pageItemId = eSciDocRestSession.createItemInContainer("/ir/container/escidoc:25164", "bla", mdContainerEcho, "/permanent/archimedes/monte_mecha_037_it_1581", "image/jpeg", "JPEG_DEFAULT", "external-url", pageImageUrl); // TODO return containerId; } private Item createItemInContainer(String containerId, String pid, MetadataRecord mdRecord, ArrayList<Component> components) throws ApplicationException { Item result = eSciDocRestSession.createItemInContainer(containerId, pid, mdRecord, components); return result; } private Item createItem(String pid, MetadataRecord mdRecord, ArrayList<Component> components) throws ApplicationException { Item result = eSciDocRestSession.createItem(pid, mdRecord, components); return result; } private Date addMembersToContainer(String containerId) throws ApplicationException { String modDateStr = "2010-04-16T15:00:53.409Z"; Date modDate = XmlUtil.getInstance().toDate(modDateStr); ArrayList<String> memberIds = new ArrayList<String>(); for (int i=40761; i<= 41645; i = i + 2) { String memberId = "" + i; memberIds.add(memberId); } Date result = eSciDocRestSession.addMembers(containerId, modDate, memberIds); return result; } private String getItemsByContainerIdAndFilter(String containerId, String filter) throws ApplicationException { String members = eSciDocRestSession.getMembersByContainerIdAndFilter(containerId, filter); return members; } private void deleteContainer(String containerId) throws ApplicationException { eSciDocRestSession.deleteContainer(containerId); } private void deleteItem(String itemId) throws ApplicationException { eSciDocRestSession.deleteItem(itemId); } private void test() { /* XmlUtil xmlUtil = XmlUtil.getInstance(); ClientSession eSciDocClientSession = new ClientSession("http", "xserve07.mpiwg-berlin.mpg.de", 8080, "jwillenborg", "pucki123"); String contextId = "/ir/context/escidoc:23002"; String filterDetail = "<filter></filter><order-by sorting=\"ascending\">/id</order-by>"; String filter = "<param>" + filterDetail + "</param>"; String members = eSciDocClientSession.getItemsByContainerIdAndFilter("escidoc:23003", filter); System.out.println(members); String item = eSciDocClientSession.getItem("escidoc:13003"); String itemId = xmlUtil.getFirstElementAttributeValue(item, "prop:latest-version", "xlink:href"); System.out.println(itemId); /* Date pubYearAlvarus = xmlUtil.toDate("1509-01-01T00:00:00.000Z"); MetadataRecord mdAlvarus = new MetadataRecord("/archimedes/la/alvarus_1509_lat_V40_10.xml", "la", "Alvarus, Thomas", "Liber de triplici motu proportionibus annexis magiſtri Aluari Thome Ulixboneñ philoſophicas Suiſeth calculationes ex parte declarans", null, null, "text/xml", pubYearAlvarus); String srcUrlAlvarus = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/echo/la/alvarus_1509_lat_V40_10.xml"; String result = eSciDocClientSession.createItemInContainer(contextId, "MPDL-XML-Test", "abcdefg", mdAlvarus, "escidoc:23003", srcUrlAlvarus); */ /* Date pubYearAgricola = xmlUtil.toDate("1912-01-01T00:00:00.000Z"); MetadataRecord mdAgricola = new MetadataRecord("/archimedes/en/agric_remet_002_en.xml", "la", "Agricola, Georgius", "De re metallica", null, "London", "text/xml", pubYearAgricola); String srcUrlAgricola = "http://mpdl-proto.mpiwg-berlin.mpg.de/exist/rest/db/mpdl/documents/standard/archimedes/en/agric_remet_002_en.xml"; String item = eSciDocClientSession.getItemById("escidoc:23012"); String lastVersionDateStr = xmlUtil.getFirstElementValue(item, "version:date"); Date lastModificationDate = xmlUtil.toDate(lastVersionDateStr); String lastModificationDateStr = xmlUtil.toXsDate(lastModificationDate); String itemXmlResult = eSciDocClientSession.updateItem(contextId, "MPDL-XML-Test", "abcdefg", mdAgricola, srcUrlAgricola, "escidoc:23012", lastModificationDate); */ /* String itemIdAgricola = xmlUtil.getFirstElementAttributeValue(itemXmlResult, "prop:latest-version", "xlink:href"); eSciDocClientSession.deleteItem(contextId, "escidoc:23010"); */ /* String containerName = "testEXistEcho"; MetadataRecord mdRecord = new MetadataRecord("testEXistArchimedes", "Echo document container"); String containerXmlResult = eSciDocClientSession.addContainer("/ir/context/escidoc:23002", "MPDL-XML-Test", containerPid, mdRecord); String containerId = xmlUtil.getFirstElementAttributeValue(containerXmlResult, "prop:latest-version", "xlink:href"); System.out.println(containerId); */ // eSciDocClientSession.deleteItem(contextId, "escidoc:23012"); } }