package org.jboss.resteasy.client.jaxrs.internal.proxy.processors.invocation;

import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation;
import org.jboss.resteasy.client.jaxrs.internal.proxy.processors.InvocationProcessor;

/**
 * allows a user to specify the url.
 *
 * @author <a href="mailto:sduskis@gmail.com">Solomon Duskis</a>
 * @version $Revision: 1 $
 */
public class URIParamProcessor implements InvocationProcessor {

    @Override
    public void process(ClientInvocation invocation, Object param) {
        URI uri = getUri(param);

        if (uri != null) {
            invocation.setUri(uri);
        }
    }

    private URI getUri(Object target) {
        try {
            if (target instanceof URI) {
                return (URI) target;
            } else if (target instanceof URL) {
                return ((URL) target).toURI();
            } else if (target instanceof String) {
                return new URI(target.toString());
            }
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        return null;
    }
}
