storedSone.setReplies(sone.getReplies());
storedSone.setLikePostIds(sone.getLikedPostIds());
storedSone.setLikeReplyIds(sone.getLikedReplyIds());
- storedSone.updateUris(sone.getRequestUri().getEdition());
+ storedSone.setLatestEdition(sone.getRequestUri().getEdition());
}
saveSone(storedSone);
}
public void saveSone(Sone sone) {
if (!isLocalSone(sone)) {
logger.log(Level.FINE, "Tried to save non-local Sone: %s", sone);
+ return;
+ }
+ if (!(sone.getIdentity() instanceof OwnIdentity)) {
+ logger.log(Level.WARNING, "Local Sone without OwnIdentity found, refusing to save: %s", sone);
+ return;
}
+ identityManager.setProperty((OwnIdentity) sone.getIdentity(), "Sone.LatestEdition", String.valueOf(sone.getLatestEdition()));
/* TODO - implement saving. */
}
import net.pterodactylus.sone.data.Reply;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.freenet.StringBucket;
-import net.pterodactylus.sone.freenet.wot.OwnIdentity;
import net.pterodactylus.util.io.Closer;
import net.pterodactylus.util.logging.Logging;
import net.pterodactylus.util.service.AbstractService;
try {
core.setSoneStatus(sone, SoneStatus.inserting);
FreenetURI finalUri = freenetInterface.insertDirectory(insertInformation.getInsertUri().setKeyType("USK").setSuggestedEdition(0), insertInformation.generateManifestEntries(), "index.html");
- sone.updateUris(finalUri.getEdition());
+ sone.setLatestEdition(finalUri.getEdition());
/* TODO - better encapsulation? */
- core.getIdentityManager().setProperty((OwnIdentity) sone.getIdentity(), "Sone.LatestEdition", String.valueOf(finalUri.getEdition()));
+ core.saveSone(sone);
success = true;
logger.log(Level.INFO, "Inserted Sone “%s” at %s.", new Object[] { sone.getName(), finalUri });
} catch (SoneException se1) {
/* This will be null for remote Sones! */
private volatile FreenetURI insertUri;
+ /** The latest edition of the Sone. */
+ private volatile long latestEdition;
+
/** The time of the last inserted update. */
private volatile long time;
* @return The request URI of this Sone
*/
public FreenetURI getRequestUri() {
- return requestUri;
+ return requestUri.setSuggestedEdition(latestEdition);
}
/**
public Sone setRequestUri(FreenetURI requestUri) {
if (this.requestUri == null) {
this.requestUri = requestUri;
- updateEditions();
return this;
}
if (!this.requestUri.equalsKeypair(requestUri)) {
logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { requestUri, this.requestUri });
return this;
}
- long latestEdition = requestUri.getEdition();
- if ((latestEdition > this.requestUri.getEdition()) || (latestEdition > this.requestUri.getSuggestedEdition())) {
- this.requestUri.setSuggestedEdition(latestEdition);
- }
+ setLatestEdition(requestUri.getEdition());
return this;
}
* @return The insert URI of this Sone
*/
public FreenetURI getInsertUri() {
- return insertUri;
+ return insertUri.setSuggestedEdition(latestEdition);
}
/**
public Sone setInsertUri(FreenetURI insertUri) {
if (this.insertUri == null) {
this.insertUri = insertUri;
- updateEditions();
return this;
}
if (!this.insertUri.equalsKeypair(insertUri)) {
logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { insertUri, this.insertUri });
return this;
}
- long latestEdition = insertUri.getEdition();
- if ((latestEdition > this.insertUri.getEdition()) || (latestEdition > this.insertUri.getSuggestedEdition())) {
- this.insertUri.setSuggestedEdition(latestEdition);
- }
+ setLatestEdition(insertUri.getEdition());
return this;
}
/**
+ * Returns the latest edition of this Sone.
+ *
+ * @return The latest edition of this Sone
+ */
+ public long getLatestEdition() {
+ return latestEdition;
+ }
+
+ /**
+ * Sets the latest edition of this Sone. If the given latest edition is not
+ * greater than the current latest edition, the latest edition of this Sone
+ * is not changed.
+ *
+ * @param latestEdition
+ * The latest edition of this Sone
+ */
+ public void setLatestEdition(long latestEdition) {
+ if (!(latestEdition > this.latestEdition)) {
+ logger.log(Level.INFO, "New latest edition %d is not greater than current latest edition %d!", new Object[] { latestEdition, this.latestEdition });
+ return;
+ }
+ this.latestEdition = latestEdition;
+ }
+
+ /**
* Return the time of the last inserted update of this Sone.
*
* @return The time of the update (in milliseconds since Jan 1, 1970 UTC)
this.modificationCounter = modificationCounter;
}
- /**
- * Updates the suggested edition in both the request URI and the insert URI.
- *
- * @param latestEdition
- * The latest edition to update the URIs to
- */
- public void updateUris(long latestEdition) {
- if ((requestUri != null) && (requestUri.getEdition() < latestEdition)) {
- requestUri = requestUri.setSuggestedEdition(latestEdition);
- }
- if ((insertUri != null) && (insertUri.getEdition() < latestEdition)) {
- insertUri = insertUri.setSuggestedEdition(latestEdition);
- }
- }
-
- //
- // PRIVATE METHODS
- //
-
- /**
- * Updates the editions of the request URI and the insert URI (if latter is
- * not {@code null}) with the greater edition of either one.
- */
- private void updateEditions() {
- long requestEdition = 0;
- if (requestUri != null) {
- requestEdition = requestUri.getEdition();
- }
- long insertEdition = 0;
- if (insertUri != null) {
- insertEdition = insertUri.getEdition();
- }
- updateUris(Math.max(requestEdition, insertEdition));
- }
-
//
// OBJECT METHODS
//