Get parties a track was released at from the track.
[demoscenemusic.git] / src / main / java / net / pterodactylus / demoscenemusic / data / Track.java
index a1362db..cb9249f 100644 (file)
@@ -19,6 +19,7 @@ package net.pterodactylus.demoscenemusic.data;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Data interface for tracks.
@@ -28,6 +29,24 @@ import java.util.List;
 public interface Track extends Base {
 
        /**
+        * Defines relationships between tracks.
+        *
+        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+        */
+       public enum Relationship {
+
+               /** The track is the original of a related track. */
+               original,
+
+               /** The track is a remix of a related track. */
+               remix,
+
+               /** The track is a cover version of a related track. */
+               cover,
+
+       }
+
+       /**
         * Returns the name of this track.
         *
         * @return The name of this track
@@ -110,4 +129,53 @@ public interface Track extends Base {
         */
        public Track setRemixArtists(List<Artist> remixArtists);
 
+       /**
+        * Returns all derivatives of this track. A derivative of a MOD file could
+        * be a WAV or MP3 file.
+        *
+        * @return All derivatives of this track
+        */
+       public Collection<TrackDerivative> getDerivatives();
+
+       /**
+        * Sets the derivatives of this track.
+        *
+        * @param derivatives
+        *            The derivatives of this track
+        * @return This track
+        */
+       public Track setDerivatives(Collection<TrackDerivative> derivatives);
+
+       /**
+        * Returns all tracks that are somehow related to this track.
+        *
+        * @return All tracks that are related to this track
+        */
+       public Map<Relationship, Collection<Track>> getRelatedTracks();
+
+       /**
+        * Sets all related tracks.
+        *
+        * @param relatedTracks
+        *            All related tracks
+        * @return This track
+        */
+       public Track setRelatedTracks(Map<Relationship, Collection<Track>> relatedTracks);
+
+       /**
+        * Returns all parties this track was released at.
+        *
+        * @return All parties this track was released at
+        */
+       public Collection<Party> getParties();
+
+       /**
+        * Sets all parties this track was released at.
+        *
+        * @param parties
+        *            All parties this track was released at
+        * @return This track
+        */
+       public Track setParties(Collection<Party> parties);
+
 }