NamedParameter.java :  » REST » utterlyidle » com » googlecode » utterlyidle » Java Open Source

Java Open Source » REST » utterlyidle 
utterlyidle » com » googlecode » utterlyidle » NamedParameter.java
package com.googlecode.utterlyidle;

import com.googlecode.yadic.Container;
import com.googlecode.yadic.Resolver;
import com.googlecode.yadic.TypeMap;

import java.lang.reflect.Type;
import java.util.concurrent.Callable;

public class NamedParameter  {
    private final String name;
    private final Class<? extends Parameters<String, String>> parametersClass;

    public NamedParameter(String name, Class<? extends Parameters<String, String>> parametersClass) {
        this.name = name;
        this.parametersClass = parametersClass;
    }

    public String name() {
        return name;
    }

    public Class<? extends Parameters<String, String>> parametersClass() {
        return parametersClass;
    }

    public Resolver<String> extractValueFrom(final TypeMap typeMap) {
        return new Resolver<String>() {
            public String resolve(Type type) throws Exception {
                Parameters<String, String> parameters = (Parameters<String, String>) typeMap.resolve(parametersClass());
                if(!parameters.contains(name())){
                    throw new IllegalArgumentException();
                }
                return parameters.getValue(name());
            }
        };
    }


    public Resolver<Iterable<String>> extractValuesFrom(final TypeMap typeMap) {
        return new Resolver<Iterable<String>>() {
            public Iterable<String> resolve(Type type) throws Exception {
                Parameters<String, String> parameters = (Parameters<String, String>) typeMap.resolve(parametersClass());
                if(!parameters.contains(name())){
                    throw new IllegalArgumentException();
                }
                return parameters.getValues(name());
            }
        };
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.