X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FProfile.java;h=61cf2911f372e93aa33b329ee9a81e14353689af;hb=f3de529dac23aff1f2378930cc5b68f43450a6b3;hp=3e446fdb89f13a6ee8550d2d6bd124159feb62ec;hpb=64718e3250252e618b2012db44f9095b87470243;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 3e446fd..61cf291 100644 --- a/src/main/java/net/pterodactylus/sone/data/Profile.java +++ b/src/main/java/net/pterodactylus/sone/data/Profile.java @@ -17,10 +17,13 @@ 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.lang.Math.max; +import static java.lang.Math.min; import static java.util.UUID.randomUUID; import java.util.ArrayList; @@ -88,150 +91,70 @@ public class Profile implements Fingerprintable { return sone; } - /** - * Returns the first name. - * - * @return The first name - */ public String getFirstName() { return name.getFirst().orNull(); } - /** - * Returns the middle name(s). - * - * @return The middle name - */ public String getMiddleName() { return name.getMiddle().orNull(); } - /** - * Returns the last name. - * - * @return The last name - */ public String getLastName() { return name.getLast().orNull(); } - /** - * Returns the day of the birth date. - * - * @return The day of the birth date (from 1 to 31) - */ public Integer getBirthDay() { return birthDate.getDay().orNull(); } - /** - * Returns the month of the birth date. - * - * @return The month of the birth date (from 1 to 12) - */ public Integer getBirthMonth() { return birthDate.getMonth().orNull(); } - /** - * Returns the year of the birth date. - * - * @return The year of the birth date - */ public Integer getBirthYear() { return birthDate.getYear().orNull(); } - /** - * Returns the ID of the currently selected avatar image. - * - * @return The ID of the currently selected avatar image, or {@code null} if - * no avatar is selected. - */ public String getAvatar() { return avatar; } - /** - * Sets the avatar image. - * - * @param avatarId - * The ID of the new avatar image - * @return This profile - */ public Profile setAvatar(Optional avatarId) { this.avatar = avatarId.orNull(); return this; } - /** - * Returns the fields of this profile. - * - * @return The fields of this profile - */ public List getFields() { return new ArrayList(fields); } - /** - * Returns whether this profile contains the given field. - * - * @param field - * The field to check for - * @return {@code true} if this profile contains the field, false otherwise - */ public boolean hasField(Field field) { 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(); } - /** - * Appends a new field to the list of fields. - * - * @param fieldName - * The name of the new field - * @return The new field - * @throws IllegalArgumentException - * if the name is not valid - */ public Field addField(String fieldName) throws IllegalArgumentException { checkNotNull(fieldName, "fieldName must not be null"); checkArgument(fieldName.length() > 0, "fieldName must not be empty"); - checkState(getFieldByName(fieldName) == null, "fieldName must be unique"); + checkArgument(!getFieldByName(fieldName).isPresent(), "fieldName must be unique"); @SuppressWarnings("synthetic-access") Field field = new Field(fieldName); fields.add(field); @@ -254,49 +177,24 @@ public class Profile implements Fingerprintable { 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 - * not move the first field further up). - * - * @param field - * The field to move up - */ public void moveFieldUp(Field field) { checkNotNull(field, "field must not be null"); checkArgument(hasField(field), "field must belong to this profile"); - checkArgument(getFieldIndex(field) > 0, "field index must be > 0"); int fieldIndex = getFieldIndex(field); fields.remove(field); - fields.add(fieldIndex - 1, field); + fields.add(max(fieldIndex - 1, 0), field); } - /** - * Moves the given field down one position in the field list. The index of - * the field to move must be less than the index of the last field (because - * you obviously can not move the last field further down). - * - * @param field - * The field to move down - */ public void moveFieldDown(Field field) { checkNotNull(field, "field must not be null"); checkArgument(hasField(field), "field must belong to this profile"); - checkArgument(getFieldIndex(field) < fields.size() - 1, "field index must be < " + (fields.size() - 1)); int fieldIndex = getFieldIndex(field); fields.remove(field); - fields.add(fieldIndex + 1, field); + fields.add(min(fieldIndex + 1, fields.size()), field); } - /** - * Removes the given field. - * - * @param field - * The field to remove - */ public void removeField(Field field) { checkNotNull(field, "field must not be null"); - checkArgument(hasField(field), "field must belong to this profile"); fields.remove(field); } @@ -386,9 +284,6 @@ public class Profile implements Fingerprintable { // INTERFACE Fingerprintable // - /** - * {@inheritDoc} - */ @Override public String getFingerprint() { Hasher hash = Hashing.sha256().newHasher(); @@ -400,7 +295,9 @@ public class Profile implements Fingerprintable { } hash.putString("ContactInformation("); for (Field field : fields) { - hash.putString(field.getName()).putString("(").putString(field.getValue()).putString(")"); + if (field.getValue() != null) { + hash.putString(field.getName()).putString("(").putString(field.getValue()).putString(")"); + } } hash.putString(")"); hash.putString(")");