Save groups when saving artist.
[demoscenemusic.git] / src / main / java / net / pterodactylus / demoscenemusic / data / DataManager.java
index ea040bd..8d331cb 100644 (file)
@@ -190,6 +190,20 @@ public class DataManager {
                query.addValueField(new ValueField("NAME", new StringParameter(artist.getName())));
                query.addWhereClause(new ValueFieldWhereClause(new ValueField("ID", new StringParameter(artist.getId()))));
                database.update(query);
+
+               /* save groups. */
+               Collection<Group> groups = artist.getGroups();
+               query = new Query(Type.DELETE, "GROUP_ARTISTS");
+               query.addWhereClause(new ValueFieldWhereClause(new ValueField("GROUP_ARTISTS.ARTIST", new StringParameter(artist.getId()))));
+               database.update(query);
+               for (Group group : groups) {
+                       query = new Query(Type.INSERT, "GROUP_ARTISTS");
+                       query.addValueField(new ValueField("GROUP_", new StringParameter(group.getId())));
+                       query.addValueField(new ValueField("ARTIST", new StringParameter(artist.getId())));
+                       database.insert(query);
+               }
+
+               /* save properties. */
                saveArtistProperties(artist);
        }
 
@@ -457,6 +471,19 @@ public class DataManager {
                        query.addValueField(new ValueField("TRACK_ARTISTS.DISPLAY_ORDER", new IntegerParameter(index + 1)));
                        database.insert(query);
                }
+
+               /* store party links. */
+               Collection<Party> 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());
        }
@@ -795,6 +822,9 @@ public class DataManager {
         *             if a database error occurs
         */
        private <T extends Base> 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"));