X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FAbstractBase.java;h=ad5cfd8f7e27a52da793e65b94a17e8a53114934;hb=5d19c11df7ca4a969fbfe7583ca934174fb348bf;hp=4a35db19584cd313fa95d4173dc3ae9dd8cdd486;hpb=6c850a66c258f3b59e62bd60c794137625bbc82a;p=demoscenemusic.git
diff --git a/src/main/java/net/pterodactylus/demoscenemusic/data/AbstractBase.java b/src/main/java/net/pterodactylus/demoscenemusic/data/AbstractBase.java
index 4a35db1..ad5cfd8 100644
--- a/src/main/java/net/pterodactylus/demoscenemusic/data/AbstractBase.java
+++ b/src/main/java/net/pterodactylus/demoscenemusic/data/AbstractBase.java
@@ -19,13 +19,14 @@ package net.pterodactylus.demoscenemusic.data;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
/**
* TODO
*
* @author David âBombeâ Roden
*/
-public class AbstractBase {
+public abstract class AbstractBase implements Base {
private final String id;
@@ -47,10 +48,59 @@ public class AbstractBase {
return (Value) attributes.get(name);
}
+ protected boolean dirty() {
+ for (Value> value : attributes.values()) {
+ if (value.dirty()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //
+ // OBJECT METHODS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return id().hashCode();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Base)) {
+ return false;
+ }
+ return id().equals(((Base) obj).id());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(getClass().getName());
+ stringBuilder.append('[').append("id=").append(id());
+ for (Entry> attributeEntry : attributes.entrySet()) {
+ stringBuilder.append(',').append(attributeEntry.getKey()).append('=').append(attributeEntry.getValue().get());
+ }
+ stringBuilder.append(']');
+ return stringBuilder.toString();
+ }
+
protected static class Value {
private T original;
+ private boolean originalSet;
+
private T current;
public T get() {
@@ -58,6 +108,10 @@ public class AbstractBase {
}
public Value set(T value) {
+ if (!originalSet) {
+ original = value;
+ originalSet = true;
+ }
current = value;
return this;
}