Query query = new Query(Type.SELECT, "TRACKS");
query.addField(new Field("TRACKS.*"));
query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACKS.ID", new StringParameter(id))));
- return database.getSingle(query, trackCreator);
+ return loadTrackProperties(database.getSingle(query, trackCreator));
}
/**
query.addField(new Field("TRACKS.*"));
query.addJoin(new Join(JoinType.INNER, "TRACK_ARTISTS", new Field("TRACKS.ID"), new Field("TRACK_ARTISTS.TRACK")));
query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_ARTISTS.ARTIST", new StringParameter(artistId))));
- return database.getMultiple(query, trackCreator);
+ return loadTrackProperties(database.getMultiple(query, trackCreator));
+ }
+
+ /**
+ * Loads the properties for the given track.
+ *
+ * @param track
+ * The track for which to load the properties
+ * @return The track with the properties loaded
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public Track loadTrackProperties(Track track) throws DatabaseException {
+ return loadProperties(track, "TRACK_PROPERTIES", "TRACK");
+ }
+
+ /**
+ * Loads the properties for the given tracks.
+ *
+ * @param tracks
+ * The tracks for which to load the properties
+ * @return The tracks with the properties loaded
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public List<Track> loadTrackProperties(List<Track> tracks) throws DatabaseException {
+ for (Track track : tracks) {
+ loadTrackProperties(track);
+ }
+ return tracks;
+ }
+
+ /**
+ * Creates a new track with the given name.
+ *
+ * @param name
+ * The name of the track
+ * @return The created track
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public Track createTrack(String name) throws DatabaseException {
+ Query query = new Query(Type.INSERT, "TRACKS");
+ String id = UUID.randomUUID().toString();
+ query.addValueField(new ValueField("ID", new StringParameter(id)));
+ query.addValueField(new ValueField("NAME", new StringParameter(name)));
+ database.insert(query);
+ return getTrackById(id);
}
/**
/**
* Returns the derivatives for the given track.
*
- * @param track
- * The track to get the derivatives for
+ * @param trackId
+ * The track ID to get the derivatives for
* @return The derivatives for the given track
* @throws DatabaseException
* if a database error occurs
*/
- public Collection<TrackDerivative> getTrackDerivativesByTrack(Track track) throws DatabaseException {
+ public Collection<TrackDerivative> getTrackDerivativesByTrack(String trackId) throws DatabaseException {
Query query = new Query(Type.SELECT, "TRACK_DERIVATIVES");
query.addField(new Field("TRACK_DERIVATIVES.*"));
- query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_DERIVATIVES.TRACK", new StringParameter(track.getId()))));
+ query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_DERIVATIVES.TRACK", new StringParameter(trackId))));
return loadTrackDerivativeProperties(database.getMultiple(query, trackDerivativeCreator));
}
/**
+ * Creates a new derivative for the given track.
+ *
+ * @param track
+ * The track to create the derivative for
+ * @return The created derivative
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public TrackDerivative createTrackDerivative(Track track) throws DatabaseException {
+ Query query = new Query(Type.INSERT, "TRACK_DERIVATIVES");
+ String id = UUID.randomUUID().toString();
+ query.addValueField(new ValueField("TRACK_DERIVATIVES.ID", new StringParameter(id)));
+ query.addValueField(new ValueField("TRACK_DERIVATIVES.TRACK", new StringParameter(track.getId())));
+ database.insert(query);
+ return getTrackDerivativeById(id);
+ }
+
+ /**
* Loads the properties for the given track derivative.
*
* @param trackDerivative
@Override
public Void call() throws Exception {
if (!hasValue("derivatives")) {
- getValue("derivatives", Collection.class).set(getTrackDerivativesByTrack(LazyTrack.this));
+ getValue("derivatives", Collection.class).set(getTrackDerivativesByTrack(getId()));
}
return null;
}