X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=e59c8e69311f92d87cc7affea2a84ebfe5ca2911;hb=351ac6b0a5da732e79495cc1643295b4d6a4f233;hp=7ddc2470e934e3936db1669a50a38d887d2bce14;hpb=fcd011a16b119966906b3137513e9432ab86c3a8;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 7ddc247..e59c8e6 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -19,8 +19,10 @@ package net.pterodactylus.sone.core; import java.net.MalformedURLException; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.logging.Level; @@ -55,6 +57,9 @@ public class Core extends AbstractService { /** The local Sones. */ private final Set localSones = new HashSet(); + /** Sone inserters. */ + private final Map soneInserters = new HashMap(); + /** * Creates a new core. */ @@ -104,6 +109,20 @@ public class Core extends AbstractService { // /** + * Adds the given Sone. + * + * @param sone + * The Sone to add + */ + public void addSone(Sone sone) { + if (localSones.add(sone)) { + SoneInserter soneInserter = new SoneInserter(freenetInterface, sone); + soneInserter.start(); + soneInserters.put(sone, soneInserter); + } + } + + /** * Creates a new Sone at a random location. * * @param name @@ -151,6 +170,9 @@ public class Core extends AbstractService { try { logger.log(Level.FINEST, "Creating new Sone “%s” at %s (%s)…", new Object[] { name, finalRequestUri, finalInsertUri }); sone = new Sone(UUID.randomUUID(), name, new FreenetURI(finalRequestUri), new FreenetURI(finalInsertUri)); + /* set modification counter to 1 so it is inserted immediately. */ + sone.setModificationCounter(1); + addSone(sone); } catch (MalformedURLException mue1) { throw new SoneException(Type.INVALID_URI); } @@ -165,6 +187,8 @@ public class Core extends AbstractService { * The sone to delete */ public void deleteSone(Sone sone) { + SoneInserter soneInserter = soneInserters.remove(sone); + soneInserter.stop(); localSones.remove(sone); } @@ -185,6 +209,10 @@ public class Core extends AbstractService { */ @Override protected void serviceStop() { + /* stop all Sone inserters. */ + for (SoneInserter soneInserter : soneInserters.values()) { + soneInserter.stop(); + } saveConfiguration(); } @@ -217,8 +245,11 @@ public class Core extends AbstractService { String id = configuration.getStringValue("Sone/Name." + soneName + "/ID").getValue(null); String insertUri = configuration.getStringValue("Sone/Name." + soneName + "/InsertURI").getValue(null); String requestUri = configuration.getStringValue("Sone/Name." + soneName + "/RequestURI").getValue(null); + long modificationCounter = configuration.getLongValue("Sone/Name." + soneName + "/ModificationCounter").getValue((long) 0); try { - localSones.add(new Sone(UUID.fromString(id), soneName, new FreenetURI(requestUri), new FreenetURI(insertUri))); + Sone sone = new Sone(UUID.fromString(id), soneName, new FreenetURI(requestUri), new FreenetURI(insertUri)); + sone.setModificationCounter(modificationCounter); + addSone(sone); } catch (MalformedURLException mue1) { logger.log(Level.WARNING, "Could not create Sone from requestUri (“" + requestUri + "”) and insertUri (“" + insertUri + "”)!", mue1); } @@ -249,6 +280,7 @@ public class Core extends AbstractService { configuration.getStringValue("Sone/Name." + sone.getName() + "/ID").setValue(sone.getId()); configuration.getStringValue("Sone/Name." + sone.getName() + "/RequestURI").setValue(sone.getRequestUri().toString()); configuration.getStringValue("Sone/Name." + sone.getName() + "/InsertURI").setValue(sone.getInsertUri().toString()); + configuration.getLongValue("Sone/Name." + sone.getName() + "/ModificationCounter").setValue(sone.getModificationCounter()); } } catch (ConfigurationException ce1) { logger.log(Level.WARNING, "Could not store configuration!", ce1);