view 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 source

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;
  }
  
}