com.sri.ai.praise.lang.translate.cli.RunTranslationsCLI.java Source code

Java tutorial

Introduction

Here is the source code for com.sri.ai.praise.lang.translate.cli.RunTranslationsCLI.java

Source

/*
 * Copyright (c) 2015, SRI International
 * All rights reserved.
 * Licensed under the The BSD 3-Clause License;
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 * 
 * http://opensource.org/licenses/BSD-3-Clause
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * Neither the name of the aic-praise nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.sri.ai.praise.lang.translate.cli;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.google.common.annotations.Beta;
import com.google.common.base.Stopwatch;
import com.sri.ai.praise.lang.ModelLanguage;
import com.sri.ai.praise.lang.translate.Translator;
import com.sri.ai.praise.lang.translate.TranslatorFactory;
import com.sri.ai.praise.lang.translate.TranslatorOptions;
import com.sri.ai.praise.lang.translate.util.InputModelReaders;
import com.sri.ai.praise.lang.translate.util.TranslatedOutputs;

/**
 * Command Line Interface (CLI) for performing a set of translations.
 * 
 * @author oreilly
 *
 */
@Beta
public class RunTranslationsCLI {

    static class TranslationArgs {
        File rootModelOutputDirectory;
        List<Translator> translators = new ArrayList<>();
    }

    /**
     * Translate Probabilistic Models based on given command line arguments.
     * 
     * @param args
     *        pass '--help' to see description of expected program arguments.
     */
    public static void main(String[] args) {
        TranslationArgs translationArgs = getArgs(args);

        for (Translator translator : translationArgs.translators) {
            File sourceDirectory = new File(translationArgs.rootModelOutputDirectory,
                    translator.getSource().getCode());
            if (!sourceDirectory.isDirectory()) {
                throw new IllegalArgumentException("Source Directory " + sourceDirectory + " does not exist");
            }
            File targetDirectory = new File(translationArgs.rootModelOutputDirectory,
                    translator.getTarget().getCode());
            if (!targetDirectory.isDirectory()) {
                targetDirectory.mkdir();
            }

            String sourceModelFileExtension = translator.getInputFileExtensions()[0];
            for (File sourceModelFile : sourceDirectory
                    .listFiles((dir, name) -> name.endsWith(sourceModelFileExtension))) {

                System.out.println("Translating " + sourceModelFile.getName() + " from "
                        + translator.getSource().getCode() + " to " + translator.getTarget().getCode());

                String sourceModelFileNameWithNoExtension = translator
                        .getInputModelFileNameWithNoExtension(sourceModelFile);
                Stopwatch sw = Stopwatch.createStarted();
                try (InputModelReaders inputModelReaders = new InputModelReaders(translator, sourceModelFile,
                        sourceModelFileExtension);
                        TranslatedOutputs translatedOutputs = new TranslatedOutputs(translator, sourceModelFile,
                                sourceModelFileExtension)) {

                    translator.translate(sourceModelFileNameWithNoExtension, inputModelReaders.readers,
                            translatedOutputs.writers, new TranslatorOptions());
                } catch (Exception ex) {
                    System.err.println("Error during translation");
                    ex.printStackTrace();
                    System.exit(-1);
                }
                sw.stop();

                System.out.println("Took " + sw.toString());
                // TODO - append the time it took to translate the file to a .csv file            
            }
        }
    }

    private static TranslationArgs getArgs(String[] args) {
        TranslationArgs result = new TranslationArgs();
        // TODO - get values from the command line arguments, e.g:
        //      -modelFileDirectory -translate=HOGMv1-to-UAI-to-HuginDotNet   
        // see RandomHOGMv1Generator for example.      
        result.rootModelOutputDirectory = new File(args[0]);
        result.translators.add(TranslatorFactory.newTranslator(ModelLanguage.UAI, ModelLanguage.HOGMv1));
        //      result.translators.add(TranslatorFactory.newTranslator(ModelLanguage.HOGMv1, ModelLanguage.UAI));   
        //      result.translators.add(TranslatorFactory.newTranslator(ModelLanguage.UAI, ModelLanguage.HuginDotNet));

        return result;
    }
}