X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=31e5def4edae770edc94504db7c87a5b44c02982;hb=213e80871a5f574d7ee048a87fb1974fe4716d5c;hp=c87df731506efa288b689928be11bcd1eac8d485;hpb=2fd39b4383b041559364dce6eaf56c9164dbed82;p=demoscenemusic.git diff --git a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java index c87df73..31e5def 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -38,6 +38,7 @@ import net.pterodactylus.util.database.Join.JoinType; 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; @@ -392,6 +393,36 @@ public class DataManager { } /** + * 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 @@ -410,16 +441,16 @@ public class DataManager { /** * 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 getTrackDerivativesByTrack(Track track) throws DatabaseException { + public Collection 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)); } @@ -471,6 +502,36 @@ public class DataManager { } /** + * 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(), "TRACK_DERIVATIVE_PROPERTIES", "TRACK_DERIVATIVE", trackDerivative.getId()); + } + + /** * Returns all groups the artist with the given ID belongs to. * * @param artistId @@ -603,6 +664,7 @@ public class DataManager { /** Memoizer for the tracks by this artist. */ private final Memoizer tracksMemoizer = new Memoizer(new Callable() { + @Override public Void call() throws DatabaseException { if (!hasValue("tracks")) { @@ -797,7 +859,7 @@ public class DataManager { @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; } @@ -814,6 +876,7 @@ public class DataManager { } return null; } + }); /**