package com.github.dreamhead.moco.util; import com.github.dreamhead.moco.ConfigApplier; import com.github.dreamhead.moco.MocoConfig; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import java.util.List; import static com.google.common.collect.FluentIterable.from; public final class Configs { public static <T extends ConfigApplier<T>> T configItem(final T source, final MocoConfig... configs) { if (source == null) { return null; } T target = source; for (MocoConfig config : configs) { target = target.apply(config); } return target; } public static <T extends ConfigApplier<T>> ImmutableList<T> configItems(final List<T> items, final MocoConfig... configs) { return from(items).transform(Configs.<T>config(configs)).toList(); } private static <T extends ConfigApplier<T>> Function<T, T> config(final MocoConfig... configs) { return new Function<T, T>() { @Override public T apply(final T item) { return configItem(item, configs); } }; } private Configs() { } }