view software/mpdl-services/mpiwg-mpdl-lt/src/de/mpg/mpiwg/berlin/mpdl/lt/morph/db/DBMorphWriterContentHandler.java @ 19:4a3641ae14d2

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 09 Nov 2011 15:32:05 +0100
parents
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.lt.morph.db;

import java.util.Hashtable;

import org.xml.sax.*;

import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Form;
import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Lemma;

public class DBMorphWriterContentHandler implements ContentHandler {
  private DBMorphHandler dbMorphHandler;
  private Element currentElement;
  private Form form;
  private Lemma lemma;
  private Hashtable<String, Form> forms;
  
  public DBMorphWriterContentHandler(DBMorphHandler dbMorphHandler) {
    this.dbMorphHandler = dbMorphHandler;
  }
  
  public void startDocument() throws SAXException {
    forms = new Hashtable<String, Form>();
  }

  public void endDocument() throws SAXException {
    forms = null;
  }
  
  // TODO setPos etc. ersetzen durch addPos etc.
  public void characters(char[] c, int start, int length) throws SAXException {
    if (currentElement != null) {
      String elemName = currentElement.name;
      if (form != null) {
        char[] cCopy = new char[length];
        System.arraycopy(c, start, cCopy, 0, length);
        String charactersStr = String.valueOf(cCopy);
        if (charactersStr != null && ! (charactersStr.trim().equals(""))) {
          if (elemName.equals("provider")) {
            form.addProvider(charactersStr);
            lemma.addProvider(charactersStr);
          } else if (elemName.equals("language")) {
            form.addLanguage(charactersStr);
            lemma.addLanguage(charactersStr);
          } else if (elemName.equals("form-name")) {
            form.addFormName(charactersStr);
          } else if (elemName.equals("lemma-name")) {
            form.addLemmaName(charactersStr);
            lemma.addLemmaName(charactersStr);
          } else if (elemName.equals("pos")) {
            form.addPos(charactersStr);
          } else if (elemName.equals("tense")) {
            form.addTense(charactersStr);
          } else if (elemName.equals("voice")) {
            form.addVoice(charactersStr);
          } else if (elemName.equals("casus")) {
            form.addCasus(charactersStr);
          } else if (elemName.equals("number")) {
            form.addNumber(charactersStr);
          } else if (elemName.equals("mood")) {
            form.addMood(charactersStr);
          } else if (elemName.equals("person")) {
            form.addPerson(charactersStr);
          } else if (elemName.equals("gender")) {
            form.addGender(charactersStr);
          } else if (elemName.equals("definite")) {
            form.addDefinite(charactersStr);
          }
        }
      }
    } 
  }

  public void ignorableWhitespace(char[] c, int start, int length) throws SAXException {
  }

  public void processingInstruction(String target, String data) throws SAXException {
  }

  public void setDocumentLocator(org.xml.sax.Locator arg1) {
  }

  public void endPrefixMapping(String prefix) throws SAXException {
  }

  public void skippedEntity(String name) throws SAXException {
  }

  public void startElement(String uri, String localName, String name, Attributes attrs) throws SAXException {
    currentElement = new Element(name, "");
    if (localName.equals("form")) {
      form = new Form();
      lemma = new Lemma();
    }
  }

  public void endElement(String uri, String localName, String name) throws SAXException {
    currentElement = null;
    if (localName.equals("form")) {
      String keyStr = form.getFormName();
      forms.put(keyStr, form);
      write(form, lemma);
      form = null;
      lemma = null;
    }
  }

  public void startPrefixMapping(String prefix, String uri) throws SAXException {
  }
  
  private void write(Form form, Lemma lemma) throws SAXException {
    try {
      dbMorphHandler.writeFormLemma(form, lemma);
      dbMorphHandler.writeLemmaForm(lemma, form);
    } catch (ApplicationException e) {
      throw new SAXException(e);
    }
  }
  
  private class Element {
    String name;
    String value;
    
    Element(String name) {
      this.name = name;
    }

    Element(String name, String value) {
      this.name = name;
      this.value = value;
    }
  }
}