import net.pterodactylus.util.database.ObjectCreator;
import net.pterodactylus.util.database.ObjectCreator.StringCreator;
import net.pterodactylus.util.database.OrderField;
+import net.pterodactylus.util.database.Parameter.IntegerParameter;
import net.pterodactylus.util.database.Parameter.StringParameter;
import net.pterodactylus.util.database.Query;
import net.pterodactylus.util.database.Query.Type;
}
/**
+ * Saves the given track. This also saves all relationships of the track.
+ *
+ * @param track
+ * The track to save
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public void saveTrack(Track track) throws DatabaseException {
+ Query query = new Query(Type.UPDATE, "TRACKS");
+ query.addValueField(new ValueField("TRACKS.NAME", new StringParameter(track.getName())));
+ query.addValueField(new ValueField("TRACKS.REMIX", new StringParameter(track.getRemix())));
+ query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACKS.ID", new StringParameter(track.getId()))));
+ database.update(query);
+ /* store artist information. */
+ track.getArtists(); /* prefetch artists. */
+ query = new Query(Type.DELETE, "TRACK_ARTISTS");
+ query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_ARTISTS.TRACK", new StringParameter(track.getId()))));
+ database.update(query);
+ for (int index = 0; index < track.getArtists().size(); ++index) {
+ query = new Query(Type.INSERT, "TRACK_ARTISTS");
+ query.addValueField(new ValueField("TRACK_ARTISTS.TRACK", new StringParameter(track.getId())));
+ query.addValueField(new ValueField("TRACK_ARTISTS.ARTIST", new StringParameter(track.getArtists().get(index).getId())));
+ query.addValueField(new ValueField("TRACK_ARTISTS.DISPLAY_ORDER", new IntegerParameter(index + 1)));
+ database.insert(query);
+ }
+ /* store properties. */
+ saveProperties(track.getProperties(), "TRACK_PROPERTIES", "TRACK", track.getId());
+ }
+
+ /**
* Returns the derivative with the given ID.
*
* @param 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));
}
}
/**
+ * Saves the given track derivative. As a track derivative does not have any
+ * attributes of its own only its properties are saved.
+ *
+ * @param trackDerivative
+ * The track derivative to save
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public void saveTrackDerivate(TrackDerivative trackDerivative) throws DatabaseException {
+ saveProperties(trackDerivative.getProperties(), "TRACK_DERIVATIVE_PROPERTIES", "TRACK_DERIVATIVE", trackDerivative.getId());
+ }
+
+ /**
+ * Removes the given track derivative and all its properties from the
+ * database.
+ *
+ * @param trackDerivative
+ * The track derivative to remove
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public void removeTrackDerivative(TrackDerivative trackDerivative) throws DatabaseException {
+ Query query = new Query(Type.DELETE, "TRACK_DERIVATIVES");
+ query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_DERIVATIVES.ID", new StringParameter(trackDerivative.getId()))));
+ database.update(query);
+ /* remove the properties. */
+ saveProperties(new Properties().set("dirty", "true").removeAll(), "TRACK_DERIVATIVE_PROPERTIES", "TRACK_DERIVATIVE", trackDerivative.getId());
+ }
+
+ /**
* Returns all groups the artist with the given ID belongs to.
*
* @param artistId
/** Memoizer for the tracks by this artist. */
private final Memoizer<Void> tracksMemoizer = new Memoizer<Void>(new Callable<Void>() {
+
@Override
public Void call() throws DatabaseException {
if (!hasValue("tracks")) {
@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;
}
}
return null;
}
+
});
/**