package org.atomnuke.fallout.context;
import org.atomnuke.lifecycle.Reclaimable;
import org.atomnuke.plugin.InstanceContext;
import org.atomnuke.plugin.operation.OperationFailureException;
import org.atomnuke.source.AtomSource;
import org.atomnuke.task.context.AtomTaskContext;
import org.atomnuke.task.operation.TaskLifeCycleInitOperation;
import org.atomnuke.util.remote.CancellationRemote;
/**
*
* @author zinic
*/
public class ActorEntry {
private final InstanceContext<? extends Reclaimable> instanceContext;
private CancellationRemote cancellationRemote;
private boolean initialized;
public ActorEntry(InstanceContext<? extends Reclaimable> actorInstanceContext) {
this.instanceContext = actorInstanceContext;
initialized = false;
}
public Class instanceClass() {
return instanceContext.instance().getClass();
}
public InstanceContext<? extends Reclaimable> instanceContext() {
return instanceContext;
}
public void cancel() {
if (cancellationRemote != null) {
cancellationRemote.cancel();
}
}
public void setCancellationRemote(CancellationRemote cancellationRemote) {
this.cancellationRemote = cancellationRemote;
}
public synchronized void init(AtomTaskContext atc) throws OperationFailureException {
if (!initialized) {
((InstanceContext<AtomSource>) instanceContext).perform(TaskLifeCycleInitOperation.<AtomSource>instance(), atc);
initialized = true;
}
}
public synchronized boolean initialized() {
return initialized;
}
@Override
public String toString() {
return "ActorEntry{" + "instanceContext=" + instanceContext + ", cancellationRemote=" + cancellationRemote + ", initialized=" + initialized + '}';
}
}