package com.qubling.sidekick.fetch;
import java.util.ArrayList;
import java.util.List;
import com.qubling.sidekick.instance.Instance;
import com.qubling.sidekick.model.Model;
import com.qubling.sidekick.search.ResultsForUpdate;
public class SerialUpdateFetcher<SomeInstance extends Instance<SomeInstance>>
extends AbstractFetcher<SomeInstance> implements
UpdateFetcher<SomeInstance> {
private List<UpdateFetcher<SomeInstance>> fetchers;
public SerialUpdateFetcher(Model<SomeInstance> model, UpdateFetcher<SomeInstance> origin) {
super(model);
fetchers = new ArrayList<UpdateFetcher<SomeInstance>>();
fetchers.add(origin);
}
@Override
public void setIncomingResultSet(ResultsForUpdate<SomeInstance> input) {
for (UpdateFetcher<SomeInstance> fetcher : fetchers) {
fetcher.setIncomingResultSet(input);
}
}
@Override
public boolean needsUpdate(SomeInstance instance) {
for (UpdateFetcher<SomeInstance> fetcher : fetchers) {
if (fetcher.needsUpdate(instance))
return true;
}
return false;
}
@Override
protected void execute() {
// Log.d("SerialUpdateFetcher", "START execute() " + this);
for (UpdateFetcher<SomeInstance> fetcher : fetchers) {
// Log.d("SerialUpdateFetcher", "Run " + fetcher);
fetcher.run();
}
// Log.d("SerialUpdateFetcher", "END execute()");
}
@Override
public SerialUpdateFetcher<SomeInstance> thenDoFetch(UpdateFetcher<SomeInstance> fetcher) {
// Log.d("SerialUpdateFetcher", "Adding new fetcher " + fetcher);
fetchers.add(fetcher);
return this;
}
@Override
public String toString() {
StringBuilder fetcherList = new StringBuilder();
for (int i = 0; i < 3 && i < fetchers.size(); i++) {
UpdateFetcher<SomeInstance> fetcher = fetchers.get(i);
fetcherList.append(fetcher);
fetcherList.append(",");
}
if (fetchers.size() > 3) fetcherList.append("...");
return getModel() + ":SerialUpdateFetcher(" + fetcherList + ")";
}
}