X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fdata%2FDataManager.java;h=f3d35788f2cfaee5af00bef82ef0c4a78227debb;hb=51130ce0f519aa3ac648999413e76558679ee182;hp=0251d62e6071bcb4e45794007330497b307ea939;hpb=18e7d99933bc49b3092b156dbb16eef3f1957ec6;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 0251d62..f3d3578 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/data/DataManager.java @@ -457,6 +457,19 @@ public class DataManager { query.addValueField(new ValueField("TRACK_ARTISTS.DISPLAY_ORDER", new IntegerParameter(index + 1))); database.insert(query); } + + /* store party links. */ + Collection parties = track.getParties(); /* prefetch parties. */ + query = new Query(Type.DELETE, "PARTY_TRACKS"); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("PARTY_TRACKS.TRACK", new StringParameter(track.getId())))); + database.update(query); + for (Party party : parties) { + query = new Query(Type.INSERT, "PARTY_TRACKS"); + query.addValueField(new ValueField("PARTY_TRACKS.TRACK", new StringParameter(track.getId()))); + query.addValueField(new ValueField("PARTY_TRACKS.PARTY", new StringParameter(party.getId()))); + database.insert(query); + } + /* store properties. */ saveProperties(track.getProperties(), "TRACK_PROPERTIES", "TRACK", track.getId()); } @@ -618,6 +631,114 @@ public class DataManager { } /** + * Returns all parties that the track with the given ID was released at. + * + * @param trackId + * The ID of the track + * @return All parties the track was released at + * @throws DatabaseException + * if a database error occurs + */ + public Collection getPartiesByTrackId(String trackId) throws DatabaseException { + Query query = new Query(Type.SELECT, "PARTIES"); + query.addField(new Field("PARTIES.*")); + query.addJoin(new Join(JoinType.INNER, "PARTY_TRACKS", new Field("PARTY_TRACKS.PARTY"), new Field("PARTIES.ID"))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("PARTY_TRACKS.TRACK", new StringParameter(trackId)))); + return loadPartyProperties(database.getMultiple(query, partyCreator)); + } + + /** + * Returns the party with the given ID. + * + * @param partyId + * The ID of the party + * @return The party with the given ID + * @throws DatabaseException + * if a database error occurs + */ + public Party getPartyById(String partyId) throws DatabaseException { + Query query = new Query(Type.SELECT, "PARTIES"); + query.addField(new Field("PARTIES.*")); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("PARTIES.ID", new StringParameter(partyId)))); + return loadPartyProperties(database.getSingle(query, partyCreator)); + } + + /** + * Loads the properties of the given party. + * + * @param party + * The party to load the properties for + * @return The party with its properties loaded + * @throws DatabaseException + * if a database error occurs + */ + public Party loadPartyProperties(Party party) throws DatabaseException { + return loadProperties(party, "PARTY_PROPERTIES", "PARTY"); + } + + /** + * Loads the properties of the given parties. + * + * @param parties + * The parties to load the properties for + * @return The parties with their properties loaded + * @throws DatabaseException + * if a database error occurs + */ + public List loadPartyProperties(List parties) throws DatabaseException { + for (Party party : parties) { + loadPartyProperties(party); + } + return parties; + } + + /** + * Saves the given party. + * + * @param party + * The party to save + * @throws DatabaseException + * if a database error occurs + */ + public void saveParty(Party party) throws DatabaseException { + Query query = new Query(Type.UPDATE, "PARTIES"); + query.addValueField(new ValueField("NAME", new StringParameter(party.getName()))); + query.addWhereClause(new ValueFieldWhereClause(new ValueField("ID", new StringParameter(party.getId())))); + database.update(query); + savePartyProperties(party); + } + + /** + * Saves the properties of the given party. + * + * @param party + * The party whose properties to save + * @throws DatabaseException + * if a database error occurs + */ + public void savePartyProperties(Party party) throws DatabaseException { + saveProperties(party.getProperties(), "PARTY_PROPERTIES", "PARTY", party.getId()); + } + + /** + * Creates a new party with the given name. + * + * @param name + * The name of the party + * @return The new party + * @throws DatabaseException + * if a database error occurs + */ + public Party createParty(String name) throws DatabaseException { + Query query = new Query(Type.INSERT, "PARTIES"); + String id = UUID.randomUUID().toString(); + query.addValueField(new ValueField("ID", new StringParameter(id))); + query.addValueField(new ValueField("NAME", new StringParameter(name))); + database.insert(query); + return getPartyById(id); + } + + /** * Returns the user with the given name. * * @param username @@ -687,6 +808,9 @@ public class DataManager { * if a database error occurs */ private T loadProperties(final T object, final String table, String type) throws DatabaseException { + if (object == null) { + return null; + } Query query = new Query(Type.SELECT, table); query.addField(new Field(table + ".PROPERTY")); query.addField(new Field(table + ".VALUE")); @@ -990,6 +1114,21 @@ public class DataManager { return super.getRelatedTracks(); } + /** + * {@inheritDoc} + */ + @Override + public Collection getParties() { + if (!hasValue("parties")) { + try { + getValue("parties", Collection.class).set(getPartiesByTrackId(getId())); + } catch (DatabaseException de1) { + throw new RuntimeException("Could not load Parties for Track " + getId() + ".", de1); + } + } + return super.getParties(); + } + } /**