Make profile fields immutable.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 23 Oct 2013 05:39:10 +0000 (07:39 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 28 Feb 2014 21:25:34 +0000 (22:25 +0100)
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/core/SoneParser.java
src/main/java/net/pterodactylus/sone/data/Profile.java
src/main/java/net/pterodactylus/sone/web/EditProfilePage.java

index 8edb14f..8fcfe10 100644 (file)
@@ -965,7 +965,7 @@ public class Core extends AbstractService implements SoneProvider {
                                break;
                        }
                        String fieldValue = configuration.getStringValue(fieldPrefix + "/Value").getValue("");
-                       profile.addField(fieldName).setValue(fieldValue);
+                       profile.setField(profile.addField(fieldName), fieldValue);
                }
 
                /* load posts. */
index d251989..b2d82be 100644 (file)
@@ -150,7 +150,7 @@ public class SoneParser {
                                        return absent();
                                }
                                try {
-                                       profile.addField(fieldName).setValue(fieldValue);
+                                       profile.setField(profile.addField(fieldName), fieldValue);
                                } catch (IllegalArgumentException iae1) {
                                        logger.log(Level.WARNING, String.format("Duplicate field: %s", fieldName), iae1);
                                        return absent();
index e4f9992..3e446fd 100644 (file)
@@ -251,7 +251,7 @@ public class Profile implements Fingerprintable {
                if (indexOfField == -1) {
                        return;
                }
-               fields.get(indexOfField).setValue(newValue);
+               fields.set(indexOfField, new Field(field.getId(), field.getName(), newValue));
        }
 
        /**
@@ -415,14 +415,9 @@ public class Profile implements Fingerprintable {
         */
        public static class Field {
 
-               /** The ID of the field. */
                private final String id;
-
-               /** The name of the field. */
-               private String name;
-
-               /** The value of the field. */
-               private String value;
+               private final String name;
+               private final String value;
 
                public Field(String name) {
                        this(name, null);
@@ -438,54 +433,18 @@ public class Profile implements Fingerprintable {
                        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;
                }
 
-               /**
-                * 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)) {
@@ -495,9 +454,6 @@ public class Profile implements Fingerprintable {
                        return id.equals(field.id);
                }
 
-               /**
-                * {@inheritDoc}
-                */
                @Override
                public int hashCode() {
                        return id.hashCode();
index 0d1f7d3..38cc800 100644 (file)
@@ -82,7 +82,7 @@ public class EditProfilePage extends SoneTemplatePage {
                                profile.setAvatar(webInterface.getCore().getImage(avatarId).transform(GET_ID));
                                for (Field field : fields) {
                                        String value = request.getHttpRequest().getPartAsStringFailsafe("field-" + field.getId(), 400);
-                                       field.setValue(value);
+                                       profile.setField(field, value);
                                }
                                currentSone.setProfile(profile);
                                webInterface.getCore().touchConfiguration();