X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=928eebcf2223d0dfda7910443554792f8ef89494;hb=f533deea6ecc3f1bd59ca8926c31dd7667ee572a;hp=520a3d9212f5ac52e969bc9b03245c4e6c274d56;hpb=24f4198972ba0b6f180404508818775245946b0b;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 520a3d9..928eebc 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -23,7 +23,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.concurrent.Callable; +import net.pterodactylus.util.collection.Memoizer; import net.pterodactylus.util.database.Database; import net.pterodactylus.util.database.DatabaseException; import net.pterodactylus.util.database.Field; @@ -97,11 +99,38 @@ public class DataManager { return trackLoader.get(); } + public Collection getTracksByArtist(String artistId) throws DatabaseException { + Query query = new Query(Type.SELECT, "TRACKS"); + query.addField(new Field("TRACKS.*")); + query.addField(new Field("TRACK_ARTISTS.*")); + query.addField(new Field("ARTISTS.*")); + query.addField(new Field("TRACK_STYLES.*")); + query.addField(new Field("STYLES.*")); + query.addJoin(new Join(JoinType.INNER, "TRACK_ARTISTS", new Field("TRACKS.ID"), new Field("TRACK_ARTISTS.TRACK"))); + query.addJoin(new Join(JoinType.INNER, "ARTISTS", new Field("TRACK_ARTISTS.ARTIST"), new Field("ARTISTS.ID"))); + query.addJoin(new Join(JoinType.INNER, "TRACK_STYLES", new Field("TRACKS.ID"), new Field("TRACK_STYLES.TRACK"))); + query.addJoin(new Join(JoinType.INNER, "STYLES", new Field("TRACK_STYLES.STYLE"), new Field("STYLES.ID"))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("ARTISTS.ID", new StringParameter(artistId)))); + query.addOrderField(new OrderField(new Field("TRACKS.ID"), Order.ASCENDING)); + query.addOrderField(new OrderField(new Field("TRACK_ARTISTS.DISPLAY_ORDER"), Order.ASCENDING)); + TrackLoader trackLoader = new TrackLoader(); + database.process(query, trackLoader); + return trackLoader.all(); + } + private class TrackLoader implements ResultProcessor { private final List loadedTracks = new ArrayList(); private Track track; + public Track get() { + return loadedTracks.isEmpty() ? null : loadedTracks.get(0); + } + + public List all() { + return loadedTracks; + } + /** * {@inheritDoc} */ @@ -111,7 +140,7 @@ public class DataManager { track = new DefaultTrack(trackId).name(resultSet.getString("TRACKS.NAME")).artists(new ArrayList()).styles(new HashSet