/** * */ package com.yoursway.model.repository; import java.util.concurrent.ExecutorService; import com.yoursway.model.timeline.PointInTime; public class ConsumerTracker implements DependencyRequestor, IDependant { private final IConsumer consumer; private final ConsumerTrackerMaster master; private final ExecutorService service; private Resolver previousResolver; private final ISnapshotStorage storage; public ConsumerTracker(IConsumer consumer, ConsumerTrackerMaster master, ExecutorService service, ISnapshotStorage storage) { this.consumer = consumer; this.master = master; this.service = service; this.storage = storage; this.previousResolver = null; } public void call(PointInTime moment, ModelDelta delta) { if (previousResolver != null) { storage.disposeResolver(previousResolver); previousResolver = null; } final Resolver resolver = new Resolver(moment, master, this, storage, delta); service.execute(new Runnable() { public void run() { master.clearDependencies(ConsumerTracker.this); consumer.consume(resolver); if (resolver.inGodMode()) previousResolver = resolver; else storage.disposeResolver(resolver); } }); } public void dependency(IHandle<?> handle) { master.addDependency(this, handle); } }