X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FProfile.java;h=db552272fdb631cfe7d5885f92a58c38ab104ab3;hb=9f9834453e9555175e4771932d9521209bd7188c;hp=5a4fde041052c8c4f0a7228196eb5fba9b3698fa;hpb=6e9a43ccd93ae125720547c0fe421dc81a54ba90;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 5a4fde0..db55227 100644 --- a/src/main/java/net/pterodactylus/sone/data/Profile.java +++ b/src/main/java/net/pterodactylus/sone/data/Profile.java @@ -17,6 +17,7 @@ package net.pterodactylus.sone.data; +import static com.google.common.base.Optional.fromNullable; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; @@ -26,6 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.UUID; +import com.google.common.base.Optional; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; @@ -40,23 +42,8 @@ public class Profile implements Fingerprintable { /** The Sone this profile belongs to. */ private final Sone sone; - /** The first name. */ - private volatile String firstName; - - /** The middle name(s). */ - private volatile String middleName; - - /** The last name. */ - private volatile String lastName; - - /** The day of the birth date. */ - private volatile Integer birthDay; - - /** The month of the birth date. */ - private volatile Integer birthMonth; - - /** The year of the birth date. */ - private volatile Integer birthYear; + private volatile Name name = new Name(); + private volatile BirthDate birthDate = new BirthDate(); /** The ID of the avatar image. */ private volatile String avatar; @@ -82,12 +69,8 @@ public class Profile implements Fingerprintable { */ public Profile(Profile profile) { this.sone = profile.sone; - this.firstName = profile.firstName; - this.middleName = profile.middleName; - this.lastName = profile.lastName; - this.birthDay = profile.birthDay; - this.birthMonth = profile.birthMonth; - this.birthYear = profile.birthYear; + this.name = profile.name; + this.birthDate = profile.birthDate; this.avatar = profile.avatar; this.fields.addAll(profile.fields); } @@ -111,19 +94,7 @@ public class Profile implements Fingerprintable { * @return The first name */ public String getFirstName() { - return firstName; - } - - /** - * Sets the first name. - * - * @param firstName - * The first name to set - * @return This profile (for method chaining) - */ - public Profile setFirstName(String firstName) { - this.firstName = firstName; - return this; + return name.getFirst().orNull(); } /** @@ -132,19 +103,7 @@ public class Profile implements Fingerprintable { * @return The middle name */ public String getMiddleName() { - return middleName; - } - - /** - * Sets the middle name. - * - * @param middleName - * The middle name to set - * @return This profile (for method chaining) - */ - public Profile setMiddleName(String middleName) { - this.middleName = middleName; - return this; + return name.getMiddle().orNull(); } /** @@ -153,19 +112,7 @@ public class Profile implements Fingerprintable { * @return The last name */ public String getLastName() { - return lastName; - } - - /** - * Sets the last name. - * - * @param lastName - * The last name to set - * @return This profile (for method chaining) - */ - public Profile setLastName(String lastName) { - this.lastName = lastName; - return this; + return name.getLast().orNull(); } /** @@ -174,19 +121,7 @@ public class Profile implements Fingerprintable { * @return The day of the birth date (from 1 to 31) */ public Integer getBirthDay() { - return birthDay; - } - - /** - * Sets the day of the birth date. - * - * @param birthDay - * The day of the birth date (from 1 to 31) - * @return This profile (for method chaining) - */ - public Profile setBirthDay(Integer birthDay) { - this.birthDay = birthDay; - return this; + return birthDate.getDay().orNull(); } /** @@ -195,19 +130,7 @@ public class Profile implements Fingerprintable { * @return The month of the birth date (from 1 to 12) */ public Integer getBirthMonth() { - return birthMonth; - } - - /** - * Sets the month of the birth date. - * - * @param birthMonth - * The month of the birth date (from 1 to 12) - * @return This profile (for method chaining) - */ - public Profile setBirthMonth(Integer birthMonth) { - this.birthMonth = birthMonth; - return this; + return birthDate.getMonth().orNull(); } /** @@ -216,7 +139,7 @@ public class Profile implements Fingerprintable { * @return The year of the birth date */ public Integer getBirthYear() { - return birthYear; + return birthDate.getYear().orNull(); } /** @@ -248,18 +171,6 @@ public class Profile implements Fingerprintable { } /** - * Sets the year of the birth date. - * - * @param birthYear - * The year of the birth date - * @return This profile (for method chaining) - */ - public Profile setBirthYear(Integer birthYear) { - this.birthYear = birthYear; - return this; - } - - /** * Returns the fields of this profile. * * @return The fields of this profile @@ -379,6 +290,72 @@ public class Profile implements Fingerprintable { fields.remove(field); } + public Modifier modify() { + return new Modifier() { + private Optional firstName = name.getFirst(); + private Optional middleName = name.getMiddle(); + private Optional lastName = name.getLast(); + private Optional birthYear = birthDate.getYear(); + private Optional birthMonth = birthDate.getMonth(); + private Optional birthDay = birthDate.getDay(); + + @Override + public Modifier setFirstName(String firstName) { + this.firstName = fromNullable(firstName); + return this; + } + + @Override + public Modifier setMiddleName(String middleName) { + this.middleName = fromNullable(middleName); + return this; + } + + @Override + public Modifier setLastName(String lastName) { + this.lastName = fromNullable(lastName); + return this; + } + + @Override + public Modifier setBirthYear(Integer birthYear) { + this.birthYear = fromNullable(birthYear); + return this; + } + + @Override + public Modifier setBirthMonth(Integer birthMonth) { + this.birthMonth = fromNullable(birthMonth); + return this; + } + + @Override + public Modifier setBirthDay(Integer birthDay) { + this.birthDay = fromNullable(birthDay); + return this; + } + + @Override + public Profile update() { + Profile.this.name = new Name(firstName, middleName, lastName); + Profile.this.birthDate = new BirthDate(birthYear, birthMonth, birthDay); + return Profile.this; + } + }; + } + + public interface Modifier { + + Modifier setFirstName(String firstName); + Modifier setMiddleName(String middleName); + Modifier setLastName(String lastName); + Modifier setBirthYear(Integer birthYear); + Modifier setBirthMonth(Integer birthMonth); + Modifier setBirthDay(Integer birthDay); + Profile update(); + + } + // // PRIVATE METHODS // @@ -406,24 +383,8 @@ public class Profile implements Fingerprintable { public String getFingerprint() { Hasher hash = Hashing.sha256().newHasher(); hash.putString("Profile("); - if (firstName != null) { - hash.putString("FirstName(").putString(firstName).putString(")"); - } - if (middleName != null) { - hash.putString("MiddleName(").putString(middleName).putString(")"); - } - if (lastName != null) { - hash.putString("LastName(").putString(lastName).putString(")"); - } - if (birthDay != null) { - hash.putString("BirthDay(").putInt(birthDay).putString(")"); - } - if (birthMonth != null) { - hash.putString("BirthMonth(").putInt(birthMonth).putString(")"); - } - if (birthYear != null) { - hash.putString("BirthYear(").putInt(birthYear).putString(")"); - } + hash.putString(name.getFingerprint()); + hash.putString(birthDate.getFingerprint()); if (avatar != null) { hash.putString("Avatar(").putString(avatar).putString(")"); } @@ -553,4 +514,98 @@ public class Profile implements Fingerprintable { } + public static class Name implements Fingerprintable { + + private final Optional first; + private final Optional middle; + private final Optional last; + + public Name() { + this(Optional.absent(), Optional.absent(), Optional.absent()); + } + + public Name(Optional first, Optional middle, Optional last) { + this.first = first; + this.middle = middle; + this.last = last; + } + + public Optional getFirst() { + return first; + } + + public Optional getMiddle() { + return middle; + } + + public Optional getLast() { + return last; + } + + @Override + public String getFingerprint() { + Hasher hash = Hashing.sha256().newHasher(); + hash.putString("Name("); + if (first.isPresent()) { + hash.putString("First(").putString(first.get()).putString(")"); + } + if (middle.isPresent()) { + hash.putString("Middle(").putString(middle.get()).putString(")"); + } + if (last.isPresent()) { + hash.putString("Last(").putString(last.get()).putString(")"); + } + hash.putString(")"); + return hash.hash().toString(); + } + + } + + public static class BirthDate implements Fingerprintable { + + private final Optional year; + private final Optional month; + private final Optional day; + + public BirthDate() { + this(Optional.absent(), Optional.absent(), Optional.absent()); + } + + public BirthDate(Optional year, Optional month, Optional day) { + this.year = year; + this.month = month; + this.day = day; + } + + public Optional getYear() { + return year; + } + + public Optional getMonth() { + return month; + } + + public Optional getDay() { + return day; + } + + @Override + public String getFingerprint() { + Hasher hash = Hashing.sha256().newHasher(); + hash.putString("Birthdate("); + if (year.isPresent()) { + hash.putString("Year(").putInt(year.get()).putString(")"); + } + if (month.isPresent()) { + hash.putString("Month(").putInt(month.get()).putString(")"); + } + if (day.isPresent()) { + hash.putString("Day(").putInt(day.get()).putString(")"); + } + hash.putString(")"); + return hash.hash().toString(); + } + + } + }