<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-16845</id>
	<title>Nabble - musicbrainz-commits</title>
	<updated>2009-12-04T08:10:56Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/musicbrainz-commits-f16845.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/musicbrainz-commits-f16845.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26644827</id>
	<title>r12329 - in mb_server/trunk: lib/MusicBrainz/Server/Edit/Medium t</title>
	<published>2009-12-04T08:10:56Z</published>
	<updated>2009-12-04T08:10:56Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-04 16:10:56 +0000 (Fri, 04 Dec 2009)
&lt;br&gt;New Revision: 12329
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_medium_delete.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_medium_edit.t
&lt;br&gt;Log:
&lt;br&gt;Fix a few minor bugs in tests
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-12-04 13:27:56 UTC (rev 12328)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-12-04 16:10:56 UTC (rev 12329)
&lt;br&gt;@@ -12,7 +12,7 @@
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_MEDIUM_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit Medium' }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{medium_id} ] } }
&lt;br&gt;+sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{medium} ] } }
&lt;br&gt;&amp;nbsp;sub related_entities { { release =&amp;gt; [ shift-&amp;gt;release_id ] } }
&lt;br&gt;&amp;nbsp;sub models { [qw( Medium )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -21,6 +21,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; Optional[Int],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Nullable[Str],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format_id =&amp;gt; Nullable[Int],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; Optional[Int],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;@@ -92,7 +93,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self) = @_;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $medium_data = $self-&amp;gt;c-&amp;gt;model('Medium');
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$medium_data-&amp;gt;update($self-&amp;gt;medium_id, $self-&amp;gt;data-&amp;gt;{new});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$medium_data-&amp;gt;update($self-&amp;gt;data-&amp;gt;{medium}, $self-&amp;gt;data-&amp;gt;{new});
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;__PACKAGE__-&amp;gt;meta-&amp;gt;make_immutable;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_medium_delete.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_medium_delete.t	2009-12-04 13:27:56 UTC (rev 12328)
&lt;br&gt;+++ mb_server/trunk/t/edit_medium_delete.t	2009-12-04 16:10:56 UTC (rev 12329)
&lt;br&gt;@@ -17,14 +17,12 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Medium::Delete');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Make sure we can load the artist
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-is($edit-&amp;gt;medium_id, 1);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;id, $edit-&amp;gt;medium_id);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;edits_pending, 1);
&lt;br&gt;+my $medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;+is($medium-&amp;gt;edits_pending, 1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Test rejecting the edit
&lt;br&gt;&amp;nbsp;reject_edit($c, $edit);
&lt;br&gt;-my $medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;+$medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;&amp;nbsp;ok(defined $medium);
&lt;br&gt;&amp;nbsp;is($medium-&amp;gt;edits_pending, 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_medium_edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_medium_edit.t	2009-12-04 13:27:56 UTC (rev 12328)
&lt;br&gt;+++ mb_server/trunk/t/edit_medium_edit.t	2009-12-04 16:10:56 UTC (rev 12329)
&lt;br&gt;@@ -19,10 +19,9 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Medium::Edit');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$edit = $c-&amp;gt;model('Edit')-&amp;gt;get_by_id($edit-&amp;gt;id);
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;id, $edit-&amp;gt;medium_id);
&lt;br&gt;-is_unchanged($edit-&amp;gt;medium);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;edits_pending, 1);
&lt;br&gt;+$medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;+is_unchanged($medium);
&lt;br&gt;+is($medium-&amp;gt;edits_pending, 1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;reject_edit($c, $edit);
&lt;br&gt;&amp;nbsp;$medium = $medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26644827&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12329---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Edit-Medium-t-tp26644827p26644827.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26642479</id>
	<title>r12328 - mb_server/trunk</title>
	<published>2009-12-04T05:27:56Z</published>
	<updated>2009-12-04T05:27:56Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-04 13:27:56 +0000 (Fri, 04 Dec 2009)
&lt;br&gt;New Revision: 12328
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/Makefile.PL
&lt;br&gt;Log:
&lt;br&gt;Date::Calc 5.8 introduces N_Delta_YMD
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/Makefile.PL
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/Makefile.PL	2009-12-04 13:27:50 UTC (rev 12327)
&lt;br&gt;+++ mb_server/trunk/Makefile.PL	2009-12-04 13:27:56 UTC (rev 12328)
&lt;br&gt;@@ -24,7 +24,7 @@
&lt;br&gt;&amp;nbsp;requires 'Catalyst::View::TT' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '0.29';
&lt;br&gt;&amp;nbsp;requires 'Data::OptList';
&lt;br&gt;&amp;nbsp;requires 'Data::Page' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '2.01';
&lt;br&gt;-requires 'Date::Calc' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '5.4';
&lt;br&gt;+requires 'Date::Calc' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '5.8';
&lt;br&gt;&amp;nbsp;requires 'DateTime::TimeZone';
&lt;br&gt;&amp;nbsp;requires 'DateTime::Format::Pg' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '0.16004';
&lt;br&gt;&amp;nbsp;requires 'DBD::Pg' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; '2.11.8';
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642479&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12328---mb_server-trunk-tp26642479p26642479.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26642475</id>
	<title>r12327 - in mb_server/trunk: . root/artist</title>
	<published>2009-12-04T05:27:50Z</published>
	<updated>2009-12-04T05:27:50Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-04 13:27:50 +0000 (Fri, 04 Dec 2009)
&lt;br&gt;New Revision: 12327
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/Makefile.PL
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/artist/edit.tt
&lt;br&gt;Log:
&lt;br&gt;Fix #5407
&lt;br&gt;&lt;br&gt;Merge branch 'mbs-13'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/Makefile.PL
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/Makefile.PL	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;+++ mb_server/trunk/Makefile.PL	2009-12-04 13:27:50 UTC (rev 12327)
&lt;br&gt;@@ -39,7 +39,7 @@
&lt;br&gt;&amp;nbsp;requires 'Email::MIME::Creator';
&lt;br&gt;&amp;nbsp;requires 'Email::Valid' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '0.179';
&lt;br&gt;&amp;nbsp;requires 'Exception::Class' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '1.29';
&lt;br&gt;-requires 'HTML::FormHandler' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; '0.27';
&lt;br&gt;+requires 'HTML::FormHandler' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; '0.28';
&lt;br&gt;&amp;nbsp;requires 'HTML::Tiny' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '1.05';
&lt;br&gt;&amp;nbsp;requires 'JSON' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '2.14';
&lt;br&gt;&amp;nbsp;requires 'Locale::Maketext' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '1.12';
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/artist/edit.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/artist/edit.tt	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;+++ mb_server/trunk/root/artist/edit.tt	2009-12-04 13:27:50 UTC (rev 12327)
&lt;br&gt;@@ -1,8 +1,3 @@
&lt;br&gt;-[%- extra_js = 'artistform.js' -%]
&lt;br&gt;-[%- SET guessCase=1 styleGuidelines=1 -%]
&lt;br&gt;-[%- PROCESS 'scripts/suitereqs.tt' -%]
&lt;br&gt;&amp;nbsp;[% WRAPPER 'artist/layout.tt' title=l('Edit Artist') %]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;[% WRAPPER 'components/box.tt' header=l('Edit {artist}', {artist =&amp;gt; ${artist.name}}) %]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% INCLUDE 'artist/edit_form.tt' %]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;-[% END %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[% INCLUDE 'artist/edit_form.tt' %]
&lt;br&gt;+[% END %]
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26642475&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12327---in-mb_server-trunk%3A-.-root-artist-tp26642475p26642475.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26641045</id>
	<title>r12326 - in mb_server/trunk: lib/MusicBrainz/Server/Edit/Label root/edit/details t t/actions/label</title>
	<published>2009-12-04T03:09:17Z</published>
	<updated>2009-12-04T03:09:17Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-04 11:09:16 +0000 (Fri, 04 Dec 2009)
&lt;br&gt;New Revision: 12326
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/edit_label.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_label_edit.t
&lt;br&gt;Log:
&lt;br&gt;Edit label template. See review 466
&lt;br&gt;&lt;br&gt;Merge branch 'edit-label-template'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;@@ -6,8 +6,9 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict Optional );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_LABEL_EDIT );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Label;
&lt;br&gt;-use MusicBrainz::Server::Edit::Utils qw( date_closure );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw( date_closure changed_relations changed_display_data );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( PartialDateHash Nullable );
&lt;br&gt;+use MusicBrainz::Server::Data::Utils qw( partial_date_from_row );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -16,7 +17,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Label =&amp;gt; [ shift-&amp;gt;label_id ] } }
&lt;br&gt;&amp;nbsp;sub related_entities { { label =&amp;gt; [ shift-&amp;gt;label_id ] } }
&lt;br&gt;-sub models { [qw( Label )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has 'label_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;@@ -50,6 +50,46 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $relations = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations($self-&amp;gt;data, $relations,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LabelType =&amp;gt; 'type_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Country &amp;nbsp; =&amp;gt; 'country_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $relations;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my %map = (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sort_name &amp;nbsp;=&amp;gt; 'sort_name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; [ qw( type_id LabelType ) ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label_code =&amp;gt; 'label_code',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment &amp;nbsp; &amp;nbsp;=&amp;gt; 'comment',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country &amp;nbsp; &amp;nbsp;=&amp;gt; [ qw( country_id Country ) ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = changed_display_data($self-&amp;gt;data, $loaded, %map);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for my $period (qw( begin end )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $field = $period . '_date';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{$field}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{$field} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{new}{$field}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{old}{$field}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $data;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub _mapping
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/edit/details/edit_label.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/edit/details/edit_label.tt	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;+++ mb_server/trunk/root/edit/details/edit_label.tt	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;@@ -1,9 +1,65 @@
&lt;br&gt;-[%- INCLUDE 'moderation/mods/diff_table.tt' changes=[
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Name'), new=new.LabelName, prev=prev.LabelName },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Type'), new=new.Type, prev=prev.Type },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Sort name'), new=new.SortName, prev=prev.SortName },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Label code'), new=new.LabelCode, prev=prev.LabelCode },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Country'), new=new.Country, prev=prev.Country },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Founded'), new=new.BeginDate, prev=prev.BeginDate },
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{ label=l('Dissolved'), new=new.EndDate, prev=prev.EndDate }
&lt;br&gt;-] -%]
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+&amp;lt;table class=&amp;quot;details&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.name %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Name:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.name.old %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.name.new %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.sort_name %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Sort name:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.sort_name.old %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.sort_name.new %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.comment %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Comment:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.comment.old %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.comment.new %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.type %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Type:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.type.old.name %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.type.new.name %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.label_code %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Label code:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.label_code.old %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.label_code.new %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.begin_date %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Begin date:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.begin_date.old.format %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.begin_date.new.format %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.end_date %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('End date:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.end_date.old.format %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.end_date.new.format %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;[% IF edit.display_data.country %]
&lt;br&gt;+ &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Country:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;old&amp;quot;&amp;gt;[% edit.display_data.country.old.name %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;new&amp;quot;&amp;gt;[% edit.display_data.country.new.name %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp;[% END %]
&lt;br&gt;+&amp;lt;/table&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/label/edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/label/edit.t	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;+++ mb_server/trunk/t/actions/label/edit.t	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;@@ -72,4 +72,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('controller label', '..has new name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Warp Records', '..has old name');
&lt;br&gt;+$mech-&amp;gt;content_contains('label, controller', '..has new sortname');
&lt;br&gt;+$mech-&amp;gt;content_contains('Warp Records', '..has old sortname');
&lt;br&gt;+$mech-&amp;gt;content_contains('Special MusicBrainz Label', '..has new type');
&lt;br&gt;+$mech-&amp;gt;content_contains('Production', '..has old type');
&lt;br&gt;+$mech-&amp;gt;content_contains('United States', '..has new country');
&lt;br&gt;+$mech-&amp;gt;content_contains('United Kingdom', '..has old country');
&lt;br&gt;+$mech-&amp;gt;content_contains('12345', '..has new label code');
&lt;br&gt;+$mech-&amp;gt;content_contains('2070', '..has old label code');
&lt;br&gt;+$mech-&amp;gt;content_like(qr/2008\D+05\D+19/, '..has new date');
&lt;br&gt;+$mech-&amp;gt;content_like(qr/1989\D+02\D+03/, '..has old date');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_label_edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_label_edit.t	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;+++ mb_server/trunk/t/edit_label_edit.t	2009-12-04 11:09:16 UTC (rev 12326)
&lt;br&gt;@@ -19,11 +19,9 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Label::Edit');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$edit = $c-&amp;gt;model('Edit')-&amp;gt;get_by_id($edit-&amp;gt;id);
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-is($edit-&amp;gt;label_id, $label-&amp;gt;id);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;id, $label-&amp;gt;id);
&lt;br&gt;-is_unchanged($edit-&amp;gt;label);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;edits_pending, 1);
&lt;br&gt;+$label = $c-&amp;gt;model('Label')-&amp;gt;get_by_id(1);
&lt;br&gt;+is_unchanged($label);
&lt;br&gt;+is($label-&amp;gt;edits_pending, 1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;my ($edits, $hits) = $c-&amp;gt;model('Edit')-&amp;gt;find({ label =&amp;gt; $edit-&amp;gt;label_id }, 10, 0);
&lt;br&gt;&amp;nbsp;is($edits-&amp;gt;[0]-&amp;gt;id, $edit-&amp;gt;id);
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26641045&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12326---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Edit-Label-root-edit-details-t-t-actions-label-tp26641045p26641045.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26641043</id>
	<title>r12325 - in mb_server/trunk: lib/MusicBrainz/Server/Edit/Label root/edit/details t t/actions/label</title>
	<published>2009-12-04T03:09:02Z</published>
	<updated>2009-12-04T03:09:02Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-04 11:09:01 +0000 (Fri, 04 Dec 2009)
&lt;br&gt;New Revision: 12325
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/create_label.tt
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Create.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-create.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_label_create.t
&lt;br&gt;Log:
&lt;br&gt;Create label edit template.
&lt;br&gt;&lt;br&gt;See review 465
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Create.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Create.pm	2009-12-03 22:43:48 UTC (rev 12324)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Create.pm	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;@@ -6,6 +6,7 @@
&lt;br&gt;&amp;nbsp;use Moose::Util::TypeConstraints qw( subtype find_type_constraint );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_LABEL_CREATE );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Entity::Types;
&lt;br&gt;+use MusicBrainz::Server::Data::Utils qw( partial_date_from_row );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -14,7 +15,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub related_entities { { label =&amp;gt; [ shift-&amp;gt;label_id ] } }
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Label =&amp;gt; [ shift-&amp;gt;label_id ] } }
&lt;br&gt;-sub models { [qw( Label ) ] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; Dict[
&lt;br&gt;@@ -37,6 +37,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LabelType =&amp;gt; [ $self-&amp;gt;data-&amp;gt;{type_id} ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Country &amp;nbsp; =&amp;gt; [ $self-&amp;gt;data-&amp;gt;{country_id} ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; $self-&amp;gt;data-&amp;gt;{name},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sort_name &amp;nbsp;=&amp;gt; $self-&amp;gt;data-&amp;gt;{sort_name},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; $loaded-&amp;gt;{LabelType}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{type_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label_code =&amp;gt; $self-&amp;gt;data-&amp;gt;{label_code},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country &amp;nbsp; &amp;nbsp;=&amp;gt; $loaded-&amp;gt;{Country}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{country_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment &amp;nbsp; &amp;nbsp;=&amp;gt; $self-&amp;gt;data-&amp;gt;{comment},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;begin_date =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{begin_date}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end_date &amp;nbsp; =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{end_date}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has 'label_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/label/edit-create.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/label/edit-create.t	2009-12-03 22:43:48 UTC (rev 12324)
&lt;br&gt;+++ mb_server/trunk/t/actions/label/edit-create.t	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;@@ -53,4 +53,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('controller label', '..has name');
&lt;br&gt;+$mech-&amp;gt;content_contains('label, controller', '..has sort name');
&lt;br&gt;+$mech-&amp;gt;content_contains('label created in controller_label.t', '..has comment');
&lt;br&gt;+$mech-&amp;gt;content_like(qr/1990\D+01\D+02/, '..has begin date');
&lt;br&gt;+$mech-&amp;gt;content_like(qr/2003\D+04\D+15/, '..has end date');
&lt;br&gt;+$mech-&amp;gt;content_contains('Special MusicBrainz Label', '..has type name');
&lt;br&gt;+$mech-&amp;gt;content_contains('United Kingdom', '..has country');
&lt;br&gt;+$mech-&amp;gt;content_contains('12345', '..has label code');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_label_create.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_label_create.t	2009-12-03 22:43:48 UTC (rev 12324)
&lt;br&gt;+++ mb_server/trunk/t/edit_label_create.t	2009-12-04 11:09:01 UTC (rev 12325)
&lt;br&gt;@@ -27,23 +27,23 @@
&lt;br&gt;&amp;nbsp;is($edits-&amp;gt;[0]-&amp;gt;id, $edit-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$edit = $c-&amp;gt;model('Edit')-&amp;gt;get_by_id($edit-&amp;gt;id);
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-ok(defined $edit-&amp;gt;label);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;name, '!K7');
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;sort_name, '!K7 Recordings');
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;type_id, 1);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;comment, &amp;quot;Funky record label&amp;quot;);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;label_code, 7306);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;edits_pending, 1);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;begin_date-&amp;gt;year, 1995);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;begin_date-&amp;gt;month, 1);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;begin_date-&amp;gt;day, 12);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;end_date-&amp;gt;year, 2005);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;end_date-&amp;gt;month, 5);
&lt;br&gt;-is($edit-&amp;gt;label-&amp;gt;end_date-&amp;gt;day, 30);
&lt;br&gt;+my $label = $c-&amp;gt;model('Label')-&amp;gt;get_by_id($edit-&amp;gt;label_id);
&lt;br&gt;+is($label-&amp;gt;edits_pending, 1);
&lt;br&gt;+is($label-&amp;gt;name, '!K7');
&lt;br&gt;+is($label-&amp;gt;sort_name, '!K7 Recordings');
&lt;br&gt;+is($label-&amp;gt;type_id, 1);
&lt;br&gt;+is($label-&amp;gt;comment, &amp;quot;Funky record label&amp;quot;);
&lt;br&gt;+is($label-&amp;gt;label_code, 7306);
&lt;br&gt;+is($label-&amp;gt;edits_pending, 1);
&lt;br&gt;+is($label-&amp;gt;begin_date-&amp;gt;year, 1995);
&lt;br&gt;+is($label-&amp;gt;begin_date-&amp;gt;month, 1);
&lt;br&gt;+is($label-&amp;gt;begin_date-&amp;gt;day, 12);
&lt;br&gt;+is($label-&amp;gt;end_date-&amp;gt;year, 2005);
&lt;br&gt;+is($label-&amp;gt;end_date-&amp;gt;month, 5);
&lt;br&gt;+is($label-&amp;gt;end_date-&amp;gt;day, 30);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;accept_edit($c, $edit);
&lt;br&gt;-my $label = $c-&amp;gt;model('Label')-&amp;gt;get_by_id($edit-&amp;gt;label_id);
&lt;br&gt;+$label = $c-&amp;gt;model('Label')-&amp;gt;get_by_id($edit-&amp;gt;label_id);
&lt;br&gt;&amp;nbsp;is($label-&amp;gt;edits_pending, 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Test rejecting the edit
&lt;br&gt;@@ -51,8 +51,8 @@
&lt;br&gt;&amp;nbsp;reject_edit($c, $edit);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$edit = $c-&amp;gt;model('Edit')-&amp;gt;get_by_id($edit-&amp;gt;id);
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-ok(!defined $edit-&amp;gt;label);
&lt;br&gt;+$label = $c-&amp;gt;model('Label')-&amp;gt;get_by_id($edit-&amp;gt;label_id);
&lt;br&gt;+ok(!defined $label);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26641043&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12325---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Edit-Label-root-edit-details-t-t-actions-label-tp26641043p26641043.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26634630</id>
	<title>r12324 - in search_server/branches/ngs: index/src/test/java/org/musicbrainz/search/index servlet/src/test/java/org/musicbrainz/search/servlet</title>
	<published>2009-12-03T14:43:48Z</published>
	<updated>2009-12-03T14:43:48Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-12-03 22:43:48 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12324
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindWorkTest.java
&lt;br&gt;Log:
&lt;br&gt;Added tests to show work types code work even though the work type code is currently empty in the real db
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/WorkIndexTest.java	2009-12-03 22:43:48 UTC (rev 12324)
&lt;br&gt;@@ -56,10 +56,50 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO work(&amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;id, gid, name,artist_credit,type, iswc, comment, editpending)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;VALUES (1, 'a539bb1e-f2e1-4b45-9db8-8053841e7503', 1, 1, null, 'T-101779304-1', null, 1);&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO work_name(id, name, refcount) &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;VALUES (1, 'Work', 1);&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.executeBatch();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conn.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void addWorkTwo() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Connection conn = createConnection();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conn.setAutoCommit(true);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Statement stmt = conn.createStatement();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_name(id,name,refcount) values (1,'Echo &amp; The Bunnymen',1)&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_name(id,name,refcount) values (2,'Echo and The Bunnymen',1)&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_name(id,name,refcount) values (3,'Echo &amp; The Bunnyman',1)&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_name(id,name,refcount) values (4,'Echo And The Bunnymen',1)&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_alias(id, artist, name, editpending) VALUES(1,16153,2,0);&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_alias(id, artist, name, editpending) VALUES(2,16153,3,0);&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_alias(id, artist, name, editpending) VALUES(3,16153,4,0);&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist(id,name, gid, sortname,comment, begindate_year,begindate_month,enddate_year,type,editpending)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; VALUES (16153,1, 'ccd4879c-5e88-4385-b131-bf65296bf245',2,'a comment', 1978,null, 1995, 2, 0)&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_credit( &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; id, artistcount, refcount) &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; VALUES (1, 1, 1)&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO artist_credit_name(&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;artist_credit, position, artist,name, joinphrase)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;VALUES (1, 0, 16153, 1, null)&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO work(&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;id, gid, name,artist_credit,type, iswc, comment, editpending)&amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;VALUES (1, 'a539bb1e-f2e1-4b45-9db8-8053841e7503', 1, 1, 1, 'T-101779304-1', null, 1);&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO work_name(id, name, refcount) &amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;VALUES (1, 'Work', 1);&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;VALUES (1, 'Work', 1);&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO work_type( &amp;nbsp;id, name) VALUES (1, 'Opera')&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.executeBatch();
&lt;br&gt;@@ -82,9 +122,37 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Echo &amp; The Bunnymen&amp;quot;, doc.getField(WorkIndexField.ARTIST.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(WorkIndexField.ISWC.getName()).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;T-101779304-1&amp;quot;, doc.getField(WorkIndexField.ISWC.getName()).stringValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, doc.getFields(WorkIndexField.TYPE.getName()).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testIndexWorkWithoutType() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addWorkOne();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory ramDir = new RAMDirectory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createIndex(ramDir);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexReader ir = IndexReader.open(ramDir, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, ir.numDocs());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = ir.document(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, doc.getFields(WorkIndexField.TYPE.getName()).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testIndexWorkWithType() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addWorkTwo();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory ramDir = new RAMDirectory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createIndex(ramDir);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexReader ir = IndexReader.open(ramDir, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, ir.numDocs());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = ir.document(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(WorkIndexField.TYPE.getName()).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;opera&amp;quot;, doc.getField(WorkIndexField.TYPE.getName()).stringValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindWorkTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindWorkTest.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindWorkTest.java	2009-12-03 22:43:48 UTC (rev 12324)
&lt;br&gt;@@ -35,14 +35,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = new MbDocument();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.WORK_ID, &amp;quot;4ff89cf0-86af-11de-90ed-001fc6f176ff&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.WORK, &amp;quot;Symphony No. 5&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ISWC,&amp;quot;T-101779304-1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ISWC, &amp;quot;T-101779304-1&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST_ID, &amp;quot;1f9df192-a621-4f54-8850-2c5373b7eac9&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST, &amp;quot;Ludwig van Beethoven&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST_NAME, &amp;quot;Ludwig van Beethoven&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST_NAMECREDIT, &amp;quot;Ludwig van Beethoven&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST_SORTNAME, &amp;quot;Beethoven, Ludwig van&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.ARTIST_JOINPHRASE, &amp;quot;-&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(WorkIndexField.TYPE, &amp;quot;opera&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc.getLuceneDocument());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;@@ -67,6 +69,33 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Symphony No. 5&amp;quot;, doc.get(WorkIndexField.WORK));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindWorkByArtist() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;artist:\&amp;quot;Ludwig van Beethoven\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;4ff89cf0-86af-11de-90ed-001fc6f176ff&amp;quot;, doc.get(WorkIndexField.WORK_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Symphony No. 5&amp;quot;, doc.get(WorkIndexField.WORK));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindWorkByISWC() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;iswc:\&amp;quot;T-101779304-1\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;4ff89cf0-86af-11de-90ed-001fc6f176ff&amp;quot;, doc.get(WorkIndexField.WORK_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Symphony No. 5&amp;quot;, doc.get(WorkIndexField.WORK));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindWorkByType() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;type:\&amp;quot;opera\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;4ff89cf0-86af-11de-90ed-001fc6f176ff&amp;quot;, doc.get(WorkIndexField.WORK_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Symphony No. 5&amp;quot;, doc.get(WorkIndexField.WORK));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Tests get same results as
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &lt;a href=&quot;http://musicbrainz.org/ws/1/label/?type=xml&amp;query=%22Jockey%20Slut%22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ws/1/label/?type=xml&amp;query=%22Jockey%20Slut%22&lt;/a&gt;&lt;br&gt;@@ -90,6 +119,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;name&amp;gt;Ludwig van Beethoven&amp;lt;/name&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;sort-name&amp;gt;Beethoven, Ludwig van&amp;lt;/sort-name&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;iswc&amp;gt;T-101779304-1&amp;lt;/iswc&amp;gt;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;type=\&amp;quot;opera\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26634630&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12324---in-search_server-branches-ngs%3A-index-src-test-java-org-musicbrainz-search-index-servlet-src-test-java-org-musicbrainz-search-servlet-tp26634630p26634630.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26633959</id>
	<title>r12323 - search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index</title>
	<published>2009-12-03T13:58:58Z</published>
	<updated>2009-12-03T13:58:58Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-12-03 21:58:57 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12323
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndexField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/WorkIndexField.java
&lt;br&gt;Log:
&lt;br&gt;ARTIST_COMMENT needn't be searchable field except for artist index
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;@@ -26,7 +26,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;QUANTIZED_DURATION	(&amp;quot;qdur&amp;quot;,		Field.Store.NO,	 &amp;nbsp; &amp;nbsp;Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACKNUM			(&amp;quot;tnum&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RELEASE_TYPE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;type&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.ANALYZED),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.NO),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACK_OUTPUT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;trackoutoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RECORDING_OUTPUT &amp;nbsp; &amp;nbsp;(&amp;quot;recordingoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MEDIUM_POS_OUTPUT &amp;nbsp; (&amp;quot;mediumposoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndexField.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseGroupIndexField.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;@@ -35,7 +35,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_SORTNAME	 &amp;nbsp; &amp;nbsp;(&amp;quot;sortname&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_NAMECREDIT &amp;nbsp; (&amp;quot;creditname&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_JOINPHRASE	(&amp;quot;joinphrase&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp; &amp;nbsp; //Never Searched
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ARTIST_COMMENT	 &amp;nbsp; &amp;nbsp;(&amp;quot;artistcomment&amp;quot;,	Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp; &amp;nbsp; //ONLY used by Html, maybe can be dropped
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ARTIST_COMMENT	 &amp;nbsp; &amp;nbsp;(&amp;quot;artistcomment&amp;quot;,	Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RELEASEGROUP_ID	 &amp;nbsp; &amp;nbsp;(&amp;quot;rgid&amp;quot;,			Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp;	RELEASEGROUP	 &amp;nbsp; &amp;nbsp;(&amp;quot;releasegroup&amp;quot;,	Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp;	TYPE			 &amp;nbsp; &amp;nbsp;(&amp;quot;type&amp;quot;,			Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/ReleaseIndexField.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;@@ -14,7 +14,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_ID		 &amp;nbsp; &amp;nbsp;(&amp;quot;arid&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_NAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&amp;quot;artist_name&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_SORTNAME	 &amp;nbsp; &amp;nbsp;(&amp;quot;sortname&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.ANALYZED),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.NO),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_NAMECREDIT &amp;nbsp; (&amp;quot;creditname&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_JOINPHRASE	(&amp;quot;joinphrase&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp; &amp;nbsp; //Never Searched
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RELEASE_ID		 &amp;nbsp; &amp;nbsp;(&amp;quot;reid&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/WorkIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/WorkIndexField.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/WorkIndexField.java	2009-12-03 21:58:57 UTC (rev 12323)
&lt;br&gt;@@ -14,7 +14,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_ID		 &amp;nbsp; &amp;nbsp;(&amp;quot;arid&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_NAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&amp;quot;artist_name&amp;quot;,	Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_SORTNAME	 &amp;nbsp; &amp;nbsp;(&amp;quot;sortname&amp;quot;,	Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.ANALYZED),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.NO),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_NAMECREDIT &amp;nbsp; (&amp;quot;creditname&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_JOINPHRASE	(&amp;quot;joinphrase&amp;quot;,	 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp; &amp;nbsp; //Never Searched
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;WORK_ID		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;wid&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26633959&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12323---search_server-branches-ngs-index-src-main-java-org-musicbrainz-search-index-tp26633959p26633959.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26633731</id>
	<title>r12322 - in search_server/branches/ngs: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet servlet/src/main/java/org/musicbrainz/search/servlet/mmd1 servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet</title>
	<published>2009-12-03T13:43:47Z</published>
	<updated>2009-12-03T13:43:47Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-12-03 21:43:47 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12322
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;Log:
&lt;br&gt;Changed tracks to tracksmedium to better reflect what the field is and to allow a separate tracks field
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -289,7 +289,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (tracks.containsKey(id)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//For each track for this recording
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (TrackWrapper track : tracks.get(id)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.NUM_TRACKS, track.getTrackCount());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.NUM_TRACKS_MEDIUM, track.getTrackCount());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.TRACKNUM, track.getTrackPosition());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addFieldOrHyphen(RecordingIndexField.RELEASE_TYPE, track.getReleaseGroupType());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.RELEASE_ID, track.getReleaseId());
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -20,7 +20,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_SORTNAME	 &amp;nbsp; &amp;nbsp;(&amp;quot;sortname&amp;quot;,	Field.Store.YES,	Field.Index.ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RELEASE_ID			(&amp;quot;reid&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RELEASE				(&amp;quot;release&amp;quot;,		Field.Store.YES,	Field.Index.ANALYZED),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;NUM_TRACKS			(&amp;quot;tracks&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;NUM_TRACKS_MEDIUM &amp;nbsp; (&amp;quot;tracksmedium&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;NUM_TRACKS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;tracks&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;DURATION			(&amp;quot;dur&amp;quot;,			Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;QUANTIZED_DURATION	(&amp;quot;qdur&amp;quot;,		Field.Store.NO,	 &amp;nbsp; &amp;nbsp;Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACKNUM			(&amp;quot;tnum&amp;quot;,		Field.Store.YES,	Field.Index.NOT_ANALYZED, new KeywordAnalyzer()),
&lt;br&gt;@@ -29,10 +30,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACK_OUTPUT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;trackoutoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RECORDING_OUTPUT &amp;nbsp; &amp;nbsp;(&amp;quot;recordingoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MEDIUM_POS_OUTPUT &amp;nbsp; (&amp;quot;mediumposoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ISRC &amp;nbsp; &amp;nbsp;		 &amp;nbsp; &amp;nbsp;(&amp;quot;isrc&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED, new CaseInsensitiveKeywordAnalyzer()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ISRC &amp;nbsp; &amp;nbsp;		 &amp;nbsp; &amp;nbsp;(&amp;quot;isrc&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED, new CaseInsensitiveKeywordAnalyzer());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private String name;
&lt;br&gt;&amp;nbsp;	private Field.Store store;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Field.Index index;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -178,7 +178,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Echo &amp; The Bunnymen&amp;quot;, doc.getField(RecordingIndexField.ARTIST.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Echo and The Bunnymen&amp;quot;, doc.getField(RecordingIndexField.ARTIST_SORTNAME.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;ccd4879c-5e88-4385-b131-bf65296bf245&amp;quot;, doc.getField(RecordingIndexField.ARTIST_ID.getName()).stringValue());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.NUM_TRACKS.getName()).stringValue()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.NUM_TRACKS_MEDIUM.getName()).stringValue()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(4, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.TRACKNUM.getName()).stringValue()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(33000, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.DURATION.getName()).stringValue()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1234568&amp;quot;, doc.getField(RecordingIndexField.ISRC.getName()).stringValue());
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -36,7 +36,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.field() == RecordingIndexField.DURATION.getName()) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.field() == RecordingIndexField.QUANTIZED_DURATION.getName()) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.field() == RecordingIndexField.TRACKNUM.getName()) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.field() == RecordingIndexField.NUM_TRACKS.getName())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.field() == RecordingIndexField.NUM_TRACKS_MEDIUM.getName())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;@@ -110,7 +110,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(field.equals(RecordingIndexField.DURATION.getName())) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(field.equals(RecordingIndexField.QUANTIZED_DURATION.getName())) ||
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(field.equals(RecordingIndexField.TRACKNUM.getName())) ||
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(field.equals(RecordingIndexField.NUM_TRACKS.getName()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(field.equals(RecordingIndexField.NUM_TRACKS_MEDIUM.getName()))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;part1 = NumericUtils.intToPrefixCoded(Integer.parseInt(part1));
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd1/TrackMmd1XmlWriter.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -88,7 +88,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] releaseIds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.RELEASE_ID);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] releaseTypes &amp;nbsp; &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.RELEASE_TYPE);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] numTracks &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.NUM_TRACKS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] numTracks &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.NUM_TRACKS_MEDIUM);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] trackNos &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.TRACKNUM);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] releases &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.RELEASE);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -105,7 +105,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] releaseIds &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.RELEASE_ID);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] releaseTypes &amp;nbsp;= doc.getValues(RecordingIndexField.RELEASE_TYPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] trackNos &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.TRACKNUM);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] numTracks &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.NUM_TRACKS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] numTracks &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.NUM_TRACKS_MEDIUM);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] trackName &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.TRACK_OUTPUT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] mediumPos &amp;nbsp; &amp;nbsp; = doc.getValues(RecordingIndexField.MEDIUM_POS_OUTPUT);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-12-03 21:43:47 UTC (rev 12322)
&lt;br&gt;@@ -52,7 +52,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.DURATION, 234000);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.QUANTIZED_DURATION, (234000 / 2000));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.NUM_TRACKS,10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.NUM_TRACKS_MEDIUM,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.TRACKNUM, 5);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.TRACK_OUTPUT, &amp;quot;Gravitational Lens&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.RECORDING, &amp;quot;Gravitational Lens&amp;quot;);
&lt;br&gt;@@ -173,8 +173,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6&amp;quot;, doc.get(RecordingIndexField.RECORDING_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void testFindRecordingByNumberOfTracksOnRelease() throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;tracks:10&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindRecordingByNumberOfTracksOnMediumOnRelease() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;tracksmedium:10&amp;quot;, 0, 10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26633731&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12322---in-search_server-branches-ngs%3A-index-src-main-java-org-musicbrainz-search-index-index-src-test-java-org-musicbrainz-search-index-servlet-src-main-java-org-musicbrainz-search-servlet-servlet-src-main-java-org-musicbrainz-search-servlet-mmd1-servlet-src-main-java-org-musicbrainz-search-servlet-mmd2-servlet-src-test-java-org-musicbrainz-search-servlet-tp26633731p26633731.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26628199</id>
	<title>r12321 - in mb_server/trunk/t/actions: artist label recording release_editor release_group work</title>
	<published>2009-12-03T07:48:50Z</published>
	<updated>2009-12-03T07:48:50Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-03 15:48:50 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12321
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/edit-medium.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/add-annotation.t
&lt;br&gt;Log:
&lt;br&gt;Fix a few failing tests
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/artist/artist-edit-add-annotation.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/artist/artist-edit-add-annotation.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/artist/artist-edit-add-annotation.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -16,7 +16,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/artist/745c079d-374e-4436-9448-da92dedef3ce/edit_annotation');
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;submit_form(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;with_fields =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'Test annotation 1. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.changelog' =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -24,7 +24,7 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Artist::AddAnnotation');
&lt;br&gt;&amp;nbsp;is_deeply($edit-&amp;gt;data, {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entity_id =&amp;gt; 3,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;text =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text =&amp;gt; 'Test annotation 1. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changelog =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/label/edit-add-annotation.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/label/edit-add-annotation.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/label/edit-add-annotation.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -14,7 +14,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/label/4b4ccf60-658e-11de-8a39-0800200c9a66/edit_annotation');
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;submit_form(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;with_fields =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'Test annotation 2. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.changelog' =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -22,7 +22,7 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Label::AddAnnotation');
&lt;br&gt;&amp;nbsp;is_deeply($edit-&amp;gt;data, {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entity_id =&amp;gt; 3,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;text =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text =&amp;gt; 'Test annotation 2. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changelog =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/label/edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/label/edit.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/label/edit.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -19,7 +19,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.sort_name' =&amp;gt; 'label, controller',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.type_id' =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.label_code' =&amp;gt; 12345,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.country_id' =&amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.country_id' =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.begin_date.year' =&amp;gt; 1990,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.begin_date.month' =&amp;gt; 01,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-label.begin_date.day' =&amp;gt; 02,
&lt;br&gt;@@ -38,7 +38,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; 'controller label',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sort_name =&amp;gt; 'label, controller',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type_id =&amp;gt; 2,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country_id =&amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country_id =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label_code =&amp;gt; 12345,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment =&amp;gt; 'label created in controller_label.t',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;begin_date =&amp;gt; {
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/recording/edit-add-annotation.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/recording/edit-add-annotation.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/recording/edit-add-annotation.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -14,7 +14,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/recording/123c079d-374e-4436-9448-da92dedef3ce/edit_annotation');
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;submit_form(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;with_fields =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'Test annotation 3. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.changelog' =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -22,7 +22,7 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Recording::AddAnnotation');
&lt;br&gt;&amp;nbsp;is_deeply($edit-&amp;gt;data, {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entity_id =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;text =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text =&amp;gt; 'Test annotation 3. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changelog =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/edit-medium.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/edit-medium.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/edit-medium.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -39,11 +39,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-use Data::Dumper;
&lt;br&gt;-warn Dumper $edit-&amp;gt;display_data;
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id);
&lt;br&gt;&amp;nbsp;xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;content_contains('Renamed Medium', '..has new medium name');
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_group/edit-add-annotation.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_group/edit-add-annotation.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_group/edit-add-annotation.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -14,7 +14,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/release-group/234c079d-374e-4436-9448-da92dedef3ce/edit_annotation');
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;submit_form(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;with_fields =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' =&amp;gt; 'Test annotation 5. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.changelog' =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -22,7 +22,7 @@
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::ReleaseGroup::AddAnnotation');
&lt;br&gt;&amp;nbsp;is_deeply($edit-&amp;gt;data, {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entity_id =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;text =&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;text =&amp;gt; 'Test annotation 5. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;changelog =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/work/add-annotation.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/work/add-annotation.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;+++ mb_server/trunk/t/actions/work/add-annotation.t	2009-12-03 15:48:50 UTC (rev 12321)
&lt;br&gt;@@ -15,7 +15,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok(&amp;quot;/work/745c079d-374e-4436-9448-da92dedef3ce/edit_annotation&amp;quot;);
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;submit_form(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;with_fields =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.text' &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'Test annotation 6. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-annotation.changelog' =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;@@ -26,7 +26,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$edit-&amp;gt;data,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;entity_id =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;text &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'This is my annotation',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;text &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'Test annotation 6. This is my annotation',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changelog =&amp;gt; 'Changelog here',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26628199&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12321---in-mb_server-trunk-t-actions%3A-artist-label-recording-release_editor-release_group-work-tp26628199p26628199.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26628193</id>
	<title>r12320 - mb_server/trunk/t/actions/edit_relationship</title>
	<published>2009-12-03T07:48:38Z</published>
	<updated>2009-12-03T07:48:38Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-03 15:48:37 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12320
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/edit_relationship/edit.t
&lt;br&gt;Log:
&lt;br&gt;Fix edit_relationship/edit tests
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/edit_relationship/edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/edit_relationship/edit.t	2009-12-03 15:48:27 UTC (rev 12319)
&lt;br&gt;+++ mb_server/trunk/t/actions/edit_relationship/edit.t	2009-12-03 15:48:37 UTC (rev 12320)
&lt;br&gt;@@ -33,7 +33,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type1 =&amp;gt; 'recording',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;relationship_id =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;link_type_id =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;begin_date =&amp;gt; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;year =&amp;gt; undef,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;month =&amp;gt; undef,
&lt;br&gt;@@ -47,7 +46,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;attributes =&amp;gt; [4],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;link_type_id =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;begin_date =&amp;gt; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;year =&amp;gt; 1994,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;month =&amp;gt; undef,
&lt;br&gt;@@ -62,4 +60,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-done_testing;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+done_testing;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26628193&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12320---mb_server-trunk-t-actions-edit_relationship-tp26628193p26628193.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26628190</id>
	<title>r12319 - in mb_server/trunk/t: . actions actions/admin actions/ajax actions/artist actions/browse actions/cdtoc actions/edit_relationship actions/isrc actions/label actions/puid actions/recording actions/release actions/release_group actions/search actions/tag actions/tracklist actions/url actions/user actions/work controllers sql</title>
	<published>2009-12-03T07:48:27Z</published>
	<updated>2009-12-03T07:48:27Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-03 15:48:27 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12319
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/admin/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/admin/linkattributetype.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/admin/wikidoc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/ajax/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/ajax/search.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-aliases.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-add-alias.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-create.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-delete-alias.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-delete.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-merge.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-edit-tagging.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-ratings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-recordings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-relationships.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-releases.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/artist/artist-works.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/browse/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/browse/browse.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/cdtoc/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/cdtoc/cdtoc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/edit_relationship/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/edit_relationship/delete.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/edit_relationship/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/isrc/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/isrc/isrc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/aliases.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-add-alias.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-create.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-delete-alias.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-delete.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit-merge.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/ratings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/label/tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/puid/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/puid/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/puids.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/ratings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/recording/tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release/discids.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/edit-add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/edit-remove.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/ratings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_group/tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/search/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/search/direct.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/tag/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/tag/tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/tracklist/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/tracklist/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/url/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/url/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/change-password.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/login.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/logout.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/lost-password.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/user/lost-username.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/add-annotation.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/index.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/ratings.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/work/tags.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/admin.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/ajax.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/artist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/browse.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/cdtoc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/edit_relationship.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/isrc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/label.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/puid.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/recording.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/release.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/release_group.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/search.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/tag.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/tracklist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/url.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/user.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/work.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/controller_artist.sql
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/controller_browse.sql
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/controller_cdtoc.sql
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/controller_isrc.sql
&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_admin.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_admin_linkattributetype.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_admin_wikidoc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_ajax.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_artist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_browse.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_cdtoc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_edit_relationship.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_isrc.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_label.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_puid.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_recording.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_release.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_release_edit.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_release_group.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_search.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_tag.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_tracklist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_url.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_user.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_work.t
&lt;br&gt;Log:
&lt;br&gt;Merge support for aggregating controller tests.
&lt;br&gt;&lt;br&gt;This now means each area of the site is tested in a single file. Furthermore,
&lt;br&gt;each test now supports aggregation, allowing you to test the entire website with
&lt;br&gt;only a single server instance.
&lt;br&gt;&lt;br&gt;See review 455
&lt;br&gt;&lt;br&gt;Merge branch 'controller-tests'
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26628190&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12319---in-mb_server-trunk-t%3A-.-actions-actions-admin-actions-ajax-actions-artist-actions-browse-actions-cdtoc-actions-edit_relationship-actions-isrc-actions-label-actions-puid-actions-recording-actions-release-actions-release_group-actions-search-actions-tag-actions-tracklist-actions-url-actions-user-actions-work-controllers-sql-tp26628190p26628190.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26628161</id>
	<title>r12318 - mb_server/trunk</title>
	<published>2009-12-03T07:47:22Z</published>
	<updated>2009-12-03T07:47:22Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-03 15:47:22 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12318
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/META.yml
&lt;br&gt;Log:
&lt;br&gt;Add META.yml
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26628161&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12318---mb_server-trunk-tp26628161p26628161.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26628159</id>
	<title>r12317 - in mb_server/trunk: lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Edit/Work lib/MusicBrainz/Server/Form root/edit/details root/static/scripts root/work t</title>
	<published>2009-12-03T07:47:14Z</published>
	<updated>2009-12-03T07:47:14Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-12-03 15:47:13 +0000 (Thu, 03 Dec 2009)
&lt;br&gt;New Revision: 12317
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/edit_work.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/scripts/edit_work.js
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Form/Work.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/work/edit.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/work/edit_form.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controller_work.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_work_edit.t
&lt;br&gt;Log:
&lt;br&gt;Improved edit work action. See review 462
&lt;br&gt;&lt;br&gt;Merge branch 'edit-work-revamp'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Work.pm	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -48,7 +48,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('WorkType')-&amp;gt;load($work);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('ArtistCredit')-&amp;gt;load($work);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my $form = $c-&amp;gt;form(form =&amp;gt; 'Work', item =&amp;gt; $work);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $form = $c-&amp;gt;form(form =&amp;gt; 'Work', init_object =&amp;gt; $work);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if ($c-&amp;gt;form_posted &amp;&amp; $form-&amp;gt;submitted_and_valid($c-&amp;gt;req-&amp;gt;params)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $edit = $c-&amp;gt;model('Edit')-&amp;gt;create(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; $c-&amp;gt;user-&amp;gt;id,
&lt;br&gt;@@ -56,7 +56,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work =&amp;gt; $work,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(map { $_ =&amp;gt; $form-&amp;gt;field($_)-&amp;gt;value }
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qw( type_id name comment iswc ))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; grep { $form-&amp;gt;field($_)-&amp;gt;has_value }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qw( type_id name comment iswc artist_credit ))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;response-&amp;gt;redirect($c-&amp;gt;uri_for_action('/work/show', [ $work-&amp;gt;gid ]));
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -6,6 +6,12 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict Optional );
&lt;br&gt;&amp;nbsp;use Moose::Util::TypeConstraints qw( find_type_constraint subtype as );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition Nullable );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_display_data
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;load_artist_credit_definitions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;artist_credit_from_loaded_definition
&lt;br&gt;+);
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Entity::Types;
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -16,7 +22,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub related_entities { { work =&amp;gt; [ shift-&amp;gt;work_id ] } }
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Work =&amp;gt; [ shift-&amp;gt;work_id ] } }
&lt;br&gt;-sub models { [qw( Work )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has 'work_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;@@ -47,6 +52,48 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;],
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $relations = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations($self-&amp;gt;data, $relations,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WorkType =&amp;gt; 'type_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{Artist} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;load_artist_credit_definitions($self-&amp;gt;data-&amp;gt;{$_}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} qw( new old )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $relations;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my %map = (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp;=&amp;gt; 'name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment =&amp;gt; 'comment',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type &amp;nbsp; &amp;nbsp;=&amp;gt; [ qw( type_id WorkType ) ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iswc &amp;nbsp; &amp;nbsp;=&amp;gt; 'iswc',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = changed_display_data($self-&amp;gt;data, $loaded, %map);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{artist_credit} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{new}{artist_credit}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{old}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $data;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub initialize
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self, %opts) = @_;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Form/Work.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Form/Work.pm	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Form/Work.pm	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -2,6 +2,8 @@
&lt;br&gt;&amp;nbsp;use HTML::FormHandler::Moose;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Form';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+with 'MusicBrainz::Server::Form::Edit';
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has '+name' =&amp;gt; ( default =&amp;gt; 'edit-work' );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has_field 'type_id' =&amp;gt; (
&lt;br&gt;@@ -21,6 +23,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type =&amp;gt; 'Text',
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+has_field 'artist_credit' =&amp;gt; (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;type =&amp;gt; '+MusicBrainz::Server::Form::Field::ArtistCredit',
&lt;br&gt;+);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub options_type_id { shift-&amp;gt;_select_all('WorkType') }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/work/edit.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/work/edit.tt	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/root/work/edit.tt	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -1,3 +1,19 @@
&lt;br&gt;+[%- BLOCK layout_head -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/html.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/utility.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/predicate.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/ArtistCreditEditor.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/InlineDialog.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/Lookup.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/Overlay.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/ToggleButton.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/MB/Control/TableSorting.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/static/scripts/edit_work.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;script src=&amp;quot;[% c.uri_for('/text.js') %]&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;link type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;[% c.uri_for('/static/styles/release-editor.css') %]&amp;quot; /&amp;gt;
&lt;br&gt;+[%- END -%]
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;[% WRAPPER 'layout.tt' full_width=1 %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; [% INCLUDE 'work/header.tt' %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; [% INCLUDE 'work/edit_form.tt' %]
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/work/edit_form.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/work/edit_form.tt	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/root/work/edit_form.tt	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -1,6 +1,11 @@
&lt;br&gt;&amp;nbsp;&amp;lt;form action=&amp;quot;[% c.req.uri %]&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[% USE r = FormRenderer(form) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[% form.errors.join(&amp;quot; &amp;quot;) %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;row&amp;quot; id=&amp;quot;artist&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.label('artist_credit', l('Artist:'), fake =&amp;gt; 1) %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.artist_credit_editor('artist_credit') %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.label('name', l('Name:')) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.text('name') %]
&lt;br&gt;@@ -18,4 +23,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.select('type_id') %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[% form_submit(l('Enter Edit')) %]
&lt;br&gt;-&amp;lt;/form&amp;gt;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+&amp;lt;/form&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/controller_work.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/controller_work.t	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/t/controller_work.t	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -53,8 +53,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-work.comment' =&amp;gt; 'A comment!',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-work.type_id' =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-work.name' =&amp;gt; 'Another name',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-work.artist_credit.0.name' =&amp;gt; 'Foo',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-work.artist_credit.0.artist_id' =&amp;gt; '2',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-work.artist_credit.names.0.name' =&amp;gt; 'Foo',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-work.artist_credit.names.0.artist_id' =&amp;gt; '3',
&lt;br&gt;&amp;nbsp;];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;my $response = $mech-&amp;gt;request($request);
&lt;br&gt;@@ -71,24 +71,34 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type_id =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment =&amp;gt; 'A comment!',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iswc =&amp;gt; 'T-123.456.789-0',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ artist =&amp;gt; 3, name =&amp;gt; 'Foo' }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type_id =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment =&amp;gt; undef,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;iswc =&amp;gt; 'T-000.000.001-0',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; 'Dancing Queen',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ artist =&amp;gt; 6, name =&amp;gt; 'ABBA' }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-TODO: {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;local $TODO = 'Support editing the artist credit';
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is_deeply($edit-&amp;gt;data-&amp;gt;{new}{artist_credit}, [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ artist =&amp;gt; 2, name =&amp;gt; 'Foo' }
&lt;br&gt;- &amp;nbsp; &amp;nbsp;]);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is_deeply($edit-&amp;gt;data-&amp;gt;{old}{artist_credit}, [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ artist =&amp;gt; 1, name =&amp;gt; 'Abba' }
&lt;br&gt;- &amp;nbsp; &amp;nbsp;]);
&lt;br&gt;-}
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('Another name', '..has new name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Dancing Queen', '..has old name');
&lt;br&gt;+$mech-&amp;gt;content_contains('T-123.456.789-0', '..has new iswc');
&lt;br&gt;+$mech-&amp;gt;content_contains('T-000.000.001-0', '..has old iswc');
&lt;br&gt;+$mech-&amp;gt;content_contains('Symphony', '..has new work type');
&lt;br&gt;+$mech-&amp;gt;content_contains('Composition', '..has old work type');
&lt;br&gt;+$mech-&amp;gt;content_contains('A comment!', '..has new comment');
&lt;br&gt;+$mech-&amp;gt;content_contains('Foo', '..has new artist');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/745c079d-374e-4436-9448-da92dedef3ce', '...and links to artist');
&lt;br&gt;+$mech-&amp;gt;content_contains('ABBA', '..has old artist');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/a45c079d-374e-4436-9448-da92dedef3cf', '...and links to artist');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Test adding annotations
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok(&amp;quot;/work/745c079d-374e-4436-9448-da92dedef3ce/edit_annotation&amp;quot;);
&lt;br&gt;@@ -99,7 +109,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-my $edit = MusicBrainz::Server::Test-&amp;gt;get_latest_edit($c);
&lt;br&gt;+$edit = MusicBrainz::Server::Test-&amp;gt;get_latest_edit($c);
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Work::AddAnnotation');
&lt;br&gt;&amp;nbsp;is_deeply(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$edit-&amp;gt;data,
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_work_edit.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_work_edit.t	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;+++ mb_server/trunk/t/edit_work_edit.t	2009-12-03 15:47:13 UTC (rev 12317)
&lt;br&gt;@@ -22,12 +22,9 @@
&lt;br&gt;&amp;nbsp;my ($edits) = $c-&amp;gt;model('Edit')-&amp;gt;find({ work =&amp;gt; 1 }, 10, 0);
&lt;br&gt;&amp;nbsp;is($edits-&amp;gt;[0]-&amp;gt;id, $edit-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-$edit = $c-&amp;gt;model('Edit')-&amp;gt;get_by_id($edit-&amp;gt;id);
&lt;br&gt;-$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-is($edit-&amp;gt;work_id, 1);
&lt;br&gt;-is($edit-&amp;gt;work-&amp;gt;id, 1);
&lt;br&gt;-is_unchanged($edit-&amp;gt;work);
&lt;br&gt;-is($edit-&amp;gt;work-&amp;gt;edits_pending, 1);
&lt;br&gt;+$work = $c-&amp;gt;model('Work')-&amp;gt;get_by_id(1);
&lt;br&gt;+is_unchanged($work);
&lt;br&gt;+is($work-&amp;gt;edits_pending, 1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;reject_edit($c, $edit);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26628159&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12317---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Controller-lib-MusicBrainz-Server-Edit-Work-lib-MusicBrainz-Server-Form-root-edit-details-root-static-scripts-root-work-t-tp26628159p26628159.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26578689</id>
	<title>r12316 - in search_server/branches/ngs: index index/src/main/java/org/musicbrainz/search/analysis servlet</title>
	<published>2009-11-30T09:38:27Z</published>
	<updated>2009-11-30T09:38:27Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-30 17:38:27 +0000 (Mon, 30 Nov 2009)
&lt;br&gt;New Revision: 12316
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/pom.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;Log:
&lt;br&gt;Updated to use Lucene 3.0
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/pom.xml
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/pom.xml	2009-11-22 13:53:01 UTC (rev 12315)
&lt;br&gt;+++ search_server/branches/ngs/index/pom.xml	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;@@ -31,7 +31,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;lucene-core&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.1&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;3.0.0&amp;lt;/version&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java	2009-11-22 13:53:01 UTC (rev 12315)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;@@ -1,32 +1,20 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.analysis;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.io.IOException;
&lt;br&gt;-import java.io.Reader;
&lt;br&gt;-
&lt;br&gt;-import org.apache.lucene.analysis.Token;
&lt;br&gt;-import org.apache.lucene.analysis.Tokenizer;
&lt;br&gt;-import org.apache.lucene.analysis.standard.StandardAnalyzer;
&lt;br&gt;-import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
&lt;br&gt;-import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
&lt;br&gt;-import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;-import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
&lt;br&gt;-import org.apache.lucene.util.AttributeSource;
&lt;br&gt;-
&lt;br&gt;-/** A grammar-based tokenizer constructed with JFlex
&lt;br&gt;+/**
&lt;br&gt;+ * Licensed to the Apache Software Foundation (ASF) under one or more
&lt;br&gt;+ * contributor license agreements. &amp;nbsp;See the NOTICE file distributed with
&lt;br&gt;+ * this work for additional information regarding copyright ownership.
&lt;br&gt;+ * The ASF licenses this file to You under the Apache License, Version 2.0
&lt;br&gt;+ * (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with
&lt;br&gt;+ * the License. &amp;nbsp;You may obtain a copy of the License at
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;lt;p&amp;gt; This should be a good tokenizer for most European-language documents:
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;br&gt;&amp;nbsp; *
&lt;br&gt;- * &amp;lt;ul&amp;gt;
&lt;br&gt;- * &amp;nbsp; &amp;lt;li&amp;gt;Splits words at punctuation characters, removing punctuation. However, a
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; dot that's not followed by whitespace is considered part of a token.
&lt;br&gt;- * &amp;nbsp; &amp;lt;li&amp;gt;Splits words at hyphens, unless there's a number in the token, in which case
&lt;br&gt;- * &amp;nbsp; &amp;nbsp; the whole token is interpreted as a product number and is not split.
&lt;br&gt;- * &amp;nbsp; &amp;lt;li&amp;gt;Recognizes email addresses and internet hostnames as one token.
&lt;br&gt;- * &amp;lt;/ul&amp;gt;
&lt;br&gt;- *
&lt;br&gt;- * &amp;lt;p&amp;gt;Many applications have specific tokenizer needs. &amp;nbsp;If this tokenizer does
&lt;br&gt;- * not suit your application, please consider copying this source code
&lt;br&gt;- * directory to your project and maintaining your own grammar-based tokenizer.
&lt;br&gt;+ * Unless required by applicable law or agreed to in writing, software
&lt;br&gt;+ * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&lt;br&gt;+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
&lt;br&gt;+ * See the License for the specific language governing permissions and
&lt;br&gt;+ * limitations under the License.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -35,6 +23,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Token;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Tokenizer;
&lt;br&gt;+import org.apache.lucene.analysis.standard.StandardAnalyzer;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;@@ -67,7 +56,7 @@
&lt;br&gt;&amp;nbsp; * &amp;lt;/ul&amp;gt;
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class StandardTokenizer extends Tokenizer {
&lt;br&gt;+public final class StandardTokenizer extends Tokenizer {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** A private instance of the JFlex-constructed scanner */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private final StandardTokenizerImpl scanner;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -82,8 +71,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @deprecated this solves a bug where HOSTs that end with '.' are identified
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; as ACRONYMs. It is deprecated and will be removed in the next
&lt;br&gt;- &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; release.
&lt;br&gt;+ &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; as ACRONYMs.
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public static final int ACRONYM_DEP &amp;nbsp; &amp;nbsp; &amp;nbsp; = 8;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -100,17 +88,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;lt;ACRONYM_DEP&amp;gt;&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @deprecated Please use {@link #TOKEN_TYPES} instead */
&lt;br&gt;- &amp;nbsp;public static final String [] tokenImage = TOKEN_TYPES;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Specifies whether deprecated acronyms should be replaced with HOST type.
&lt;br&gt;- &amp;nbsp; * This is false by default to support backward compatibility.
&lt;br&gt;- &amp;nbsp; *&amp;lt;p/&amp;gt;
&lt;br&gt;- &amp;nbsp; * See &lt;a href=&quot;http://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @deprecated this should be removed in the next release (3.0).
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private boolean replaceInvalidAcronym;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;private int maxTokenLength = StandardAnalyzer.DEFAULT_MAX_TOKEN_LENGTH;
&lt;br&gt;@@ -127,41 +104,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Creates a new instance of the {@link StandardTokenizer}. Attaches the
&lt;br&gt;- &amp;nbsp; * &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt; to a newly created JFlex scanner.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version,
&lt;br&gt;- &amp;nbsp; * Reader)} instead
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public StandardTokenizer(Reader input) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this(Version.LUCENE_24, input);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new instance of the {@link org.apache.lucene.analysis.standard.StandardTokenizer}. &amp;nbsp;Attaches
&lt;br&gt;&amp;nbsp; &amp;nbsp; * the &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt; to the newly created JFlex scanner.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param input The input reader
&lt;br&gt;- &amp;nbsp; * @param replaceInvalidAcronym Set to true to replace mischaracterized acronyms with HOST.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * See &lt;a href=&quot;http://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public StandardTokenizer(Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;init(input, replaceInvalidAcronym);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Creates a new instance of the {@link org.apache.lucene.analysis.standard.StandardTokenizer}. &amp;nbsp;Attaches
&lt;br&gt;- &amp;nbsp; * the &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt; to the newly created JFlex scanner.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @param input The input reader
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * See &lt;a href=&quot;http://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(Version matchVersion, Reader input) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;@@ -170,18 +119,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new StandardTokenizer with a given {@link AttributeSource}.
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, AttributeSource, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public StandardTokenizer(AttributeSource source, Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;super(source);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;init(input, replaceInvalidAcronym);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Creates a new StandardTokenizer with a given {@link AttributeSource}.
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(Version matchVersion, AttributeSource source, Reader input) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super(source);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;@@ -190,39 +128,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new StandardTokenizer with a given {@link org.apache.lucene.util.AttributeSource.AttributeFactory}
&lt;br&gt;- &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, org.apache.lucene.util.AttributeSource.AttributeFactory, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp;public StandardTokenizer(AttributeFactory factory, Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;super(factory);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;init(input, replaceInvalidAcronym);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; * Creates a new StandardTokenizer with a given {@link org.apache.lucene.util.AttributeSource.AttributeFactory}
&lt;br&gt;- &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(Version matchVersion, AttributeFactory factory, Reader input) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super(factory);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, matchVersion);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;private void init(Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this.replaceInvalidAcronym = replaceInvalidAcronym;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this.input = input;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;termAtt = (TermAttribute) addAttribute(TermAttribute.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;offsetAtt = (OffsetAttribute) addAttribute(OffsetAttribute.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;posIncrAtt = (PositionIncrementAttribute) addAttribute(PositionIncrementAttribute.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;typeAtt = (TypeAttribute) addAttribute(TypeAttribute.class);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;private void init(Reader input, Version matchVersion) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (matchVersion.onOrAfter(Version.LUCENE_24)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;replaceInvalidAcronym = true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;replaceInvalidAcronym = false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;this.input = input;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;termAtt = addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;offsetAtt = addAttribute(OffsetAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;posIncrAtt = addAttribute(PositionIncrementAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;typeAtt = addAttribute(TypeAttribute.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// this tokenizer generates three attributes:
&lt;br&gt;@@ -237,6 +160,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @see org.apache.lucene.analysis.TokenStream#next()
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final boolean incrementToken() throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;clearAttributes();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int posIncr = 1;
&lt;br&gt;@@ -274,34 +198,25 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public final void end() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// set final offset
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int finalOffset = correctOffset(scanner.yychar() + scanner.yylength());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;offsetAtt.setOffset(finalOffset, finalOffset);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;/** @deprecated Will be removed in Lucene 3.0. This method is final, as it should
&lt;br&gt;- &amp;nbsp; * not be overridden. Delegates to the backwards compatibility layer. */
&lt;br&gt;- &amp;nbsp;public final Token next(final Token reusableToken) throws IOException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return super.next(reusableToken);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/** @deprecated Will be removed in Lucene 3.0. This method is final, as it should
&lt;br&gt;- &amp;nbsp; * not be overridden. Delegates to the backwards compatibility layer. */
&lt;br&gt;- &amp;nbsp;public final Token next() throws IOException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return super.next();
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;/*
&lt;br&gt;&amp;nbsp; &amp;nbsp; * (non-Javadoc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @see org.apache.lucene.analysis.TokenStream#reset()
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void reset() throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super.reset();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;scanner.yyreset(input);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp;public void reset(Reader reader) throws IOException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super.reset(reader);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;reset();
&lt;br&gt;@@ -329,4 +244,3 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.replaceInvalidAcronym = replaceInvalidAcronym;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/pom.xml	2009-11-22 13:53:01 UTC (rev 12315)
&lt;br&gt;+++ search_server/branches/ngs/servlet/pom.xml	2009-11-30 17:38:27 UTC (rev 12316)
&lt;br&gt;@@ -36,7 +36,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;lucene-core&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.1&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;3.0.0&amp;lt;/version&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26578689&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12316---in-search_server-branches-ngs%3A-index-index-src-main-java-org-musicbrainz-search-analysis-servlet-tp26578689p26578689.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26503632</id>
	<title>[Branch ~musicbrainz-developers/picard/trunk] Rev 1013: Improved the	cover art plugin to use the same logic for fetching cover art	from Amazon as the MB ...</title>
	<published>2009-11-24T13:31:20Z</published>
	<updated>2009-11-24T13:31:20Z</updated>
	<author>
		<name>noreply-45</name>
	</author>
	<content type="html">------------------------------------------------------------
&lt;br&gt;revno: 1013
&lt;br&gt;committer: Philipp Wolfer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26503632&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ph.wolfer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;branch nick: trunk
&lt;br&gt;timestamp: Tue 2009-11-24 22:23:43 +0100
&lt;br&gt;message:
&lt;br&gt;&amp;nbsp; Improved the cover art plugin to use the same logic for fetching cover art from Amazon as the MB server.
&lt;br&gt;modified:
&lt;br&gt;&amp;nbsp; contrib/plugins/coverart.py
&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;lp:picard
&lt;br&gt;&lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&lt;/a&gt;&lt;br&gt;&lt;br&gt;You are subscribed to branch lp:picard.
&lt;br&gt;To unsubscribe from this branch go to &lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&lt;/a&gt;.
&lt;br&gt;&lt;br /&gt;=== modified file 'contrib/plugins/coverart.py'
&lt;br&gt;--- contrib/plugins/coverart.py	2009-03-23 23:51:41 +0000
&lt;br&gt;+++ contrib/plugins/coverart.py	2009-11-24 21:23:43 +0000
&lt;br&gt;@@ -1,6 +1,6 @@
&lt;br&gt;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot; 
&lt;br&gt;&amp;nbsp;A small plugin to download cover art for any releseas that have a
&lt;br&gt;-CoverArtLink relation.
&lt;br&gt;+CoverArtLink or ASIN relation.
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Changelog:
&lt;br&gt;@@ -27,8 +27,8 @@
&lt;br&gt;&amp;nbsp;PLUGIN_NAME = 'Cover Art Downloader'
&lt;br&gt;&amp;nbsp;PLUGIN_AUTHOR = 'Oliver Charles, Philipp Wolfer'
&lt;br&gt;&amp;nbsp;PLUGIN_DESCRIPTION = '''Downloads cover artwork for releases that have a
&lt;br&gt;-CoverArtLink.'''
&lt;br&gt;-PLUGIN_VERSION = &amp;quot;0.5&amp;quot;
&lt;br&gt;+CoverArtLink or ASIN.'''
&lt;br&gt;+PLUGIN_VERSION = &amp;quot;0.6&amp;quot;
&lt;br&gt;&amp;nbsp;PLUGIN_API_VERSIONS = [&amp;quot;0.12&amp;quot;]
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;from picard.metadata import register_album_metadata_processor
&lt;br&gt;@@ -36,17 +36,16 @@
&lt;br&gt;&amp;nbsp;from PyQt4.QtCore import QUrl
&lt;br&gt;&amp;nbsp;import re
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#
&lt;br&gt;&amp;nbsp;# data transliterated from the perl stuff used to find cover art for the
&lt;br&gt;&amp;nbsp;# musicbrainz server.
&lt;br&gt;&amp;nbsp;# See mb_server/cgi-bin/MusicBrainz/Server/CoverArt.pm
&lt;br&gt;&amp;nbsp;# hartzell --- Tue Apr 15 15:25:58 PDT 2008
&lt;br&gt;-coverArtSites = [
&lt;br&gt;+COVERART_SITES = (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# CD-Baby
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# tested with &lt;a href=&quot;http://musicbrainz.org/release/1243cc17-b9f7-48bd-a536-b10d2013c938.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/release/1243cc17-b9f7-48bd-a536-b10d2013c938.html&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'regexp': '&lt;a href=&quot;http://cdbaby.com/cd/(&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cdbaby.com/cd/(&lt;/a&gt;\w)(\w)(\w*)',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'imguri': '&lt;a href=&quot;http://cdbaby.name/$1/$2/$1$2$3.jpg'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cdbaby.name/$1/$2/$1$2$3.jpg'&lt;/a&gt;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'regexp': '&lt;a href=&quot;http://(www&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://(www&lt;/a&gt;\.)?cdbaby.com/cd/(\w)(\w)(\w*)',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'imguri': '&lt;a href=&quot;http://cdbaby.name/$2/$3/$2$3$4.jpg'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cdbaby.name/$2/$3/$2$3$4.jpg'&lt;/a&gt;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# Jamendo
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# tested with &lt;a href=&quot;http://musicbrainz.org/release/2fe63977-bda9-45da-8184-25a4e7af8da7.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/release/2fe63977-bda9-45da-8184-25a4e7af8da7.html&lt;/a&gt;&lt;br&gt;@@ -54,13 +53,46 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'regexp': 'http:\/\/(?:www.)?jamendo.com\/(?:[a-z]+\/)?album\/([0-9]+)',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'imguri': '&lt;a href=&quot;http://www.jamendo.com/get/album/id/album/artworkurl/redirect/$1/?artwork_size=0'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.jamendo.com/get/album/id/album/artworkurl/redirect/$1/?artwork_size=0'&lt;/a&gt;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;- &amp;nbsp; &amp;nbsp;]
&lt;br&gt;-
&lt;br&gt;-_AMAZON_IMAGE_HOST = 'images.amazon.com'
&lt;br&gt;-_AMAZON_IMAGE_PATH = '/images/P/%s.01.LZZZZZZZ.jpg'
&lt;br&gt;-_AMAZON_IMAGE_PATH_SMALL = '/images/P/%s.01.MZZZZZZZ.jpg'
&lt;br&gt;-_AMAZON_IMAGE_PATH2 = '/images/P/%s.02.LZZZZZZZ.jpg'
&lt;br&gt;-_AMAZON_IMAGE_PATH2_SMALL = '/images/P/%s.02.MZZZZZZZ.jpg'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# amazon image file names are unique on all servers and constructed like
&lt;br&gt;+# &amp;lt;ASIN&amp;gt;.&amp;lt;ServerNumber&amp;gt;.[SML]ZZZZZZZ.jpg
&lt;br&gt;+# A release sold on amazon.de has always &amp;lt;ServerNumber&amp;gt; = 03, for example.
&lt;br&gt;+# Releases not sold on amazon.com, don't have a &amp;quot;01&amp;quot;-version of the image,
&lt;br&gt;+# so we need to make sure we grab an existing image.
&lt;br&gt;+AMAZON_SERVER = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.jp&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;09&amp;quot;,
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.co.jp&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;09&amp;quot;,
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.co.uk&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;02&amp;quot;,
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.de&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec2.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;03&amp;quot;,
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.com&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;01&amp;quot;,
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.ca&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;01&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # .com and .ca are identical
&lt;br&gt;+	},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;amazon.fr&amp;quot;: {
&lt;br&gt;+		&amp;quot;server&amp;quot;: &amp;quot;ec1.images-amazon.com&amp;quot;,
&lt;br&gt;+		&amp;quot;id&amp;quot; &amp;nbsp; &amp;nbsp;: &amp;quot;08&amp;quot;
&lt;br&gt;+	},
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+AMAZON_IMAGE_PATH = '/images/P/%s.%s.%sZZZZZZZ.jpg'
&lt;br&gt;+AMAZON_ASIN_URL_REGEX = re.compile(r'^&lt;a href=&quot;http://(?:www.)?(.*?)(?:&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://(?:www.)?(.*?)(?:&lt;/a&gt;\:[0-9]+)?/.*/([0-9B][0-9A-Z]{9})(?:[^0-9A-Z]|$)')
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def _coverart_downloaded(album, metadata, release, try_list, data, http, error):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;try:
&lt;br&gt;@@ -79,7 +111,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;def coverart(album, metadata, release, try_list=None):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot; Gets the CDBaby URL from the metadata, and the attempts to
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;&amp;quot;&amp;quot; Gets all cover art URLs from the metadata and then attempts to
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;download the album art. &amp;quot;&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;# try_list will be None for the first call
&lt;br&gt;@@ -90,40 +122,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for relation_list in release.relation_list:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if relation_list.target_type == 'Url':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for relation in relation_list.relation:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Search for cover art on special sites
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for site in coverArtSites:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# this loop transliterated from the perl stuff used to find cover art for the
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# musicbrainz server.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# See mb_server/cgi-bin/MusicBrainz/Server/CoverArt.pm
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# hartzell --- Tue Apr 15 15:25:58 PDT 2008
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match = re.match(site['regexp'], relation.target)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if match != None:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;imgURI = site['imguri']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for i in range(1, len(match.groups())+1 ):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if match.group(i) != None:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;imgURI = imgURI.replace('$' + str(i), match.group(i))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_try_list_append_image_url(try_list, QUrl(imgURI))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_process_url_relation(try_list, relation)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Use the URL of a cover art link directly
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if relation.type == 'CoverArtLink':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_try_list_append_image_url(try_list, QUrl(relation.target))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except AttributeError:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pass
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if metadata['asin']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': _AMAZON_IMAGE_HOST, 'port': 80,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': _AMAZON_IMAGE_PATH % metadata['asin']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': _AMAZON_IMAGE_HOST, 'port': 80,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': _AMAZON_IMAGE_PATH_SMALL % metadata['asin']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': _AMAZON_IMAGE_HOST, 'port': 80,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': _AMAZON_IMAGE_PATH2 % metadata['asin']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': _AMAZON_IMAGE_HOST, 'port': 80,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': _AMAZON_IMAGE_PATH2_SMALL % metadata['asin']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif relation.type == 'AmazonAsin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_process_asin_relation(try_list, relation)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except AttributeError as e:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;album.log.error(e)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if len(try_list) &amp;gt; 0:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# We still have some items to try!
&lt;br&gt;@@ -133,6 +140,40 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;partial(_coverart_downloaded, album, metadata, release, try_list[1:]),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position=1)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+def _process_url_relation(try_list, relation):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# Search for cover art on special sites
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for site in COVERART_SITES:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# this loop transliterated from the perl stuff used to find cover art for the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# musicbrainz server.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# See mb_server/cgi-bin/MusicBrainz/Server/CoverArt.pm
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# hartzell --- Tue Apr 15 15:25:58 PDT 2008
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match = re.match(site['regexp'], relation.target)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if match != None:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;imgURI = site['imguri']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for i in range(1, len(match.groups())+1 ):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if match.group(i) != None:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;imgURI = imgURI.replace('$' + str(i), match.group(i))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_try_list_append_image_url(try_list, QUrl(imgURI))
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+def _process_asin_relation(try_list, relation):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;match = AMAZON_ASIN_URL_REGEX.match(relation.target)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if match != None:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asinHost = match.group(1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;asin = match.group(2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if AMAZON_SERVER.has_key(asinHost):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serverInfo = AMAZON_SERVER[asinHost]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;serverInfo = AMAZON_SERVER['amazon.com']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': serverInfo['server'], 'port': 80,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': AMAZON_IMAGE_PATH % (asin, serverInfo['id'], 'L')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try_list.append({'host': serverInfo['server'], 'port': 80,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'path': AMAZON_IMAGE_PATH % (asin, serverInfo['id'], 'M')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;def _try_list_append_image_url(try_list, parsedUrl):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;path = parsedUrl.path()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if parsedUrl.hasQuery():
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26503632&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Branch-%7Emusicbrainz-developers-picard-trunk--Rev-1013%3A-Improved-the%09cover-art-plugin-to-use-the-same-logic-for-fetching-cover-art%09from-Amazon-as-the-MB-...-tp26503632p26503632.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26487329</id>
	<title>[Branch ~musicbrainz-developers/picard/trunk] Rev 1012: Set font size	in log the same as in the scripting window and make log window	larger by default.</title>
	<published>2009-11-23T14:33:09Z</published>
	<updated>2009-11-23T14:33:09Z</updated>
	<author>
		<name>noreply-45</name>
	</author>
	<content type="html">------------------------------------------------------------
&lt;br&gt;revno: 1012
&lt;br&gt;committer: Philipp Wolfer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487329&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ph.wolfer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;branch nick: trunk
&lt;br&gt;timestamp: Mon 2009-11-23 23:30:56 +0100
&lt;br&gt;message:
&lt;br&gt;&amp;nbsp; Set font size in log the same as in the scripting window and make log window larger by default.
&lt;br&gt;modified:
&lt;br&gt;&amp;nbsp; picard/ui/logview.py
&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;lp:picard
&lt;br&gt;&lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&lt;/a&gt;&lt;br&gt;&lt;br&gt;You are subscribed to branch lp:picard.
&lt;br&gt;To unsubscribe from this branch go to &lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&lt;/a&gt;.
&lt;br&gt;&lt;br /&gt;=== modified file 'picard/ui/logview.py'
&lt;br&gt;--- picard/ui/logview.py	2008-07-03 22:36:43 +0000
&lt;br&gt;+++ picard/ui/logview.py	2009-11-23 22:30:56 +0000
&lt;br&gt;@@ -26,14 +26,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;def __init__(self, parent=None):
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;QtGui.QDialog.__init__(self, parent)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.resize(540, 340)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.setWindowTitle(_(&amp;quot;Log&amp;quot;))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.doc = QtGui.QTextDocument(self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.textCursor = QtGui.QTextCursor(self.doc)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font = QtGui.QFont()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font.setFixedPitch(True)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font.setPointSize(8)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font.setWeight(QtGui.QFont.Normal)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font.setFamily(&amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;font.setFamily(&amp;quot;Monospace&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.textFormat = QtGui.QTextCharFormat()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.textFormat.setFont(font)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.browser = QtGui.QTextBrowser(self)
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26487329&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Branch-%7Emusicbrainz-developers-picard-trunk--Rev-1012%3A-Set-font-size%09in-log-the-same-as-in-the-scripting-window-and-make-log-window%09larger-by-default.-tp26487329p26487329.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26486799</id>
	<title>[Branch ~musicbrainz-developers/picard/trunk] Rev 1011: Consistently	use the string &quot;Album&quot; for the release title in the CD lookup	dialog. This is used i...</title>
	<published>2009-11-23T14:03:10Z</published>
	<updated>2009-11-23T14:03:10Z</updated>
	<author>
		<name>noreply-45</name>
	</author>
	<content type="html">------------------------------------------------------------
&lt;br&gt;revno: 1011
&lt;br&gt;committer: Philipp Wolfer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26486799&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ph.wolfer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;branch nick: trunk
&lt;br&gt;timestamp: Mon 2009-11-23 23:00:08 +0100
&lt;br&gt;message:
&lt;br&gt;&amp;nbsp; Consistently use the string &amp;quot;Album&amp;quot; for the release title in the CD lookup dialog. This is used in the rest of the application, too.
&lt;br&gt;modified:
&lt;br&gt;&amp;nbsp; picard/ui/cdlookup.py
&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;lp:picard
&lt;br&gt;&lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&lt;/a&gt;&lt;br&gt;&lt;br&gt;You are subscribed to branch lp:picard.
&lt;br&gt;To unsubscribe from this branch go to &lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&lt;/a&gt;.
&lt;br&gt;&lt;br /&gt;=== modified file 'picard/ui/cdlookup.py'
&lt;br&gt;--- picard/ui/cdlookup.py	2009-06-02 20:46:22 +0000
&lt;br&gt;+++ picard/ui/cdlookup.py	2009-11-23 22:00:08 +0000
&lt;br&gt;@@ -28,7 +28,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.disc = disc
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.ui = Ui_Dialog()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.ui.setupUi(self)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.ui.release_list.setHeaderLabels([_(u&amp;quot;Score&amp;quot;), _(u&amp;quot;Title&amp;quot;), _(u&amp;quot;Artist&amp;quot;)])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.ui.release_list.setHeaderLabels([_(u&amp;quot;Score&amp;quot;), _(u&amp;quot;Album&amp;quot;), _(u&amp;quot;Artist&amp;quot;)])
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.ui.release_list.header().resizeSection(0, 40)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.releases:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for release in self.releases:
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26486799&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Branch-%7Emusicbrainz-developers-picard-trunk--Rev-1011%3A-Consistently%09use-the-string-%22Album%22-for-the-release-title-in-the-CD-lookup%09dialog.-This-is-used-i...-tp26486799p26486799.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26465480</id>
	<title>r12315 - in mb_server/trunk: lib/MusicBrainz/Server/Edit root/static/scripts/MB/Control</title>
	<published>2009-11-22T05:53:01Z</published>
	<updated>2009-11-22T05:53:01Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-22 13:53:01 +0000 (Sun, 22 Nov 2009)
&lt;br&gt;New Revision: 12315
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js
&lt;br&gt;Log:
&lt;br&gt;Minor fixes
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm	2009-11-22 13:53:01 UTC (rev 12315)
&lt;br&gt;@@ -31,15 +31,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for my $key (keys %$old) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $n = $new-&amp;gt;{$key};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $o = $old-&amp;gt;{$key};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $equal;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (defined $n &amp;&amp; defined $o) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $equal = (ref $o || ref $n)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$equal = (ref $o || ref $n)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;? deep_equal($n, $o)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: smart_match($n, $o);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} elsif (!defined $n &amp;&amp; !defined $o) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$equal = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ($equal) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete $old-&amp;gt;{$key};
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete $new-&amp;gt;{$key};
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ($equal) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete $old-&amp;gt;{$key};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete $new-&amp;gt;{$key};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;+++ mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js	2009-11-22 13:53:01 UTC (rev 12315)
&lt;br&gt;@@ -31,7 +31,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var fieldMapping = {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;join_phrase: 'joinPhrase',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name: 'altName',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;id: 'id'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_id: 'id'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;function ArtistCredit(artist) {
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26465480&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12315---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Edit-root-static-scripts-MB-Control-tp26465480p26465480.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26464302</id>
	<title>r12314 - in search_server/branches/ngs/servlet/src: main/java/org/musicbrainz/search/servlet/mmd2 test/java/org/musicbrainz/search/servlet</title>
	<published>2009-11-22T03:06:15Z</published>
	<updated>2009-11-22T03:06:15Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-22 11:06:15 +0000 (Sun, 22 Nov 2009)
&lt;br&gt;New Revision: 12314
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java
&lt;br&gt;Log:
&lt;br&gt;#5496 updatd to use new getScore() method provided by changes to schema, because now using extension properly also 
&lt;br&gt;needed NamepacePrefixMapper class to define that extensions should be mapped to ext (by default just use prefixes ns2,ns3..).
&lt;br&gt;Added test for json output and fixed bug with asin element outputtting the value of barcode.
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -56,6 +56,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Artist artist = of.createArtist();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist.setId(doc.get(ArtistIndexField.ARTIST_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String artype = doc.get(ArtistIndexField.TYPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (artype != null) {
&lt;br&gt;@@ -63,7 +64,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/LabelWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -55,8 +55,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(type!=null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label.setType(type.toLowerCase((Locale.US)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String name = doc.get(LabelIndexField.LABEL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (name != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label.setName(name);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -54,9 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Recording recording = of.createRecording();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording.setId(doc.get(RecordingIndexField.RECORDING_ID));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String name = doc.get(RecordingIndexField.RECORDING_OUTPUT);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (name != null) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseGroupWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -54,9 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReleaseGroup releaseGroup = of.createReleaseGroup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;releaseGroup.setId(doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;releaseGroup.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;releaseGroup.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String name = doc.get(ReleaseGroupIndexField.RELEASEGROUP);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (name != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;releaseGroup.setTitle(name);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ReleaseWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -54,6 +54,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Release release = of.createRelease();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release.setId(doc.get(ReleaseIndexField.RELEASE_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String name = doc.get(ReleaseIndexField.RELEASE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (name != null) {
&lt;br&gt;@@ -89,11 +90,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String asin = doc.get(ReleaseIndexField.AMAZON_ID);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (asin != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release.setAsin(barcode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release.setAsin(asin);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TextRepresentation tr = of.createTextRepresentation();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String script = doc.get(ReleaseIndexField.SCRIPT);
&lt;br&gt;@@ -111,7 +111,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] labels = doc.getValues(ReleaseIndexField.LABEL);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Releases can only have multiple labe;/catno combinations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Releases can only have multiple label/catno combinations
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (labels.length &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LabelInfoList labelInfoList = of.createLabelInfoList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] catnos = doc.getValues(ReleaseIndexField.CATALOG_NO);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -29,6 +29,7 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.servlet.mmd2;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.mmd2.Metadata;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -46,8 +47,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public abstract class ResultsWriter extends org.musicbrainz.search.servlet.ResultsWriter {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;static final JAXBContext &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context &amp;nbsp;= initContext();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;static final JSONJAXBContext jsoncontext = initJsonContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static final JAXBContext &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = initContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static final NamespacePrefixMapper &amp;nbsp;prefixMapper &amp;nbsp; &amp;nbsp;= new PreferredMapper();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;static final JSONJAXBContext &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;jsoncontext &amp;nbsp; &amp;nbsp; = initJsonContext();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String getMimeType() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;application/xml; charset=UTF-8&amp;quot;;
&lt;br&gt;@@ -56,13 +58,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String getJsonMimeType() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;application/json; charset=UTF-8&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;- &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected QName getScore() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new QName(&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;, &amp;quot;score&amp;quot;, &amp;quot;ext&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private static JAXBContext initContext() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return JAXBContext.newInstance(&amp;quot;org.musicbrainz.mmd2&amp;quot;);
&lt;br&gt;@@ -108,6 +104,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Metadata metadata = write(results);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Marshaller m = context.createMarshaller();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m.setProperty(&amp;quot;com.sun.xml.bind.namespacePrefixMapper&amp;quot;, prefixMapper);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m.marshal(metadata, out);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch (JAXBException je) {
&lt;br&gt;@@ -128,4 +125,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new RuntimeException(ErrorMessage.NO_HANDLER_FOR_TYPE_AND_FORMAT.getMsg(this.getClass(), outputFormat));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Required to map score to ext namespace now that score defined properly because by default JAXB creates
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * namespaces with names ns1,ns2..
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static class PreferredMapper extends NamespacePrefixMapper {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(namespaceUri.equals(&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;ext&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/WorkWriter.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -53,7 +53,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Work work = of.createWork();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work.setId(doc.get(WorkIndexField.WORK_ID));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work.getOtherAttributes().put(getScore(), String.valueOf((int) (result.score * 100)));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work.setScore(String.valueOf((int)(result.score * 100)));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String name = doc.get(WorkIndexField.WORK);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (name != null) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindArtistTest.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -64,11 +64,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc.getLuceneDocument());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ss = new ArtistSearch(new IndexSearcher(ramDir,true));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ss = new ArtistSearch(new IndexSearcher(ramDir, true));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindArtistById() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;arid:\&amp;quot;4302e264-1cf0-4d1f-aca7-2a6f89e34b36\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;@@ -241,8 +240,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testOutputXml() throws Exception {
&lt;br&gt;@@ -257,6 +254,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Xml is&amp;quot; + output);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id=\&amp;quot;4302e264-1cf0-4d1f-aca7-2a6f89e34b36\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;xmlns:ext=\&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;type=\&amp;quot;group\&amp;quot;&amp;quot;));
&lt;br&gt;@@ -270,8 +268,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testOutputXml2() throws Exception {
&lt;br&gt;@@ -319,9 +315,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;name&amp;gt;Echo &amp;amp; The Bunnymen&amp;lt;/name&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testOutputJson() throws Exception {
&lt;br&gt;@@ -330,7 +324,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new ArtistWriter();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res,SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;@@ -347,4 +341,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;gender\&amp;quot;:\&amp;quot;male\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJsonMultiple() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;artist:\&amp;quot;Farming Incident\&amp;quot; OR artist:\&amp;quot;Echo &amp; The Bunnymen\&amp;quot;&amp;quot;, 0, 2);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new ArtistWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;score\&amp;quot;:\&amp;quot;100\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;score\&amp;quot;:\&amp;quot;31\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindLabelTest.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -10,7 +10,7 @@
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.LabelIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.LabelType;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd1.LabelMmd1XmlWriter;
&lt;br&gt;-import org.musicbrainz.search.servlet.mmd2.LabelWriter;
&lt;br&gt;+import org.musicbrainz.search.servlet.mmd2.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.io.PrintWriter;
&lt;br&gt;&amp;nbsp;import java.io.StringWriter;
&lt;br&gt;@@ -218,6 +218,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Xml is&amp;quot; + output);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;xmlns:ext=\&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id=\&amp;quot;ff571ff4-04cb-4b9c-8a1c-354c330f863c\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;type=\&amp;quot;production\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;name&amp;gt;Jockey Slut&amp;lt;/name&amp;gt;&amp;quot;));
&lt;br&gt;@@ -226,4 +227,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;begin&amp;gt;1993&amp;lt;/begin&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;end&amp;gt;2004&amp;lt;/end&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJson() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;label:\&amp;quot;Jockey Slut\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = new LabelWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Json is&amp;quot; + output);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id\&amp;quot;:\&amp;quot;ff571ff4-04cb-4b9c-8a1c-354c330f863c\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;count\&amp;quot;:1&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;offset\&amp;quot;:0,&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;type\&amp;quot;:\&amp;quot;production\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;name\&amp;quot;:\&amp;quot;Jockey Slut\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;sort-name\&amp;quot;:\&amp;quot;Slut, Jockey\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;life-span\&amp;quot;:{\&amp;quot;begin\&amp;quot;:\&amp;quot;1993\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -292,7 +292,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testOutputAsXml() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;track:\&amp;quot;Gravitational Lenz\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;recording:\&amp;quot;Gravitational Lenz\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new RecordingWriter();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;@@ -302,7 +302,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Xml is&amp;quot; + output);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;recording id=\&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;xmlns:ext=\&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id=\&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;title&amp;gt;Gravitational Lenz&amp;lt;/title&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;length&amp;gt;234000&amp;lt;/length&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;artist id=\&amp;quot;4302e264-1cf0-4d1f-aca7-2a6f89e34b36\&amp;quot;&amp;quot;));
&lt;br&gt;@@ -320,4 +321,28 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJson() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;recording:\&amp;quot;Gravitational Lenz\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new RecordingWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Json is&amp;quot; + output);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id\&amp;quot;:\&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;count\&amp;quot;:1&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;offset\&amp;quot;:0,&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;score\&amp;quot;:\&amp;quot;100\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;type\&amp;quot;:[\&amp;quot;album\&amp;quot;]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;title\&amp;quot;:\&amp;quot;Gravitational Lenz\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;length\&amp;quot;:234000&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;isrc\&amp;quot;:[\&amp;quot;123456789&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;position\&amp;quot;:1&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseGroupTest.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -12,6 +12,7 @@
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd1.ReleaseGroupMmd1XmlWriter;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd2.ReleaseGroupWriter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;import java.io.PrintWriter;
&lt;br&gt;&amp;nbsp;import java.io.StringWriter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -73,7 +74,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc.getLuceneDocument());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ss = new ReleaseGroupSearch(new IndexSearcher(ramDir,true));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ss = new ReleaseGroupSearch(new IndexSearcher(ramDir, true));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupById() throws Exception {
&lt;br&gt;@@ -115,7 +116,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;single&amp;quot;, doc.get(ReleaseGroupIndexField.TYPE));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void testFindReleaseGroupByReleaseId() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupByReleaseId() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;releaseid:\&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c46\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, res.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res = ss.searchLucene(&amp;quot;release:secret&amp;quot;, 0, 10);
&lt;br&gt;@@ -168,16 +169,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupByNumericType() throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Results res = ss.searchLucene(&amp;quot;type:2&amp;quot;, 0, 10);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(1, res.totalHits);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result result = res.results.get(0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MbDocument doc = result.doc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c45&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(&amp;quot;Nobody's Twisting Your Arm&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(&amp;quot;707622da-475f-48e1-905d-248718df6521&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST_ID));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(&amp;quot;The Wedding Present&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST_NAME));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(&amp;quot;single&amp;quot;, doc.get(ReleaseGroupIndexField.TYPE));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;type:2&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c45&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Nobody's Twisting Your Arm&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;707622da-475f-48e1-905d-248718df6521&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;The Wedding Present&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST_NAME));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;single&amp;quot;, doc.get(ReleaseGroupIndexField.TYPE));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupByDefault() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;\&amp;quot;secret\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;@@ -192,7 +193,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;The Wedding Present&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST_NAME));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;single&amp;quot;, doc.get(ReleaseGroupIndexField.TYPE));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;secret&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASE));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -203,18 +204,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;,doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupByAllArtist2() throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;artist:\&amp;quot;Erich Kunzel and Cincinnati Pops\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;,doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;artist:\&amp;quot;Erich Kunzel and Cincinnati Pops\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -225,7 +226,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;,doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -236,9 +237,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;,doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindReleaseGroupBySortArtist2() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;sortname:\&amp;quot;Kunzel, Eric\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;@@ -246,7 +248,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Epics&amp;quot;, doc.get(ReleaseGroupIndexField.RELEASEGROUP));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;,doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Erich Kunzel and Cincinnati Pops&amp;quot;, doc.get(ReleaseGroupIndexField.ARTIST));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -279,7 +281,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Tests get same results as
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &lt;a href=&quot;http://musicbrainz.org/ws/1/release-group/?type=xml&amp;query=%22Nobody%27s%20Twisting%20Your%20Arm%22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ws/1/release-group/?type=xml&amp;query=%22Nobody%27s%20Twisting%20Your%20Arm%22&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;@@ -297,6 +299,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Xml is&amp;quot; + output);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;xmlns:ext=\&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id=\&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c45\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;title&amp;gt;Nobody's Twisting Your Arm&amp;lt;/title&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;name&amp;gt;The Wedding Present&amp;lt;/name&amp;gt;&amp;quot;));
&lt;br&gt;@@ -306,7 +309,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;artist id=\&amp;quot;707622da-475f-48e1-905d-248718df6521\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;type=\&amp;quot;single\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;release-list count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;release id=\&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c46\&amp;quot;&amp;gt;&amp;lt;title&amp;gt;secret&amp;lt;/title&amp;gt;&amp;lt;/release&amp;gt;&amp;quot;)); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;release id=\&amp;quot;2c7d81da-8fc3-3157-99c1-e9195ac92c46\&amp;quot;&amp;gt;&amp;lt;title&amp;gt;secret&amp;lt;/title&amp;gt;&amp;lt;/release&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -340,8 +343,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testOutputAsAsXml2() throws Exception {
&lt;br&gt;@@ -370,7 +372,38 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;sort-name&amp;gt;Cincinnati Pops Orchestra, The&amp;lt;/sort-name&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;artist id=\&amp;quot;d8fbd94c-cd06-4e8b-a559-761ad969d07e\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;release-list count=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJson() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;releasegroup:Epics&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new ReleaseGroupWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Json is&amp;quot; + output);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id\&amp;quot;:\&amp;quot;0011c128-b1f2-300e-88cc-c33c30dce704\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;count\&amp;quot;:1&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;offset\&amp;quot;:0,&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;type\&amp;quot;:[\&amp;quot;album\&amp;quot;]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;title\&amp;quot;:\&amp;quot;Epics\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJsonMultiple() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;rgid:2c7d81da-8fc3-3157-99c1-e9195ac92c45 &amp;nbsp;OR artist:kunzel&amp;quot;, 0, 10);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;org.musicbrainz.search.servlet.mmd2.ResultsWriter writer = new ReleaseGroupWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;score\&amp;quot;:\&amp;quot;100\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;score\&amp;quot;:\&amp;quot;43\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindReleaseTest.java	2009-11-22 11:06:15 UTC (rev 12314)
&lt;br&gt;@@ -12,6 +12,7 @@
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ReleaseGroupType;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ReleaseIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd1.ReleaseMmd1XmlWriter;
&lt;br&gt;+import org.musicbrainz.search.servlet.mmd2.ReleaseGroupWriter;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd2.ReleaseWriter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.io.PrintWriter;
&lt;br&gt;@@ -129,6 +130,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, doc.getFields(ReleaseIndexField.CATALOG_NO).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;WRATHCD25&amp;quot;, doc.get(ReleaseIndexField.CATALOG_NO));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(ReleaseIndexField.BARCODE).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;07599273202&amp;quot;, doc.get(ReleaseIndexField.BARCODE));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(ReleaseIndexField.AMAZON_ID).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;B00004Y6O9&amp;quot;, doc.get(ReleaseIndexField.AMAZON_ID));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(ReleaseIndexField.COUNTRY).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;gb&amp;quot;, doc.get(ReleaseIndexField.COUNTRY));
&lt;br&gt;@@ -545,6 +549,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Xml is&amp;quot; + output);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;xmlns:ext=\&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id=\&amp;quot;1d9e8ed6-3893-4d3b-aa7d-6cd79609e386\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;language&amp;gt;eng&amp;lt;/language&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;script&amp;gt;latn&amp;lt;/script&amp;gt;&amp;quot;));
&lt;br&gt;@@ -558,10 +563,35 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;date&amp;gt;2005&amp;lt;/date&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;country&amp;gt;gb&amp;lt;/country&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;format&amp;gt;vinyl&amp;lt;/format&amp;gt;&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;asin&amp;gt;07599273202&amp;lt;/asin&amp;gt;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;asin&amp;gt;B00004Y6O9&amp;lt;/asin&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;label&amp;gt;&amp;lt;name&amp;gt;Wrath Records&amp;lt;/name&amp;gt;&amp;lt;/label&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;catalog-number&amp;gt;WRATHCD25&amp;lt;/catalog-number&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testOutputJson() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;release:\&amp;quot;Our Glorious 5 Year Plan\&amp;quot;&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultsWriter writer = new ReleaseWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringWriter sw = new StringWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PrintWriter pr = new PrintWriter(sw);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.write(pr, res, SearchServerServlet.RESPONSE_JSON);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pr.close();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String output = sw.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Json is&amp;quot; + output);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;id\&amp;quot;:\&amp;quot;1d9e8ed6-3893-4d3b-aa7d-6cd79609e386\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;count\&amp;quot;:1&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;offset\&amp;quot;:0,&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;type\&amp;quot;:[\&amp;quot;album\&amp;quot;]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;title\&amp;quot;:\&amp;quot;Our Glorious 5 Year Plan\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;status\&amp;quot;:\&amp;quot;official\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;language\&amp;quot;:\&amp;quot;eng\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;script\&amp;quot;:\&amp;quot;latn\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;barcode\&amp;quot;:\&amp;quot;07599273202\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;\&amp;quot;asin\&amp;quot;:\&amp;quot;B00004Y6O9\&amp;quot;&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26464302&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12314---in-search_server-branches-ngs-servlet-src%3A-main-java-org-musicbrainz-search-servlet-mmd2-test-java-org-musicbrainz-search-servlet-tp26464302p26464302.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26464274</id>
	<title>r12313 - in mmd-schema/trunk/brainz-mmd2-jaxb: . src/main/java/org/musicbrainz/mmd2 src/main/resources target target/classes</title>
	<published>2009-11-22T03:01:47Z</published>
	<updated>2009-11-22T03:01:47Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-22 11:01:46 +0000 (Sun, 22 Nov 2009)
&lt;br&gt;New Revision: 12313
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/target/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/target/classes/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/target/classes/extensions.xsd
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Alias.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Artist.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Label.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ObjectFactory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Recording.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Release.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ReleaseGroup.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Work.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd
&lt;br&gt;Log:
&lt;br&gt;#5496 because score isnt actually defined in the schema it exposed a bug in Jerseys handling of unannmed attributes when generating json. The neatest solution is to define score in an extemsions.xsd, then added score as an attribute in the main xsd, although this neccessitates a manual mod to xsd whenever rng changes it also generates classes that better match the xml we want to return.
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Alias.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Alias.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Alias.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -67,8 +67,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Objects of the following type(s) are allowed in the list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * {@link JAXBElement }{@code &amp;lt;}{@link String }{@code &amp;gt;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * {@link String }
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * {@link JAXBElement }{@code &amp;lt;}{@link String }{@code &amp;gt;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Artist.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Artist.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Artist.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -112,6 +112,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlSchemaType(name = &amp;quot;anyURI&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -558,6 +560,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Label.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Label.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Label.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -106,6 +106,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlSchemaType(name = &amp;quot;anyURI&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -504,6 +506,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ObjectFactory.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ObjectFactory.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ObjectFactory.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -62,243 +62,243 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link IsrcList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link RelationList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public IsrcList createIsrcList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new IsrcList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RelationList createRelationList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RelationList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Alias }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Release }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Alias createAlias() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Alias();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Release createRelease() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Release();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link TagList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Alias }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public TagList createTagList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TagList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Alias createAlias() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Alias();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Metadata }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link UserTagList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Metadata createMetadata() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Metadata();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public UserTagList createUserTagList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new UserTagList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link TrackList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Rating }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public TrackList createTrackList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TrackList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Rating createRating() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Rating();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Artist }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link ArtistList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Artist createArtist() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Artist();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ArtistList createArtistList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ArtistList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Relation }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseGroup }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Relation createRelation() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Relation();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ReleaseGroup createReleaseGroup() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseGroup();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link UserTagList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Label }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public UserTagList createUserTagList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new UserTagList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Label createLabel() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Label();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Recording }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Work }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Recording createRecording() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Recording();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Work createWork() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Work();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link MediumList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Track }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public MediumList createMediumList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new MediumList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Track createTrack() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Track();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Medium }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link PuidList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Medium createMedium() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Medium();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public PuidList createPuidList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PuidList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Rating }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link RecordingList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Rating createRating() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Rating();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public RecordingList createRecordingList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RecordingList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link AliasList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelInfo }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public AliasList createAliasList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new AliasList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public LabelInfo createLabelInfo() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelInfo();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link LifeSpan }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public LifeSpan createLifeSpan() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LifeSpan();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public LabelList createLabelList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Label }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Recording }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Label createLabel() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Label();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Recording createRecording() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Recording();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link ArtistCredit }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Medium }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ArtistCredit createArtistCredit() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ArtistCredit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Medium createMedium() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Medium();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link WorkList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link DiscList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public WorkList createWorkList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new WorkList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public DiscList createDiscList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DiscList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Release }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link NameCredit }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Release createRelease() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Release();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public NameCredit createNameCredit() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new NameCredit();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelInfoList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link MediumList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public LabelInfoList createLabelInfoList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelInfoList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public MediumList createMediumList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new MediumList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link PuidList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Puid }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public PuidList createPuidList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PuidList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Puid createPuid() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Puid();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelInfo }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link IsrcList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public LabelInfo createLabelInfo() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelInfo();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public IsrcList createIsrcList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new IsrcList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Track }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link TagList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Track createTrack() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Track();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public TagList createTagList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TagList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseGroup }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Metadata }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ReleaseGroup createReleaseGroup() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseGroup();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Metadata createMetadata() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Metadata();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Puid }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link TextRepresentation }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Puid createPuid() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Puid();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public TextRepresentation createTextRepresentation() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TextRepresentation();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link RecordingList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link LifeSpan }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public RecordingList createRecordingList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RecordingList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public LifeSpan createLifeSpan() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LifeSpan();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Artist }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ReleaseList createReleaseList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Artist createArtist() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Artist();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link ArtistList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelInfoList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ArtistList createArtistList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ArtistList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public LabelInfoList createLabelInfoList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelInfoList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link TextRepresentation }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link AliasList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public TextRepresentation createTextRepresentation() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TextRepresentation();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public AliasList createAliasList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new AliasList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link NameCredit }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public NameCredit createNameCredit() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new NameCredit();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ReleaseList createReleaseList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link DiscList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseGroupList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public DiscList createDiscList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DiscList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ReleaseGroupList createReleaseGroupList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseGroupList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -310,43 +310,43 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link LabelList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Relation }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public LabelList createLabelList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new LabelList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Relation createRelation() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Relation();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link RelationList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link TrackList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public RelationList createRelationList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new RelationList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public TrackList createTrackList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new TrackList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Disc }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link WorkList }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Disc createDisc() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Disc();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public WorkList createWorkList() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new WorkList();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link ReleaseGroupList }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link ArtistCredit }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ReleaseGroupList createReleaseGroupList() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ReleaseGroupList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ArtistCredit createArtistCredit() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ArtistCredit();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Create an instance of {@link Work }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Create an instance of {@link Disc }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Work createWork() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Work();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Disc createDisc() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Disc();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Recording.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Recording.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Recording.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -98,6 +98,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlSchemaType(name = &amp;quot;anyURI&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String id;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -448,6 +450,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Release.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Release.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Release.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -100,6 +100,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlSchemaType(name = &amp;quot;anyURI&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String id;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -498,6 +500,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ReleaseGroup.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ReleaseGroup.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/ReleaseGroup.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -86,6 +86,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String id;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected List&amp;lt;String&amp;gt; type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -369,6 +371,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Work.java
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Work.java	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/java/org/musicbrainz/mmd2/Work.java	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -65,6 +65,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlSchemaType(name = &amp;quot;anyURI&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected String type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@XmlAttribute(namespace = &amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String score;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@XmlAnyAttribute
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;QName, String&amp;gt; otherAttributes = new HashMap&amp;lt;QName, String&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -218,6 +220,30 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Gets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; possible object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getScore() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return score;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the value of the score property.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; allowed object is
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; {@link String }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setScore(String value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.score = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Gets a map that contains attributes that aren't bound to any typed property on this class.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;lt;p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd
&lt;br&gt;===================================================================
&lt;br&gt;--- mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;+++ mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd	2009-11-22 11:01:46 UTC (rev 12313)
&lt;br&gt;@@ -1,6 +1,8 @@
&lt;br&gt;&amp;nbsp;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;!--
&lt;br&gt;&amp;nbsp; &amp;nbsp;==================================================================
&lt;br&gt;+ &amp;nbsp;WARNING:autogenerated except score manually added for search support
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;$Id: musicbrainz_mmd-1.4.rng 11725 2009-06-12 08:57:41Z matt $
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;Relax NG Schema for MusicBrainz XML Metadata Version 2.0
&lt;br&gt;@@ -21,8 +23,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;==================================================================
&lt;br&gt;&amp;nbsp;--&amp;gt;
&lt;br&gt;-&amp;lt;xs:schema xmlns:xs=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/2001/XMLSchema&lt;/a&gt;&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; targetNamespace=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/mmd-2.0#&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/mmd-2.0#&lt;/a&gt;&amp;quot; xmlns:mmd-2.0=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/mmd-2.0#&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/mmd-2.0#&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;xs:schema xmlns:xs=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/2001/XMLSchema&lt;/a&gt;&amp;quot; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elementFormDefault=&amp;quot;qualified&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;targetNamespace=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/mmd-2.0#&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/mmd-2.0#&lt;/a&gt;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;xmlns:ext=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;xmlns:mmd-2.0=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/mmd-2.0#&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/mmd-2.0#&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;xs:import schemaLocation=&amp;quot;local.xsd&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp;&amp;lt;xs:import namespace=&amp;quot;&lt;a href=&quot;http://musicbrainz.org/ns/ext#-2.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://musicbrainz.org/ns/ext#-2.0&lt;/a&gt;&amp;quot; schemaLocation=&amp;quot;extensions.xsd&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;xs:element name=&amp;quot;metadata&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;xs:complexType&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;xs:sequence&amp;gt;
&lt;br&gt;@@ -374,6 +381,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/xs:sequence&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/xs:group&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;xs:attributeGroup name=&amp;quot;def_extension_attribute&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;xs:attribute ref=&amp;quot;ext:score&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;xs:anyAttribute namespace=&amp;quot;##other&amp;quot; processContents=&amp;quot;skip&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/xs:attributeGroup&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;xs:group name=&amp;quot;def_anything&amp;quot;&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;Property changes on: mmd-schema/trunk/brainz-mmd2-jaxb/target/classes/extensions.xsd
&lt;br&gt;___________________________________________________________________
&lt;br&gt;Added: svn:eol-style
&lt;br&gt;&amp;nbsp; &amp;nbsp;+ native
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26464274&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12313---in-mmd-schema-trunk-brainz-mmd2-jaxb%3A-.-src-main-java-org-musicbrainz-mmd2-src-main-resources-target-target-classes-tp26464274p26464274.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26457952</id>
	<title>r12312 - in mb_server/trunk/lib/MusicBrainz/Server: Data Edit</title>
	<published>2009-11-21T08:11:26Z</published>
	<updated>2009-11-21T08:11:26Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-21 16:11:26 +0000 (Sat, 21 Nov 2009)
&lt;br&gt;New Revision: 12312
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm
&lt;br&gt;Log:
&lt;br&gt;Fix broken exception handling when creating empty edits
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-21 15:31:43 UTC (rev 12311)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;@@ -152,7 +152,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$edit-&amp;gt;initialize(%opts);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;catch (MusicBrainz::Server::Edit::Exceptions::NoChange $e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;catch (MusicBrainz::Server::Edit::Exceptions::NoChanges $e) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm	2009-11-21 15:31:43 UTC (rev 12311)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;@@ -1,7 +1,7 @@
&lt;br&gt;&amp;nbsp;package MusicBrainz::Server::Edit::Exceptions;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;use Exception::Class (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'MusicBrainz::Server::Edit::Exception::NoChanges',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'MusicBrainz::Server::Edit::Exceptions::NoChanges',
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm	2009-11-21 15:31:43 UTC (rev 12311)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm	2009-11-21 16:11:26 UTC (rev 12312)
&lt;br&gt;@@ -43,7 +43,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Edit::Exception::NoChanges-&amp;gt;throw unless keys %$new &amp;&amp; keys %$old;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Edit::Exceptions::NoChanges-&amp;gt;throw unless keys %$new &amp;&amp; keys %$old;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $old,
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26457952&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12312---in-mb_server-trunk-lib-MusicBrainz-Server%3A-Data-Edit-tp26457952p26457952.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26457602</id>
	<title>r12311 - mb_server/trunk</title>
	<published>2009-11-21T07:31:44Z</published>
	<updated>2009-11-21T07:31:44Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-21 15:31:43 +0000 (Sat, 21 Nov 2009)
&lt;br&gt;New Revision: 12311
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/Makefile.PL
&lt;br&gt;Log:
&lt;br&gt;Add Test::Aggregate to the Makefile
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/Makefile.PL
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/Makefile.PL	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;+++ mb_server/trunk/Makefile.PL	2009-11-21 15:31:43 UTC (rev 12311)
&lt;br&gt;@@ -71,6 +71,7 @@
&lt;br&gt;&amp;nbsp;recommends 'Apache::Session::File';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;build_requires 'Test::Differences';
&lt;br&gt;+build_requires 'Test::Aggregate';
&lt;br&gt;&amp;nbsp;build_requires 'XML::Parser';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;catalyst;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26457602&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12311---mb_server-trunk-tp26457602p26457602.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26454270</id>
	<title>r12310 - in mb_server/trunk: lib/MusicBrainz/Server/Entity root/artist root/components root/label t</title>
	<published>2009-11-20T23:02:56Z</published>
	<updated>2009-11-20T23:02:56Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: warp
&lt;br&gt;Date: 2009-11-21 07:02:56 +0000 (Sat, 21 Nov 2009)
&lt;br&gt;New Revision: 12310
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Entity/AgeRole.pm
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Entity/Artist.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Entity/Label.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/artist/layout.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/components/common-macros.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/label/layout.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/entity_artist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/entity_label.t
&lt;br&gt;Log:
&lt;br&gt;This fixes #172, see review 460.
&lt;br&gt;&lt;br&gt;Merge branch '172b'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Entity/Artist.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Entity/Artist.pm	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Entity/Artist.pm	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -62,6 +62,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { MusicBrainz::Server::Entity::PartialDate-&amp;gt;new() },
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+with 'MusicBrainz::Server::Entity::AgeRole';
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has 'country_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Entity/Label.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Entity/Label.pm	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Entity/Label.pm	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -60,6 +60,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { MusicBrainz::Server::Entity::PartialDate-&amp;gt;new() },
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+with 'MusicBrainz::Server::Entity::AgeRole';
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has 'country_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/artist/layout.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/artist/layout.tt	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/root/artist/layout.tt	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -14,6 +14,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% WRAPPER 'layout/sidebar/property.tt' label=l('Active:') %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% artist.begin_date.format or l(&amp;quot;present&amp;quot;) %] &amp;mdash;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% artist.end_date.format or l(&amp;quot;present&amp;quot;) %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% IF artist.has_age %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ([% display_age (artist.age) %])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[%- END -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% INCLUDE 'layout/sidebar/property.tt' label=l('Country:')
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/components/common-macros.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/components/common-macros.tt	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/root/components/common-macros.tt	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -29,6 +29,12 @@
&lt;br&gt;&amp;nbsp;[%- MACRO ln(text, plural, num, args) BLOCK;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;c.ngettext(text, plural, num, args);
&lt;br&gt;&amp;nbsp;END; -%]
&lt;br&gt;+[%- MACRO display_age(age) BLOCK -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[%- IF age.0 -%][%- ln('{num} year', '{num}&amp;nbsp;years', years, { num =&amp;gt; age.0 }) -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[%- ELSIF age.1 -%][%- ln('{num} month', '{num}&amp;nbsp;months', months, { num =&amp;gt; age.1 }) -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[%- ELSE -%][%- ln('{num} day', '{num}&amp;nbsp;days', days, { num =&amp;gt; age.2 }) -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[%- END -%]
&lt;br&gt;+[%- END -%]
&lt;br&gt;&amp;nbsp;[%- MACRO entity_link(entity, noicon) IF entity -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[%- mpclass = entity.has_mod_pending ? ' class=&amp;quot;mp&amp;quot;' : '' -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[%- IF entity.entity_type == &amp;quot;url&amp;quot; -%]
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/label/layout.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/label/layout.tt	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/root/label/layout.tt	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -9,6 +9,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% WRAPPER 'layout/sidebar/property.tt' label=l('Active:') %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% label.begin_date.format or l(&amp;quot;present&amp;quot;) %] &amp;mdash;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% label.end_date.format or l(&amp;quot;present&amp;quot;) %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% IF label.has_age %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ([% display_age (label.age) %])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[%- END -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% INCLUDE 'layout/sidebar/property.tt' label=l('Country:')
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/entity_artist.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/entity_artist.t	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/t/entity_artist.t	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -1,6 +1,7 @@
&lt;br&gt;&amp;nbsp;use strict;
&lt;br&gt;&amp;nbsp;use warnings;
&lt;br&gt;-use Test::More tests =&amp;gt; 12;
&lt;br&gt;+use Test::More;
&lt;br&gt;+use Date::Calc qw(This_Year);
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::Artist';
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::ArtistType';
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::ArtistAlias';
&lt;br&gt;@@ -19,3 +20,59 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$artist-&amp;gt;edits_pending(2);
&lt;br&gt;&amp;nbsp;is( $artist-&amp;gt;edits_pending, 2 );
&lt;br&gt;+
&lt;br&gt;+ok( !$artist-&amp;gt;has_age );
&lt;br&gt;+
&lt;br&gt;+# testing -&amp;gt;age with exact dates
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;year &amp;nbsp;(1976); 
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;month (7); 
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;day &amp;nbsp; (23);
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;year &amp;nbsp;(1976); 
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;month (7); 
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;day &amp;nbsp; (24);
&lt;br&gt;+my @got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply ( \@got, [0, 0, 1], &amp;quot;Artist age 1 day&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;year &amp;nbsp;(1976); 
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;month (8); 
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;day &amp;nbsp; (1);
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [0, 0, 9], &amp;quot;Artist age 9 days&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;month (11); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [0, 3, 9], &amp;quot;Artist age 3 months&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;year (1553); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [423, 3, 9], &amp;quot;Artist age 423 years&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;year (2140); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [587, 3, 9], &amp;quot;Artist age 587 years&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+# testing -&amp;gt;age with an empty end date.
&lt;br&gt;+$artist = MusicBrainz::Server::Entity::Artist-&amp;gt;new();
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;year &amp;nbsp;(This_Year() - 24); 
&lt;br&gt;+is( ($artist-&amp;gt;age)[0], 24, &amp;quot;Artist still alive, age 24 years&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+# testing -&amp;gt;age with partial dates
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;year &amp;nbsp;(2011); 
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;year &amp;nbsp;(2012); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [1, 0, 0], &amp;quot;Artist with partial dates, age 1 year&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;month (12); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [1, 11, 0], &amp;quot;Artist with partial dates, age 1 year&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;month (12);
&lt;br&gt;+$artist-&amp;gt;end_date-&amp;gt;month (1); 
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [0, 1, 0], &amp;quot;Artist with partial dates, age 1 month&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+$artist-&amp;gt;begin_date-&amp;gt;day (31);
&lt;br&gt;+@got = $artist-&amp;gt;age;
&lt;br&gt;+is_deeply ( \@got, [0, 0, 1], &amp;quot;Artist with partial dates, age 1 day&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/entity_label.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/entity_label.t	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;+++ mb_server/trunk/t/entity_label.t	2009-11-21 07:02:56 UTC (rev 12310)
&lt;br&gt;@@ -1,6 +1,6 @@
&lt;br&gt;&amp;nbsp;use strict;
&lt;br&gt;&amp;nbsp;use warnings;
&lt;br&gt;-use Test::More tests =&amp;gt; 14;
&lt;br&gt;+use Test::More;
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::Label';
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::LabelType';
&lt;br&gt;&amp;nbsp;use_ok 'MusicBrainz::Server::Entity::LabelAlias';
&lt;br&gt;@@ -23,3 +23,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$label-&amp;gt;edits_pending(2);
&lt;br&gt;&amp;nbsp;is( $label-&amp;gt;edits_pending, 2 );
&lt;br&gt;+
&lt;br&gt;+ok( !$label-&amp;gt;has_age );
&lt;br&gt;+$label-&amp;gt;begin_date-&amp;gt;year &amp;nbsp;(1976); 
&lt;br&gt;+$label-&amp;gt;end_date-&amp;gt;year &amp;nbsp;(2009); 
&lt;br&gt;+my @got = $label-&amp;gt;age;
&lt;br&gt;+is_deeply( \@got, [33, 0, 0], &amp;quot;Label age 33 years&amp;quot; );
&lt;br&gt;+
&lt;br&gt;+done_testing;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26454270&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12310---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Entity-root-artist-root-components-root-label-t-tp26454270p26454270.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26447009</id>
	<title>r12309 - in mb_server/trunk: lib/MusicBrainz/Server/Edit/Medium root/release</title>
	<published>2009-11-20T09:17:54Z</published>
	<updated>2009-11-20T09:17:54Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 17:17:54 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12309
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/release/edit.tt
&lt;br&gt;Log:
&lt;br&gt;Submitting release editor works
&lt;br&gt;&lt;br&gt;Conflicts:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; root/release/edit.tt
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 17:13:15 UTC (rev 12308)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;@@ -13,12 +13,13 @@
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit Medium' }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{medium_id} ] } }
&lt;br&gt;+sub related_entities { { release =&amp;gt; [ shift-&amp;gt;release_id ] } }
&lt;br&gt;&amp;nbsp;sub models { [qw( Medium )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;subtype 'MediumHash'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; as Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; Optional[Int],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Optional[Str],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Nullable[Str],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format_id =&amp;gt; Nullable[Int],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -30,6 +31,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+has 'release_id' =&amp;gt; (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;+);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub foreign_keys {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{format_id}) {
&lt;br&gt;@@ -75,6 +81,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $medium = delete $opts{medium}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or die 'You must specify the medium to edit';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$self-&amp;gt;release_id($medium-&amp;gt;release_id);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium =&amp;gt; $medium-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($medium, %opts)
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/release/edit.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/release/edit.tt	2009-11-20 17:13:15 UTC (rev 12308)
&lt;br&gt;+++ mb_server/trunk/root/release/edit.tt	2009-11-20 17:17:54 UTC (rev 12309)
&lt;br&gt;@@ -34,6 +34,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% medium_field = form.field('mediums').field(loop.index) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.hidden(medium_field.field('id'));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; r.hidden(medium_field.field('tracklist').field('id')) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table class=&amp;quot;medium tbl&amp;quot; id=&amp;quot;[% medium_field.html_name %]&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;thead&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr class=&amp;quot;subh&amp;quot;&amp;gt;
&lt;br&gt;@@ -61,7 +63,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;position&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.text(track_field.field('position'), class =&amp;gt; 'pos') %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% r.text(track_field.field('name'), class =&amp;gt; 'track-name') %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.hidden(track_field.field('id'));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; r.text(track_field.field('name'), class =&amp;gt; 'track-name') %]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% r.artist_credit_editor(track_field.field('artist_credit')) %]&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% r.text(track_field.field('length'), class =&amp;gt; 'track-length', size =&amp;gt; 5) &amp;nbsp;%]&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26447009&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12309---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Edit-Medium-root-release-tp26447009p26447009.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26446948</id>
	<title>r12308 - in mb_server/trunk/lib/MusicBrainz/Server: Data Edit/Track</title>
	<published>2009-11-20T09:13:16Z</published>
	<updated>2009-11-20T09:13:16Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 17:13:15 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12308
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Release.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;Log:
&lt;br&gt;Relate track edits to releases
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Release.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Release.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Release.pm	2009-11-20 17:13:15 UTC (rev 12308)
&lt;br&gt;@@ -233,6 +233,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}, @_);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub find_ids_by_track_ids
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, @ids) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $query = 'SELECT release
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FROM medium
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WHERE tracklist IN (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SELECT tracklist FROM track
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WHERE id IN (' . placeholders(@ids) . ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $sql = Sql-&amp;gt;new($self-&amp;gt;c-&amp;gt;dbh);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $sql-&amp;gt;select_single_column_array($query, @ids);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;__PACKAGE__-&amp;gt;meta-&amp;gt;make_immutable;
&lt;br&gt;&amp;nbsp;no Moose;
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 17:13:15 UTC (rev 12308)
&lt;br&gt;@@ -20,7 +20,15 @@
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_TRACK_EDIT }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Track =&amp;gt; [ shift-&amp;gt;track_id ] } }
&lt;br&gt;+sub related_entities
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release =&amp;gt; $self-&amp;gt;c-&amp;gt;model('Release')-&amp;gt;find_ids_by_track_ids($self-&amp;gt;track_id)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has 'track_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26446948&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12308---in-mb_server-trunk-lib-MusicBrainz-Server%3A-Data-Edit-Track-tp26446948p26446948.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26446945</id>
	<title>r12307 - in mb_server/trunk: lib/MusicBrainz/Server lib/MusicBrainz/Server/Controller lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit lib/MusicBrainz/Server/Edit/Medium lib/MusicBrainz/Server/Edit/Release lib/MusicBrainz/Server/Edit/Track lib/MusicBrainz/Server/Edit/Tracklist root/edit root/edit/details t t/actions/release_editor t/controllers t/sql</title>
	<published>2009-11-20T09:13:06Z</published>
	<updated>2009-11-20T09:13:06Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 17:13:05 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12307
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/add_track.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/create_medium.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/delete_medium.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/delete_track.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/edit_medium.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/edit_release.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/details/edit_track.tt
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Entity.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/EntityCacheBase.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Create.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Delete.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/AddTrack.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/DeleteTrack.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Utils.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/edit/info.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/add-medium-existing.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/add-medium-new-tracklist.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/add-track.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/delete-medium.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/delete-track.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/edit-medium.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/edit-track.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/header.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/actions/release_editor/sidebar.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/controllers/release_editor.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_medium_create.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_medium_delete.t
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/release_editor.sql
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/sql/tracklist.sql
&lt;br&gt;Log:
&lt;br&gt;Templates to show all the edits of the release editor
&lt;br&gt;&lt;br&gt;Merge branch 'release-editor-templates'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Release.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -348,7 +348,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('Edit')-&amp;gt;create(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; $c-&amp;gt;user-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;edit_type =&amp;gt; $EDIT_TRACKLIST_DELETETRACK,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track_id =&amp;gt; $track-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track =&amp;gt; $track
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;@@ -393,7 +393,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('Edit')-&amp;gt;create(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; $c-&amp;gt;user-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;edit_type =&amp;gt; $EDIT_MEDIUM_DELETE,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; $medium-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium =&amp;gt; $medium
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -2,6 +2,7 @@
&lt;br&gt;&amp;nbsp;use Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;use Carp qw( croak );
&lt;br&gt;+use Data::OptList;
&lt;br&gt;&amp;nbsp;use DateTime;
&lt;br&gt;&amp;nbsp;use TryCatch;
&lt;br&gt;&amp;nbsp;use List::MoreUtils qw( uniq zip );
&lt;br&gt;@@ -219,11 +220,45 @@
&lt;br&gt;&amp;nbsp;sub load_all
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self, @edits) = @_;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my @models = uniq map { @{ $_-&amp;gt;models } } @edits;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for my $model (@models) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $objects_to_load &amp;nbsp;= {}; # Objects loaded with get_by_id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $post_load_models = {}; # Objects loaded with -&amp;gt;load (after get_by_id)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for my $edit (@edits) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $edit_references = $edit-&amp;gt;foreign_keys;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (my ($model, $ids) = each %$edit_references) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$objects_to_load-&amp;gt;{$model} ||= [];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ids = Data::OptList::mkopt_hash($ids);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (my ($object_id, $extra_models) = each %$ids) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push @{ $objects_to_load-&amp;gt;{$model} }, $object_id;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$post_load_models-&amp;gt;{$model}-&amp;gt;{$object_id} = $extra_models
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if $extra_models &amp;&amp; @$extra_models;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $loaded = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $load_arguments = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (my ($model, $ids) = each %$objects_to_load) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $m = ref $model ? $model : $self-&amp;gt;c-&amp;gt;model($model);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$m-&amp;gt;load(@edits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$loaded-&amp;gt;{$model} = $m-&amp;gt;get_by_ids(@$ids);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Now we need to load any extra information about each object
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for my $id (@$ids) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for my $extra (@{ $post_load_models-&amp;gt;{$model}-&amp;gt;{$id} }) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$load_arguments-&amp;gt;{$extra} ||= [];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push @{ $load_arguments-&amp;gt;{$extra} }, $loaded-&amp;gt;{$model}-&amp;gt;{$id};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (my ($model, $objs) = each %$load_arguments) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;c-&amp;gt;model($model)-&amp;gt;load(@$objs);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for my $edit (@edits) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$edit-&amp;gt;display_data($edit-&amp;gt;build_display_data($loaded));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;# Runs it's own transaction
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Entity.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Entity.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Entity.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -68,6 +68,8 @@
&lt;br&gt;&amp;nbsp;sub _get_by_keys
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self, $key, @ids) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@ids = grep { defined &amp;&amp; $_ } @ids;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return unless @ids;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $query = &amp;quot;SELECT &amp;quot; . $self-&amp;gt;_columns . 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; FROM &amp;quot; . $self-&amp;gt;_table .
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; WHERE $key IN (&amp;quot; . placeholders(@ids) . &amp;quot;)&amp;quot;;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/EntityCacheBase.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/EntityCacheBase.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/EntityCacheBase.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -6,6 +6,7 @@
&lt;br&gt;&amp;nbsp;around 'get_by_ids' =&amp;gt; sub
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($orig, $self, @ids) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return unless grep { defined &amp;&amp; $_ } @ids;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my %ids = map { $_ =&amp;gt; 1 } @ids;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my @keys = map { $self-&amp;gt;_id_cache_prefix . ':' . $_ } keys %ids;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $cache = $self-&amp;gt;c-&amp;gt;cache($self-&amp;gt;_id_cache_prefix);
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Create.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Create.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Create.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -14,18 +14,12 @@
&lt;br&gt;&amp;nbsp;sub edit_name { &amp;quot;Create Medium&amp;quot; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;medium_id ] } }
&lt;br&gt;-sub models { [qw( Medium )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has 'medium_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is &amp;nbsp;=&amp;gt; 'rw'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'medium' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Medium',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Optional[Str],
&lt;br&gt;@@ -36,12 +30,31 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Release =&amp;gt; { $self-&amp;gt;data-&amp;gt;{release_id} =&amp;gt; [ 'ArtistCredit' ] },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MediumFormat =&amp;gt; { $self-&amp;gt;data-&amp;gt;{format_id} =&amp;gt; [] }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; $self-&amp;gt;data-&amp;gt;{name},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; $loaded-&amp;gt;{MediumFormat}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{format_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position &amp;nbsp; &amp;nbsp; =&amp;gt; $self-&amp;gt;data-&amp;gt;{position},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; $loaded-&amp;gt;{Release}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{release_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; $self-&amp;gt;data-&amp;gt;{tracklist_id},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub insert
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $medium = $self-&amp;gt;c-&amp;gt;model('Medium')-&amp;gt;insert( $self-&amp;gt;data );
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;medium($medium);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;medium_id($medium-&amp;gt;id);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Delete.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Delete.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Delete.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -1,9 +1,10 @@
&lt;br&gt;&amp;nbsp;package MusicBrainz::Server::Edit::Medium::Delete;
&lt;br&gt;&amp;nbsp;use Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-use MooseX::Types::Moose qw( Int );
&lt;br&gt;+use MooseX::Types::Moose qw( Int Str );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_MEDIUM_DELETE );
&lt;br&gt;+use MusicBrainz::Server::Edit::Types qw( Nullable );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Entity::Types;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit';
&lt;br&gt;@@ -11,31 +12,57 @@
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_MEDIUM_DELETE }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Delete medium' }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;medium_id ] } }
&lt;br&gt;-sub models { [qw( Medium )] }
&lt;br&gt;+sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{medium_id} ] } }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'medium_id' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa &amp;nbsp; &amp;nbsp; =&amp;gt; 'Int',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'rw',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;lazy &amp;nbsp; &amp;nbsp;=&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { shift-&amp;gt;data-&amp;gt;{medium_id} }
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;-has 'medium' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Medium',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; Dict[
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; Int
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; Int,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format_id =&amp;gt; Nullable[Int],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; Int,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Nullable[Str],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; Int,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_id =&amp;gt; Int
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MediumFormat =&amp;gt; { $self-&amp;gt;data-&amp;gt;{format_id} =&amp;gt; [] },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Release =&amp;gt; { $self-&amp;gt;data-&amp;gt;{release_id} =&amp;gt; [qw( ArtistCredit )] }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format =&amp;gt; $loaded-&amp;gt;{MediumFormat}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{format_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release =&amp;gt; $loaded-&amp;gt;{Release}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{release_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map { $_ =&amp;gt; $self-&amp;gt;data-&amp;gt;{$_} } qw( name position tracklist_id )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub initialize
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, %args) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $medium = $args{medium} or die 'Missing required medium object';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; $medium-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format_id =&amp;gt; $medium-&amp;gt;format_id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; $medium-&amp;gt;tracklist_id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; $medium-&amp;gt;name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; $medium-&amp;gt;position,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_id =&amp;gt; $medium-&amp;gt;release_id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub accept
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;c-&amp;gt;model('Medium')-&amp;gt;delete($self-&amp;gt;medium_id);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$self-&amp;gt;c-&amp;gt;model('Medium')-&amp;gt;delete($self-&amp;gt;data-&amp;gt;{medium_id});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;__PACKAGE__-&amp;gt;meta-&amp;gt;make_immutable;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -12,24 +12,12 @@
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_MEDIUM_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit Medium' }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;medium_id ] } }
&lt;br&gt;+sub alter_edit_pending { { Medium =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{medium_id} ] } }
&lt;br&gt;&amp;nbsp;sub models { [qw( Medium )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'medium_id' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;lazy =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { shift-&amp;gt;data-&amp;gt;{medium} }
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;-has 'medium' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;subtype 'MediumHash'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; as Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; Optional[Int],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; Optional[Int],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Optional[Str],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;format_id =&amp;gt; Nullable[Int],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;];
&lt;br&gt;@@ -42,13 +30,51 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{format_id}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MediumFormat =&amp;gt; {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data-&amp;gt;{new}{format_id} =&amp;gt; [],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data-&amp;gt;{old}{format_id} =&amp;gt; [],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return { };
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = {};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{format_id}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{format} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; $loaded-&amp;gt;{MediumFormat}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{new}{format_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $loaded-&amp;gt;{MediumFormat}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{old}{format_id} }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for my $attribute (qw( name position )) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{$attribute}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{$attribute} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; $self-&amp;gt;data-&amp;gt;{new}{$attribute},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;data-&amp;gt;{old}{$attribute},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $data;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub initialize
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self, %opts) = @_;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $medium = delete $opts{medium}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or die 'You must specify the medium to edit';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;medium($medium);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium =&amp;gt; $medium-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($medium, %opts)
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -7,29 +7,27 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_RELEASE_EDIT );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::ArtistCredit;
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Release;
&lt;br&gt;-use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref partial_date_to_hash );
&lt;br&gt;+use MusicBrainz::Server::Data::Utils qw(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;artist_credit_to_ref
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;partial_date_to_hash
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;partial_date_from_row
&lt;br&gt;+);
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition Nullable PartialDateHash );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_display_data
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;load_artist_credit_definitions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;artist_credit_from_loaded_definition
&lt;br&gt;+);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_RELEASE_EDIT }
&lt;br&gt;-sub edit_name { 'Edit Release '}
&lt;br&gt;+sub edit_name { 'Edit Release' }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub related_entities { { release =&amp;gt; [ shift-&amp;gt;release_id ] } }
&lt;br&gt;-sub alter_edit_pending { { Release =&amp;gt; [ shift-&amp;gt;release_id ] } }
&lt;br&gt;-sub models { [qw( Release )] }
&lt;br&gt;+sub related_entities { { release =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{release} ] } }
&lt;br&gt;+sub alter_edit_pending { { Release =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{release} ] } }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'release_id' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;lazy =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { shift-&amp;gt;data-&amp;gt;{release} }
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;-has 'release' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;subtype 'ReleaseHash'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; as Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Optional[Str],
&lt;br&gt;@@ -53,6 +51,65 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $relations = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations($self-&amp;gt;data, $relations, (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReleasePackaging =&amp;gt; 'packaging_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReleaseStatus &amp;nbsp; &amp;nbsp;=&amp;gt; 'status_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReleaseGroup &amp;nbsp; &amp;nbsp; =&amp;gt; 'release_group_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Country &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'country_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Language &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'language_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Script &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'script_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{Artist} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;load_artist_credit_definitions($self-&amp;gt;data-&amp;gt;{$_}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} qw( new old )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $relations;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my %map = (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;packaging =&amp;gt; [ qw( packaging_id ReleasePackaging )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;status &amp;nbsp; &amp;nbsp;=&amp;gt; [ qw( status_id ReleaseStatus )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;group &amp;nbsp; &amp;nbsp; =&amp;gt; [ qw( release_group_id ReleaseGroup )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country &amp;nbsp; =&amp;gt; [ qw( country_id Country )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;language &amp;nbsp;=&amp;gt; [ qw( language_id Language )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;script &amp;nbsp; &amp;nbsp;=&amp;gt; [ qw( script_id Script )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;barcode &amp;nbsp; =&amp;gt; 'barcode',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment &amp;nbsp; =&amp;gt; 'comment',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = changed_display_data($self-&amp;gt;data, $loaded, %map);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{artist_credit} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{new}{artist_credit}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{old}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{date}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{date} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{new}{date}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; partial_date_from_row($self-&amp;gt;data-&amp;gt;{old}{date}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $data;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub _mapping
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (
&lt;br&gt;@@ -73,7 +130,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ac_data-&amp;gt;load($release);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;release($release);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release =&amp;gt; $release-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($release, %opts)
&lt;br&gt;@@ -89,7 +145,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my %data = %{ $self-&amp;gt;data-&amp;gt;{new} };
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$data{artist_credit} = $ac_data-&amp;gt;find_or_insert(@{ $data{artist_credit} });
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$release_data-&amp;gt;update($self-&amp;gt;release_id, \%data);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$release_data-&amp;gt;update($self-&amp;gt;data-&amp;gt;{release}, \%data);
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub _xml_arguments { return ForceArray =&amp;gt; [ 'artist_credit' ] }
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -1,12 +1,18 @@
&lt;br&gt;&amp;nbsp;package MusicBrainz::Server::Edit::Track::Edit;
&lt;br&gt;&amp;nbsp;use Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+use Moose::Util::TypeConstraints qw( as find_type_constraint subtype );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Moose qw( Int Str );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict Optional );
&lt;br&gt;-use Moose::Util::TypeConstraints qw( as find_type_constraint subtype );
&lt;br&gt;-use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_TRACK_EDIT );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref );
&lt;br&gt;+use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_display_data
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;load_artist_credit_definitions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;artist_credit_from_loaded_definition
&lt;br&gt;+);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -14,7 +20,6 @@
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_TRACK_EDIT }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub alter_edit_pending { { Track =&amp;gt; [ shift-&amp;gt;track_id ] } }
&lt;br&gt;-sub models { [qw( Track )] }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;has 'track_id' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;@@ -23,11 +28,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { shift-&amp;gt;data-&amp;gt;{track} }
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'track' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Track',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;subtype 'TrackHash',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;as Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Optional[Str],
&lt;br&gt;@@ -45,6 +45,46 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $relations = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations($self-&amp;gt;data, $relations,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Recording =&amp;gt; 'recording_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{Artist} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;load_artist_credit_definitions($self-&amp;gt;data-&amp;gt;{$_}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} qw( new old )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $relations;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $data = changed_display_data($self-&amp;gt;data, $loaded,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording &amp;nbsp; &amp;nbsp;=&amp;gt; [ qw( recording_id Recording )],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; 'tracklist_id',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position &amp;nbsp; &amp;nbsp; =&amp;gt; 'position',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (exists $self-&amp;gt;data-&amp;gt;{new}{artist_credit}) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$data-&amp;gt;{artist_credit} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{new}{artist_credit}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{old}{artist_credit})
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $data;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub _mapping
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return (
&lt;br&gt;@@ -63,7 +103,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;track_id($track-&amp;gt;id);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;track($track);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track =&amp;gt; $track-&amp;gt;id,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($track, %opts)
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/AddTrack.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/AddTrack.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/AddTrack.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -5,6 +5,7 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_TRACKLIST_ADDTRACK );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition Nullable );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw( load_artist_credit_definitions artist_credit_from_loaded_definition );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -18,11 +19,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'track' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; &amp;nbsp;'Track',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; Dict[
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; Int,
&lt;br&gt;@@ -34,6 +30,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;],
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Recording =&amp;gt; { $self-&amp;gt;data-&amp;gt;{recording_id} =&amp;gt; [] },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Artist =&amp;gt; { load_artist_credit_definitions($self-&amp;gt;data-&amp;gt;{artist_credit}) }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; $self-&amp;gt;data-&amp;gt;{name},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;length =&amp;gt; $self-&amp;gt;data-&amp;gt;{length},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tracklist_id =&amp;gt; $self-&amp;gt;data-&amp;gt;{tracklist_id},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{artist_credit}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording =&amp;gt; $loaded-&amp;gt;{Recording}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{recording_id} }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub insert
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;@@ -54,7 +72,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $track = $self-&amp;gt;c-&amp;gt;model('Track')-&amp;gt;insert(\%data);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$self-&amp;gt;track($track);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;track_id($track-&amp;gt;id);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/DeleteTrack.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/DeleteTrack.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Tracklist/DeleteTrack.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -1,36 +1,66 @@
&lt;br&gt;&amp;nbsp;package MusicBrainz::Server::Edit::Tracklist::DeleteTrack;
&lt;br&gt;&amp;nbsp;use Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-use MooseX::Types::Moose qw( Int );
&lt;br&gt;+use MooseX::Types::Moose qw( Int Str );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_TRACKLIST_DELETETRACK );
&lt;br&gt;+use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref );
&lt;br&gt;+use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition Nullable );
&lt;br&gt;+use MusicBrainz::Server::Edit::Utils qw( load_artist_credit_definitions artist_credit_from_loaded_definition );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;extends 'MusicBrainz::Server::Edit';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_name { 'Delete Track' }
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_TRACKLIST_DELETETRACK }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub alter_edit_pending { { Track =&amp;gt; [ shift-&amp;gt;track_id ] } }
&lt;br&gt;-sub models { [qw( Track )] }
&lt;br&gt;+sub alter_edit_pending { { Track =&amp;gt; [ shift-&amp;gt;data-&amp;gt;{track_id} ] } }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-has 'track_id' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Int',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;lazy =&amp;gt; 1,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;default =&amp;gt; sub { shift-&amp;gt;data-&amp;gt;{track_id} }
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;-has 'track' =&amp;gt; (
&lt;br&gt;- &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Track',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw'
&lt;br&gt;-);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;has '+data' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; Dict[
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track_id =&amp;gt; Int
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track_id =&amp;gt; Int,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; Str,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; ArtistCreditDefinition,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording_id =&amp;gt; Int,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;],
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub foreign_keys
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Artist =&amp;gt; { load_artist_credit_definitions($self-&amp;gt;data-&amp;gt;{artist_credit}) },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Recording =&amp;gt; { $self-&amp;gt;data-&amp;gt;{recording_id} =&amp;gt; [] }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; artist_credit_from_loaded_definition($loaded, $self-&amp;gt;data-&amp;gt;{artist_credit}),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording =&amp;gt; $loaded-&amp;gt;{Recording}-&amp;gt;{ $self-&amp;gt;data-&amp;gt;{recording_id} },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map { $_ =&amp;gt; $self-&amp;gt;data-&amp;gt;{$_} } qw( length name )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub initialize
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, %args) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $track = delete $args{track} or die &amp;quot;Required 'track' object&amp;quot;;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!$track-&amp;gt;artist_credit)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;c-&amp;gt;model('ArtistCredit')-&amp;gt;load($track);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track_id =&amp;gt; $track-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; $track-&amp;gt;name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; artist_credit_to_ref($track-&amp;gt;artist_credit),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording_id =&amp;gt; $track-&amp;gt;recording_id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub accept
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $self = shift;
&lt;br&gt;@@ -40,6 +70,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$track-&amp;gt;position + 1, -1);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub _xml_arguments { ForceArray =&amp;gt; [ 'artist_credit' ] }
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;__PACKAGE__-&amp;gt;meta-&amp;gt;make_immutable;
&lt;br&gt;&amp;nbsp;no Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Utils.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Utils.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Utils.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -2,12 +2,19 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;use strict;
&lt;br&gt;&amp;nbsp;use warnings;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( partial_date_to_hash );
&lt;br&gt;+use MusicBrainz::Server::Entity::ArtistCredit;
&lt;br&gt;+use MusicBrainz::Server::Entity::ArtistCreditName;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;use base 'Exporter';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;our @EXPORT_OK = qw(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;date_closure
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;load_artist_credit_definitions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;artist_credit_from_loaded_definition
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_relations
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;changed_display_data
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub date_closure
&lt;br&gt;@@ -18,6 +25,61 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return partial_date_to_hash($a-&amp;gt;$attr); 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+sub load_artist_credit_definitions
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return map { $_-&amp;gt;{artist} =&amp;gt; [] } map { @{ $_ } } @_;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub artist_credit_from_loaded_definition
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($loaded, $definition) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return MusicBrainz::Server::Entity::ArtistCredit-&amp;gt;new(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;names =&amp;gt; [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Entity::ArtistCreditName-&amp;gt;new(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; $_-&amp;gt;{name},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist =&amp;gt; $loaded-&amp;gt;{Artist}-&amp;gt;{ $_-&amp;gt;{artist} }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} @$definition,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub changed_relations
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($data, $relations, %mapping) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (my ($model, $field) = each %mapping) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next unless exists $data-&amp;gt;{new}{$field};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{$model} ||= {};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{$model}-&amp;gt;{ $data-&amp;gt;{new}{$field} } = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if defined $data-&amp;gt;{new}{$field};
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relations-&amp;gt;{$model}-&amp;gt;{ $data-&amp;gt;{old}{$field} } = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if defined $data-&amp;gt;{old}{$field};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $relations;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+sub changed_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($data, $loaded, %mapping) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $display = {};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while (my ($tt_field, $accessor) = each %mapping) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my ($field, $model) = ref $accessor ? @$accessor : ( $accessor );
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;next unless exists $data-&amp;gt;{new}{$field};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my ($old, $new) = ($data-&amp;gt;{old}{$field}, $data-&amp;gt;{new}{$field});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$display-&amp;gt;{$tt_field} = {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; defined $new ? (defined $model ? $loaded-&amp;gt;{$model}-&amp;gt;{$new} : $new) : undef,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; defined $old ? (defined $model ? $loaded-&amp;gt;{$model}-&amp;gt;{$old} : $old) : undef,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return $display;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;=head1 COPYRIGHT
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit.pm	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -81,6 +81,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;&amp;nbsp;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+has 'display_data' =&amp;gt; (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'HashRef',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;predicate =&amp;gt; 'is_loaded'
&lt;br&gt;+);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;has 'auto_edit' =&amp;gt; (
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;isa =&amp;gt; 'Bool',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;is =&amp;gt; 'rw',
&lt;br&gt;@@ -223,16 +229,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-=head2 models
&lt;br&gt;+sub foreign_keys { { } }
&lt;br&gt;+sub build_display_data
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $loaded) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return { };
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-A list of all models that should attempt to load additional data for this edit.
&lt;br&gt;-
&lt;br&gt;-Returns an array ref of model names
&lt;br&gt;-
&lt;br&gt;-=cut
&lt;br&gt;-
&lt;br&gt;-sub models { return [] }
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;sub accept { }
&lt;br&gt;&amp;nbsp;sub reject { }
&lt;br&gt;&amp;nbsp;sub insert { }
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/edit/info.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/edit/info.tt	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/root/edit/info.tt	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -2,6 +2,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Edit ID:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% link_edit(edit) %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th&amp;gt;[% l('Editor:') %]&amp;lt;/th&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[%- link_editor(edit.editor) -%]&amp;lt;/td&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/add-medium-existing.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/add-medium-existing.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/add-medium-existing.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -34,4 +34,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; 'Unreleased Hits',
&lt;br&gt;&amp;nbsp;}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..is valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('Unreleased Hits', '..contains medium name');
&lt;br&gt;+$mech-&amp;gt;content_contains('3', '..contains medium position'); # This is a really sloppy test...
&lt;br&gt;+$mech-&amp;gt;content_contains('Aerial', '..contains release name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/release/f205627f-b70a-409d-adbe-66289b614e80', '...with a link to the release');
&lt;br&gt;+$mech-&amp;gt;content_contains('Artist', '..contains release artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/945c079d-374e-4436-9448-da92dedef3cf', '...with a link to the artist');
&lt;br&gt;+$mech-&amp;gt;content_contains('/tracklist/3', '..contains a link to the tracklist');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/add-medium-new-tracklist.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/add-medium-new-tracklist.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/add-medium-new-tracklist.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -35,4 +35,14 @@
&lt;br&gt;&amp;nbsp;is($edit-&amp;gt;data-&amp;gt;{name}, 'Unreleased Hits', '...edit has the right data');
&lt;br&gt;&amp;nbsp;ok($edit-&amp;gt;data-&amp;gt;{tracklist_id}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..is valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('Unreleased Hits', '..contains medium name');
&lt;br&gt;+$mech-&amp;gt;content_contains('5', '..contains medium position'); # This is a really sloppy test...
&lt;br&gt;+$mech-&amp;gt;content_contains('Format', '..contains format name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Aerial', '..contains release name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/release/f205627f-b70a-409d-adbe-66289b614e80', '...with a link to the release');
&lt;br&gt;+$mech-&amp;gt;content_contains('Artist', '..contains release artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/945c079d-374e-4436-9448-da92dedef3cf', '...with a link to the artist');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/add-track.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/add-track.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/add-track.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -36,4 +36,22 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; 4
&lt;br&gt;&amp;nbsp;}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+my $track = $c-&amp;gt;model('Track')-&amp;gt;get_by_id($edit-&amp;gt;track_id);
&lt;br&gt;+
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..xml is valid');
&lt;br&gt;+$mech-&amp;gt;content_contains('New track', '..contains track name');
&lt;br&gt;+$mech-&amp;gt;content_contains('A new recording was created for this track',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'..contains indicitation that this is a new recording');
&lt;br&gt;+$mech-&amp;gt;content_contains('/tracklist/1', '..contains a link to the tracklist');
&lt;br&gt;+$mech-&amp;gt;content_contains('The Edit Ninja', '..contains the artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/9f5ad190-caee-11de-8a39-0800200c9a66', '...and a link to the artist');
&lt;br&gt;+
&lt;br&gt;+TODO:
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;local $TODO = 'Length in the edit';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ok(exists $edit-&amp;gt;data-&amp;gt;{length});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;$mech-&amp;gt;content_contains('4:20', '..contains the track length');
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/delete-medium.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/delete-medium.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/delete-medium.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -23,8 +23,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;my $edit = MusicBrainz::Server::Test-&amp;gt;get_latest_edit($c);
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Medium::Delete', '...edit is a delete-medium edit');
&lt;br&gt;-is_deeply($edit-&amp;gt;data, {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; 1,
&lt;br&gt;-}, '...edit has the right data');
&lt;br&gt;+is($edit-&amp;gt;data-&amp;gt;{medium_id}, 1, '...edit has the correct medium id');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch edit page');
&lt;br&gt;+$mech-&amp;gt;content_contains('A Sea of Honey', '..contains old medium name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Format', '..contains old medium format');
&lt;br&gt;+$mech-&amp;gt;content_contains('1', '..contains old medium position');
&lt;br&gt;+$mech-&amp;gt;content_contains('/tracklist/1', '..contains link to show the tracklist for the medium');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/delete-track.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/delete-track.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/delete-track.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -15,7 +15,6 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/release/f205627f-b70a-409d-adbe-66289b614e80/edit', 'deleting tracks');
&lt;br&gt;&amp;nbsp;my $request = POST $mech-&amp;gt;uri, [
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.id' =&amp;gt; '1',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.name' =&amp;gt; 'Renamed track',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.id' =&amp;gt; '1',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.deleted' =&amp;gt; '1',
&lt;br&gt;&amp;nbsp;];
&lt;br&gt;@@ -25,8 +24,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;my $edit = MusicBrainz::Server::Test-&amp;gt;get_latest_edit($c);
&lt;br&gt;&amp;nbsp;isa_ok($edit, 'MusicBrainz::Server::Edit::Tracklist::DeleteTrack', '...edit is a delete-track edit');
&lt;br&gt;-is_deeply($edit-&amp;gt;data, {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;track_id =&amp;gt; 1,
&lt;br&gt;-}, '...edit has the right data');
&lt;br&gt;+is($edit-&amp;gt;data-&amp;gt;{track_id}, 1, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('King of the Mountain', '..contains track name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/recording/54b9d183-7dab-42ba-94a3-7388a66604b8', '..contains a link to the recording');
&lt;br&gt;+$mech-&amp;gt;content_contains('Artist', '..contains the artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('/artist/945c079d-374e-4436-9448-da92dedef3cf', '...with a link to the artist');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/edit-medium.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/edit-medium.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/edit-medium.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -39,4 +39,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;+use Data::Dumper;
&lt;br&gt;+warn Dumper $edit-&amp;gt;display_data;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id);
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('Renamed Medium', '..has new medium name');
&lt;br&gt;+$mech-&amp;gt;content_contains('A Sea of Honey', '..has old medium name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Format', '..has old format name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Musical Box', '..has new format name');
&lt;br&gt;+$mech-&amp;gt;content_contains('2', '..has new position');
&lt;br&gt;+$mech-&amp;gt;content_contains('1', '..has old position');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/edit-track.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/edit-track.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/edit-track.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -17,7 +17,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.id' =&amp;gt; '1',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.name' =&amp;gt; 'Renamed track',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.artist_credit.names.0.name' =&amp;gt; 'The Edit Ninja',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.artist_credit.names.0.artist_id' =&amp;gt; '5',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.artist_credit.names.0.artist_id' =&amp;gt; '2',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.id' =&amp;gt; '1',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.length' =&amp;gt; '4:20',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.mediums.0.tracklist.tracks.0.position' =&amp;gt; '4',
&lt;br&gt;@@ -33,7 +33,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; 'Renamed track',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ name =&amp;gt; 'The Edit Ninja', artist =&amp;gt; 5 }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ name =&amp;gt; 'The Edit Ninja', artist =&amp;gt; 2 }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position =&amp;gt; 4,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;@@ -52,4 +52,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ok(exists $edit-&amp;gt;data-&amp;gt;{old}-&amp;gt;{length});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-done_testing;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('Renamed track', '..contains new track name');
&lt;br&gt;+$mech-&amp;gt;content_contains('King of the Mountain', '..contains old track name');
&lt;br&gt;+$mech-&amp;gt;content_contains('The Edit Ninja', '..contains new artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Artist', '..contains new artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('4', '..contains new position');
&lt;br&gt;+$mech-&amp;gt;content_contains('1', '..contains old position');
&lt;br&gt;+
&lt;br&gt;+done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/header.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/header.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/header.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -15,7 +15,7 @@
&lt;br&gt;&amp;nbsp;$mech-&amp;gt;get_ok('/release/f205627f-b70a-409d-adbe-66289b614e80/edit', 'edit header details');
&lt;br&gt;&amp;nbsp;my $request = POST $mech-&amp;gt;uri, [
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.artist_credit.names.0.name' =&amp;gt; 'Bob Marley',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.artist_credit.names.0.artist_id' =&amp;gt; 4,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-release.artist_credit.names.0.artist_id' =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.name' =&amp;gt; 'A new name',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.comment' =&amp;gt; 'With a fancy comment',
&lt;br&gt;&amp;nbsp;];
&lt;br&gt;@@ -29,7 +29,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;release =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit =&amp;gt; [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ name =&amp;gt; 'Bob Marley', artist =&amp;gt; 4 }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ name =&amp;gt; 'Bob Marley', artist =&amp;gt; 2 }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;],
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name =&amp;gt; 'A new name',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment =&amp;gt; 'With a fancy comment',
&lt;br&gt;@@ -43,4 +43,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}, '...edit has the right data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('A new name', '..contains new name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Aerial', '..contains old name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Artist', '..contains old artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Bob Marley', '..contains new artist name');
&lt;br&gt;+$mech-&amp;gt;content_contains('With a fancy comment', '..contains new comment');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/actions/release_editor/sidebar.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/actions/release_editor/sidebar.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/actions/release_editor/sidebar.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -22,9 +22,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.date.day' =&amp;gt; '25',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.packaging_id' =&amp;gt; '2',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.status_id', '2',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.language_id' =&amp;gt; '2',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.script_id' =&amp;gt; '2',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;'edit-release.country_id' =&amp;gt; '2',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-release.language_id' =&amp;gt; '1',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-release.script_id' =&amp;gt; '1',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'edit-release.country_id' =&amp;gt; '1',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;'edit-release.barcode' =&amp;gt; '9780596001087',
&lt;br&gt;&amp;nbsp;];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -43,9 +43,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;packaging_id =&amp;gt; 2,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;status_id =&amp;gt; 2,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;language_id =&amp;gt; 2,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;script_id =&amp;gt; 2,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country_id =&amp;gt; 2,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;language_id =&amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;script_id =&amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;country_id =&amp;gt; 1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;barcode =&amp;gt; '9780596001087',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; {
&lt;br&gt;@@ -63,4 +63,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}, '...edit has the correct data');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+$mech-&amp;gt;get_ok('/edit/' . $edit-&amp;gt;id, 'Fetch the edit page');
&lt;br&gt;+xml_ok($mech-&amp;gt;content, '..valid xml');
&lt;br&gt;+$mech-&amp;gt;content_contains('2009', '..contains new year');
&lt;br&gt;+$mech-&amp;gt;content_contains('10', '..contains new month');
&lt;br&gt;+$mech-&amp;gt;content_contains('25', '..contains new day');
&lt;br&gt;+$mech-&amp;gt;content_contains('2007', '..contains old year');
&lt;br&gt;+$mech-&amp;gt;content_contains('Digipak', '..contains new packaging name');
&lt;br&gt;+$mech-&amp;gt;content_contains('Promotion', '..contains new status name');
&lt;br&gt;+$mech-&amp;gt;content_contains('9780596001087', '..contains new barcode');
&lt;br&gt;+$mech-&amp;gt;content_contains('Ugar', '..contains new script');
&lt;br&gt;+$mech-&amp;gt;content_contains('German', '..contains new language');
&lt;br&gt;+$mech-&amp;gt;content_contains('United Kingdom', '..contains new country');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/controllers/release_editor.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/controllers/release_editor.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/controllers/release_editor.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -16,8 +16,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;startup &amp;nbsp;=&amp;gt; sub {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_test_server();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_test_database($c, '+tracklist');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_test_database($c, '+release_editor');
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_test_database($c, '+editor');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_test_database($c, '+release_editor');
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MusicBrainz::Server::Test-&amp;gt;prepare_raw_test_database($c);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;teardown =&amp;gt; sub { get('/logout') }
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_medium_create.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_medium_create.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/edit_medium_create.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -29,14 +29,12 @@
&lt;br&gt;&amp;nbsp;ok(defined $edit-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;$c-&amp;gt;model('Edit')-&amp;gt;load_all($edit);
&lt;br&gt;-ok(defined $edit-&amp;gt;medium);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;id, $edit-&amp;gt;medium_id);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;name, 'Studio');
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;format_id, 1);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;tracklist_id, 1);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;position, 1);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;release_id, 1);
&lt;br&gt;-is($edit-&amp;gt;medium-&amp;gt;edits_pending, 1);
&lt;br&gt;+ok($edit-&amp;gt;display_data);
&lt;br&gt;+is($edit-&amp;gt;display_data-&amp;gt;{name}, 'Studio');
&lt;br&gt;+is($edit-&amp;gt;display_data-&amp;gt;{position}, 1);
&lt;br&gt;+is($edit-&amp;gt;display_data-&amp;gt;{format}-&amp;gt;id, 1);
&lt;br&gt;+is($edit-&amp;gt;display_data-&amp;gt;{release}-&amp;gt;id, 1);
&lt;br&gt;+is($edit-&amp;gt;display_data-&amp;gt;{release}-&amp;gt;artist_credit-&amp;gt;name, 'Tosca');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;accept_edit($c, $edit);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/edit_medium_delete.t
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/edit_medium_delete.t	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/edit_medium_delete.t	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -37,9 +37,10 @@
&lt;br&gt;&amp;nbsp;done_testing;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub _create_edit {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $medium = $c-&amp;gt;model('Medium')-&amp;gt;get_by_id(1);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return $c-&amp;gt;model('Edit')-&amp;gt;create(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;edit_type =&amp;gt; $EDIT_MEDIUM_DELETE,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium_id =&amp;gt; 1,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium =&amp;gt; $medium,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editor_id =&amp;gt; 1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/sql/release_editor.sql
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/sql/release_editor.sql	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/sql/release_editor.sql	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -1,11 +1,17 @@
&lt;br&gt;&amp;nbsp;BEGIN;
&lt;br&gt;&amp;nbsp;SET client_min_messages TO 'warning';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+INSERT INTO language (id, isocode_3t, isocode_3b, isocode_2, name) VALUES (1, 'deu', 'ger', 'de', 'German');
&lt;br&gt;+INSERT INTO script (id, isocode, isonumber, name) VALUES (1, 'Ugar', '040', 'Ugaritic');
&lt;br&gt;+INSERT INTO country (id, isocode, name) VALUES (1, 'GB', 'United Kingdom');
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;INSERT INTO artist_name (id, name) VALUES (2, 'Other Artist');
&lt;br&gt;&amp;nbsp;INSERT INTO artist (id, name, sortname, gid) VALUES (2, 2, 2, '9f5ad190-caee-11de-8a39-0800200c9a66');
&lt;br&gt;&amp;nbsp;INSERT INTO tracklist (id) VALUES (3);
&lt;br&gt;&amp;nbsp;INSERT INTO track (id, tracklist, position, recording, name, artist_credit, length) VALUES (17, 3, 1, 1, 1, 1, 293720);
&lt;br&gt;&amp;nbsp;INSERT INTO medium_format (id, name) VALUES (2, 'Musical Box');
&lt;br&gt;+INSERT INTO release_packaging (id, name) VALUES (2, 'Digipak');
&lt;br&gt;+INSERT INTO release_status (id, name) VALUES (2, 'Promotion');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;ALTER SEQUENCE artist_name_id_seq RESTART 3;
&lt;br&gt;&amp;nbsp;ALTER SEQUENCE medium_id_seq RESTART 5;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/t/sql/tracklist.sql
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/t/sql/tracklist.sql	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;+++ mb_server/trunk/t/sql/tracklist.sql	2009-11-20 17:13:05 UTC (rev 12307)
&lt;br&gt;@@ -5,12 +5,17 @@
&lt;br&gt;&amp;nbsp;TRUNCATE artist_credit_name CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE artist_name CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE artist CASCADE;
&lt;br&gt;+TRUNCATE country CASCADE;
&lt;br&gt;+TRUNCATE language CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE medium CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE medium_format CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE recording CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE release CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE release_group CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE release_name CASCADE;
&lt;br&gt;+TRUNCATE release_status CASCADE;
&lt;br&gt;+TRUNCATE release_packaging CASCADE;
&lt;br&gt;+TRUNCATE script CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE tracklist CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE track CASCADE;
&lt;br&gt;&amp;nbsp;TRUNCATE track_name CASCADE;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26446945&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12307---in-mb_server-trunk%3A-lib-MusicBrainz-Server-lib-MusicBrainz-Server-Controller-lib-MusicBrainz-Server-Data-lib-MusicBrainz-Server-Edit-lib-MusicBrainz-Server-Edit-Medium-lib-MusicBrainz-Server-Edit-Release-lib-MusicBrainz-Server-Edit-Track-lib-MusicBrainz-Server-Edit-Tracklist-root-edit-root-edit-details-t-t-actions-release_editor-t-controllers-t-sql-tp26446945p26446945.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26446418</id>
	<title>r12306 - mb_server/trunk/lib/MusicBrainz/Server/Controller</title>
	<published>2009-11-20T08:40:52Z</published>
	<updated>2009-11-20T08:40:52Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 16:40:52 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12306
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Controller/Root.pm
&lt;br&gt;Log:
&lt;br&gt;Fix a test warning
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Root.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Root.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Root.pm	2009-11-20 16:40:52 UTC (rev 12306)
&lt;br&gt;@@ -106,7 +106,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ($c-&amp;gt;req-&amp;gt;user_agent =~ /MSIE/i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if ($c-&amp;gt;req-&amp;gt;user_agent &amp;&amp; $c-&amp;gt;req-&amp;gt;user_agent =~ /MSIE/i) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;stash-&amp;gt;{looks_like_ie} = 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;stash-&amp;gt;{needs_chrome} = !($c-&amp;gt;req-&amp;gt;user_agent =~ /chromeframe/i);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26446418&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12306---mb_server-trunk-lib-MusicBrainz-Server-Controller-tp26446418p26446418.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26446380</id>
	<title>r12305 - in mb_server/trunk: . lib/MusicBrainz/Server lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit lib/MusicBrainz/Server/Edit/Artist lib/MusicBrainz/Server/Edit/Label lib/MusicBrainz/Server/Edit/Medium lib/MusicBrainz/Server/Edit/Relationship lib/MusicBrainz/Server/Edit/Release lib/MusicBrainz/Server/Edit/ReleaseGroup lib/MusicBrainz/Server/Edit/Track lib/MusicBrainz/Server/Edit/Work t</title>
	<published>2009-11-20T08:37:56Z</published>
	<updated>2009-11-20T08:37:56Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 16:37:56 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12305
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/WithDifferences.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit_differences.t
&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/t/edit.t
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/Makefile.PL
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Link.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Data/Utils.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Artist/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm
&lt;br&gt;Log:
&lt;br&gt;Do not enter edits that make no changes
&lt;br&gt;&lt;br&gt;Merge branch 'difference-edits'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/Makefile.PL
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/Makefile.PL	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/Makefile.PL	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -46,6 +46,7 @@
&lt;br&gt;&amp;nbsp;requires 'Locale::Maketext::Extract::Plugin::TT2';
&lt;br&gt;&amp;nbsp;requires 'Locale::TextDomain' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '1.16';
&lt;br&gt;&amp;nbsp;requires 'List::MoreUtils' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; '0.22';
&lt;br&gt;+requires 'Match::Smart';
&lt;br&gt;&amp;nbsp;requires 'MIME::Lite' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '3.023';
&lt;br&gt;&amp;nbsp;requires 'Moose' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; '0.87';
&lt;br&gt;&amp;nbsp;requires 'MooseX::AttributeHelpers' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; '0.17';
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -148,7 +148,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or die &amp;quot;Could not lookup edit type for $type&amp;quot;;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $edit = $class-&amp;gt;new( editor_id =&amp;gt; $editor_id, c =&amp;gt; $self-&amp;gt;c );
&lt;br&gt;- &amp;nbsp; &amp;nbsp;$edit-&amp;gt;initialize(%opts);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$edit-&amp;gt;initialize(%opts);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;catch (MusicBrainz::Server::Edit::Exceptions::NoChange $e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $quality = $edit-&amp;gt;determine_quality;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my $conditions = $edit-&amp;gt;edit_conditions-&amp;gt;{$quality};
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Link.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Link.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Link.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -125,7 +125,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my @attrs = @{ $values-&amp;gt;{attributes} };
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my @attrs = $values-&amp;gt;{attributes} ? @{ $values-&amp;gt;{attributes} } : ();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;push @conditions, &amp;quot;attributecount = ?&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;push @args, scalar(@attrs);
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Utils.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Data/Utils.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Utils.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -7,12 +7,14 @@
&lt;br&gt;&amp;nbsp;use OSSP::uuid;
&lt;br&gt;&amp;nbsp;use Sql;
&lt;br&gt;&amp;nbsp;use Readonly;
&lt;br&gt;+use Storable;
&lt;br&gt;&amp;nbsp;use UNIVERSAL::require;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;our @EXPORT_OK = qw(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;artist_credit_to_ref
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;defined_hash
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;hash_to_row
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;deep_equal
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;add_partial_date_to_row
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;generate_gid
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;insert_and_create
&lt;br&gt;@@ -228,6 +230,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return $order_by;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub deep_equal {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($a, $b) = @_;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;local $Storable::canonical = 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (Storable::freeze($a) eq Storable::freeze($b));
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;=head1 COPYRIGHT
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Artist/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Artist/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Artist/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -10,7 +10,7 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Moose qw( Maybe Str Int );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict Optional );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_ARTIST_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { &amp;quot;Create Artist&amp;quot; }
&lt;br&gt;@@ -67,9 +67,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;artist($artist);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($artist, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist =&amp;gt; $artist-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artist =&amp;gt; $artist-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($artist, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Exceptions.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -1,5 +1,7 @@
&lt;br&gt;&amp;nbsp;package MusicBrainz::Server::Edit::Exceptions;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-use Exception::Class ();
&lt;br&gt;+use Exception::Class (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;'MusicBrainz::Server::Edit::Exception::NoChanges',
&lt;br&gt;+);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;1;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -9,7 +9,7 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Utils qw( date_closure );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( PartialDateHash Nullable );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_LABEL_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { &amp;quot;Edit Label&amp;quot; }
&lt;br&gt;@@ -65,9 +65,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;die &amp;quot;You must specify the label object to edit&amp;quot; unless defined $label;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($label, keys %args),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; \%args,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label =&amp;gt; $label-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label =&amp;gt; $label-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($label, %args)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Medium/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -7,7 +7,7 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( Nullable );
&lt;br&gt;&amp;nbsp;use Moose::Util::TypeConstraints qw( find_type_constraint subtype as );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_MEDIUM_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit Medium' }
&lt;br&gt;@@ -50,9 +50,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;medium($medium);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($medium, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium =&amp;gt; $medium-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($medium, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Relationship/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -9,7 +9,7 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Moose qw( ArrayRef Int Str );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_RELATIONSHIP_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { &amp;quot;Edit Relationship&amp;quot; }
&lt;br&gt;@@ -95,8 +95,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type0 =&amp;gt; $type0,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type1 =&amp;gt; $type1,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;relationship_id =&amp;gt; $relationship-&amp;gt;id,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($relationship-&amp;gt;link, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($relationship-&amp;gt;link, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -10,7 +10,7 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref partial_date_to_hash );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Edit::Types qw( ArtistCreditDefinition Nullable PartialDateHash );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_RELEASE_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit Release '}
&lt;br&gt;@@ -75,11 +75,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;release($release);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($release, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; \%opts,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release =&amp;gt; $release-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($release, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;-};
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;override 'accept' =&amp;gt; sub
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Release/EditReleaseLabel.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -63,10 +63,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unless defined $release_label;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($release_label, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_label_id =&amp;gt; $release_label-&amp;gt;id,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_id =&amp;gt; $release_label-&amp;gt;release_id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_id =&amp;gt; $release_label-&amp;gt;release_id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($release_label, keys %opts),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/ReleaseGroup/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -13,7 +13,7 @@
&lt;br&gt;&amp;nbsp;use MooseX::Types::Moose qw( ArrayRef Maybe Str Int );
&lt;br&gt;&amp;nbsp;use MooseX::Types::Structured qw( Dict Optional );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_RELEASEGROUP_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { &amp;quot;Edit ReleaseGroup&amp;quot; }
&lt;br&gt;@@ -71,9 +71,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;release_group($release_group);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($release_group, keys %args),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; \%args,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_group =&amp;gt; $release_group-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release_group =&amp;gt; $release_group-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($release_group, %args)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Track/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -8,7 +8,7 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Constants qw( $EDIT_TRACK_EDIT );
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit track' }
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_TRACK_EDIT }
&lt;br&gt;@@ -66,8 +66,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;track($track);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;track =&amp;gt; $track-&amp;gt;id,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($track, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($track, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit/Work/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -9,7 +9,7 @@
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Entity::Types;
&lt;br&gt;&amp;nbsp;use MusicBrainz::Server::Data::Utils qw( artist_credit_to_ref );
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-extends 'MusicBrainz::Server::Edit';
&lt;br&gt;+extends 'MusicBrainz::Server::Edit::WithDifferences';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sub edit_type { $EDIT_WORK_EDIT }
&lt;br&gt;&amp;nbsp;sub edit_name { 'Edit work' }
&lt;br&gt;@@ -62,9 +62,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;work($work);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;work_id($work-&amp;gt;id);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;old =&amp;gt; $self-&amp;gt;_change_hash($work, keys %opts),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new =&amp;gt; { %opts },
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work =&amp;gt; $work-&amp;gt;id
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;work =&amp;gt; $work-&amp;gt;id,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;_change_data($work, %opts)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Edit.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Edit.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Edit.pm	2009-11-20 16:37:56 UTC (rev 12305)
&lt;br&gt;@@ -247,18 +247,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$self-&amp;gt;data(\%opts);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sub _mapping { }
&lt;br&gt;-sub _change_hash
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my ($self, $instance, @keys) = @_;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my %mapping = $self-&amp;gt;_mapping;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;my %old = map {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my $mapped = exists $mapping{$_} ? $mapping{$_} : $_;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$_ =&amp;gt; ref $mapped eq 'CODE' ? $mapped-&amp;gt;($instance) : $instance-&amp;gt;$mapped;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} @keys;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return \%old;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;__PACKAGE__-&amp;gt;meta-&amp;gt;make_immutable;
&lt;br&gt;&amp;nbsp;no Moose;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26446380&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12305---in-mb_server-trunk%3A-.-lib-MusicBrainz-Server-lib-MusicBrainz-Server-Data-lib-MusicBrainz-Server-Edit-lib-MusicBrainz-Server-Edit-Artist-lib-MusicBrainz-Server-Edit-Label-lib-MusicBrainz-Server-Edit-Medium-lib-MusicBrainz-Server-Edit-Relationship-lib-MusicBrainz-Server-Edit-Release-lib-MusicBrainz-Server-Edit-ReleaseGroup-lib-MusicBrainz-Server-Edit-Track-lib-MusicBrainz-Server-Edit-Work-t-tp26446380p26446380.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26445061</id>
	<title>r12304 - in mb_server/trunk: lib/MusicBrainz/Server/Controller root root/ajax root/release root/scripts root/static/scripts root/static/scripts/MB/Control root/static/styles root/tracklist</title>
	<published>2009-11-20T07:18:31Z</published>
	<updated>2009-11-20T07:18:31Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: acid2
&lt;br&gt;Date: 2009-11-20 15:18:30 +0000 (Fri, 20 Nov 2009)
&lt;br&gt;New Revision: 12304
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/ajax/
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/ajax/lookup_tracklist.tt
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/lib/MusicBrainz/Server/Controller/Ajax.pm
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/release/edit.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/scripts/text_strings.tt
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/scripts/MB/Control/TableSorting.js
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/scripts/release_editor.js
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/static/styles/release-editor.css
&lt;br&gt;&amp;nbsp; &amp;nbsp;mb_server/trunk/root/tracklist/tracklist.tt
&lt;br&gt;Log:
&lt;br&gt;Support for adding new mediums
&lt;br&gt;&lt;br&gt;Merge branch 'new-medium'
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/lib/MusicBrainz/Server/Controller/Ajax.pm
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/lib/MusicBrainz/Server/Controller/Ajax.pm	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/lib/MusicBrainz/Server/Controller/Ajax.pm	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -4,6 +4,33 @@
&lt;br&gt;&amp;nbsp;use List::Util qw( min );
&lt;br&gt;&amp;nbsp;use Encode qw(decode_utf8);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sub lookup_tracklist : Local
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my ($self, $c) = @_;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $release_name = $c-&amp;gt;req-&amp;gt;query_params-&amp;gt;{release};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $offset = $c-&amp;gt;req-&amp;gt;query_params-&amp;gt;{offset} || 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;my $limit = min ($c-&amp;gt;req-&amp;gt;query_params-&amp;gt;{limit} || 10), 100;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if ($release_name) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my ($search_results, $hits) = $c-&amp;gt;model('DirectSearch')-&amp;gt;search('release',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$release_name, $limit, $offset);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my @releases = map { $_-&amp;gt;entity } @$search_results;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('Medium')-&amp;gt;load_for_releases(@releases);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my @mediums = map { $_-&amp;gt;all_mediums } @releases;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;my @tracklists = map { $_-&amp;gt;tracklist } @mediums;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('Track')-&amp;gt;load_for_tracklists(@tracklists);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;model('ArtistCredit')-&amp;gt;load(@releases, map { $_-&amp;gt;all_tracks } @tracklists);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$c-&amp;gt;stash(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;releases =&amp;gt; [ @releases ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sub search : Local
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;my ($self, $c) = @_;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/release/edit.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/release/edit.tt	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/release/edit.tt	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -34,10 +34,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% medium_field = form.field('mediums').field(loop.index) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table class=&amp;quot;medium tbl&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table class=&amp;quot;medium tbl&amp;quot; id=&amp;quot;[% medium_field.html_name %]&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;thead&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr class=&amp;quot;subh&amp;quot;&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;position&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;medium-position&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;span&amp;gt;[% medium.position %]&amp;lt;/span&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% r.hidden(medium_field.field('position'), class =&amp;gt; 'medium-position') %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/th&amp;gt;
&lt;br&gt;@@ -74,6 +74,50 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/tbody&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/table&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table id=&amp;quot;new-medium&amp;quot; class=&amp;quot;tbl medium&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;thead&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr class=&amp;quot;subh&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;medium-position&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input type=&amp;quot;hidden&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input class=&amp;quot;medium-name&amp;quot; /&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;position&amp;quot;&amp;gt;[% l('#') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;title&amp;quot;&amp;gt;[% l('Title') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;artist&amp;quot;&amp;gt;[% l('Artist') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;th class=&amp;quot;length&amp;quot;&amp;gt;[% l('Length') %]&amp;lt;/th&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/thead&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tfoot /&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;tbody /&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/table&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;fieldset&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;legend&amp;gt;[% l('Add an existing tracklist') %]&amp;lt;/legend&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;[% l('MusicBrainz supports using the same tracklist over multiple
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; releases, which is very convenient when the same disc can be found
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; in multiple releases (for example box sets). If you wish to reuse
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; an existing tracklist, search for the release name, and drag the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tracklist you wish to use into the release editor above.') %]&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;p&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;label&amp;gt;[% l('Release name:') %]&amp;lt;/label&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input id=&amp;quot;existing-release-name&amp;quot; /&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;input id=&amp;quot;lookup-release&amp;quot; type=&amp;quot;button&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value=&amp;quot;[% l('Lookup release') %]&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; style=&amp;quot;margin-right: 10pt&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/p&amp;gt;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;div class=&amp;quot;results&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;table class=&amp;quot;tbl&amp;quot; id=&amp;quot;lookup-tracklist-results&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/table&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/fieldset&amp;gt;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[%- INCLUDE 'forms/edit-note.tt' -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[% form_submit(l('Edit')) %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/div&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/scripts/text_strings.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/scripts/text_strings.tt	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/scripts/text_strings.tt	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -39,5 +39,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Lookup &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: &amp;quot;[% l('Lookup') %]&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SearchErrorOccured &amp;nbsp; &amp;nbsp;: &amp;quot;[% l('Sorry, an error occured during your search') %]&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AddNewTrack: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;[% l('Add another track') %]&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AddAnotherMedium &amp;nbsp; &amp;nbsp; &amp;nbsp;: &amp;quot;[% l('Add another medium') %]&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;})(MB);
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/static/scripts/MB/Control/ArtistCreditEditor.js	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -135,7 +135,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;updateLivePreview();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;creditSorting.addTables(editor);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;creditSorting.addDragSource(editor);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;creditSorting.addDropTarget(editor);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Row to add a new artist credit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var newLookup = new MB.Control.EntityLookup('artist', {
&lt;br&gt;@@ -215,7 +216,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var ac = new ArtistCredit(artist);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;credits.push(ac);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;editorBody.append(ac.row);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;creditSorting.activate();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;creditSorting.rebind();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openAt: function(node) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (currentEditor) {
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/static/scripts/MB/Control/TableSorting.js
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/static/scripts/MB/Control/TableSorting.js	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/static/scripts/MB/Control/TableSorting.js	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -20,12 +20,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var self = this;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;options = $.extend({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragComplete: undefined
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragComplete: undefined,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, options);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var currentDrag;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var currentOver;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var tables;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var dragTables, dropTables;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var insertMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var oldTable;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var rows;
&lt;br&gt;@@ -43,7 +43,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ev.preventDefault();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// The cell the user clicked on isn't necessarily the row we want
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var possible = tables.children('tbody').children('tr');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var possible = dragTables.children('tbody').children('tr');
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var el = ev.target;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (el) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var index = $.inArray(el, possible);
&lt;br&gt;@@ -62,13 +62,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.mousemove(mouseMove)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.mouseup(endDrag);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rows = tables.find('&amp;gt; tbody &amp;gt; tr');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rows = dropTables.find('&amp;gt; tbody &amp;gt; tr');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;currentDrag = $(el);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;startPos = currentDrag.prevAll().length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oldTable = currentDrag.parent('table');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHelper.append(currentDrag).show();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHelper
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.append(currentDrag.clone())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.show();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mouseMove(ev);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -129,7 +131,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var mY = ev.pageY;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var over = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rows.each(function() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;over = $(this); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;over = $(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(over === currentDrag) { return false; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;insertMethod = above(over, mY) ? 'before' : 'after';
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Keep looping *until* we find a row that the mouse is in
&lt;br&gt;@@ -144,11 +147,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$.extend(self, {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;activate: function(t) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tables.find(options.dragHandle).mousedown(beginDrag);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;rebind: function() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragTables.find(options.dragHandle).mousedown(beginDrag);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTables: function(tab) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tables = tables ? tables.add(tab) : $(tab);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addDragSource: function(tab) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragTables = dragTables ? dragTables.add(tab) : $(tab);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragTables.find(options.dragHandle).mousedown(beginDrag);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addDropTarget: function(tab) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dropTables = dropTables ? dropTables.add(tab) : $(tab);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/static/scripts/release_editor.js
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/static/scripts/release_editor.js	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/static/scripts/release_editor.js	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -25,12 +25,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;var mediumSorter, trackSorter, mediumImporter;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$(function() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Very simple overlays
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(&amp;quot;#sidebar dd:not(.date) &amp;gt; :input&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.add($('li.release-label input.catalog-number'))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.add($('#release-name'))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.add($('#mediums input.medium-name'))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.each(function() { spanOverlay($(this)); });
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Release disambiguation comment
&lt;br&gt;@@ -59,7 +60,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('#sidebar ul.release-labels span.label').each(overlayLabelLookup);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Support moving tracks
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var trackSorter = new MB.Control.TableSorting({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter = new MB.Control.TableSorting({
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragComplete: function(row, oldTable) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Loop over each changed medium...
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var mediums = row.parent('table');
&lt;br&gt;@@ -79,97 +80,147 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHandle: 'td.position'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.addTables('table#mediums table.medium');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.activate();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.addDragSource('table#mediums table.medium');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.addDropTarget('table#mediums table.medium');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Support moving mediums
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var mediumSorter = new MB.Control.TableSorting({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHandle: 'tr.subh th.position',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter = new MB.Control.TableSorting({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHandle: 'th.medium-position',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragComplete: function(row, oldTable) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Loop over each medium
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('table#mediums table.medium').each(function(i) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var posCell = $(this).find('th.position');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('input').val(i);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('span').text(i);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reorderMediums();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.addTables('table#mediums');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.activate();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.addDropTarget('table#mediums');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.addDragSource('table#mediums');
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Editing artist credits
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;acEditor($('#release-artist div.artist-credit'));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Setup track rows
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('table#mediums tbody tr.track').each(function() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupTrackRow($(this));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Editing mediums
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('table#mediums .medium').each(function() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupMedium($(this));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Overlay Medium Format
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('select.medium-format').each(function() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spanOverlay($(this));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Creating new mediums
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var newMedium = $(MB.html.button({}, MB.text.AddAnotherMedium))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.insertAfter('#mediums')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.click(function(ev) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ev.preventDefault();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addNewMedium();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Support for looking tracklistings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumImporter = new MB.Control.TableSorting({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doRemove: false,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragHandle: 'table.medium th.name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dragComplete: function(row) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var medium = createMedium(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;medium.find('tbody').replaceWith(row.find('tbody'));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;row.empty().append(medium);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupMedium(medium, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('#lookup-tracklist-results').empty();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reorderMediums();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumImporter.addDropTarget('table#mediums');
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var loading = $(MB.html.img({ src: '/static/images/loading-small.gif' })).hide();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('#lookup-release')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.click(function(ev) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ev.preventDefault();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;loading.show();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$.get('/ajax/lookup_tracklist', {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release: $('#existing-release-name').val()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, function(data) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;loading.hide();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('#lookup-tracklist-results').replaceWith(data);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumImporter.addDragSource($('#lookup-tracklist-results'));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}).after(loading);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;function reorderMediums() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Loop over each medium
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('table#mediums table.medium').each(function(i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i++;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var posCell = $(this).find('th.medium-position');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('input').val(i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('span').text(i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;function setupMedium(mediumTable, locked) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.rebind();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Support for creating new tracks
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('table#mediums .medium tbody').each(function(mediumNumber) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var table = $(this);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var newRow = $(MB.html.tr());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var newRow = $(MB.html.tr());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var createTrackRow = function(ev) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ev.preventDefault();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Overlay the medium name
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spanOverlay(mediumTable.find('input.medium-name'));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(locked) { return; }
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var createTrackRow = function(ev) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ev.preventDefault();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var pos = table.find('tr.track').length;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var prefix = 'edit-release.mediums.' + mediumNumber
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ '.tracklist.tracks.' + pos + '.';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var pos = mediumTable.find('tr.track').length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var prefix = mediumTable.attr('id') + '.tracklist.tracks.' + pos + '.';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pos++; // We display tracks with '1' as the starting index
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pos++; // We display tracks with '1' as the starting index
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var artistCredit = $('#release-artist .artist-credit').clone();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artistCredit.attr('id', prefix + 'artist_credit');
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artistCredit.find('input').each(function() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var inp = $(this);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inp.attr('name', inp.attr('name').replace('edit-release.', prefix));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var artistCredit = $('#release-artist .artist-credit').clone();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artistCredit.attr('id', prefix + 'artist_credit');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;artistCredit.find('input').each(function() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var inp = $(this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inp.attr('name', inp.attr('name').replace('edit-release.', prefix));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var tr = $(MB.html.tr({ 'class': 'track' + (pos % 2 == 0 ? ' ev' : '') },
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.td({ 'class': 'position' },
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.input({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'class': 'pos',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value: pos,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name: prefix + 'position'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.td({},
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.input({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'class': 'track-name',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name: prefix + 'name'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;})) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.td({},
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.div({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'class': 'artist-credit',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;id: prefix + 'artist_credit'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, artistCredit.html())) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.td({},
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MB.html.input({
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'class': 'track-length',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value: '?:??',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name: prefix + 'length'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.append(tr);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupTrackRow(tr);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.activate();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var tr = $(MB.html.tr({ 'class': 'track' + (pos % 2 == 0 ? ' ev' : '') },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.td({ 'class': 'position' },
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.input({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'class': 'pos',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value: pos,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: prefix + 'position'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; })) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.td({},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.input({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'class': 'track-name',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: prefix + 'name'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; })) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.td({},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.div({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'class': 'artist-credit',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id: prefix + 'artist_credit'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }, artistCredit.html())) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.td({},
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MB.html.input({
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'class': 'track-length',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value: '?:??',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name: prefix + 'length'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumTable.append(tr);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupTrackRow(tr);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.rebind();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.td({ colspan: '4' }))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.button({}, MB.text.AddNewTrack))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.click(createTrackRow))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.appendTo(newRow);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.closest('table').find('tfoot').append(newRow);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.td({ colspan: '4' }))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.button({}, MB.text.AddNewTrack))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.click(createTrackRow))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.appendTo(newRow);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumTable.find('tfoot').append(newRow);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Overlay Medium Format
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('select.medium-format').each(function() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spanOverlay($(this));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;console.log(MB.utility.displayedValue($(this)));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Setup track rows
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumTable.find('tr.track').each(function() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupTrackRow($(this));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;- &amp;nbsp; &amp;nbsp;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;function setupTrackRow(row) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Deleting tracks
&lt;br&gt;@@ -218,4 +269,37 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var overlay = new MB.Control.Overlay(MB.html.span({}, text));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;overlay.draw(field);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;function addNewMedium()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var pos = $('#mediums .medium').length;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var medium = createMedium(pos);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Make sure we can drag tracks in and out of this medium
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.addDragSource(medium);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;trackSorter.addDropTarget(medium);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setupMedium(medium);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;function createMedium(pos) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var medium = $('#new-medium')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.clone()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.show()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.attr('id', 'edit-release.mediums.' + pos);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$('#mediums &amp;gt; tbody').append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.tr()).append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(MB.html.td()).append(medium)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Set the position field
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var posCell = medium.find('.medium-position');
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('span').html(pos + 1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;posCell.find('input').val(pos);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Make sure we can sort it too
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mediumSorter.rebind();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return medium;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;})(jQuery);
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/static/styles/release-editor.css
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/static/styles/release-editor.css	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/static/styles/release-editor.css	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -105,3 +105,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;float: right;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;margin-top: 8pt;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+.position {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;width: 1.5em;
&lt;br&gt;+}
&lt;br&gt;+.length {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;width: 5em;
&lt;br&gt;+}
&lt;br&gt;+.title {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;width: 60%;
&lt;br&gt;+}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: mb_server/trunk/root/tracklist/tracklist.tt
&lt;br&gt;===================================================================
&lt;br&gt;--- mb_server/trunk/root/tracklist/tracklist.tt	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;+++ mb_server/trunk/root/tracklist/tracklist.tt	2009-11-20 15:18:30 UTC (rev 12304)
&lt;br&gt;@@ -6,7 +6,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[%- IF show_artists -%]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% artist_credit(track.artist_credit) %]&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[%- END -%]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[% UNLESS hide_rating %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td class=&amp;quot;c&amp;quot;&amp;gt;[% rating_stars(recording) %]&amp;lt;/td&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;[% END %]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;td&amp;gt;[% track.length | format_length %]&amp;lt;/td&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/tr&amp;gt;
&lt;br&gt;&amp;nbsp;[%- END -%]
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26445061&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12304---in-mb_server-trunk%3A-lib-MusicBrainz-Server-Controller-root-root-ajax-root-release-root-scripts-root-static-scripts-root-static-scripts-MB-Control-root-static-styles-root-tracklist-tp26445061p26445061.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26432757</id>
	<title>[Branch ~musicbrainz-developers/picard/trunk] Rev 1010: Reorder	cluster/lookup/scan options to be slightly more intuitive</title>
	<published>2009-11-19T11:40:24Z</published>
	<updated>2009-11-19T11:40:24Z</updated>
	<author>
		<name>noreply-45</name>
	</author>
	<content type="html">------------------------------------------------------------
&lt;br&gt;revno: 1010
&lt;br&gt;committer: Philipp Wolfer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26432757&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ph.wolfer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;branch nick: trunk
&lt;br&gt;timestamp: Thu 2009-11-19 20:13:09 +0100
&lt;br&gt;message:
&lt;br&gt;&amp;nbsp; Reorder cluster/lookup/scan options to be slightly more intuitive
&lt;br&gt;modified:
&lt;br&gt;&amp;nbsp; picard/ui/mainwindow.py
&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;lp:picard
&lt;br&gt;&lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&lt;/a&gt;&lt;br&gt;&lt;br&gt;You are subscribed to branch lp:picard.
&lt;br&gt;To unsubscribe from this branch go to &lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&lt;/a&gt;.
&lt;br&gt;&lt;br /&gt;=== modified file 'picard/ui/mainwindow.py'
&lt;br&gt;--- picard/ui/mainwindow.py	2009-11-19 19:08:24 +0000
&lt;br&gt;+++ picard/ui/mainwindow.py	2009-11-19 19:13:09 +0000
&lt;br&gt;@@ -430,9 +430,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;button.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;button.setMenu(self.cd_lookup_menu)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.cluster_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.autotag_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.analyze_action)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.cluster_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.edit_tags_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;toolbar.addAction(self.remove_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.search_toolbar = toolbar = self.addToolBar(_(u&amp;quot;&amp;Search Bar&amp;quot;))
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26432757&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Branch-%7Emusicbrainz-developers-picard-trunk--Rev-1010%3A-Reorder%09cluster-lookup-scan-options-to-be-slightly-more-intuitive-tp26432757p26432757.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26432758</id>
	<title>[Branch ~musicbrainz-developers/picard/trunk] Rev 1009: Set Windows	version in bug report link depending on the actual system.</title>
	<published>2009-11-19T11:40:24Z</published>
	<updated>2009-11-19T11:40:24Z</updated>
	<author>
		<name>noreply-45</name>
	</author>
	<content type="html">------------------------------------------------------------
&lt;br&gt;revno: 1009
&lt;br&gt;committer: Philipp Wolfer &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26432758&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;ph.wolfer@...&lt;/a&gt;&amp;gt;
&lt;br&gt;branch nick: win32
&lt;br&gt;timestamp: Thu 2009-11-19 20:08:24 +0100
&lt;br&gt;message:
&lt;br&gt;&amp;nbsp; Set Windows version in bug report link depending on the actual system.
&lt;br&gt;modified:
&lt;br&gt;&amp;nbsp; picard/ui/mainwindow.py
&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;lp:picard
&lt;br&gt;&lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk&lt;/a&gt;&lt;br&gt;&lt;br&gt;You are subscribed to branch lp:picard.
&lt;br&gt;To unsubscribe from this branch go to &lt;a href=&quot;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~musicbrainz-developers/picard/trunk/+edit-subscription&lt;/a&gt;.
&lt;br&gt;&lt;br /&gt;=== modified file 'picard/ui/mainwindow.py'
&lt;br&gt;--- picard/ui/mainwindow.py	2009-10-26 21:11:05 +0000
&lt;br&gt;+++ picard/ui/mainwindow.py	2009-11-19 19:08:24 +0000
&lt;br&gt;@@ -558,7 +558,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if sys.platform == &amp;quot;linux2&amp;quot;:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Linux&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif sys.platform == &amp;quot;win32&amp;quot;:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+XP&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;import platform
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;release = platform.release()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if release in (&amp;quot;post2008Server&amp;quot;, &amp;quot;7&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+7&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif release in (&amp;quot;Vista&amp;quot;, &amp;quot;2008Server&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+Vista&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif release in (&amp;quot;XP&amp;quot;, &amp;quot;2003Server&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+XP&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif release in (&amp;quot;NT&amp;quot;, &amp;quot;2000&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+NT%2F2000&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif release in (&amp;quot;95&amp;quot;, &amp;quot;98&amp;quot;, &amp;quot;Me&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+95%2F98%2FMe&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Windows+XP&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif sys.platform == &amp;quot;darwin&amp;quot;:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.append(&amp;quot;os=Mac+OS+X&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;webbrowser2.open(&amp;quot;&lt;a href=&quot;http://bugs.musicbrainz.org/newticket&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugs.musicbrainz.org/newticket&lt;/a&gt;?&amp;quot; + &amp;quot;&amp;&amp;quot;.join(args))
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26432758&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-Branch-%7Emusicbrainz-developers-picard-trunk--Rev-1009%3A-Set-Windows%09version-in-bug-report-link-depending-on-the-actual-system.-tp26432758p26432758.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26423511</id>
	<title>r12303 - in search_server/branches/ngs: index/src/main/java/org/musicbrainz/search/analysis index/src/test/java/org/musicbrainz/search/analysis index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet</title>
	<published>2009-11-19T01:53:21Z</published>
	<updated>2009-11-19T01:53:21Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-19 09:53:20 +0000 (Thu, 19 Nov 2009)
&lt;br&gt;New Revision: 12303
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/AccentFilter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardFilter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardUnaccentAnalyzer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AccentFilterTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AmpersandTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/CompareNormalizationFiltersTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1006Test.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1446Test.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue3309Test.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue4775Test.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/StopWordsTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AnnotationIndexTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/AnnotationSearch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ArtistQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/CDStubSearch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/FreeDBSearch.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/LabelQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseGroupQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseQueryParser.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/WorkQueryParser.java
&lt;br&gt;Log:
&lt;br&gt;Modified code to use Version parameter introduce in some constructors in Lucene 2.9.1 and required to use non-deprecated code, which is in turn a prerequisite for using Lucene 3.0
&lt;br&gt;Also fixed other Lucene deprecated code including a change to AccentFilter (that should improve performance a little)
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/AccentFilter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/AccentFilter.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/AccentFilter.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -29,32 +29,39 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.analysis;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.*;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * A filter that replaces accented characters by their unaccented equivalents.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;public class AccentFilter extends TokenFilter {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private char[] output = new char[256];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private int outputPos;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private TermAttribute termAttr;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public AccentFilter(TokenStream input) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(input);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;termAttr = (TermAttribute) addAttribute(TermAttribute.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	@Override
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public final Token next(Token result) throws java.io.IOException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = input.next(result);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (result != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final char[] buffer = result.termBuffer();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int length = result.termLength();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (removeAccents(buffer, length))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.setTermBuffer(output, 0, outputPos);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean incrementToken() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!input.incrementToken())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final char[] buffer = termAttr.termBuffer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int length &amp;nbsp; &amp;nbsp;= termAttr.termLength();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (removeAccents(buffer, length)) &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;termAttr.setTermBuffer(output, 0, outputPos);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected final boolean removeAccents(char[] input, int length) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final int maxSizeNeeded = 2 * length;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int size = output.length;
&lt;br&gt;@@ -65,7 +72,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outputPos = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; length; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int c = (int)input[i];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int c = (int) input[i];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int block = UnaccentIndexes.indexes[c &amp;gt;&amp;gt; UnaccentData.BLOCK_SHIFT];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int position = c &amp; UnaccentData.BLOCK_MASK;
&lt;br&gt;@@ -73,19 +80,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;short[] positions = UnaccentPositions.positions[block];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int unacPosition = positions[position];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int unacLength = positions[position + 1] - unacPosition;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (unacLength &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// allocate a new char array, if necessary
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (size != output.length)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output = new char[size];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// copy front of the input
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (inputPos &amp;lt; i) {
&lt;br&gt;-					System.arraycopy(input, inputPos, output, outputPos, i - inputPos);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.arraycopy(input, inputPos, output, outputPos, i - inputPos);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outputPos += i - inputPos;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// copy unaccented data
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.arraycopy(UnaccentData.data[block], unacPosition,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; output, outputPos, unacLength);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;output, outputPos, unacLength);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;outputPos += unacLength;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inputPos = i + 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardFilter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardFilter.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardFilter.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -11,7 +11,7 @@
&lt;br&gt;&amp;nbsp; * Normalizes tokens extracted with {@link org.apache.lucene.analysis.standard.StandardTokenizer}.
&lt;br&gt;&amp;nbsp; * &amp;lt;p/&amp;gt;
&lt;br&gt;&amp;nbsp; * This is based on StandardFilter in that tokens identified as Acronyms have there dots removed but unlike StandardFilter
&lt;br&gt;- * apostrophes are always removed and there is no epecial rule for words ending in 's .
&lt;br&gt;+ * apostrophes are always removed and there is no special rule for words ending in 's .
&lt;br&gt;&amp;nbsp; * &amp;lt;p/&amp;gt;
&lt;br&gt;&amp;nbsp; * Whereas StandardFilter usually leaves apostrophes unless word ends with 's whereby the 's is removed.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardTokenizer.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -29,6 +29,44 @@
&lt;br&gt;&amp;nbsp; * directory to your project and maintaining your own grammar-based tokenizer.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.Reader;
&lt;br&gt;+
&lt;br&gt;+import org.apache.lucene.analysis.Token;
&lt;br&gt;+import org.apache.lucene.analysis.Tokenizer;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
&lt;br&gt;+import org.apache.lucene.util.AttributeSource;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;+
&lt;br&gt;+/** A grammar-based tokenizer constructed with JFlex
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;lt;p&amp;gt; This should be a good tokenizer for most European-language documents:
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;lt;ul&amp;gt;
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;Splits words at punctuation characters, removing punctuation. However, a
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; dot that's not followed by whitespace is considered part of a token.
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;Splits words at hyphens, unless there's a number in the token, in which case
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; the whole token is interpreted as a product number and is not split.
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt;Recognizes email addresses and internet hostnames as one token.
&lt;br&gt;+ * &amp;lt;/ul&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;lt;p&amp;gt;Many applications have specific tokenizer needs. &amp;nbsp;If this tokenizer does
&lt;br&gt;+ * not suit your application, please consider copying this source code
&lt;br&gt;+ * directory to your project and maintaining your own grammar-based tokenizer.
&lt;br&gt;+ *
&lt;br&gt;+ * &amp;lt;a name=&amp;quot;version&amp;quot;/&amp;gt;
&lt;br&gt;+ * &amp;lt;p&amp;gt;You must specify the required {@link Version}
&lt;br&gt;+ * compatibility when creating StandardAnalyzer:
&lt;br&gt;+ * &amp;lt;ul&amp;gt;
&lt;br&gt;+ * &amp;nbsp; &amp;lt;li&amp;gt; As of 2.4, Tokens incorrectly identified as acronyms
&lt;br&gt;+ * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;are corrected (see &amp;lt;a href=&amp;quot;&lt;a href=&quot;https://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&amp;quot;&amp;gt;LUCENE-1608&amp;lt;/a&amp;gt;
&lt;br&gt;+ * &amp;lt;/ul&amp;gt;
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;public class StandardTokenizer extends Tokenizer {
&lt;br&gt;&amp;nbsp; &amp;nbsp;/** A private instance of the JFlex-constructed scanner */
&lt;br&gt;&amp;nbsp; &amp;nbsp;private final StandardTokenizerImpl scanner;
&lt;br&gt;@@ -91,9 +129,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new instance of the {@link StandardTokenizer}. Attaches the
&lt;br&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt; to a newly created JFlex scanner.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version,
&lt;br&gt;+ &amp;nbsp; * Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(Reader input) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;this(input, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;this(Version.LUCENE_24, input);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;@@ -104,6 +145,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; * @param replaceInvalidAcronym Set to true to replace mischaracterized acronyms with HOST.
&lt;br&gt;&amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; * See &lt;a href=&quot;http://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;@@ -112,7 +155,23 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Creates a new instance of the {@link org.apache.lucene.analysis.standard.StandardTokenizer}. &amp;nbsp;Attaches
&lt;br&gt;+ &amp;nbsp; * the &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt; to the newly created JFlex scanner.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @param input The input reader
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * See &lt;a href=&quot;http://issues.apache.org/jira/browse/LUCENE-1068&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://issues.apache.org/jira/browse/LUCENE-1068&lt;/a&gt;&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public StandardTokenizer(Version matchVersion, Reader input) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;init(input, matchVersion);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new StandardTokenizer with a given {@link AttributeSource}.
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, AttributeSource, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(AttributeSource source, Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super(source);
&lt;br&gt;@@ -121,7 +180,18 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Creates a new StandardTokenizer with a given {@link AttributeSource}.
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public StandardTokenizer(Version matchVersion, AttributeSource source, Reader input) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;super(source);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;init(input, matchVersion);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; * Creates a new StandardTokenizer with a given {@link org.apache.lucene.util.AttributeSource.AttributeFactory}
&lt;br&gt;+ &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; * @deprecated Use {@link #StandardTokenizer(Version, org.apache.lucene.util.AttributeSource.AttributeFactory, Reader)} instead
&lt;br&gt;&amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp;public StandardTokenizer(AttributeFactory factory, Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;super(factory);
&lt;br&gt;@@ -129,6 +199,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, replaceInvalidAcronym);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; * Creates a new StandardTokenizer with a given {@link org.apache.lucene.util.AttributeSource.AttributeFactory}
&lt;br&gt;+ &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp;public StandardTokenizer(Version matchVersion, AttributeFactory factory, Reader input) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;super(factory);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;this.scanner = new StandardTokenizerImpl(input);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;init(input, matchVersion);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;private void init(Reader input, boolean replaceInvalidAcronym) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.replaceInvalidAcronym = replaceInvalidAcronym;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.input = input;
&lt;br&gt;@@ -138,6 +217,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;typeAtt = (TypeAttribute) addAttribute(TypeAttribute.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;private void init(Reader input, Version matchVersion) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (matchVersion.onOrAfter(Version.LUCENE_24)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;init(input, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;// this tokenizer generates three attributes:
&lt;br&gt;&amp;nbsp; &amp;nbsp;// offset, positionIncrement and type
&lt;br&gt;&amp;nbsp; &amp;nbsp;private TermAttribute termAtt;
&lt;br&gt;@@ -242,3 +329,4 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;this.replaceInvalidAcronym = replaceInvalidAcronym;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardUnaccentAnalyzer.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardUnaccentAnalyzer.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/analysis/StandardUnaccentAnalyzer.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -39,6 +39,7 @@
&lt;br&gt;&amp;nbsp;import java.io.Reader;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.ibm.icu.text.Transliterator;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Filters StandardTokenizer with StandardFilter, ICUTransformFilter, AccentFilter, LowerCaseFilter
&lt;br&gt;@@ -59,7 +60,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public TokenStream tokenStream(String fieldName, Reader reader) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CharFilter mappingCharFilter = new MappingCharFilter(charConvertMap,reader);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StandardTokenizer tokenStream = new StandardTokenizer(mappingCharFilter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StandardTokenizer tokenStream = new StandardTokenizer(Version.LUCENE_CURRENT,mappingCharFilter);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TokenStream result = new ICUTransformFilter(tokenStream, Transliterator.getInstance(&amp;quot;[ー[:Script=Katakana:]]Katakana-Hiragana&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = new StandardFilter(result);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = new AccentFilter(result);
&lt;br&gt;@@ -77,7 +78,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (streams == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams = new SavedStreams();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setPreviousTokenStream(streams);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams.tokenStream = new StandardTokenizer(new MappingCharFilter(charConvertMap,reader));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams.tokenStream = new StandardTokenizer(Version.LUCENE_CURRENT,new MappingCharFilter(charConvertMap,reader));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams.filteredTokenStream = new ICUTransformFilter(streams.tokenStream, Transliterator.getInstance(&amp;quot;[ー[:Script=Katakana:]]Katakana-Hiragana&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams.filteredTokenStream = new StandardFilter(streams.filteredTokenStream);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;streams.filteredTokenStream = new AccentFilter(streams.filteredTokenStream);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AccentFilterTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AccentFilterTest.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AccentFilterTest.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -7,6 +7,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.*;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.*;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.*;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class AccentFilterTest extends TestCase {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -54,7 +55,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSearchUnaccented() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;test&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;test&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, docs.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;@@ -64,7 +65,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSearchAccented() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;tést&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;tést&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, docs.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;@@ -74,7 +75,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSearchAccented2() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;abcaef&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;abcaef&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;@@ -105,7 +106,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSearchQe() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;qwe&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;qwe&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;@@ -116,7 +117,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSearchQe2() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;qwee&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;qwee&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AmpersandTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AmpersandTest.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/AmpersandTest.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -4,6 +4,9 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Tokenizer;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Token;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Analyzer;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.index.IndexWriter;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Document;
&lt;br&gt;@@ -11,28 +14,31 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.io.StringReader;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class AmpersandTest extends TestCase {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/** Show tokenizer on its own removes ampersands */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Show tokenizer on its own removes ampersands
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testAmpersandTokenizing() throws Exception {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;Platinum &amp; Gold&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count=0;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =tokenizer.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count++;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2,count);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int count = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;Platinum &amp; Gold&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (tokenizer.incrementToken()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;count++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, count);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; /** Test filter is being used for indexing and searching , and can search either way*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Test filter is being used for indexing and searching , and can search either way
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testAmpersandSearching() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardUnaccentAnalyzer();
&lt;br&gt;@@ -40,23 +46,23 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = new Document();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;,&amp;quot;Platinum &amp; Gold&amp;quot;, Field.Store.YES, Field.Index.ANALYZED));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;Platinum &amp; Gold&amp;quot;, Field.Store.YES, Field.Index.ANALYZED));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;\&amp;quot;Platinum &amp; Gold\&amp;quot;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT, &amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;\&amp;quot;Platinum &amp; Gold\&amp;quot;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q, 10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;\&amp;quot;Platinum and Gold\&amp;quot;&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT, &amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;\&amp;quot;Platinum and Gold\&amp;quot;&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q, 10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/CompareNormalizationFiltersTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/CompareNormalizationFiltersTest.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/CompareNormalizationFiltersTest.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -7,6 +7,8 @@
&lt;br&gt;&amp;nbsp;import java.io.IOException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.ibm.icu.text.Normalizer;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Compare FIlters
&lt;br&gt;@@ -50,33 +52,41 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;Chars that are changed by one filter different to other filter&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(&amp;quot;input:existingfilter:newfilter&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t0=tokenizer0.next())!=null)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term &amp;nbsp;= (TermAttribute)tokenizer0.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term1 = (TermAttribute)result1.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term2 = (TermAttribute)result2.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term3 = (TermAttribute)result3.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term4 = (TermAttribute)result4.addAttribute(TermAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while(tokenizer0.incrementToken())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t =result1.next();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t2=result2.next();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t3=result3.next();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;t4=result4.next();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result1.incrementToken();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result2.incrementToken();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result3.incrementToken();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result4.incrementToken();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!t0.term().equals(t.term()))
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!term1.term().equals(term.term()))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changedByAccent ++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!t2.term().equals(t.term()))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!term2.term().equals(term.term()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changedByASCII ++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!t3.term().equals(t.term()))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!term3.term().equals(term.term()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changedByNFKC ++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!t4.term().equals(t.term()))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!term4.term().equals(term.term()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;changedByASCIIAndNFKC ++;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(!t0.term().equals(t2.term()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(!term.term().equals(term2.term()))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(t0.term().equals(t.term()))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(term.term().equals(term4.term()))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1006Test.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1006Test.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1006Test.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -1,5 +1,8 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.analysis;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TermAttribute;
&lt;br&gt;+import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;@@ -14,90 +17,135 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import junit.framework.TestCase;
&lt;br&gt;&amp;nbsp;import com.ibm.icu.text.Transliterator;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.io.StringReader;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class Issue1006Test extends TestCase {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/** Tests word is preserved and identified as alpahnumeric
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Tests word is preserved and identified as alpahnumeric
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testKatakanaHiraganaTokenizer() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;ゲーム&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =tokenizer.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(ゲーム,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;ゲーム&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) tokenizer.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) tokenizer.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) tokenizer.addAttribute(OffsetAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (tokenizer.incrementToken()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;ゲーム&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;ゲエム&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =tokenizer.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(ゲエム,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;ゲエム&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) tokenizer.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) tokenizer.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) tokenizer.addAttribute(OffsetAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (tokenizer.incrementToken()) {
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;ゲエム&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;げえむ&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =tokenizer.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(げえむ,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;げえむ&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) tokenizer.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) tokenizer.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) tokenizer.addAttribute(OffsetAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (tokenizer.incrementToken()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;げえむ&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/** Test ICU Transformer converts as expected
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Test ICU Transformer converts as expected
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testKatakanaHiraganaEquivalenceFilter() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;ゲーム&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;ゲーム&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TokenStream result = new ICUTransformFilter(tokenizer, Transliterator.getInstance(&amp;quot;[ー[:Script=Katakana:]]Katakana-Hiragana&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =result.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(げえむ,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) result.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) result.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) result.addAttribute(OffsetAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (result.incrementToken()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;げえむ&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;ゲエム&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;ゲエム&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TokenStream result = new ICUTransformFilter(tokenizer, Transliterator.getInstance(&amp;quot;[ー[:Script=Katakana:]]Katakana-Hiragana&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =result.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(げえむ,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) result.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) result.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) result.addAttribute(OffsetAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (result.incrementToken()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;げえむ&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(new StringReader(&amp;quot;げえむ&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tokenizer tokenizer = new StandardTokenizer(Version.LUCENE_CURRENT,new StringReader(&amp;quot;げえむ&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TokenStream result = new ICUTransformFilter(tokenizer, Transliterator.getInstance(&amp;quot;[ー[:Script=Katakana:]]Katakana-Hiragana&amp;quot;));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Token t;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while((t =result.next())!=null)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(t.toString());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;(げえむ,0,3,type=&amp;lt;ALPHANUM&amp;gt;)&amp;quot;,t.toString());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TermAttribute term = (TermAttribute) result.addAttribute(TermAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TypeAttribute type = (TypeAttribute) result.addAttribute(TypeAttribute.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OffsetAttribute offset = (OffsetAttribute) result.addAttribute(OffsetAttribute.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (result.incrementToken()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;&amp;lt;ALPHANUM&amp;gt;&amp;quot;, type.type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;げえむ&amp;quot;, term.term());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, offset.startOffset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, offset.endOffset());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;/** Test filter is being used for indexing and searching */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Test filter is being used for indexing and searching
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testKatakanaHiraganaEquivalence() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardUnaccentAnalyzer();
&lt;br&gt;@@ -121,24 +169,23 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ゲーム&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT, &amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ゲーム&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q,10).totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q, 10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ゲエム&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT, &amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ゲエム&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q,10).totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q, 10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;げえむ&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT, &amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;げえむ&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q,10).totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, searcher.search(q, 10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1446Test.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1446Test.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue1446Test.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -11,6 +11,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.ScoreDoc;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import junit.framework.TestCase;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class Issue1446Test extends TestCase {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -31,7 +32,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ア&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ア&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;@@ -49,7 +50,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ョ&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;ョ&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;@@ -66,7 +67,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;え&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;え&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;@@ -84,7 +85,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;っ&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;っ&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ScoreDoc scoredocs[] = docs.scoreDocs;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue3309Test.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue3309Test.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue3309Test.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -1,22 +1,18 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.analysis;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import junit.framework.TestCase;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Analyzer;
&lt;br&gt;-import org.apache.lucene.analysis.TokenStream;
&lt;br&gt;-import org.apache.lucene.analysis.Token;
&lt;br&gt;-import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;-import org.apache.lucene.index.IndexWriter;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Document;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Field;
&lt;br&gt;+import org.apache.lucene.index.IndexWriter;
&lt;br&gt;+import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;-import org.apache.lucene.search.Hits;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TopDocs;
&lt;br&gt;-import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;-import junit.framework.TestCase;
&lt;br&gt;+import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.io.StringReader;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;public class Issue3309Test extends TestCase {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testMatchAcronymnsWithoutTrailingDot() throws Exception {
&lt;br&gt;@@ -30,7 +26,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -46,7 +42,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S.&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,10);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue4775Test.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue4775Test.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/Issue4775Test.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -1,15 +1,15 @@
&lt;br&gt;&amp;nbsp;package org.musicbrainz.search.analysis;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import junit.framework.TestCase;
&lt;br&gt;-import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Analyzer;
&lt;br&gt;-import org.apache.lucene.index.IndexWriter;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Document;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Field;
&lt;br&gt;+import org.apache.lucene.index.IndexWriter;
&lt;br&gt;+import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;-import org.apache.lucene.search.Hits;
&lt;br&gt;-import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;+import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class Issue4775Test extends TestCase {
&lt;br&gt;@@ -29,27 +29,27 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;Oreilly&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;Oreilly&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;Theres&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;Theres&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;there's&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;there's&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;There&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;There&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;it's'&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;it's'&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -70,17 +70,17 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;res&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;res&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S.&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S.&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;R.E.S&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, searcher.search(q,10).totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/StopWordsTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/StopWordsTest.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/analysis/StopWordsTest.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -3,14 +3,15 @@
&lt;br&gt;&amp;nbsp;import junit.framework.TestCase;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Analyzer;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.standard.StandardAnalyzer;
&lt;br&gt;-import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;-import org.apache.lucene.index.IndexWriter;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Document;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Field;
&lt;br&gt;+import org.apache.lucene.index.IndexWriter;
&lt;br&gt;+import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;-import org.apache.lucene.search.Hits;
&lt;br&gt;-import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;+import org.apache.lucene.search.TopDocs;
&lt;br&gt;+import org.apache.lucene.store.RAMDirectory;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.util.HashSet;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -27,35 +28,35 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void testUnableToFindStopWordsWithStandardAnalyser() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardAnalyzer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory dir = new RAMDirectory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = new Document();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.TOKENIZED));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.ANALYZED));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Hits hits = searcher.search(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, hits.length());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,null,100);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, docs.totalHits);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testAbleToFindStopWordsWithStandardAnalyserIfNoStopWords() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardAnalyzer(new HashSet());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT,new HashSet());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory dir = new RAMDirectory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = new Document();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.TOKENIZED));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.ANALYZED));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Hits hits = searcher.search(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, hits.length());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,null,100);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void testAbleToFindStopWords() throws Exception {
&lt;br&gt;@@ -64,14 +65,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory dir = new RAMDirectory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = new Document();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.TOKENIZED));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.add(new Field(&amp;quot;name&amp;quot;, &amp;quot;that&amp;quot;, Field.Store.YES, Field.Index.ANALYZED));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Hits hits = searcher.search(q);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, hits.length());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexSearcher searcher = new IndexSearcher(dir,true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Query q = new QueryParser(Version.LUCENE_CURRENT,&amp;quot;name&amp;quot;, analyzer).parse(&amp;quot;that&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TopDocs docs = searcher.search(q,null,100);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, docs.totalHits);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AnnotationIndexTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AnnotationIndexTest.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AnnotationIndexTest.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -161,7 +161,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addAnnotationOne();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory ramDir = new RAMDirectory();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createIndex(ramDir);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexReader ir = IndexReader.open(ramDir, true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, ir.numDocs());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/AnnotationSearch.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/AnnotationSearch.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/AnnotationSearch.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -2,6 +2,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.AnnotationIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.analysis.PerFieldEntityAnalyzer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -34,7 +35,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected QueryParser getParser() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; return new QueryParser(defaultFields.get(0), analyzer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; return new QueryParser(Version.LUCENE_CURRENT,defaultFields.get(0), analyzer);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ArtistQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ArtistQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ArtistQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -4,6 +4,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.MultiFieldQueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ArtistIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ArtistType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -15,7 +16,7 @@
&lt;br&gt;&amp;nbsp;public class ArtistQueryParser extends MultiFieldQueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public ArtistQueryParser(java.lang.String[] strings, org.apache.lucene.analysis.Analyzer analyzer) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(strings, analyzer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,strings, analyzer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected Query newTermQuery(Term term) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/CDStubSearch.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/CDStubSearch.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/CDStubSearch.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -3,6 +3,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.MultiFieldQueryParser;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.CDStubIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.analysis.PerFieldEntityAnalyzer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -35,7 +36,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; @Override
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected QueryParser getParser() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; return new MultiFieldQueryParser(defaultFields.toArray(new String[0]), analyzer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; return new MultiFieldQueryParser(Version.LUCENE_CURRENT,defaultFields.toArray(new String[0]), analyzer);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/FreeDBSearch.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/FreeDBSearch.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/FreeDBSearch.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -3,6 +3,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.IndexSearcher;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.MultiFieldQueryParser;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.FreeDBIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.analysis.PerFieldEntityAnalyzer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -36,6 +37,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected QueryParser getParser() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; return new MultiFieldQueryParser(defaultFields.toArray(new String[0]), analyzer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; return new MultiFieldQueryParser(Version.LUCENE_CURRENT,defaultFields.toArray(new String[0]), analyzer);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/LabelQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/LabelQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/LabelQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -4,13 +4,14 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.MultiFieldQueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class LabelQueryParser extends MultiFieldQueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public LabelQueryParser(java.lang.String[] strings, org.apache.lucene.analysis.Analyzer analyzer)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(strings,analyzer);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,strings,analyzer);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; protected Query newTermQuery(Term term) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/RecordingQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -8,6 +8,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermRangeQuery;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.util.NumericUtils;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.RecordingIndexField;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ReleaseGroupType;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.servlet.mmd1.V1TrackIndexField;
&lt;br&gt;@@ -20,7 +21,7 @@
&lt;br&gt;&amp;nbsp;public class RecordingQueryParser extends QueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public RecordingQueryParser(String field, Analyzer a) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(field, a);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,field, a);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseGroupQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseGroupQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseGroupQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -5,6 +5,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.queryParser.QueryParser;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ReleaseGroupType;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.ReleaseGroupIndexField;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -16,7 +17,7 @@
&lt;br&gt;&amp;nbsp;public class ReleaseGroupQueryParser extends QueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public ReleaseGroupQueryParser(String field, Analyzer a) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(field, a);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,field, a);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected Query newTermQuery(Term term) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/ReleaseQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -6,6 +6,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.Query;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.util.NumericUtils;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -16,7 +17,7 @@
&lt;br&gt;&amp;nbsp;public class ReleaseQueryParser extends QueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public ReleaseQueryParser(String field, Analyzer a) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(field, a);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,field, a);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected Query newTermQuery(Term term) {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/WorkQueryParser.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/WorkQueryParser.java	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/WorkQueryParser.java	2009-11-19 09:53:20 UTC (rev 12303)
&lt;br&gt;@@ -7,6 +7,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermQuery;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.search.TermRangeQuery;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.util.NumericUtils;
&lt;br&gt;+import org.apache.lucene.util.Version;
&lt;br&gt;&amp;nbsp;import org.musicbrainz.search.index.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -17,6 +18,6 @@
&lt;br&gt;&amp;nbsp;public class WorkQueryParser extends QueryParser {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public WorkQueryParser(String field, Analyzer a) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(field, a);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(Version.LUCENE_CURRENT,field, a);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26423511&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12303---in-search_server-branches-ngs%3A-index-src-main-java-org-musicbrainz-search-analysis-index-src-test-java-org-musicbrainz-search-analysis-index-src-test-java-org-musicbrainz-search-index-servlet-src-main-java-org-musicbrainz-search-servlet-tp26423511p26423511.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26388434</id>
	<title>r12302 - in search_server/branches/ngs: index servlet</title>
	<published>2009-11-17T03:34:07Z</published>
	<updated>2009-11-17T03:34:07Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-17 11:34:07 +0000 (Tue, 17 Nov 2009)
&lt;br&gt;New Revision: 12302
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/pom.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;Log:
&lt;br&gt;Update lucene to lucene 2.9.1 (which fixes a couple of bugs in 2.9.0)
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/pom.xml
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/pom.xml	2009-11-17 11:29:49 UTC (rev 12301)
&lt;br&gt;+++ search_server/branches/ngs/index/pom.xml	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;@@ -31,7 +31,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;lucene-core&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.0&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.1&amp;lt;/version&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/pom.xml	2009-11-17 11:29:49 UTC (rev 12301)
&lt;br&gt;+++ search_server/branches/ngs/servlet/pom.xml	2009-11-17 11:34:07 UTC (rev 12302)
&lt;br&gt;@@ -36,7 +36,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.lucene&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;lucene-core&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.0&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.9.1&amp;lt;/version&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26388434&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12302---in-search_server-branches-ngs%3A-index-servlet-tp26388434p26388434.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26388380</id>
	<title>r12301 - search_server/branches/ngs/servlet</title>
	<published>2009-11-17T03:29:49Z</published>
	<updated>2009-11-17T03:29:49Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-17 11:29:49 +0000 (Tue, 17 Nov 2009)
&lt;br&gt;New Revision: 12301
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;Log:
&lt;br&gt;Update version of jersey to new stable release (used for json output)
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/pom.xml
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/pom.xml	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;+++ search_server/branches/ngs/servlet/pom.xml	2009-11-17 11:29:49 UTC (rev 12301)
&lt;br&gt;@@ -70,7 +70,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;com.sun.jersey&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;jersey-json&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;1.1.2-ea&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;1.1.4&amp;lt;/version&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.musicbrainz.search&amp;lt;/groupId&amp;gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26388380&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12301---search_server-branches-ngs-servlet-tp26388380p26388380.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26388365</id>
	<title>r12300 - in search_server/branches/ngs: 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</title>
	<published>2009-11-17T03:28:36Z</published>
	<updated>2009-11-17T03:28:36Z</updated>
	<author>
		<name>root-97</name>
	</author>
	<content type="html">Author: ijabz
&lt;br&gt;Date: 2009-11-17 11:28:36 +0000 (Tue, 17 Nov 2009)
&lt;br&gt;New Revision: 12300
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;&amp;nbsp; &amp;nbsp;search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;Log:
&lt;br&gt;Support for indexing and displaying ISRCs linked to a recording
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -65,7 +65,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void init() throws SQLException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addPreparedStatement(&amp;quot;ARTISTS&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addPreparedStatement(&amp;quot;ISRCS&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;SELECT recording as recordingId, &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;isrc &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;FROM isrc &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;WHERE recording BETWEEN ? AND ? &amp;nbsp;&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;order by recording,id&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addPreparedStatement(&amp;quot;ARTISTS&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;SELECT re.id as recordingId, &amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;acn.position as pos, &amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;acn.joinphrase as joinphrase, &amp;quot; +
&lt;br&gt;@@ -112,6 +119,38 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Get ISRC Information for the recordings
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param min
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param max
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws SQLException
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws IOException
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; loadISRCs(int min, int max) throws SQLException, IOException{
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ISRC
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; isrcWrapper = new HashMap&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PreparedStatement st = getPreparedStatement(&amp;quot;ISRCS&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;st.setInt(1, min);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;st.setInt(2, max);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultSet rs = st.executeQuery();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (rs.next()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int recordingId = rs.getInt(&amp;quot;recordingId&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List&amp;lt;String&amp;gt; list;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!isrcWrapper.containsKey(recordingId)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list = new LinkedList&amp;lt;String&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isrcWrapper.put(recordingId, list);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list = isrcWrapper.get(recordingId);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String isrc = new String(rs.getString(&amp;quot;isrc&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list.add(isrc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return isrcWrapper;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Get Artist Information for the recordings
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param min
&lt;br&gt;@@ -204,6 +243,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private void loadRecordings(IndexWriter indexWriter,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int min,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int max,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; isrcs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;ArtistWrapper&amp;gt;&amp;gt; artists,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;TrackWrapper&amp;gt;&amp;gt; tracks) throws SQLException, IOException{
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -212,19 +252,21 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;st.setInt(2, max);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ResultSet rs = st.executeQuery();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (rs.next()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;indexWriter.addDocument(documentFromResultSet(rs,artists,tracks));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;indexWriter.addDocument(documentFromResultSet(rs,isrcs,artists,tracks));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void indexData(IndexWriter indexWriter, int min, int max) throws SQLException, IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isrcWrapper &amp;nbsp; = loadISRCs(min,max);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;ArtistWrapper&amp;gt;&amp;gt; &amp;nbsp;artistWrapper = loadArtists(min,max);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;TrackWrapper&amp;gt;&amp;gt; &amp;nbsp; trackWrapper &amp;nbsp;= loadTracks(min,max);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;loadRecordings(indexWriter,min,max,artistWrapper,trackWrapper);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;loadRecordings(indexWriter,min,max,isrcWrapper,artistWrapper,trackWrapper);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Document documentFromResultSet(ResultSet rs,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; isrcs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;ArtistWrapper&amp;gt;&amp;gt; artists,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;Integer, List&amp;lt;TrackWrapper&amp;gt;&amp;gt; tracks) throws SQLException {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -237,6 +279,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.DURATION, rs.getInt(&amp;quot;duration&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addNumericField(RecordingIndexField.QUANTIZED_DURATION, rs.getInt(&amp;quot;duration&amp;quot;) / QUANTIZED_DURATION);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isrcs.containsKey(id)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//For each credit artist for this recording
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (String isrc : isrcs.get(id)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.ISRC, isrc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (tracks.containsKey(id)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//For each track for this recording
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (TrackWrapper track : tracks.get(id)) {
&lt;br&gt;@@ -266,6 +315,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.ARTIST, ArtistWrapper.createFullArtistCredit(artists.get(id)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return doc.getLuceneDocument();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/index/src/main/java/org/musicbrainz/search/index/RecordingIndexField.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -3,6 +3,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.lucene.document.Field;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.Analyzer;
&lt;br&gt;&amp;nbsp;import org.apache.lucene.analysis.KeywordAnalyzer;
&lt;br&gt;+import org.musicbrainz.search.analysis.CaseInsensitiveKeywordAnalyzer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Fields created in Lucene Search Index
&lt;br&gt;@@ -27,7 +28,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ARTIST_COMMENT &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;comment&amp;quot;,		Field.Store.YES, &amp;nbsp; &amp;nbsp;Field.Index.ANALYZED),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;TRACK_OUTPUT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;quot;trackoutoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO), &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;RECORDING_OUTPUT &amp;nbsp; &amp;nbsp;(&amp;quot;recordingoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;MEDIUM_POS_OUTPUT &amp;nbsp; &amp;nbsp;(&amp;quot;mediumposoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MEDIUM_POS_OUTPUT &amp;nbsp; (&amp;quot;mediumposoutput&amp;quot;,		Field.Store.YES,	Field.Index.NO),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ISRC &amp;nbsp; &amp;nbsp;		 &amp;nbsp; &amp;nbsp;(&amp;quot;isrc&amp;quot;,		 &amp;nbsp; &amp;nbsp;Field.Store.YES,	Field.Index.ANALYZED, new CaseInsensitiveKeywordAnalyzer()),
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private String name;
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -57,6 +57,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE track_name&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE track&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE recording&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE isrc&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE annotation&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;DROP TABLE artist_annotation&amp;quot;);
&lt;br&gt;@@ -363,6 +364,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;editpending integer NOT NULL DEFAULT 0,&amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;CONSTRAINT recording_pkey PRIMARY KEY (id)&amp;quot; +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;)&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;CREATE TABLE isrc&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;(&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;id serial NOT NULL,&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;recording integer NOT NULL,&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;isrc character(12) NOT NULL,&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;source smallint,&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;editpending integer NOT NULL DEFAULT 0,&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp;CONSTRAINT isrc_pkey PRIMARY KEY (id)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;)&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected void setupAnnotationTables(Statement stmt) throws Exception {
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -84,6 +84,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ &amp;quot;VALUES (1, '2f250ed2-6285-40f1-aa2a-14f1c05e9765', 1,1,33000, null,1)&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO track_name(id, name, refcount)VALUES (1, 'Do It Clean', 1) &amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO track_name(id, name, refcount)VALUES (2, 'Do It Cleans', 1) &amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO isrc(&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; id, recording, isrc, source, editpending)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; VALUES (1, 1, '1234568', null, 1);&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.addBatch(&amp;quot;INSERT INTO isrc(&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; id, recording, isrc, source, editpending)&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; VALUES (2, 1, 'abcdefghi', null, 1);&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.executeBatch();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stmt.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;conn.close();
&lt;br&gt;@@ -163,6 +170,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(RecordingIndexField.RECORDING_OUTPUT.getName()).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(RecordingIndexField.TRACK_OUTPUT.getName()).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, doc.getFields(RecordingIndexField.RECORDING_ID.getName()).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, doc.getFields(RecordingIndexField.ISRC.getName()).length);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;2f250ed2-6285-40f1-aa2a-14f1c05e9765&amp;quot;, doc.getField(RecordingIndexField.RECORDING_ID.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Do It Clean&amp;quot;, doc.getField(RecordingIndexField.RECORDING.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Crocodiles (bonus disc)&amp;quot;, doc.getField(RecordingIndexField.RELEASE.getName()).stringValue());
&lt;br&gt;@@ -173,6 +181,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.NUM_TRACKS.getName()).stringValue()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(4, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.TRACKNUM.getName()).stringValue()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(33000, NumericUtils.prefixCodedToInt(doc.getField(RecordingIndexField.DURATION.getName()).stringValue()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1234568&amp;quot;, doc.getField(RecordingIndexField.ISRC.getName()).stringValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;@@ -318,7 +327,49 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; /**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Basic test of all fields
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testISRC() throws Exception {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTrackOne();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory ramDir = new RAMDirectory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createIndex(ramDir);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexReader ir = IndexReader.open(ramDir, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, ir.numDocs());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = ir.document(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, doc.getFields(RecordingIndexField.ISRC.getName()).length);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1234568&amp;quot;, doc.getField(RecordingIndexField.ISRC.getName()).stringValue());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Basic test of all fields
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @throws Exception
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testNoISRC() throws Exception {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;addTrackTwo();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RAMDirectory ramDir = new RAMDirectory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;createIndex(ramDir);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IndexReader ir = IndexReader.open(ramDir, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, ir.numDocs());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Document doc = ir.document(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(0, doc.getFields(RecordingIndexField.ISRC.getName()).length);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ir.close();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testToAvoidWarnings()
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertEquals(1,1);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/RecordingWriter.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -68,6 +68,16 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording.setLength(BigInteger.valueOf(NumericUtils.prefixCodedToInt(duration)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] isrcs &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.ISRC);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(isrcs.length&amp;gt;0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IsrcList isrcList = of.createIsrcList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; isrcs.length; i++) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;isrcList.getIsrc().add(isrcs[i]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;recording.setIsrcList(isrcList);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] artistIds &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.ARTIST_ID);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] artistNames &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= doc.getValues(RecordingIndexField.ARTIST_NAME);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String[] artistJoinPhrases &amp;nbsp;= doc.getValues(RecordingIndexField.ARTIST_JOINPHRASE);
&lt;br&gt;&lt;br&gt;Modified: search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java
&lt;br&gt;===================================================================
&lt;br&gt;--- search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-11-16 21:35:25 UTC (rev 12299)
&lt;br&gt;+++ search_server/branches/ngs/servlet/src/test/java/org/musicbrainz/search/servlet/FindRecordingTest.java	2009-11-17 11:28:36 UTC (rev 12300)
&lt;br&gt;@@ -58,6 +58,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.RECORDING, &amp;quot;Gravitational Lens&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.MEDIUM_POS_OUTPUT, &amp;quot;1&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.RELEASE_TYPE, ReleaseGroupType.ALBUM.getName());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.ISRC, &amp;quot;123456789&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc.addField(RecordingIndexField.ISRC, &amp;quot;abcdefghi&amp;quot;);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.addDocument(doc.getLuceneDocument());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;writer.close();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ss = new RecordingSearch(new IndexSearcher(ramDir,true));
&lt;br&gt;@@ -95,6 +98,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Our Glorious 5 Year Plan&amp;quot;, doc.get(RecordingIndexField.RELEASE));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(234000, NumericUtils.prefixCodedToInt(doc.get(RecordingIndexField.DURATION)));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Gravitational Lens&amp;quot;, doc.get(RecordingIndexField.TRACK_OUTPUT));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;123456789&amp;quot;, doc.get(RecordingIndexField.ISRC));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void testFindRecordingByV1TrackId() throws Exception {
&lt;br&gt;@@ -185,6 +189,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6&amp;quot;, doc.get(RecordingIndexField.RECORDING_ID));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFindRecordingByISRC() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;isrc:123456789&amp;quot;, 0, 10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, res.totalHits);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Result result = res.results.get(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MbDocument doc = result.doc;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;7ca7782b-a602-448b-b108-bb881a7be2d6&amp;quot;, doc.get(RecordingIndexField.RECORDING_ID));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testFindRecordingByNonNumericDuration() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Results res = ss.searchLucene(&amp;quot;dur:fred&amp;quot;, 0, 10);
&lt;br&gt;@@ -303,7 +314,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;10\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;offset=\&amp;quot;0\&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;count=\&amp;quot;1\&amp;quot;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;isrc&amp;gt;123456789&amp;lt;/isrc&amp;gt;&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;isrc&amp;gt;abcdefghi&amp;lt;/isrc&amp;gt;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(output.contains(&amp;quot;&amp;lt;title&amp;gt;Gravitational Lens&amp;lt;/title&amp;gt;&amp;quot;));
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;MusicBrainz-commits mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26388365&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;MusicBrainz-commits@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/r12300---in-search_server-branches-ngs%3A-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-tp26388365p26388365.html" />
</entry>

</feed>
