import static java.lang.System.currentTimeMillis;
import static net.pterodactylus.sone.data.Album.NOT_EMPTY;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.nio.charset.Charset;
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;
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.
try {
sone.setStatus(SoneStatus.inserting);
long insertTime = currentTimeMillis();
- insertInformation.setTime(insertTime);
eventBus.post(new SoneInsertingEvent(sone));
FreenetURI finalUri = freenetInterface.insertDirectory(insertInformation.getInsertUri(), insertInformation.generateManifestEntries(), "index.html");
eventBus.post(new SoneInsertedEvent(sone, currentTimeMillis() - insertTime));
}
}
+ 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
this.fingerprint = sone.getFingerprint();
soneProperties.put("id", sone.getId());
soneProperties.put("name", sone.getName());
- soneProperties.put("time", sone.getTime());
+ soneProperties.put("time", currentTimeMillis());
soneProperties.put("requestUri", sone.getRequestUri());
soneProperties.put("insertUri", sone.getInsertUri());
soneProperties.put("profile", sone.getProfile());
return (FreenetURI) soneProperties.get("insertUri");
}
- /**
- * Sets the time of the Sone at the time of the insert.
- *
- * @param time
- * The time of the Sone
- */
- public void setTime(long time) {
- soneProperties.put("time", time);
- }
-
//
// ACTIONS
//
@SuppressWarnings("synthetic-access")
private ManifestElement createManifestElement(String name, String contentType, String templateName) {
InputStreamReader templateInputStreamReader = null;
+ InputStream templateInputStream = null;
Template template;
try {
- templateInputStreamReader = new InputStreamReader(getClass().getResourceAsStream(templateName), utf8Charset);
+ templateInputStream = getClass().getResourceAsStream(templateName);
+ templateInputStreamReader = new InputStreamReader(templateInputStream, utf8Charset);
template = TemplateParser.parse(templateInputStreamReader);
} catch (TemplateException te1) {
logger.log(Level.SEVERE, String.format("Could not parse template ā%sā!", templateName), te1);
return null;
} finally {
Closer.close(templateInputStreamReader);
+ Closer.close(templateInputStream);
}
TemplateContext templateContext = templateContextFactory.createTemplateContext();