import java.util.logging.Level;
import java.util.logging.Logger;
+import net.pterodactylus.sone.core.Options.Option;
+import net.pterodactylus.sone.core.Options.OptionWatcher;
import net.pterodactylus.sone.core.event.SoneInsertAbortedEvent;
import net.pterodactylus.sone.core.event.SoneInsertedEvent;
import net.pterodactylus.sone.core.event.SoneInsertingEvent;
import net.pterodactylus.util.template.TemplateParser;
import net.pterodactylus.util.template.XmlFilter;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Ordering;
import com.google.common.eventbus.EventBus;
private final FreenetInterface freenetInterface;
private final SoneModificationDetector soneModificationDetector;
+ private final long delay;
/** The Sone to insert. */
private volatile Sone sone;
* The Sone to insert
*/
public SoneInserter(Core core, EventBus eventBus, FreenetInterface freenetInterface, Sone sone) {
+ this(core, eventBus, freenetInterface, sone, new SoneModificationDetector(core, sone, insertionDelay), 1000);
+ }
+
+ @VisibleForTesting
+ SoneInserter(Core core, EventBus eventBus, FreenetInterface freenetInterface, Sone sone, SoneModificationDetector soneModificationDetector, long delay) {
super("Sone Inserter for “" + sone.getName() + "”", false);
this.core = core;
this.eventBus = eventBus;
this.freenetInterface = freenetInterface;
this.sone = sone;
- this.soneModificationDetector = new SoneModificationDetector(core, sone, insertionDelay);
+ this.soneModificationDetector = soneModificationDetector;
+ this.delay = delay;
}
//
* @return This Sone inserter
*/
public SoneInserter setSone(Sone sone) {
- checkArgument((this.sone == null) || sone.equals(this.sone), "Sone to insert can not be set to a different Sone");
+ checkArgument(sone.equals(this.sone), "Sone to insert can not be set to a different Sone");
this.sone = sone;
return this;
}
+ @VisibleForTesting
+ static AtomicInteger getInsertionDelay() {
+ return insertionDelay;
+ }
+
/**
* Changes the insertion delay, i.e. the time the Sone inserter waits after it
* has noticed a Sone modification before it starts the insert.
while (!shouldStop()) {
try {
/* check every second. */
- sleep(1000);
+ sleep(delay);
if (soneModificationDetector.isEligibleForInsert()) {
InsertInformation insertInformation = new InsertInformation(sone);
}
}
+ static class SetInsertionDelay implements OptionWatcher<Integer> {
+
+ @Override
+ public void optionChanged(Option<Integer> option, Integer oldValue, Integer newValue) {
+ setInsertionDelay(newValue);
+ }
+
+ }
+
/**
* Container for information that are required to insert a Sone. This
* container merely exists to copy all relevant data without holding a lock
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
- private class InsertInformation {
+ @VisibleForTesting
+ class InsertInformation {
private final String fingerprint;
// ACCESSORS
//
- private String getFingerprint() {
+ @VisibleForTesting
+ String getFingerprint() {
return fingerprint;
}