+ @Nullable
+ FreenetURI getInsertUri();
+
+ /**
+ * Returns the latest edition of this Sone.
+ *
+ * @return The latest edition of this Sone
+ */
+ long getLatestEdition();
+
+ /**
+ * 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
+ */
+ void setLatestEdition(long 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)
+ */
+ long getTime();
+
+ /**
+ * Sets the time of the last inserted update of this Sone.
+ *
+ * @param time
+ * The time of the update (in milliseconds since Jan 1, 1970 UTC)
+ * @return This Sone (for method chaining)
+ */
+ @Nonnull
+ Sone setTime(long time);
+
+ /**
+ * Returns the status of this Sone.
+ *
+ * @return The status of this Sone
+ */
+ @Nonnull
+ SoneStatus getStatus();
+
+ /**
+ * Sets the new status of this Sone.
+ *
+ * @param status
+ * The new status of this Sone
+ * @return This Sone
+ * @throws IllegalArgumentException
+ * if {@code status} is {@code null}
+ */
+ @Nonnull
+ Sone setStatus(@Nonnull SoneStatus status);
+
+ /**
+ * Returns a copy of the profile. If you want to update values in the profile
+ * of this Sone, update the values in the returned {@link Profile} and use
+ * {@link #setProfile(Profile)} to change the profile in this Sone.
+ *
+ * @return A copy of the profile
+ */
+ @Nonnull
+ Profile getProfile();
+
+ /**
+ * Sets the profile of this Sone. A copy of the given profile is stored so that
+ * subsequent modifications of the given profile are not reflected in this
+ * Sone!
+ *
+ * @param profile
+ * The profile to set
+ */
+ void setProfile(@Nonnull Profile profile);
+
+ /**
+ * Returns the client used by this Sone.
+ *
+ * @return The client used by this Sone, or {@code null}
+ */
+ @Nullable
+ Client getClient();
+
+ /**
+ * Sets the client used by this Sone.
+ *
+ * @param client
+ * The client used by this Sone, or {@code null}
+ * @return This Sone (for method chaining)
+ */
+ @Nonnull
+ Sone setClient(@Nullable Client client);
+
+ /**
+ * Returns whether this Sone is known.
+ *
+ * @return {@code true} if this Sone is known, {@code false} otherwise
+ */
+ boolean isKnown();
+
+ /**
+ * Sets whether this Sone is known.
+ *
+ * @param known
+ * {@code true} if this Sone is known, {@code false} otherwise
+ * @return This Sone
+ */
+ @Nonnull
+ Sone setKnown(boolean known);