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.util.UUID.randomUUID;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.UUID;
import com.google.common.base.Optional;
import com.google.common.hash.Hasher;
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();
}
/**
checkArgument(fieldName.length() > 0, "fieldName must not be empty");
checkState(getFieldByName(fieldName) == null, "fieldName must be unique");
@SuppressWarnings("synthetic-access")
- Field field = new Field().setName(fieldName);
+ Field field = new Field(fieldName);
fields.add(field);
return field;
}
+ public void renameField(Field field, String newName) {
+ int indexOfField = getFieldIndex(field);
+ if (indexOfField == -1) {
+ return;
+ }
+ fields.set(indexOfField, new Field(field.getId(), newName, field.getValue()));
+ }
+
+ public void setField(Field field, String newValue) {
+ int indexOfField = getFieldIndex(field);
+ if (indexOfField == -1) {
+ return;
+ }
+ 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
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
- public class Field {
+ public static class Field {
- /** The ID of the field. */
private final String id;
+ private final String name;
+ private final String value;
- /** The name of the field. */
- private String name;
-
- /** The value of the field. */
- private String value;
-
- /**
- * Creates a new field with a random ID.
- */
- private Field() {
- this(UUID.randomUUID().toString());
+ public Field(String name) {
+ this(name, null);
}
- /**
- * Creates a new field with the given ID.
- *
- * @param id
- * The ID of the field
- */
- private Field(String id) {
- this.id = checkNotNull(id, "id must not be null");
+ public Field(String name, String value) {
+ this(randomUUID().toString(), name, value);
}
public Field(String id, String name, String value) {
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;
}
- /**
- * Sets the name of this field. The name must not be {@code null} and
- * must not match any other fields in this profile but my match the name
- * of this field.
- *
- * @param name
- * The new name of this field
- * @return This field
- */
- public Field setName(String name) {
- checkNotNull(name, "name must not be null");
- checkArgument(getFieldByName(name) == null, "name must be unique");
- this.name = name;
- return this;
- }
-
- /**
- * 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)) {
return id.equals(field.id);
}
- /**
- * {@inheritDoc}
- */
@Override
public int hashCode() {
return id.hashCode();