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=a29164e34f5d9c38f13f81820594a8d6be314fc0;hp=a75563b88487839529ffc531874ea5b74f0c3cfc;hpb=c957b2908a6809e78fd3bfbb4b69aa1aeeb826fd;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 a75563b..345ebd2 100644
--- a/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java
+++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DefaultBase.java
@@ -22,29 +22,66 @@ 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;
}
+ //
+ // ACCESSORS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
@Override
public String getId() {
return id;
}
+ /**
+ * 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)) {
@@ -53,6 +90,12 @@ public class DefaultBase implements Base {
return (Value) attributes.get(name);
}
+ /**
+ * 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.isDirty()) {
@@ -100,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;
@@ -121,10 +192,24 @@ public class DefaultBase implements Base {
return this;
}
+ /**
+ * 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;