All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sitoolkit.wt.gui.infra.ConversationProcess Maven / Gradle / Ivy

There is a newer version: 2.3
Show newest version
package org.sitoolkit.wt.gui.infra;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

public class ConversationProcess {

    private static final Logger LOG = Logger.getLogger(ConversationProcess.class.getName());

    private Process process;

    private PrintWriter processWriter;

    public void start(Console console, File directory, String... command) {
        start(console, directory, Arrays.asList(command));
    }

    public void start(Console console, File directory, List command) {
        ProcessBuilder pb = new ProcessBuilder(command);
        try {
            pb.directory(directory);
            process = pb.start();
            LOG.info("process " + process + " starts");

            ExecutorContainer.get()
                    .execute(new ConsoleStreamReader(process.getInputStream(), console));

            processWriter = new PrintWriter(process.getOutputStream());
        } catch (IOException e) {
            throw new UnExpectedException(e);
        }
    }

    public void input(String input) {
        processWriter.println(input);
        processWriter.flush();
    }

    public void destroy() {
        process.destroy();
    }

    public void waitFor(WaitCallback callback) {
        if (process != null) {
            ExecutorContainer.get().execute(() -> {
                try {
                    int exitCode = process.waitFor();
                    LOG.info("process " + process + " exits with code : " + exitCode);
                } catch (InterruptedException e) {
                    // TODO 例外処理
                    e.printStackTrace();
                } finally {
                    callback.callback();
                }
            });
        }
    }

    public static interface WaitCallback {
        void callback();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy