package org.jboss.resteasy.core.providerfactory;
import org.jboss.resteasy.core.MediaTypeMap;
import org.jboss.resteasy.spi.util.Types;
import javax.ws.rs.Priorities;
Allow us to sort message body implementations that are more specific for their types
i.e. MessageBodyWriter<Object> is less specific than MessageBodyWriter<String>.
This helps out a lot when the desired media type is a wildcard and to weed out all the possible
default mappings.
/**
* Allow us to sort message body implementations that are more specific for their types
* i.e. MessageBodyWriter<Object> is less specific than MessageBodyWriter<String>.
* <p>
* This helps out a lot when the desired media type is a wildcard and to weed out all the possible
* default mappings.
*/
public class SortedKey<T> implements Comparable<SortedKey<T>>, MediaTypeMap.Typed
{
private final T obj;
private final boolean isBuiltin;
private final Class<?> template;
private final int priority;
public SortedKey(final Class<?> intf, final T reader, final Class<?> readerClass, final int priority, final boolean isBuiltin)
{
this.obj = reader;
// check the super class for the generic type 1st
Class<?> t = Types.getTemplateParameterOfInterface(readerClass, intf);
template = (t != null) ? t : Object.class;
this.priority = priority;
this.isBuiltin = isBuiltin;
}
public SortedKey(final Class<?> intf, final T reader, final Class<?> readerClass, final boolean isBuiltin)
{
this(intf, reader, readerClass, Priorities.USER, isBuiltin);
}
public SortedKey(final Class<?> intf, final T reader, final Class<?> readerClass)
{
this(intf, reader, readerClass, Priorities.USER, false);
}
Direct populate
Params: - obj –
- isBuiltin –
- template – template class of component type
- priority –
/**
* Direct populate
*
* @param obj
* @param isBuiltin
* @param template template class of component type
* @param priority
*/
public SortedKey(final T obj, final boolean isBuiltin, final Class<?> template, final int priority) {
this.obj = obj;
this.isBuiltin = isBuiltin;
this.template = template;
this.priority = priority;
}
public int compareTo(SortedKey<T> tMessageBodyKey)
{
// Sort user provider before builtins
if (this == tMessageBodyKey)
return 0;
if (isBuiltin == tMessageBodyKey.isBuiltin)
{
if (this.priority < tMessageBodyKey.priority)
{
return -1;
}
if (this.priority == tMessageBodyKey.priority)
{
return 0;
}
if (this.priority > tMessageBodyKey.priority)
{
return 1;
}
}
if (isBuiltin)
return 1;
else
return -1;
}
public Class<?> getType()
{
return template;
}
public T getObj()
{
return obj;
}
public int getPriority() {
return priority;
}
}