[mb-commits] r13680 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet
[email protected] Thu, 09 May 2013 11:15:52 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1UaOpE-0007Fd-2y@wiley> |
Author: ijabz
Date: 2013-05-09 11:15:51 +0000 (Thu, 09 May 2013)
New Revision: 13680
Modified:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java
search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java
Log:
SEARCH-268:Add extended alias info to the ws search results
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ArtistIndex.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -109,11 +109,14 @@
" WHERE artist between ? AND ?");
addPreparedStatement("ALIASES",
- "SELECT artist_alias.artist as artist, n.name as alias, sn.name as alias_sortname " +
- " FROM artist_alias " +
- " JOIN artist_name n ON (artist_alias.name = n.id) " +
- " JOIN artist_name sn ON (artist_alias.sort_name = sn.id) " +
- " WHERE artist BETWEEN ? AND ?");
+ "SELECT a.artist as artist, n.name as alias, sn.name as alias_sortname, a.primary_for_locale, a.locale, att.name as type," +
+ "a.begin_date_year, a.begin_date_month, a.begin_date_day, a.end_date_year, a.end_date_month, a.end_date_day" +
+ " FROM artist_alias a" +
+ " JOIN artist_name n ON (a.name = n.id) " +
+ " JOIN artist_name sn ON (a.sort_name = sn.id) " +
+ " LEFT JOIN artist_alias_type att on (a.type=att.id)" +
+ " WHERE artist BETWEEN ? AND ?" +
+ " ORDER BY artist, alias, alias_sortname");
addPreparedStatement("ARTISTCREDITS",
"SELECT artist as artist, n.name as artistcredit " +
@@ -189,7 +192,7 @@
int artistId = rs.getInt("artist");
Set<Alias> list;
if (!aliases.containsKey(artistId)) {
- list = new HashSet<Alias>();
+ list = new LinkedHashSet<Alias>();
aliases.put(artistId, list);
} else {
list = aliases.get(artistId);
@@ -197,6 +200,28 @@
Alias alias = of.createAlias();
alias.setContent(rs.getString("alias"));
alias.setSortName(rs.getString("alias_sortname"));
+ boolean isPrimary = rs.getBoolean("primary_for_locale");
+ if(isPrimary) {
+ alias.setPrimary("primary");
+ }
+ String locale = rs.getString("locale");
+ if(locale!=null) {
+ alias.setLocale(locale);
+ }
+ String type = rs.getString("type");
+ if(type!=null) {
+ alias.setType(type);
+ }
+
+ String begin = Utils.formatDate(rs.getInt("begin_date_year"), rs.getInt("begin_date_month"), rs.getInt("begin_date_day"));
+ if(!Strings.isNullOrEmpty(begin)) {
+ alias.setBeginDate(begin);
+ }
+
+ String end = Utils.formatDate(rs.getInt("end_date_year"), rs.getInt("end_date_month"), rs.getInt("end_date_day"));
+ if(!Strings.isNullOrEmpty(end)) {
+ alias.setEndDate(end);
+ }
list.add(alias);
}
rs.close();
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -345,7 +345,7 @@
" last_updated timestamp," +
" edits_pending integer NOT NULL DEFAULT 0," +
" type INTEGER," +
- " sort_name INTEGER," +
+ " sort_name INTEGER NOT NULL," +
" begin_date_year SMALLINT," +
" begin_date_month SMALLINT," +
" begin_date_day SMALLINT," +
@@ -986,7 +986,9 @@
"(16, 'DCC', 1992) "
);
- stmt.addBatch("INSERT INTO artist_alias_type (id, name) VALUES (1, 'Search hint')");
+ stmt.addBatch("INSERT INTO artist_alias_type (id, name) VALUES (1, 'Artist name')");
+ stmt.addBatch("INSERT INTO artist_alias_type (id, name) VALUES (2, 'Legal name')");
+ stmt.addBatch("INSERT INTO artist_alias_type (id, name) VALUES (3, 'Search hint')");
stmt.addBatch("INSERT INTO label_alias_type (id, name) VALUES (1, 'Search hint')");
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ArtistIndexTest.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -6,12 +6,15 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.RAMDirectory;
import org.junit.Test;
+import org.musicbrainz.mmd2.Alias;
+import org.musicbrainz.mmd2.AliasList;
import org.musicbrainz.mmd2.Artist;
import org.musicbrainz.mmd2.Release;
import java.sql.Statement;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
public class ArtistIndexTest extends AbstractIndexTest {
@@ -57,11 +60,11 @@
stmt.addBatch("INSERT INTO artist_name (id, name) VALUES (5, 'Bunnymen Orchestra')");
stmt.addBatch("INSERT INTO artist_name (id, name) VALUES (6, 'Buunymen, Echo And The')");
- stmt.addBatch("INSERT INTO artist_alias (id, sort_name, type, artist, name, begin_date_year,begin_date_month,begin_date_day) " +
- " VALUES (1, 6, 1, 16153, 2,1978,05,01)");
+ stmt.addBatch("INSERT INTO artist_alias (id, sort_name, type, artist, name, begin_date_year,begin_date_month,begin_date_day,primary_for_locale ) " +
+ " VALUES (1, 6, 1, 16153, 2,1978,05,01, false)");
- stmt.addBatch("INSERT INTO artist_alias (id, artist, name) VALUES (2, 16153, 3)");
- stmt.addBatch("INSERT INTO artist_alias (id, artist, name) VALUES (3, 16153, 4)");
+ stmt.addBatch("INSERT INTO artist_alias (id, artist, sort_name, name, primary_for_locale, type, end_date_year,end_date_month ) VALUES (2, 16153, 6, 3, null, null, 1984,09)");
+ stmt.addBatch("INSERT INTO artist_alias (id, artist, sort_name, name, primary_for_locale, locale, type ) VALUES (3, 16153, 6, 4, true, 'en',3)");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name) " +
" VALUES (1, 0, 16153, 5)");
@@ -280,11 +283,11 @@
assertEquals(2, ir.numDocs());
{
checkTerm(ir, ArtistIndexField.ALIAS, "and");
- checkTermX(ir, ArtistIndexField.ALIAS, "bunnyman",1);
- checkTermX(ir, ArtistIndexField.ALIAS, "bunnymen",2);
- checkTermX(ir, ArtistIndexField.ALIAS, "buunymen",3); //From alias sortname
- checkTermX(ir, ArtistIndexField.ALIAS, "echo",4);
- checkTermX(ir, ArtistIndexField.ALIAS, "orchestra",5);
+ checkTermX(ir, ArtistIndexField.ALIAS, "bunnyman", 1);
+ checkTermX(ir, ArtistIndexField.ALIAS, "bunnymen", 2);
+ checkTermX(ir, ArtistIndexField.ALIAS, "buunymen", 3); //From alias sortname
+ checkTermX(ir, ArtistIndexField.ALIAS, "echo", 4);
+ checkTermX(ir, ArtistIndexField.ALIAS, "orchestra", 5);
}
ir.close();
@@ -578,7 +581,7 @@
* @throws Exception exception
*/
@Test
- public void testStoredArtist() throws Exception {
+ public void testStoredArtist1() throws Exception {
addArtistOne();
RAMDirectory ramDir = new RAMDirectory();
@@ -598,4 +601,57 @@
}
ir.close();
}
+
+ /**
+ * @throws Exception exception
+ */
+ @Test
+ public void testStoredArtistWithAliases() throws Exception {
+
+ addArtistTwo();
+ RAMDirectory ramDir = new RAMDirectory();
+ createIndex(ramDir);
+
+ IndexReader ir = DirectoryReader.open(ramDir);
+ assertEquals(2, ir.numDocs());
+ {
+
+ Document doc = ir.document(1);
+ Artist artist = (Artist) MMDSerializer.unserialize(doc.get(ArtistIndexField.ARTIST_STORE.getName()), Artist.class);
+ assertEquals("ccd4879c-5e88-4385-b131-bf65296bf245", artist.getId());
+ assertEquals("Echo & The Bunnymen", artist.getName());
+ assertEquals(null, artist.getCountry());
+ AliasList aliasList = artist.getAliasList();
+ assertNotNull(aliasList);
+ assertEquals(3, aliasList.getAlias().size());
+ Alias alias = aliasList.getAlias().get(0);
+ assertEquals("Echo & The Bunnyman", alias.getContent());
+ assertEquals("Buunymen, Echo And The", alias.getSortName());
+ assertEquals(null, alias.getPrimary());
+ assertEquals(null, alias.getLocale());
+ assertEquals(null, alias.getType());
+ assertEquals(null, alias.getBeginDate());
+ assertEquals("1984-09", alias.getEndDate());
+
+ alias = aliasList.getAlias().get(1);
+ assertEquals("Echo And The Bunnymen", alias.getContent());
+ assertEquals("Buunymen, Echo And The", alias.getSortName());
+ assertEquals("primary", alias.getPrimary());
+ assertEquals("en", alias.getLocale());
+ assertEquals("Search hint", alias.getType());
+ assertEquals(null, alias.getBeginDate());
+ assertEquals(null, alias.getEndDate());
+
+ alias = aliasList.getAlias().get(2);
+ assertEquals("Echo and The Bunnymen", alias.getContent());
+ assertEquals("Buunymen, Echo And The", alias.getSortName());
+ assertEquals(null, alias.getPrimary());
+ assertEquals(null, alias.getLocale());
+ assertEquals("Artist name", alias.getType());
+ assertEquals("1978-05-01", alias.getBeginDate());
+ assertEquals(null, alias.getEndDate());
+
+ }
+ ir.close();
+ }
}
\ No newline at end of file
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseGroupIndexTest.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -89,7 +89,7 @@
stmt.addBatch("INSERT INTO artist (id, gid, name, sort_name, comment)" +
" VALUES (16153, 'ccd4879c-5e88-4385-b131-bf65296bf245', 1, 1, 'a comment')");
- stmt.addBatch("INSERT INTO artist_alias(id, artist, name, locale, edits_pending, last_updated) VALUES (1, 16153, 2, 'en',1,null)");
+ stmt.addBatch("INSERT INTO artist_alias(id, artist, name, sort_name, locale, edits_pending, last_updated) VALUES (1, 16153, 2,2, 'en',1,null)");
stmt.addBatch("INSERT INTO artist_credit (id, name, artist_count, ref_count) VALUES (1, 1, 1, 1)");
stmt.addBatch("INSERT INTO artist_credit_name (artist_credit, position, artist, name, join_phrase) " +
" VALUES (1, 0, 16153, 1, '')");
Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -43,22 +43,18 @@
import java.util.Locale;
-public class ArtistWriter extends ResultsWriter
-{
+public class ArtistWriter extends ResultsWriter {
/**
- *
* @param metadata
* @param results
* @throws IOException
*/
- public void write(Metadata metadata, Results results) throws IOException
- {
+ public void write(Metadata metadata, Results results) throws IOException {
ObjectFactory of = new ObjectFactory();
ArtistList artistList = of.createArtistList();
- for(Result result:results.results)
- {
+ for (Result result : results.results) {
result.setNormalizedScore(results.getMaxScore());
}
write(artistList.getArtist(), results);
@@ -70,30 +66,64 @@
/**
- *
* @param list
* @param results
* @throws IOException
*/
- public void write(List list, Results results) throws IOException
- {
- for (Result result : results.results)
- {
+ public void write(List list, Results results) throws IOException {
+ for (Result result : results.results) {
write(list, result);
}
}
/**
- *
* @param list
* @param result
* @throws IOException
*/
- public void write(List list, Result result) throws IOException
- {
+ public void write(List list, Result result) throws IOException {
MbDocument doc = result.getDoc();
Artist artist = (Artist) MMDSerializer.unserialize(doc.get(ArtistIndexField.ARTIST_STORE), Artist.class);
artist.setScore(String.valueOf(result.getNormalizedScore()));
list.add(artist);
}
+
+ /**
+ * Overriden to ensure all attributes are set for each alias
+ *
+ * @param metadata
+ */
+ @Override
+ public void adjustForJson(Metadata metadata) {
+
+ if (metadata.getArtistList().getArtist().size()>0) {
+ for(Artist artist:metadata.getArtistList().getArtist()) {
+ if(artist.getAliasList()!=null) {
+ for (Alias alias : artist.getAliasList().getAlias()) {
+
+ if (alias.getBeginDate() == null) {
+ alias.setBeginDate("");
+ }
+ if (alias.getEndDate() == null) {
+ alias.setEndDate("");
+ }
+ if (alias.getType() == null) {
+ alias.setType("");
+ }
+ if (alias.getLocale() == null) {
+ alias.setLocale("");
+ }
+ //On Xml output as primary, but in json they have changed to true/false
+ if (alias.getPrimary() == null) {
+ alias.setPrimary("false");
+ }
+ else {
+ alias.setPrimary("true");
+ }
+ }
+ }
+ }
+ }
+
+ }
}
\ No newline at end of file
Modified: search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
===================================================================
--- search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -38,7 +38,6 @@
import org.musicbrainz.mmd2.Metadata;
import org.musicbrainz.mmd2.ObjectFactory;
import org.musicbrainz.search.servlet.ErrorMessage;
-import org.musicbrainz.search.servlet.Result;
import org.musicbrainz.search.servlet.Results;
import org.musicbrainz.search.servlet.SearchServerServlet;
@@ -132,6 +131,17 @@
public abstract void write(Metadata metadata, Results results) throws IOException;
/**
+ * Can be overidden to allow fields that have no value and hecne unset in Xml to be set in Json
+ * because Json we expects values to be returned regardless of whether they are set, and there is a problem
+ * with json output if have multiple attributes and some are set and some are not (i.e alias attributes)
+ *
+ * @param metadata
+ */
+ public void adjustForJson(Metadata metadata) {
+
+ }
+
+ /**
* Write the results to provider writer as Xml
*
*
@@ -160,6 +170,7 @@
else if(outputFormat.equals(SearchServerServlet.RESPONSE_JSON_NEW)) {
try {
Metadata metadata = write(results);
+ adjustForJson(metadata);
Marshaller m = jsonContext.createMarshaller();
if(isPretty) {
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
@@ -173,6 +184,7 @@
else if(outputFormat.equals(SearchServerServlet.RESPONSE_JSON)) {
try {
Metadata metadata = write(results);
+ adjustForJson(metadata);
JSONMarshaller m = internalJsoncontext.createJSONMarshaller();
if(isPretty) {
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Modified: search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java
===================================================================
--- search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java 2013-05-09 08:47:07 UTC (rev 13679)
+++ search_server/trunk/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java 2013-05-09 11:15:51 UTC (rev 13680)
@@ -122,6 +122,11 @@
AliasList aliasList = of.createAliasList();
Alias alias = of.createAlias();
alias.setContent("Echo And The Bunnymen");
+ alias.setSortName("Buunymen, Echo And The");
+ alias.setPrimary("primary");
+ alias.setLocale("en");
+ alias.setType("Artist name");
+ alias.setBeginDate("1978-05-01");
aliasList.getAlias().add(alias);
alias = of.createAlias();
@@ -461,7 +466,7 @@
assertTrue(output.contains("<name>Echo & The Bunnymen</name>"));
assertTrue(output.contains("<sort-name>Echo & The Bunnymen</sort-name>"));
assertTrue(output.contains("<life-span><begin>1978</begin></life-span>"));
- assertTrue(output.contains("<alias>Echo And The Bunnymen</alias>"));
+ assertTrue(output.contains("<alias locale=\"en\" sort-name=\"Buunymen, Echo And The\" type=\"Artist name\" primary=\"primary\" begin-date=\"1978-05-01\">Echo And The Bunnymen</alias>"));
assertTrue(output.contains("<alias>Echo & The Bunnyman</alias>"));
assertTrue(output.contains("<alias>Echo and The Bunymen</alias>"));
assertTrue(output.contains("<alias>Echo & The Bunymen</alias>"));
@@ -624,7 +629,14 @@
String output = sw.toString();
System.out.println("JSON New Pretty is" + output);
assertTrue(output.contains("\"sort-name\" : \"Echo & The Bunnymen\""));
- assertTrue(output.contains("\"aliases\" : [ \"Echo And The Bunnymen\", \"Echo & The Bunnyman\", \"Echo and The Bunymen\", \"Echo & The Bunymen\" ]"));
+ assertTrue(output.contains("\"type\" : \"Artist name\","));
+ assertTrue(output.contains("\"primary\" : \"true\","));
+ assertTrue(output.contains("\"begin-date\" : \"1978-05-01\","));
+ assertTrue(output.contains(" \"end-date\" : \"\","));
+ assertTrue(output.contains("\"value\" : \"Echo And The Bunnymen\""));
+ assertTrue(output.contains("\"locale\" : \"\","));
+ assertTrue(output.contains("\"type\" : \"\","));
+
}
}
\ No newline at end of file