Return optionals of fields.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Profile.java
index 898deb6..6201276 100644 (file)
@@ -17,7 +17,9 @@
 
 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;
@@ -184,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<Field> 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<Field> getFieldByName(String fieldName) {
                for (Field field : fields) {
                        if (field.getName().equals(fieldName)) {
-                               return field;
+                               return of(field);
                        }
                }
-               return null;
+               return absent();
        }
 
        /**
@@ -239,7 +225,7 @@ public class Profile implements Fingerprintable {
        }
 
        public void renameField(Field field, String newName) {
-               int indexOfField = fields.indexOf(field);
+               int indexOfField = getFieldIndex(field);
                if (indexOfField == -1) {
                        return;
                }
@@ -251,7 +237,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 +401,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 +419,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 +440,6 @@ public class Profile implements Fingerprintable {
                        return id.equals(field.id);
                }
 
-               /**
-                * {@inheritDoc}
-                */
                @Override
                public int hashCode() {
                        return id.hashCode();