/**
*
* TURTLE PLAYER
*
* Licensed under MIT & GPL
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
package com.turtleplayer.util;
import com.turtleplayer.model.*;
import com.turtleplayer.presentation.InstanceFormatter;
import java.text.Collator;
import java.util.Comparator;
public class FormattedInstanceComparator implements Comparator<Instance>
{
private final InstanceFormatter listInstanceFormatter;
public FormattedInstanceComparator(InstanceFormatter listInstanceFormatter)
{
this.listInstanceFormatter = listInstanceFormatter;
}
public int compare(Instance lhs,
Instance rhs)
{
int lhsWeight = getOrderWeight(lhs);
int rhsWeight = getOrderWeight(rhs);
int weightDiff = new Integer(lhsWeight).compareTo(rhsWeight);
return weightDiff != 0 ? weightDiff :
Collator.getInstance().compare(lhs.accept(listInstanceFormatter), rhs.accept(listInstanceFormatter));
}
private int getOrderWeight(Instance instance)
{
return instance.accept(new InstanceVisitor<Integer>()
{
public Integer visit(Track track)
{
return 5;
}
public Integer visit(SongDigest track)
{
return 5;
}
public Integer visit(Album album)
{
return 4;
}
public Integer visit(GenreDigest genre)
{
return 2;
}
public Integer visit(ArtistDigest artist)
{
return 3;
}
public Integer visit(FSobject FSobject)
{
return 1;
}
});
}
}