package de.skuzzle.polly.core.internal.runonce;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.log4j.Logger;
import de.skuzzle.polly.sdk.Configuration;
import de.skuzzle.polly.sdk.RunOnceManager;
public class RunOnceManagerImpl implements RunOnceManager {
private final static Logger logger = Logger.getLogger(RunOnceManagerImpl.class
.getName());
private final Collection<Runnable> actions;
private final Configuration runOnceCfg;
public RunOnceManagerImpl(Configuration runOnceCfg) {
this.runOnceCfg = runOnceCfg;
this.actions = new ArrayList<Runnable>();
}
@Override
public synchronized void registerAction(Runnable r) {
final boolean b = this.runOnceCfg.readBoolean(r.getClass().getName());
if (b) {
logger.info("Ignoring action because it has already been executed: " +
r.getClass().getName());
return;
}
this.actions.add(r);
}
public void runActions() {
for (final Runnable r : this.actions) {
try {
logger.info("Running run-once action: " + r.getClass());
r.run();
this.runOnceCfg.setProperty(r.getClass().getName(), Boolean.TRUE);
} catch (Exception e) {
logger.error("", e);
}
}
}
}