view software/mpdl-services/mpiwg-mpdl-lt/src/de/mpg/mpiwg/berlin/mpdl/lt/morph/db/DBMorphWriter.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.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import com.sun.org.apache.xerces.internal.parsers.SAXParser;

import de.mpg.mpiwg.berlin.mpdl.lt.general.Constants;
import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Form;
import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Lemma;
import de.mpg.mpiwg.berlin.mpdl.lt.morph.db.DBMorphHandler;
import de.mpg.mpiwg.berlin.mpdl.util.Util;
import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;

public class DBMorphWriter {
  private static DBMorphWriter instance;
  private static String DATA_DIR = Constants.getInstance().getDataDir();
  private static String DB_DIR_DONATUS = DATA_DIR + "/dataBerkeleyDB/donatus";
  private static String DATA_FILES_DIR = DATA_DIR + "/dataFiles";
  private DBMorphHandler dbMorphHandler;
  private Date beginOfOperation;
  private Date endOfOperation;
  
  public static DBMorphWriter getInstance() throws ApplicationException {
    if (instance == null) {
      instance = new DBMorphWriter();
      instance.init();
    }
    return instance;
  }

  /**
   * 
   */
  public static void main(String[] args) throws ApplicationException {
    getInstance();
    instance.beginOperation();
    System.out.println("Start ...");
    instance.init();
    instance.openMorphData();
    // instance.deleteMorphData();
    long size = instance.getSize();
    System.out.println("Count forms: " + size);
    // instance.writeMorphData();
    // instance.readSampleData();
    instance.end();
    instance.endOperation();
    Double elapsedTime = new Util().getSecondWithMillisecondsBetween(instance.beginOfOperation, instance.endOfOperation);
    System.out.println("End.");
    System.out.println("Needed time: " + elapsedTime + " seconds");
  }

  private void init() throws ApplicationException {
    dbMorphHandler = new DBMorphHandler(DB_DIR_DONATUS);
    dbMorphHandler.start();
  }
  
  private void openMorphData() throws ApplicationException {
    dbMorphHandler.openDatabases();
  }
  
  private void deleteMorphData() throws ApplicationException {
    dbMorphHandler.deleteMorphData();
  }
  
  private void writeMorphData() throws ApplicationException {
    String inputFileNameLatin = DATA_FILES_DIR + "/" + "perseus-latin-forms.xml";
    instance.write(inputFileNameLatin);
    String inputFileNameGreek = DATA_FILES_DIR + "/" + "perseus-greek-forms.xml";
    instance.write(inputFileNameGreek);
    String inputFileNameArabic = DATA_FILES_DIR + "/" + "perseus-arabic-forms.xml";
    instance.write(inputFileNameArabic);
    String inputFileNameDutch = DATA_FILES_DIR + "/" + "celex-dutch-forms.xml";
    instance.write(inputFileNameDutch);
    String inputFileNameGerman = DATA_FILES_DIR + "/" + "celex-german-forms.xml";
    instance.write(inputFileNameGerman);
    String inputFileNameEnglish = DATA_FILES_DIR + "/" + "celex-english-forms.xml";
    instance.write(inputFileNameEnglish);
    String inputFileNameFrench = DATA_FILES_DIR + "/" + "lexique-french-forms.xml";
    instance.write(inputFileNameFrench);
    String inputFileNameItalian = DATA_FILES_DIR + "/" + "donatus-italian-forms.xml";
    instance.write(inputFileNameItalian);
    String[] languages = {"ar", "de", "en", "el", "fr", "it", "la"};
    for (int i = 0; i < languages.length; i++) {
      String language = languages[i];
      String inputFileNameDonatusSup = DATA_FILES_DIR + "/" + "donatus-sup-" + language + "-forms.xml";
      instance.write(inputFileNameDonatusSup);
    }
    String[] donatusAdditionalSups = {"cache-la", "cache-el", "cache-it"};
    for (int i = 0; i < donatusAdditionalSups.length; i++) {
      String donatusAdditionalSupName = donatusAdditionalSups[i];
      String inputFileNameDonatusAddSup = DATA_FILES_DIR + "/donatusAdditionalSup/" + "donatus-sup-" + donatusAdditionalSupName + ".xml";
      instance.write(inputFileNameDonatusAddSup);
    }
  }
  
  private void write(String inputFileName) throws ApplicationException {
    File inputFile = new File(inputFileName);
    if (! inputFile.exists()) {
      System.out.println("Input file: " + inputFile.getAbsolutePath() + " does not exist.");
      return;
    }
    DBMorphWriterContentHandler morphContentHandler = new DBMorphWriterContentHandler(dbMorphHandler);
    try {
      XMLReader xmlParser = new SAXParser();
      xmlParser.setContentHandler(morphContentHandler);
      InputStream inputStream = new FileInputStream(inputFile);
      BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
      InputSource input = new InputSource(bufferedInputStream);
      xmlParser.parse(input);
      bufferedInputStream.close();
    } catch (SAXException e) {
      throw new ApplicationException(e);
    } catch (IOException e) {
      throw new ApplicationException(e);
    }
  }
  
  private long getSize() throws ApplicationException {
    long size = dbMorphHandler.getSize();
    return size;
  }
  
  private void addSampleData() throws ApplicationException {
    Lemma l1 = new Lemma("perseus", "la", "abrogo");
    Form f1 = new Form("perseus", "la", "abrogare");
    Form f2 = new Form("perseus", "la", "abroges");
    dbMorphHandler.writeFormLemma(f1, l1);
    dbMorphHandler.writeLemmaForm(l1, f1);
    dbMorphHandler.writeLemmaForm(l1, f2);
  }
  
  private void readSampleData() throws ApplicationException {
    ArrayList<Form> forms = dbMorphHandler.readForms("la", "abrogo");
    System.out.println("Forms: " + forms);
  }
  
  private void deleteSampleData() throws ApplicationException {
    Lemma l1 = new Lemma("perseus", "la", "abrogo");
    Form f1 = new Form("perseus", "la", "abrogare");
    Form f2 = new Form("perseus", "la", "abroges");
    dbMorphHandler.deleteLemma(l1);
    dbMorphHandler.deleteForm(f1);
    dbMorphHandler.deleteForm(f2);
  }
  
  private void end() throws ApplicationException {
    dbMorphHandler.closeDatabases();
  }

  private void beginOperation() {
    beginOfOperation = new Date();
  }

  private void endOperation() {
    endOfOperation = new Date();
  }

}