package org.springframework.data.mongodb.examples.music; import java.util.ArrayList; import java.util.List; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** * An {@link Album} represents a collection of {@link Track}s. * * @author Oliver Gierke */ @Document public class Album { @Id private ObjectId id; private String title; private String artist; private List<Track> tracks = new ArrayList<Track>(); /** * Creates a new {@link Album} with the given title and artist. * * @param string * @param artist */ public Album(String title, String artist) { Assert.isTrue(StringUtils.hasText(artist), "Artist name must be given!"); Assert.isTrue(StringUtils.hasText(title), "Album title must be given!"); this.id = new ObjectId(); this.title = title; this.artist = artist; } public ObjectId getId() { return id; } public String getTitle() { return title; } public String getArtist() { return artist; } public List<Track> getTracks() { return tracks; } /** * Adds the given {@link Track} to the {@link Album}. * * @param track */ public void add(Track track) { this.tracks.add(track); } /** * Returns the number of {@link Track}s contained in the {@link Album}. * * @return */ public int trackCount() { return this.tracks.size(); } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || !getClass().equals(obj.getClass())) { return false; } Album that = (Album) obj; return id == null ? false : this.id.equals(that.id); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return 17 + ( id == null ? 0 : id.hashCode()); } }