From 0540df74082148c5b14d8e968157b6113368a130 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 17 Oct 2013 21:50:53 +0200 Subject: [PATCH] Store birth date in its own class, only update it via a modifier. --- .../java/net/pterodactylus/sone/core/Core.java | 8 +- .../net/pterodactylus/sone/core/SoneParser.java | 2 +- .../java/net/pterodactylus/sone/data/Profile.java | 138 ++++++++++++--------- .../pterodactylus/sone/web/EditProfilePage.java | 2 +- 4 files changed, 84 insertions(+), 66 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index 20983e3..3a02f15 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -62,7 +62,6 @@ import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Profile.Field; -import net.pterodactylus.sone.data.Profile.Name; import net.pterodactylus.sone.data.Reply.Modifier.ReplyUpdated; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.data.Sone.ShowCustomAvatars; @@ -957,9 +956,10 @@ public class Core extends AbstractService implements SoneProvider { String middleName = configuration.getStringValue(sonePrefix + "/Profile/MiddleName").getValue(null); String lastName = configuration.getStringValue(sonePrefix + "/Profile/LastName").getValue(null); profile.modify().setFirstName(firstName).setMiddleName(middleName).setLastName(lastName).update(); - profile.setBirthDay(configuration.getIntValue(sonePrefix + "/Profile/BirthDay").getValue(null)); - profile.setBirthMonth(configuration.getIntValue(sonePrefix + "/Profile/BirthMonth").getValue(null)); - profile.setBirthYear(configuration.getIntValue(sonePrefix + "/Profile/BirthYear").getValue(null)); + Integer birthDay = configuration.getIntValue(sonePrefix + "/Profile/BirthDay").getValue(null); + Integer birthMonth = configuration.getIntValue(sonePrefix + "/Profile/BirthMonth").getValue(null); + Integer birthYear = configuration.getIntValue(sonePrefix + "/Profile/BirthYear").getValue(null); + profile.modify().setBirthYear(birthYear).setBirthMonth(birthMonth).setBirthDay(birthDay).update(); /* load profile fields. */ while (true) { diff --git a/src/main/java/net/pterodactylus/sone/core/SoneParser.java b/src/main/java/net/pterodactylus/sone/core/SoneParser.java index 2e8299f..87d659f 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneParser.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneParser.java @@ -177,7 +177,7 @@ public class SoneParser { Integer profileBirthMonth = Numbers.safeParseInteger(profileXml.getValue("birth-month", null)); Integer profileBirthYear = Numbers.safeParseInteger(profileXml.getValue("birth-year", null)); Profile profile = new Profile(sone).modify().setFirstName(profileFirstName).setMiddleName(profileMiddleName).setLastName(profileLastName).update(); - profile.setBirthDay(profileBirthDay).setBirthMonth(profileBirthMonth).setBirthYear(profileBirthYear); + profile.modify().setBirthDay(profileBirthDay).setBirthMonth(profileBirthMonth).setBirthYear(profileBirthYear).update(); /* avatar is processed after images are loaded. */ String avatarId = profileXml.getValue("avatar", null); diff --git a/src/main/java/net/pterodactylus/sone/data/Profile.java b/src/main/java/net/pterodactylus/sone/data/Profile.java index 2a1c416..fcea737 100644 --- a/src/main/java/net/pterodactylus/sone/data/Profile.java +++ b/src/main/java/net/pterodactylus/sone/data/Profile.java @@ -43,15 +43,7 @@ public class Profile implements Fingerprintable { private final Sone sone; private volatile Name name; - - /** 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 BirthDate birthDate = new BirthDate(); /** The ID of the avatar image. */ private volatile String avatar; @@ -78,9 +70,7 @@ public class Profile implements Fingerprintable { public Profile(Profile profile) { this.sone = profile.sone; this.name = profile.name; - this.birthDay = profile.birthDay; - this.birthMonth = profile.birthMonth; - this.birthYear = profile.birthYear; + this.birthDate = profile.birthDate; this.avatar = profile.avatar; this.fields.addAll(profile.fields); } @@ -131,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(); } /** @@ -152,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(); } /** @@ -173,7 +139,7 @@ public class Profile implements Fingerprintable { * @return The year of the birth date */ public Integer getBirthYear() { - return birthYear; + return birthDate.getYear().orNull(); } /** @@ -205,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 @@ -341,6 +295,9 @@ public class Profile implements Fingerprintable { 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) { @@ -361,8 +318,27 @@ public class Profile implements Fingerprintable { } @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; } }; @@ -373,6 +349,9 @@ public class Profile implements Fingerprintable { 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(); } @@ -405,15 +384,7 @@ public class Profile implements Fingerprintable { Hasher hash = Hashing.sha256().newHasher(); hash.putString("Profile("); hash.putString(name.getFingerprint()); - 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(birthDate.getFingerprint()); if (avatar != null) { hash.putString("Avatar(").putString(avatar).putString(")"); } @@ -586,4 +557,51 @@ public class Profile implements Fingerprintable { } + 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(); + } + + } + } diff --git a/src/main/java/net/pterodactylus/sone/web/EditProfilePage.java b/src/main/java/net/pterodactylus/sone/web/EditProfilePage.java index ecab3da..069e732 100644 --- a/src/main/java/net/pterodactylus/sone/web/EditProfilePage.java +++ b/src/main/java/net/pterodactylus/sone/web/EditProfilePage.java @@ -76,7 +76,7 @@ public class EditProfilePage extends SoneTemplatePage { birthYear = Numbers.safeParseInteger(request.getHttpRequest().getPartAsStringFailsafe("birth-year", 256).trim()); avatarId = request.getHttpRequest().getPartAsStringFailsafe("avatarId", 36); profile.modify().setFirstName(getNameFromFormField(firstName)).setMiddleName(getNameFromFormField(middleName)).setLastName(getNameFromFormField(lastName)).update(); - profile.setBirthDay(birthDay).setBirthMonth(birthMonth).setBirthYear(birthYear); + profile.modify().setBirthDay(birthDay).setBirthMonth(birthMonth).setBirthYear(birthYear).update(); profile.setAvatar(webInterface.getCore().getImage(avatarId).orNull()); for (Field field : fields) { String value = request.getHttpRequest().getPartAsStringFailsafe("field-" + field.getId(), 400); -- 2.7.4