+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public Collection<TrackDerivative> getDerivatives() {
+ return getValue("derivatives", Collection.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Track setDerivatives(Collection<TrackDerivative> derivatives) {
+ getValue("derivatives", Collection.class).set(derivatives);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public Map<Relationship, Collection<Track>> getRelatedTracks() {
+ return getValue("relatedTracks", Map.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Track setRelatedTracks(Map<Relationship, Collection<Track>> relatedTracks) {
+ getValue("relatedTracks", Map.class).set(relatedTracks);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public Collection<Party> getParties() {
+ return getValue("parties", Collection.class).get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Track setParties(Collection<Party> parties) {
+ getValue("parties", Collection.class).set(parties);
+ return this;
+ }
+
+ //
+ // OBJECT METHODS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return getId().hashCode();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof Track)) {
+ return false;
+ }
+ return ((Track) object).getId().equals(getId());
+ }
+