package org.jboss.resteasy.plugins.touri;
import java.util.ArrayList;
import java.util.List;
import org.jboss.resteasy.spi.touri.URIResolver;
This class encapsulates how an object can be converted to a URI string. There
are three basic ways to perform the transformation:
- adding a @URITemplate("your-uri-template") to an object
- having an object extend URIable and have the object perform custom logic
- registering a custom URIResolver
Author: Solomon Duskis Version: $Revision: 1 $
/**
* <p>
* This class encapsulates how an object can be converted to a URI string. There
* are three basic ways to perform the transformation:
* </p>
* <ol>
* <li>adding a @URITemplate("your-uri-template") to an object
* <li>having an object extend URIable and have the object perform custom logic
* <li>registering a custom URIResolver
* </ol>
*
* @author <a href="mailto:sduskis@gmail.com">Solomon Duskis</a>
* @version $Revision: 1 $
*/
public class ObjectToURI
{
private static ObjectToURI instance = null;
static
{
instance = new ObjectToURI();
instance.defaultResolvers.add(new URIableURIResolver());
instance.defaultResolvers.add(new URITemplateAnnotationResolver());
instance.defaultResolvers.add(new MappedByAnnotationResolver());
}
public static ObjectToURI getInstance()
{
return instance;
}
private List<URIResolver> resolvers = new ArrayList<URIResolver>();
private List<URIResolver> defaultResolvers = new ArrayList<URIResolver>();
public void registerURIResolver(URIResolver uriResolver)
{
this.resolvers.add(uriResolver);
}
public String resolveURI(Object object)
{
String result = getResolver(object, resolvers);
if (result == null)
{
result = getResolver(object, defaultResolvers);
}
return result;
}
private String getResolver(Object object, List<URIResolver> resolvers)
{
Class<? extends Object> type = object.getClass();
for (URIResolver resolver : resolvers)
{
if (resolver.handles(type))
{
return resolver.resolveURI(object);
}
}
return null;
}
}