+++ /dev/null
-/*
- * DemosceneMusic - Artist.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-import java.util.Set;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractArtist extends AbstractBase implements Artist {
-
- public AbstractArtist(String id) {
- super(id);
- }
-
- public String name() {
- return value("name", String.class).get();
- }
-
- public Artist name(String name) {
- value("name", String.class).set(name);
- return this;
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public Set<Group> groups() {
- return value("groups", Set.class).get();
- }
-
- /**
- * {@inheritDoc}
- */
- public Artist groups(Set<Group> groups) {
- value("groups", Set.class).set(groups);
- return this;
- }
-
-}
+++ /dev/null
-/*
- * DemosceneMusic - Base.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractBase implements Base {
-
- private final String id;
-
- private final Map<String, Value<?>> attributes = new HashMap<String, Value<?>>();
-
- protected AbstractBase(String id) {
- this.id = id;
- }
-
- public String id() {
- return id;
- }
-
- @SuppressWarnings({ "synthetic-access", "unchecked" })
- protected <T> Value<T> value(String name, Class<T> clazz) {
- if (!attributes.containsKey(name)) {
- attributes.put(name, new Value<T>());
- }
- return (Value<T>) 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<String, Value<?>> attributeEntry : attributes.entrySet()) {
- stringBuilder.append(',').append(attributeEntry.getKey()).append('=').append(attributeEntry.getValue().get());
- }
- stringBuilder.append(']');
- return stringBuilder.toString();
- }
-
- protected static class Value<T> {
-
- private T original;
-
- private boolean originalSet;
-
- private T current;
-
- public T get() {
- return current;
- }
-
- public Value<T> set(T value) {
- if (!originalSet) {
- original = value;
- originalSet = true;
- }
- current = value;
- return this;
- }
-
- public boolean dirty() {
- return (original != null) ? !original.equals(current) : current != null;
- }
-
- public Value<T> commit() {
- original = current;
- return this;
- }
-
- }
-
-}
+++ /dev/null
-/*
- * DemosceneMusic - AbstractGroup.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractGroup extends AbstractBase implements Group {
-
- public AbstractGroup(String id) {
- super(id);
- }
-
- /**
- * {@inheritDoc}
- */
- public String name() {
- return value("name", String.class).get();
- }
-
- /**
- * {@inheritDoc}
- */
- public Group name(String name) {
- value("name", String.class).set(name);
- return this;
- }
-
- /**
- * {@inheritDoc}
- */
- public String url() {
- return value("url", String.class).get();
- }
-
- /**
- * {@inheritDoc}
- */
- public Group url(String url) {
- value("url", String.class).set(url);
- return this;
- }
-
-}
+++ /dev/null
-/*
- * DemosceneMusic - AbstractParty.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractParty extends AbstractBase implements Party {
-
- public AbstractParty(String id) {
- super(id);
- }
-
- public String name() {
- return value("name", String.class).get();
- }
-
- public AbstractParty name(String name) {
- value("name", String.class).set(name);
- return this;
- }
-
-}
+++ /dev/null
-/*
- * DemosceneMusic - AbstractStyle.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractStyle extends AbstractBase implements Style {
-
- public AbstractStyle(String id) {
- super(id);
- }
-
- public String name() {
- return value("name", String.class).get();
- }
-
- public Style name(String name) {
- value("name", String.class).set(name);
- return this;
- }
-
-}
+++ /dev/null
-/*
- * DemosceneMusic - Track.java - Copyright © 2012 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.demoscenemusic.data;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * TODO
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public abstract class AbstractTrack extends AbstractBase implements Track {
-
- public AbstractTrack(String id) {
- super(id);
- }
-
- public String name() {
- return value("name", String.class).get();
- }
-
- public Track name(String name) {
- value("name", String.class).set(name);
- return this;
- }
-
- public List<Artist> artists() {
- return value("artists", List.class).get();
- }
-
- public Track artists(List<Artist> artists) {
- value("artists", List.class).set(artists);
- return this;
- }
-
- public Set<Style> styles() {
- return value("styles", Set.class).get();
- }
-
- public Track styles(Set<? extends Style> styles) {
- value("styles", Set.class).set(styles);
- return this;
- }
-
-}
--- /dev/null
+/*
+ * DemosceneMusic - Artist.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+import java.util.Set;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultArtist extends DefaultBase implements Artist {
+
+ public DefaultArtist(String id) {
+ super(id);
+ }
+
+ public String name() {
+ return value("name", String.class).get();
+ }
+
+ public Artist name(String name) {
+ value("name", String.class).set(name);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public Set<Group> groups() {
+ return value("groups", Set.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Artist groups(Set<Group> groups) {
+ value("groups", Set.class).set(groups);
+ return this;
+ }
+
+}
--- /dev/null
+/*
+ * DemosceneMusic - Base.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultBase implements Base {
+
+ private final String id;
+
+ private final Map<String, Value<?>> attributes = new HashMap<String, Value<?>>();
+
+ protected DefaultBase(String id) {
+ this.id = id;
+ }
+
+ public String id() {
+ return id;
+ }
+
+ @SuppressWarnings({ "synthetic-access", "unchecked" })
+ protected <T> Value<T> value(String name, Class<T> clazz) {
+ if (!attributes.containsKey(name)) {
+ attributes.put(name, new Value<T>());
+ }
+ return (Value<T>) 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<String, Value<?>> attributeEntry : attributes.entrySet()) {
+ stringBuilder.append(',').append(attributeEntry.getKey()).append('=').append(attributeEntry.getValue().get());
+ }
+ stringBuilder.append(']');
+ return stringBuilder.toString();
+ }
+
+ protected static class Value<T> {
+
+ private T original;
+
+ private boolean originalSet;
+
+ private T current;
+
+ public T get() {
+ return current;
+ }
+
+ public Value<T> set(T value) {
+ if (!originalSet) {
+ original = value;
+ originalSet = true;
+ }
+ current = value;
+ return this;
+ }
+
+ public boolean dirty() {
+ return (original != null) ? !original.equals(current) : current != null;
+ }
+
+ public Value<T> commit() {
+ original = current;
+ return this;
+ }
+
+ }
+
+}
--- /dev/null
+/*
+ * DemosceneMusic - AbstractGroup.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultGroup extends DefaultBase implements Group {
+
+ public DefaultGroup(String id) {
+ super(id);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String name() {
+ return value("name", String.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Group name(String name) {
+ value("name", String.class).set(name);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String url() {
+ return value("url", String.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Group url(String url) {
+ value("url", String.class).set(url);
+ return this;
+ }
+
+}
--- /dev/null
+/*
+ * DemosceneMusic - AbstractParty.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultParty extends DefaultBase implements Party {
+
+ public DefaultParty(String id) {
+ super(id);
+ }
+
+ public String name() {
+ return value("name", String.class).get();
+ }
+
+ public DefaultParty name(String name) {
+ value("name", String.class).set(name);
+ return this;
+ }
+
+}
--- /dev/null
+/*
+ * DemosceneMusic - AbstractStyle.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultStyle extends DefaultBase implements Style {
+
+ public DefaultStyle(String id) {
+ super(id);
+ }
+
+ public String name() {
+ return value("name", String.class).get();
+ }
+
+ public Style name(String name) {
+ value("name", String.class).set(name);
+ return this;
+ }
+
+}
--- /dev/null
+/*
+ * DemosceneMusic - Track.java - Copyright © 2012 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.demoscenemusic.data;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * TODO
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class DefaultTrack extends DefaultBase implements Track {
+
+ public DefaultTrack(String id) {
+ super(id);
+ }
+
+ public String name() {
+ return value("name", String.class).get();
+ }
+
+ public Track name(String name) {
+ value("name", String.class).set(name);
+ return this;
+ }
+
+ public List<Artist> artists() {
+ return value("artists", List.class).get();
+ }
+
+ public Track artists(List<Artist> artists) {
+ value("artists", List.class).set(artists);
+ return this;
+ }
+
+ public Set<Style> styles() {
+ return value("styles", Set.class).get();
+ }
+
+ public Track styles(Set<? extends Style> styles) {
+ value("styles", Set.class).set(styles);
+ return this;
+ }
+
+}