Mercurial > hg > mpdl-group
diff software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/donatus/xmlrpc/DonatusXmlRpcClient.java @ 0:408254cf2f1d
Erstellung
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Wed, 24 Nov 2010 17:24:23 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/donatus/xmlrpc/DonatusXmlRpcClient.java Wed Nov 24 17:24:23 2010 +0100 @@ -0,0 +1,106 @@ +package de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Vector; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import com.sun.org.apache.xerces.internal.parsers.SAXParser; + +public class DonatusXmlRpcClient { + private String serverName = DonatusConstants.SERVER_NAME; + private int port = DonatusConstants.PORT; + private String uriRpcCall = DonatusConstants.URI_RPC_CALL; + private String xmlRpcUri = "http://" + serverName + ":" + port + uriRpcCall; + private XmlRpcClient xmlClient = null; + + public DonatusXmlRpcClient() { + this.xmlRpcUri = "http://" + serverName + uriRpcCall; + init(); + } + + public DonatusXmlRpcClient(String serverName) { + this.serverName = serverName; + this.xmlRpcUri = "http://" + serverName + uriRpcCall; + init(); + } + + public DonatusXmlRpcClient(String serverName, int port) { + this.serverName = serverName; + this.port = port; + this.xmlRpcUri = "http://" + serverName + ":" + port + uriRpcCall; + init(); + } + + private void init() { + try { + XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); + config.setServerURL(new URL(xmlRpcUri)); + xmlClient = new XmlRpcClient(); + xmlClient.setConfig(config); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + + public DonatusMorphologyDocument analyze(DonatusWtagDocument donatusWtagDocument) { + DonatusMorphologyDocument morphologyDoc = null; + try { + String language = donatusWtagDocument.getLanguage(); + String wtagString = donatusWtagDocument.getXmlString(); + Vector params = new Vector(); + byte[] wtagBytes = wtagString.getBytes("UTF-8"); + params.add(wtagBytes); + HashMap donatusReturn = (HashMap) xmlClient.execute("donatus.analyze", params); + Object morphologyDocTypeObject = donatusReturn.get("morphData"); + byte[] bytesMorphologyDocTypeObject = (byte[]) morphologyDocTypeObject; + String morphologyDocTypeString = new String(bytesMorphologyDocTypeObject, "UTF-8"); + XMLReader xmlParser = new SAXParser(); + String docUri = donatusWtagDocument.getLocator(); + DonatusMorphologyDocumentContentHandler donatusMorphContentHandler = new DonatusMorphologyDocumentContentHandler(docUri, language); + xmlParser.setContentHandler(donatusMorphContentHandler); + Reader reader = new StringReader(morphologyDocTypeString); + InputSource input = new InputSource(reader); + xmlParser.parse(input); + morphologyDoc = donatusMorphContentHandler.getResult(); + morphologyDoc.setWtagBytes(wtagBytes); + } catch (SAXException e) { + e.printStackTrace(); + } catch (XmlRpcException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return morphologyDoc; + } + + public String analyze(String locator, String language, String documentString) { + String morphologyDocTypeString = null; + try { + String wtagStart = "<wtag locator=\"" + locator + "\"><section lang=\"" + language + "\">"; + String wtagEnd = "</section></wtag>"; + String wtagString = wtagStart + documentString + wtagEnd; + Vector params = new Vector(); + params.add(wtagString.getBytes("UTF8")); + HashMap donatusReturn = (HashMap) xmlClient.execute("donatus.analyze", params); + Object morphologyDocTypeObject = donatusReturn.get("morphData"); + morphologyDocTypeString = new String((byte[])morphologyDocTypeObject); + } catch (XmlRpcException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return morphologyDocTypeString; + } + +}