Search in sources :

Example 1 with WrapFuture

use of org.fagu.fmv.soft.exec.WrapFuture in project fmv by f-agu.

the class SoftExecutor method executeInBackground.

/**
 * @param executorService
 * @return
 * @throws IOException
 */
public Future<SoftExecutor.Executed> executeInBackground(ExecutorService executorService) throws IOException {
    return execute((fmvExecutor, commandLine, execListener, readLineList) -> {
        final String cmdLineStr = CommandLineUtils.toLine(commandLine);
        final AtomicLong startTime = new AtomicLong();
        final AtomicLong time = new AtomicLong();
        final PIDProcessOperator pidProcessOperator = new PIDProcessOperator();
        fmvExecutor.addProcessOperator(pidProcessOperator);
        return new WrapFuture<>(fmvExecutor.executeAsynchronous(geExecuteDelegate(), commandLine, executorService, // before
        () -> {
            startTime.set(System.currentTimeMillis());
            execListener.eventExecuting(cmdLineStr);
        }, // after
        exitValue -> {
            time.set(System.currentTimeMillis() - startTime.get());
            execListener.eventExecuted(cmdLineStr, exitValue, time.get());
        }, // exception
        exception -> {
            if (exception instanceof ExecuteException) {
                ExecuteException e = (ExecuteException) exception;
                FMVExecuteException fmvExecuteException = new FMVExecuteException(softProvider.getExceptionKnownAnalyzerClass(), e, cmdLineStr, readLineList);
                execListener.eventException(fmvExecuteException);
                ExceptionKnownAnalyzers.doOrThrows(softProvider.getExceptionKnownAnalyzerClass(), fmvExecuteException, exceptionKnowConsumer, exceptionConsumer);
            }
        }), exitValue -> new Executed(pidProcessOperator.getPID(), exitValue, time.get()));
    });
}
Also used : PIDProcessOperator(org.fagu.fmv.soft.exec.PIDProcessOperator) FMVCommandLine(org.fagu.fmv.soft.exec.FMVCommandLine) HashMap(java.util.HashMap) CommandLine(org.apache.commons.exec.CommandLine) PIDProcessOperator(org.fagu.fmv.soft.exec.PIDProcessOperator) ArrayList(java.util.ArrayList) SoftProvider(org.fagu.fmv.soft.find.SoftProvider) OptionalLong(java.util.OptionalLong) Future(java.util.concurrent.Future) ExceptionKnownConsumer(org.fagu.fmv.soft.exec.exception.ExceptionKnownConsumer) WrapFuture(org.fagu.fmv.soft.exec.WrapFuture) ExceptionConsumer(org.fagu.fmv.soft.exec.exception.ExceptionConsumer) Duration(java.time.Duration) Map(java.util.Map) LookReader(org.fagu.fmv.soft.exec.LookReader) ExecuteException(org.apache.commons.exec.ExecuteException) ExecutorService(java.util.concurrent.ExecutorService) CommandLineUtils(org.fagu.fmv.soft.exec.CommandLineUtils) FMVExecutor(org.fagu.fmv.soft.exec.FMVExecutor) ReadLine(org.fagu.fmv.soft.exec.ReadLine) ExceptionKnownAnalyzers(org.fagu.fmv.soft.exec.exception.ExceptionKnownAnalyzers) IOException(java.io.IOException) FMVExecuteException(org.fagu.fmv.soft.exec.exception.FMVExecuteException) ExecHelper(org.fagu.fmv.soft.exec.ExecHelper) File(java.io.File) Objects(java.util.Objects) Consumer(java.util.function.Consumer) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) BufferedReadLine(org.fagu.fmv.soft.exec.BufferedReadLine) Proxifier(org.fagu.fmv.soft.utils.Proxifier) Collections(java.util.Collections) AtomicLong(java.util.concurrent.atomic.AtomicLong) FMVExecuteException(org.fagu.fmv.soft.exec.exception.FMVExecuteException) WrapFuture(org.fagu.fmv.soft.exec.WrapFuture) ExecuteException(org.apache.commons.exec.ExecuteException) FMVExecuteException(org.fagu.fmv.soft.exec.exception.FMVExecuteException)

Aggregations

File (java.io.File)1 IOException (java.io.IOException)1 Duration (java.time.Duration)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Objects (java.util.Objects)1 OptionalLong (java.util.OptionalLong)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 Consumer (java.util.function.Consumer)1 CommandLine (org.apache.commons.exec.CommandLine)1 ExecuteException (org.apache.commons.exec.ExecuteException)1 BufferedReadLine (org.fagu.fmv.soft.exec.BufferedReadLine)1 CommandLineUtils (org.fagu.fmv.soft.exec.CommandLineUtils)1 ExecHelper (org.fagu.fmv.soft.exec.ExecHelper)1 FMVCommandLine (org.fagu.fmv.soft.exec.FMVCommandLine)1