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

com.github.hermannpencole.nifi.config.utils.FunctionUtils Maven / Gradle / Ivy

package com.github.hermannpencole.nifi.config.utils;

import com.github.hermannpencole.nifi.config.model.ConfigException;
import com.github.hermannpencole.nifi.config.model.TimeoutException;
import com.github.hermannpencole.nifi.swagger.client.model.ProcessGroupEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

public final class FunctionUtils {
    /**
     * The logger.
     */
    private final static Logger LOG = LoggerFactory.getLogger(FunctionUtils.class);

    private FunctionUtils() { }

    public static void runTimeout(Runnable function, int timeout) {
        java.util.concurrent.ExecutorService executor = Executors.newSingleThreadExecutor();
        final Future future = executor.submit(function);
        try {
            if (timeout < 0 ) {
                future.get();
            } else {
                future.get(timeout, TimeUnit.SECONDS);
            }
        } catch (ExecutionException e) {
            LOG.debug(e.getMessage(),e);
            future.cancel(true);
            if (e.getCause() instanceof ConfigException) {
                throw (ConfigException)e.getCause();
            }
            throw new ConfigException(e.getCause());
        } catch (InterruptedException e) {
            future.cancel(true);
            throw new ConfigException(e);
        } catch (java.util.concurrent.TimeoutException e) {
            future.cancel(true);
            throw new TimeoutException(e);
        } finally {
            executor.shutdownNow();
        }

    }

    public static void runWhile(Supplier function, int interval) {
       while (function.get()) {
           try {
               //interval are in second
               Thread.sleep(interval * 1000);
           } catch (InterruptedException e) {
               throw new ConfigException(e);
           }
       }
    }

    public static void runWhile(Supplier function, int interval, int timeout) {
        runTimeout(() -> runWhile(function, interval ), timeout);
    }

    public static Optional findByComponentName(List listGroup, String name) {
        return listGroup.stream()
                .filter(item -> item.getComponent() != null && item.getComponent().getName().trim().equals(name.trim()))
                .findFirst();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy