X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=03ec2d9a7bd9b4ff39a2e5d11c975dabb0e7c3aa;hb=68d080b0e8f579b2884d4558782fd7e416154714;hp=77f5adeb1de2a30ae39579424ad18d1aaccf1524;hpb=3053d869611dfe5c726d3b786ffa0b65e69c96c3;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 77f5ade..03ec2d9 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -99,7 +99,7 @@ public class DataManager { public Collection getAllArtists() throws DatabaseException { Query query = new Query(Type.SELECT, "ARTISTS"); query.addField(new Field("ARTISTS.*")); - return loadProperties(database.getMultiple(query, artistCreator)); + return loadArtistProperties(database.getMultiple(query, artistCreator)); } /** @@ -116,7 +116,7 @@ public class DataManager { Query query = new Query(Type.SELECT, "ARTISTS"); query.addField(new Field("ARTISTS.*")); query.addWhereClause(new ValueFieldWhereClause(new ValueField("ARTISTS.ID", new StringParameter(id)))); - return loadProperties(database.getSingle(query, artistCreator)); + return loadArtistProperties(database.getSingle(query, artistCreator)); } /** @@ -133,7 +133,7 @@ public class DataManager { 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 loadProperties(database.getMultiple(query, artistCreator)); + return loadArtistProperties(database.getMultiple(query, artistCreator)); } /** @@ -151,7 +151,7 @@ public class DataManager { query.addJoin(new Join(JoinType.INNER, "TRACK_ARTISTS", new Field("TRACK_ARTISTS.ARTIST"), new Field("ARTISTS.ID"))); query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_ARTISTS.TRACK", new StringParameter(trackId)))); query.addOrderField(new OrderField(new Field("TRACK_ARTISTS.DISPLAY_ORDER"))); - return loadProperties(database.getMultiple(query, artistCreator)); + return loadArtistProperties(database.getMultiple(query, artistCreator)); } /** @@ -169,7 +169,7 @@ public class DataManager { query.addValueField(new ValueField("ID", new StringParameter(id))); query.addValueField(new ValueField("NAME", new StringParameter(name))); database.insert(query); - return loadProperties(getArtistById(id)); + return loadArtistProperties(getArtistById(id)); } /** @@ -240,7 +240,7 @@ public class DataManager { * @throws DatabaseException * if a database error occurs */ - public Artist loadProperties(final Artist artist) throws DatabaseException { + public Artist loadArtistProperties(final Artist artist) throws DatabaseException { return loadProperties(artist, "ARTIST_PROPERTIES", "ARTIST"); } @@ -253,9 +253,9 @@ public class DataManager { * @throws DatabaseException * if a database error occurs */ - public List loadProperties(List artists) throws DatabaseException { + public List loadArtistProperties(List artists) throws DatabaseException { for (Artist artist : artists) { - loadProperties(artist); + loadArtistProperties(artist); } return artists; } @@ -345,6 +345,67 @@ public class DataManager { } /** + * Returns the derivative with the given ID. + * + * @param id + * The ID of the derivatives to load + * @return The derivative with the given ID + * @throws DatabaseException + * if a database error occurs + */ + public TrackDerivative getTrackDerivativeById(String id) throws DatabaseException { + Query query = new Query(Type.SELECT, "TRACK_DERIVATIVES"); + query.addField(new Field("TRACK_DERIVATIVES.*")); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("TRACK_DERIVATIVES.ID", new StringParameter(id)))); + return loadTrackDerivativeProperties(database.getSingle(query, trackDerivativeCreator)); + } + + /** + * Returns the derivatives for the given track. + * + * @param track + * The track 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 { + 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())))); + return loadTrackDerivativeProperties(database.getMultiple(query, trackDerivativeCreator)); + } + + /** + * Loads the properties for the given track derivative. + * + * @param trackDerivative + * The track derivative to load the properties for + * @return The track derivative with its properties loaded + * @throws DatabaseException + * if a database error occurs + */ + public TrackDerivative loadTrackDerivativeProperties(TrackDerivative trackDerivative) throws DatabaseException { + return loadProperties(trackDerivative, "TRACK_DERIVATIVE_PROPERTIES", "TRACK_DERIVATIVE"); + } + + /** + * Loads the properties for the given track derivatives. + * + * @param trackDerivatives + * The track derivatives to load the properties for + * @return The track derivatives with their properties loaded + * @throws DatabaseException + * if a database error occurs + */ + public List loadTrackDerivativeProperties(List trackDerivatives) throws DatabaseException { + for (TrackDerivative trackDerivative : trackDerivatives) { + loadTrackDerivativeProperties(trackDerivative); + } + return trackDerivatives; + } + + /** * Returns all groups the artist with the given ID belongs to. * * @param artistId @@ -665,6 +726,19 @@ public class DataManager { }); + /** Memoizer for the track derivatives. */ + private final Memoizer derivativesMemoizer = new Memoizer(new Callable() { + + @Override + public Void call() throws Exception { + if (!hasValue("derivatives")) { + getValue("derivatives", Collection.class).set(getTrackDerivativesByTrack(LazyTrack.this)); + } + return null; + } + + }); + /** Memoizer for the related tracks. */ private final Memoizer relatedTracksMemoizer = new Memoizer(new Callable() { @@ -722,6 +796,15 @@ public class DataManager { * {@inheritDoc} */ @Override + public Collection getDerivatives() { + derivativesMemoizer.get(); + return super.getDerivatives(); + } + + /** + * {@inheritDoc} + */ + @Override public Map> getRelatedTracks() { relatedTracksMemoizer.get(); return super.getRelatedTracks();