diff --git a/pom.xml b/pom.xml
index c2cc454..5fb9a88 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,11 +122,5 @@
sqlite-jdbc
3.27.2.1
-
- org.jetbrains
- annotations
- 17.0.0
- compile
-
\ No newline at end of file
diff --git a/src/main/java/net/simon987/musicgraph/Main.java b/src/main/java/net/simon987/musicgraph/Main.java
index b572185..25ad897 100644
--- a/src/main/java/net/simon987/musicgraph/Main.java
+++ b/src/main/java/net/simon987/musicgraph/Main.java
@@ -2,9 +2,7 @@ package net.simon987.musicgraph;
import net.simon987.musicgraph.io.*;
import net.simon987.musicgraph.logging.LogManager;
-import net.simon987.musicgraph.webapi.ArtistController;
-import net.simon987.musicgraph.webapi.CoverController;
-import net.simon987.musicgraph.webapi.Index;
+import net.simon987.musicgraph.webapi.*;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.jackson.JacksonFeature;
@@ -18,7 +16,6 @@ public class Main {
private final static Logger logger = LogManager.getLogger();
public static void main(String[] args) {
-
startHttpServer();
}
@@ -28,12 +25,16 @@ public class Main {
rc.registerInstances(new MusicDatabase());
rc.registerInstances(new SQLiteCoverArtDatabase("covers.db"));
+ rc.registerInstances(new MagickChartBuilder("/dev/shm/im_chart/"));
rc.registerClasses(Index.class);
rc.registerClasses(ArtistController.class);
rc.registerClasses(CoverController.class);
+ rc.registerClasses(ChartController.class);
rc.registerClasses(JacksonFeature.class);
+ rc.registerClasses(MyExceptionMapper.class);
+
try {
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
new URI("http://localhost:3030/"),
diff --git a/src/main/java/net/simon987/musicgraph/entities/ReleaseDetails.java b/src/main/java/net/simon987/musicgraph/entities/ReleaseDetails.java
new file mode 100644
index 0000000..83fe4db
--- /dev/null
+++ b/src/main/java/net/simon987/musicgraph/entities/ReleaseDetails.java
@@ -0,0 +1,17 @@
+package net.simon987.musicgraph.entities;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ReleaseDetails {
+
+ public String name;
+ public String mbid;
+ public String artist;
+ public long year;
+ public List tags;
+
+ public ReleaseDetails() {
+ this.tags = new ArrayList<>();
+ }
+}
diff --git a/src/main/java/net/simon987/musicgraph/io/ICoverArtDatabase.java b/src/main/java/net/simon987/musicgraph/io/ICoverArtDatabase.java
index 2347444..8fda6d4 100644
--- a/src/main/java/net/simon987/musicgraph/io/ICoverArtDatabase.java
+++ b/src/main/java/net/simon987/musicgraph/io/ICoverArtDatabase.java
@@ -1,5 +1,8 @@
package net.simon987.musicgraph.io;
+import java.util.HashMap;
+import java.util.List;
+
public interface ICoverArtDatabase {
/**
@@ -8,4 +11,6 @@ public interface ICoverArtDatabase {
* @throws Exception if unexpected error
*/
byte[] getCover(String mbid) throws Exception;
+
+ HashMap getCovers(List mbids) throws Exception;
}
diff --git a/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java b/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java
index dc056b5..4e78064 100644
--- a/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java
+++ b/src/main/java/net/simon987/musicgraph/io/MusicDatabase.java
@@ -155,4 +155,49 @@ public class MusicDatabase extends AbstractBinder {
return relation;
}
+ public ReleaseDetails getReleaseDetails(String mbid) {
+
+ Map params = new HashMap<>();
+ params.put("mbid", mbid);
+
+ try (Session session = driver.session()) {
+
+ StatementResult result = query(session,
+ "MATCH (release:Release {id: $mbid})-[:CREDITED_FOR]-(a:Artist)\n" +
+ "OPTIONAL MATCH (release)-[r:IS_TAGGED]->(t:Tag)\n" +
+ "RETURN release {name:release.name, year:release.year," +
+ "tags:collect({weight:r.weight, name:t.name}), artist: a.name}\n" +
+ "LIMIT 1",
+ params);
+
+ ReleaseDetails details = new ReleaseDetails();
+
+ try {
+
+ if (result.hasNext()) {
+ Map map = result.next().get("release").asMap();
+
+ details.mbid = mbid;
+ details.name = (String) map.get("name");
+ details.artist = (String) map.get("artist");
+ details.year = (long) map.get("year");
+ details.tags.addAll(
+ ((List