X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=ba2f61ebdcff2c38f3ecca1d2c5411e7db6752d2;hb=5d19c11df7ca4a969fbfe7583ca934174fb348bf;hp=56d5cea314bd6b46a66982d603903ad6e8f51adf;hpb=4afa9c06e910ed4d8b005fda571d0e7c62822317;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 56d5cea..ba2f61e 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -19,16 +19,22 @@ 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 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; import net.pterodactylus.util.database.Query; import net.pterodactylus.util.database.Query.Type; +import net.pterodactylus.util.database.ResultProcessor; import net.pterodactylus.util.database.ValueField; import net.pterodactylus.util.database.ValueFieldWhereClause; @@ -41,80 +47,122 @@ public class DataManager { private final Database database; - private final TrackLoader trackLoader = new TrackLoader(); - - private final ArtistLoader artistLoader = new ArtistLoader(); - - private final StyleLoader styleLoader = new StyleLoader(); - public DataManager(Database database) { this.database = database; } + public Collection getAllArtists() 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.addOrderField(new OrderField(new Field("ARTISTS.ID"))); + ArtistLoader artistLoader = new ArtistLoader(); + database.process(query, artistLoader); + return artistLoader.all(); + } + public Track trackById(String id) 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, "ARTISTS", new Field("TRACKS.ARTIST"), new Field("ARTISTS.ID"))); - query.addJoin(new Join(JoinType.INNER, "STYLES", new Field("TRACKS.STYLE"), new Field("STYLES.ID"))); - query.addWhereClause(new ValueFieldWhereClause(new ValueField("ID", new StringParameter(id)))); - return database.getSingle(query, trackLoader); + 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("TRACKS.ID", new StringParameter(id)))); + 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.get(); } - private class TrackLoader implements ObjectCreator { + private class TrackLoader implements ResultProcessor { + + private final List loadedTracks = new ArrayList(); + private Track track; /** * {@inheritDoc} */ - public Track createObject(ResultSet resultSet) throws SQLException { - return new AbstractTrack(resultSet.getString("TRACKS.ID")) { + 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