X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FProfile.java;h=6201276b8a03c3dafade2630fb7971b76e546039;hb=532076508aac8e03e0ef9914e90c7a0558b66bbe;hp=db552272fdb631cfe7d5885f92a58c38ab104ab3;hpb=d8e1d149c0c2cfd2ec7eef75b2d13bccb1a9aaff;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/Profile.java b/src/main/java/net/pterodactylus/sone/data/Profile.java index db55227..6201276 100644 --- a/src/main/java/net/pterodactylus/sone/data/Profile.java +++ b/src/main/java/net/pterodactylus/sone/data/Profile.java @@ -17,15 +17,17 @@ package net.pterodactylus.sone.data; +import static com.google.common.base.Optional.absent; import static com.google.common.base.Optional.fromNullable; +import static com.google.common.base.Optional.of; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import static java.util.UUID.randomUUID; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.UUID; import com.google.common.base.Optional; import com.google.common.hash.Hasher; @@ -155,18 +157,12 @@ public class Profile implements Fingerprintable { /** * Sets the avatar image. * - * @param avatar - * The new avatar image, or {@code null} to not select an avatar - * image. - * @return This Sone + * @param avatarId + * The ID of the new avatar image + * @return This profile */ - public Profile setAvatar(Image avatar) { - if (avatar == null) { - this.avatar = null; - return this; - } - checkArgument(avatar.getSone().equals(sone), "avatar must belong to Sone"); - this.avatar = avatar.getId(); + public Profile setAvatar(Optional avatarId) { + this.avatar = avatarId.orNull(); return this; } @@ -190,39 +186,23 @@ public class Profile implements Fingerprintable { return fields.contains(field); } - /** - * Returns the field with the given ID. - * - * @param fieldId - * The ID of the field to get - * @return The field, or {@code null} if this profile does not contain a - * field with the given ID - */ - public Field getFieldById(String fieldId) { + public Optional getFieldById(String fieldId) { checkNotNull(fieldId, "fieldId must not be null"); for (Field field : fields) { if (field.getId().equals(fieldId)) { - return field; + return of(field); } } - return null; + return absent(); } - /** - * Returns the field with the given name. - * - * @param fieldName - * The name of the field to get - * @return The field, or {@code null} if this profile does not contain a - * field with the given name - */ - public Field getFieldByName(String fieldName) { + public Optional getFieldByName(String fieldName) { for (Field field : fields) { if (field.getName().equals(fieldName)) { - return field; + return of(field); } } - return null; + return absent(); } /** @@ -239,11 +219,27 @@ public class Profile implements Fingerprintable { checkArgument(fieldName.length() > 0, "fieldName must not be empty"); checkState(getFieldByName(fieldName) == null, "fieldName must be unique"); @SuppressWarnings("synthetic-access") - Field field = new Field().setName(fieldName); + Field field = new Field(fieldName); fields.add(field); return field; } + public void renameField(Field field, String newName) { + int indexOfField = getFieldIndex(field); + if (indexOfField == -1) { + return; + } + fields.set(indexOfField, new Field(field.getId(), newName, field.getValue())); + } + + public void setField(Field field, String newValue) { + int indexOfField = getFieldIndex(field); + if (indexOfField == -1) { + return; + } + fields.set(indexOfField, new Field(field.getId(), field.getName(), newValue)); + } + /** * Moves the given field up one position in the field list. The index of the * field to move must be greater than {@code 0} (because you obviously can @@ -403,98 +399,38 @@ public class Profile implements Fingerprintable { * * @author David ‘Bombe’ Roden */ - public class Field { + public static class Field { - /** The ID of the field. */ private final String id; + private final String name; + private final String value; - /** The name of the field. */ - private String name; - - /** The value of the field. */ - private String value; + public Field(String name) { + this(name, null); + } - /** - * Creates a new field with a random ID. - */ - private Field() { - this(UUID.randomUUID().toString()); + public Field(String name, String value) { + this(randomUUID().toString(), name, value); } - /** - * Creates a new field with the given ID. - * - * @param id - * The ID of the field - */ - private Field(String id) { + public Field(String id, String name, String value) { this.id = checkNotNull(id, "id must not be null"); + this.name = name; + this.value = value; } - /** - * Returns the ID of this field. - * - * @return The ID of this field - */ public String getId() { return id; } - /** - * Returns the name of this field. - * - * @return The name of this field - */ public String getName() { return name; } - /** - * Sets the name of this field. The name must not be {@code null} and - * must not match any other fields in this profile but my match the name - * of this field. - * - * @param name - * The new name of this field - * @return This field - */ - public Field setName(String name) { - checkNotNull(name, "name must not be null"); - checkArgument(getFieldByName(name) == null, "name must be unique"); - this.name = name; - return this; - } - - /** - * Returns the value of this field. - * - * @return The value of this field - */ public String getValue() { return value; } - /** - * Sets the value of this field. While {@code null} is allowed, no - * guarantees are made that {@code null} values are correctly persisted - * across restarts of the plugin! - * - * @param value - * The new value of this field - * @return This field - */ - public Field setValue(String value) { - this.value = value; - return this; - } - - // - // OBJECT METHODS - // - - /** - * {@inheritDoc} - */ @Override public boolean equals(Object object) { if (!(object instanceof Field)) { @@ -504,9 +440,6 @@ public class Profile implements Fingerprintable { return id.equals(field.id); } - /** - * {@inheritDoc} - */ @Override public int hashCode() { return id.hashCode();