danielpassos
11/2/2012 - 1:51 AM

Create Pipe With Config

Create Pipe With Config

package org.aerogear.android.impl.pipeline;

import java.net.URL;

public final class PipeConfig {

    private final String name;
    private final String endpoint;
    private final Type type;

    public PipeConfig(String name) {
        this(name, name);
    }

    public PipeConfig(String name, String endpoint) {
        this(name, endpoint, Type.REST);
    }

    public PipeConfig(String name, Type type) {
        this(name, name, type);
    }

    public PipeConfig(String name, String endpoint, Type type) {
        this.name = name;
        this.endpoint = endpoint;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public Type getType() {
        return type;
    }
}
public class Pipeline {

    private final URL baseURL;

    private final Map<String, Pipe> pipes = new HashMap<String, Pipe>();

    public Pipe pipe(Class klass) {
        PipeConfig config = new PipeConfig(klass.getSimpleName(), baseURL);
        return pipe(klass, config);
    }

    public Pipe pipe(Class klass, PipeConfig config) {
        Pipe pipe = AdapterFactory.createPipe(klass, config);
        pipes.put(config.getName(), pipe);
        return pipe;
    }
    
    . . .
    
}
final class AdapterFactory {

    private AdapterFactory() {}

    public static Pipe createPipe(Class klass, PipeConfig config) {
        if (config.getType().equals(Type.REST)) {
            return new RestAdapter(klass, new HttpRestProvider(appendEndpoint(config.getUrl(), config.getEndpoint())));
        }
        throw new IllegalArgumentException("Type is not supported yet");
    }

}