X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSoneImpl.java;h=86c593577a5f56911202490846bbedd0feb58b1f;hb=239f08e37721401290f43596e8a7e9aa83aae980;hp=880eb954046a4a78cac78f602ae461d5f92c3692;hpb=3d888e800617335535c1a4b2cbac3e02acfdde34;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/SoneImpl.java b/src/main/java/net/pterodactylus/sone/data/SoneImpl.java index 880eb95..86c5935 100644 --- a/src/main/java/net/pterodactylus/sone/data/SoneImpl.java +++ b/src/main/java/net/pterodactylus/sone/data/SoneImpl.java @@ -18,7 +18,9 @@ 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; @@ -28,8 +30,9 @@ import java.util.concurrent.CopyOnWriteArraySet; 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; @@ -56,7 +59,7 @@ public class SoneImpl implements Sone { 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; @@ -99,21 +102,22 @@ public class SoneImpl implements Sone { private final Set likedReplyIds = new CopyOnWriteArraySet(); /** 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; } @@ -140,24 +144,6 @@ public class SoneImpl implements Sone { } /** - * 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 @@ -181,26 +167,17 @@ public class SoneImpl implements 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; } /** @@ -209,26 +186,14 @@ public class SoneImpl implements Sone { * @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]); + } catch (MalformedURLException e) { + throw new IllegalStateException(format("Own identity %s's insert URI is incorrect.", getIdentity()), e); } - return this; } /** @@ -371,8 +336,7 @@ public class SoneImpl implements Sone { * @return The friend Sones of this Sone */ public List getFriends() { - List friends = new ArrayList(friendSones); - return friends; + return new ArrayList(friendSones); } /** @@ -644,7 +608,7 @@ public class SoneImpl implements Sone { * * @return The options of this Sone */ - public Options getOptions() { + public SoneOptions getOptions() { return options; } @@ -655,7 +619,7 @@ public class SoneImpl implements Sone { * 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; }