X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=b56634f11c92b3d9805716e1ec3332cdda5e557e;hb=0b253d8c5d8b773760aca1ad3996f2a0e95e0f44;hp=a99b13d5da6e2a4b108cec7a2198182a290f7461;hpb=85e627b741a00383efb781f525bfd9f471dc7665;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 a99b13d..b56634f 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -20,14 +20,18 @@ package net.pterodactylus.demoscenemusic.data; import java.sql.ResultSet; import java.sql.SQLException; 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; import net.pterodactylus.util.database.Join; import net.pterodactylus.util.database.Join.JoinType; +import net.pterodactylus.util.database.ObjectCreator; import net.pterodactylus.util.database.OrderField; import net.pterodactylus.util.database.OrderField.Order; import net.pterodactylus.util.database.Parameter.StringParameter; @@ -44,12 +48,42 @@ import net.pterodactylus.util.database.ValueFieldWhereClause; */ public class DataManager { + private final ObjectCreator artistCreator = new ArtistCreator(); + private final Database database; public DataManager(Database database) { this.database = database; } + public Collection getAllArtists() throws DatabaseException { + Query query = new Query(Type.SELECT, "ARTISTS"); + query.addField(new Field("ARTISTS.*")); + return database.getMultiple(query, artistCreator); + } + + public Artist getArtistById(String id) throws DatabaseException { + Query query = new Query(Type.SELECT, "ARTISTS"); + query.addField(new Field("ARTISTS.*")); + query.addField(new Field("GROUP_ARTISTS.*")); + query.addField(new Field("GROUPS.*")); + query.addJoin(new Join(JoinType.INNER, "GROUP_ARTISTS", new Field("ARTISTS.ID"), new Field("GROUP_ARTISTS.ARTIST"))); + query.addJoin(new Join(JoinType.INNER, "GROUPS", new Field("GROUP_ARTISTS.GROUP_"), new Field("GROUPS.ID"))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("ARTISTS.ID", new StringParameter(id)))); + query.addOrderField(new OrderField(new Field("ARTISTS.ID"))); + ArtistLoader artistLoader = new ArtistLoader(); + database.process(query, artistLoader); + return artistLoader.get(); + } + + public Collection getArtistsByGroup(String groupId) throws DatabaseException { + Query query = new Query(Type.SELECT, "ARTISTS"); + query.addField(new Field("ARTISTS.*")); + query.addJoin(new Join(JoinType.INNER, "GROUP_ARTISTS", new Field("ARTISTS.ID"), new Field("GROUP_ARTISTS.ARTIST"))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("GROUP_ARTISTS.GROUP_", new StringParameter(groupId)))); + return database.getMultiple(query, artistCreator); + } + public Track trackById(String id) throws DatabaseException { Query query = new Query(Type.SELECT, "TRACKS"); query.addField(new Field("TRACKS.*")); @@ -69,47 +103,149 @@ 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(); + } + + public Collection getGroupsByArtist(String artistId) throws DatabaseException { + Query query = new Query(Type.SELECT, "GROUPS"); + query.addField(new Field("GROUPS.*")); + query.addJoin(new Join(JoinType.INNER, "GROUP_ARTISTS", new Field("GROUPS.ID"), new Field("GROUP_ARTISTS.GROUP_"))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("GROUP_ARTISTS.ARTIST", new StringParameter(artistId)))); + return database.getMultiple(query, DefaultGroup.CREATOR); + } + 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} */ public void processResult(ResultSet resultSet) throws SQLException { String trackId = resultSet.getString("TRACKS.ID"); if ((track == null) || (!track.id().equals(trackId))) { - track = new AbstractTrack(trackId) { - - public void save() { - if (!dirty()) { - return; - } - } - }.name(resultSet.getString("TRACKS.NAME")).artists(new ArrayList()).styles(new HashSet