package net.pterodactylus.sone.data;
import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;
-import net.pterodactylus.sone.core.Options;
+import net.pterodactylus.sone.data.SoneOptions.DefaultSoneOptions;
import net.pterodactylus.sone.freenet.wot.Identity;
+import net.pterodactylus.sone.freenet.wot.OwnIdentity;
import net.pterodactylus.util.logging.Logging;
import freenet.keys.FreenetURI;
private final boolean local;
/** The identity of this Sone. */
- private Identity identity;
+ private final Identity identity;
/** The URI under which the Sone is stored in Freenet. */
private volatile FreenetURI requestUri;
private final Set<String> likedReplyIds = new CopyOnWriteArraySet<String>();
/** The root album containing all albums. */
- private final Album rootAlbum = new AlbumImpl().setSone(this);
+ private final Album rootAlbum = new AlbumImpl(this);
/** Sone-specific options. */
- private Options options = new Options();
+ private SoneOptions options = new DefaultSoneOptions();
/**
* Creates a new Sone.
*
- * @param id
- * The ID of the Sone
+ * @param identity
+ * The identity of the Sone
* @param local
* {@code true} if the Sone is a local Sone, {@code false} otherwise
*/
- public SoneImpl(String id, boolean local) {
- this.id = id;
+ public SoneImpl(Identity identity, boolean local) {
+ this.id = identity.getId();
+ this.identity = identity;
this.local = local;
}
}
/**
- * Sets the identity of this Sone. The {@link Identity#getId() ID} of the
- * identity has to match this Sone’s {@link #getId()}.
- *
- * @param identity
- * The identity of this Sone
- * @return This Sone (for method chaining)
- * @throws IllegalArgumentException
- * if the ID of the identity does not match this Sone’s ID
- */
- public SoneImpl setIdentity(Identity identity) throws IllegalArgumentException {
- if (!identity.getId().equals(id)) {
- throw new IllegalArgumentException("Identity’s ID does not match Sone’s ID!");
- }
- this.identity = identity;
- return this;
- }
-
- /**
* Returns the name of this Sone.
*
* @return The name of this Sone
* @return The request URI of this Sone
*/
public FreenetURI getRequestUri() {
- return (requestUri != null) ? requestUri.setSuggestedEdition(latestEdition) : null;
- }
-
- /**
- * Sets the request URI of this Sone.
- *
- * @param requestUri
- * The request URI of this Sone
- * @return This Sone (for method chaining)
- */
- public Sone setRequestUri(FreenetURI requestUri) {
- if (this.requestUri == null) {
- this.requestUri = requestUri.setKeyType("USK").setDocName("Sone").setMetaString(new String[0]);
- return this;
- }
- if (!this.requestUri.equalsKeypair(requestUri)) {
- logger.log(Level.WARNING, String.format("Request URI %s tried to overwrite %s!", requestUri, this.requestUri));
- return this;
+ try {
+ return new FreenetURI(getIdentity().getRequestUri())
+ .setKeyType("USK")
+ .setDocName("Sone")
+ .setMetaString(new String[0])
+ .setSuggestedEdition(latestEdition);
+ } catch (MalformedURLException e) {
+ throw new IllegalStateException(
+ format("Identity %s's request URI is incorrect.",
+ getIdentity()), e);
}
- return this;
}
/**
* @return The insert URI of this Sone
*/
public FreenetURI getInsertUri() {
- return (insertUri != null) ? insertUri.setSuggestedEdition(latestEdition) : null;
- }
-
- /**
- * Sets the insert URI of this Sone.
- *
- * @param insertUri
- * The insert URI of this Sone
- * @return This Sone (for method chaining)
- */
- public Sone setInsertUri(FreenetURI insertUri) {
- if (this.insertUri == null) {
- this.insertUri = insertUri.setKeyType("USK").setDocName("Sone").setMetaString(new String[0]);
- return this;
+ if (!isLocal()) {
+ return null;
}
- if (!this.insertUri.equalsKeypair(insertUri)) {
- logger.log(Level.WARNING, String.format("Request URI %s tried to overwrite %s!", insertUri, this.insertUri));
- return this;
+ try {
+ return new FreenetURI(((OwnIdentity) getIdentity()).getInsertUri())
+ .setDocName("Sone")
+ .setMetaString(new String[0])
+ .setSuggestedEdition(latestEdition);
+ } catch (MalformedURLException e) {
+ throw new IllegalStateException(format("Own identity %s's insert URI is incorrect.", getIdentity()), e);
}
- return this;
}
/**
* @return The friend Sones of this Sone
*/
public List<String> getFriends() {
- List<String> friends = new ArrayList<String>(friendSones);
- return friends;
+ return new ArrayList<String>(friendSones);
}
/**
*
* @return The options of this Sone
*/
- public Options getOptions() {
+ public SoneOptions getOptions() {
return options;
}
* The options of this Sone
*/
/* TODO - remove this method again, maybe add an option provider */
- public void setOptions(Options options) {
+ public void setOptions(SoneOptions options) {
this.options = options;
}