view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/donatus/xmlrpc/DonatusMorphologyDocument.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.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;

public class DonatusMorphologyDocument {
  private String docUri;
  private String language = DonatusConstants.DEFAULT_LANGUAGE;
  private HashMap<String, DonatusVariant> variants; // hold this variable for performance reasons: a key on each lemma variant
  private HashMap<String, DonatusLemma> lemmas;
  private ArrayList<DonatusContextForm> contextForms;
  private byte[] documentBytes;
  private byte[] wtagBytes;

  public DonatusMorphologyDocument(String docUri) {
    this.docUri = docUri;
    this.variants = new HashMap<String, DonatusVariant>();
    this.lemmas = new HashMap<String, DonatusLemma>();
    this.contextForms = new ArrayList<DonatusContextForm>();
  }

  public ArrayList<DonatusLemma> getLemmas() {
    Collection<DonatusLemma> values = lemmas.values();
    ArrayList<DonatusLemma> retArrayList = new ArrayList<DonatusLemma>();
    Iterator<DonatusLemma> iter = values.iterator(); 
    while(iter.hasNext()) {
      DonatusLemma lemma = iter.next();
      retArrayList.add(lemma);
    } 
    return retArrayList;
  }
  
  public String getDocUri() {
    return docUri;
  }
  
  public ArrayList<DonatusContextForm> getContextForms() {
    return contextForms;
  }
  
  public void setWtagBytes(byte[] wtagBytes) {
    this.wtagBytes = wtagBytes;
  }
  
  public byte[] getWtagBytes() {
    return wtagBytes;  
  }
  
  public byte[] getDocumentBytes() throws ApplicationException {
    String contentXml = getXmlString();
    try {
      documentBytes = contentXml.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw new ApplicationException(e);
    }
    return documentBytes;  
  }
  
  public String getLemmaFormsString() {
    String result = "";
    ArrayList<DonatusLemma> lemmas = getLemmas();
    for (int i=0; i<lemmas.size(); i++) {
      DonatusLemma lemma = lemmas.get(i);
      String lemmaFormString = lemma.getForm();
      result += lemmaFormString + " ";
    }
    return result.trim();
  }
  
  public ArrayList<DonatusVariant> getVariants() {
    ArrayList<DonatusVariant> result = new ArrayList<DonatusVariant>();
    ArrayList<DonatusLemma> lemmas = getLemmas();
    for (int i=0; i<lemmas.size(); i++) {
      DonatusLemma lemma = lemmas.get(i);
      ArrayList<DonatusVariant> lemmaVariants = lemma.getVariants();
      result.addAll(lemmaVariants);
    }
    return result;
  }
  
  public String getLanguage() {
    return language;  
  }
  
  public void setLanguage(String language) {
    this.language = language;  
  }
  
  public DonatusVariant getVariant(String variantForm) {
    String hashKey = language + "###" + variantForm;
    DonatusVariant variant = variants.get(hashKey);
    return variant;
  }
  
  public DonatusVariant putVariant(DonatusVariant variant) {
    String variantForm = variant.getForm();
    String hashKey = language + "###" + variantForm;
    DonatusVariant putReturn = this.variants.put(hashKey, variant);
    return putReturn;
  }
  
  public DonatusLemma getLemma(String lemmaForm) {
    String hashKey = language + "###" + lemmaForm;
    DonatusLemma lemma = lemmas.get(hashKey);
    return lemma;
  }
  
  public void putLemma(DonatusLemma lemma) { 
    String lemmaForm = lemma.getForm();
    String lang = lemma.getLanguage();
    String hashKey = lang + "###" + lemmaForm;
    lemmas.put(hashKey, lemma);
  }
  
  public void addContextForm(DonatusContextForm form) {
    contextForms.add(form);  
  }
  
  public String getXmlString() {
    StringBuffer xmlString = new StringBuffer("<morphology>");
    ArrayList<DonatusLemma> lemmas = getLemmas();
    for (int i=0; i<lemmas.size(); i++) {
      DonatusLemma lemma = lemmas.get(i);
      String lemmaXmlString = lemma.getXmlString();
      xmlString.append(lemmaXmlString);
    }
    for (int i=0; i<contextForms.size(); i++) {
      DonatusContextForm contextForm = contextForms.get(i);
      String contextFormXmlString = contextForm.getXmlString();
      xmlString.append(contextFormXmlString);
    }
    xmlString.append("</morphology>");
    return xmlString.toString();
  }
  
}