package org.zstack.core.asyncbatch; import org.zstack.header.core.AsyncBackup; import org.zstack.utils.DebugUtils; import java.util.Collection; /** * Created by xing5 on 2016/6/26. */ public abstract class LoopAsyncBatch<T> extends AsyncBatch { public LoopAsyncBatch(AsyncBackup one, AsyncBackup... others) { super(one, others); } protected abstract Collection<T> collect(); protected abstract AsyncBatchRunner forEach(T item); @Override protected abstract void done(); @Override protected final void setup() { Collection<T> collection = collect(); DebugUtils.Assert(collection != null, "collect() cannot return null"); for (T item : collection) { batch(forEach(item)); } } }