From 87386f93e655178eed6024babd50bf236ab882ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Wed, 13 Oct 2010 16:41:51 +0200 Subject: [PATCH] Add modification counter to Sone. --- .../java/net/pterodactylus/sone/core/Core.java | 6 +++- .../java/net/pterodactylus/sone/data/Sone.java | 34 +++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 4be02f6..6213e05 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -243,8 +243,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 { - addSone(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); } @@ -275,6 +278,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); diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 4a73470..bb36a9c 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -48,6 +48,9 @@ public class Sone { /** All friend Sones. */ private final Set friendSones = new HashSet(); + /** Modification count. */ + private volatile long modificationCounter = 0; + /** * Creates a new Sone. * @@ -149,8 +152,10 @@ public class Sone { * The friend Sone to add * @return This Sone (for method chaining) */ - public Sone addFriendSone(Sone friendSone) { - friendSones.add(friendSone); + public synchronized Sone addFriendSone(Sone friendSone) { + if (friendSones.add(friendSone)) { + modificationCounter++; + } return this; } @@ -161,11 +166,32 @@ public class Sone { * The friend Sone to remove * @return This Sone (for method chaining) */ - public Sone removeFriendSone(Sone friendSone) { - friendSones.remove(friendSone); + public synchronized Sone removeFriendSone(Sone friendSone) { + if (friendSones.remove(friendSone)) { + modificationCounter++; + } return this; } + /** + * Returns the modification counter. + * + * @return The modification counter + */ + public synchronized long getModificationCounter() { + return modificationCounter; + } + + /** + * Sets the modification counter. + * + * @param modificationCounter + * The new modification counter + */ + public synchronized void setModificationCounter(long modificationCounter) { + this.modificationCounter = modificationCounter; + } + // // OBJECT METHODS // -- 2.7.4