X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDefaultBase.java;h=345ebd29d972af3562a4e223fe4a70475d0f7095;hb=ec14179943150b1716d642c2761e7fc9f12a524f;hp=7de5b5ec44e85e5344fc19890e86fcf92308ab9f;hpb=d5a46d4ea7a16b4f43a79de2786034f1081463e1;p=demoscenemusic.git
diff --git a/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java b/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java
index 7de5b5e..345ebd2 100644
--- a/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java
+++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java
@@ -22,35 +22,83 @@ import java.util.Map;
import java.util.Map.Entry;
/**
- * TODO
+ * Base implementation of a data container. It stores the ID of a container and
+ * can contain arbitrary attributes.
*
* @author David âBombeâ Roden
*/
public class DefaultBase implements Base {
+ /** The ID of the data container. */
private final String id;
+ /** The attributes of the data container. */
private final Map> attributes = new HashMap>();
+ /**
+ * Creates a new data container with the given ID.
+ *
+ * @param id
+ * The ID of the data container
+ */
protected DefaultBase(String id) {
this.id = id;
}
- public String id() {
+ //
+ // ACCESSORS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getId() {
return id;
}
- @SuppressWarnings({ "synthetic-access", "unchecked" })
- protected Value value(String name, Class clazz) {
+ /**
+ * Returns whether the data container contains an attribute with the given
+ * name.
+ *
+ * @param name
+ * The name of the attribute to check for
+ * @return {@code true} if this data container contains an attribute with
+ * the given name, {@code false} otherwise
+ */
+ protected boolean hasValue(String name) {
+ return attributes.containsKey(name);
+ }
+
+ /**
+ * Returns the value of the attribute with the given name. If no value for
+ * the given attribute exists, one will be created, stored, and returned.
+ *
+ * @param
+ * The type of the value to return
+ * @param name
+ * The name of the attribute to get
+ * @param clazz
+ * The class of the value
+ * @return The value of the attribute
+ */
+ @SuppressWarnings({ "unchecked" })
+ protected Value getValue(String name, Class clazz) {
if (!attributes.containsKey(name)) {
attributes.put(name, new Value());
}
return (Value) attributes.get(name);
}
- protected boolean dirty() {
+ /**
+ * Returns whether any of the attributes of this data container is dirty,
+ * i.e. it was modified after its initial inception.
+ *
+ * @return {@code true} if any attribute of this data container was modified
+ */
+ protected boolean isDirty() {
for (Value> value : attributes.values()) {
- if (value.dirty()) {
+ if (value.isDirty()) {
return true;
}
}
@@ -66,7 +114,7 @@ public class DefaultBase implements Base {
*/
@Override
public int hashCode() {
- return id().hashCode();
+ return getId().hashCode();
}
/**
@@ -77,7 +125,7 @@ public class DefaultBase implements Base {
if (!(obj instanceof Base)) {
return false;
}
- return id().equals(((Base) obj).id());
+ return getId().equals(((Base) obj).getId());
}
/**
@@ -87,7 +135,7 @@ public class DefaultBase implements Base {
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(getClass().getName());
- stringBuilder.append('[').append("id=").append(id());
+ stringBuilder.append('[').append("id=").append(getId());
for (Entry> attributeEntry : attributes.entrySet()) {
stringBuilder.append(',').append(attributeEntry.getKey()).append('=').append(attributeEntry.getValue().get());
}
@@ -95,18 +143,46 @@ public class DefaultBase implements Base {
return stringBuilder.toString();
}
+ /**
+ * Container for an attribute value stored in a data container.
+ *
+ * @see DefaultBase#attributes
+ * @param
+ * The type of the value
+ * @author David âBombeâ Roden
+ */
protected static class Value {
+ /** The original value. */
private T original;
+ /** Whether the original value has been set. */
private boolean originalSet;
+ /** The current value. */
private T current;
+ //
+ // ACCESSORS
+ //
+
+ /**
+ * Returns the current value.
+ *
+ * @return The current value
+ */
public T get() {
return current;
}
+ /**
+ * Sets the current value. If no original value has yet been set, the
+ * given value is also stored as original value.
+ *
+ * @param value
+ * The value to set
+ * @return This value
+ */
public Value set(T value) {
if (!originalSet) {
original = value;
@@ -116,10 +192,24 @@ public class DefaultBase implements Base {
return this;
}
- public boolean dirty() {
+ /**
+ * Returns whether the value of this value does not equal its original
+ * value.
+ *
+ * @return {@code true} if the current value is not equal to the
+ * original value, {@code false} if it is equal to the original
+ * value
+ */
+ public boolean isDirty() {
return (original != null) ? !original.equals(current) : current != null;
}
+ /**
+ * Commits the current value, i.e. sets the original value to the
+ * current value.
+ *
+ * @return This value
+ */
public Value commit() {
original = current;
return this;