001package burrows.api.finance.core;
002
003import java.util.Collection;
004
005import burrows.api.finance.model.Company;
006import burrows.api.finance.model.Format;
007import burrows.api.finance.model.RequestURLData;
008
009/**
010 *
011 * @author <a href="mailto:jaredsburrows@gmail.com">Jared Burrows</a>
012 * @since 0.0.1
013 */
014public class RequestURL {
015
016    private RequestURL() {
017
018    }
019
020    public static ICompany Builder() {
021        return new RequestBuilder();
022    }
023
024    /**
025     * Interface for selecting {@link burrows.api.finance.model.Company} API.
026     */
027    public static interface ICompany {
028        IFormat withCompany(final Company company);
029    }
030
031    public static interface IFormat {
032        IQuote withFormat(final Format format);
033    }
034
035    public static interface IQuote {
036        IBuild addQuote(final String quotes);
037
038        IBuild addQuotes(final Collection<String> quotes);
039    }
040
041    public static interface IBuild {
042        RequestURLData build();
043
044        String buildURL();
045    }
046
047    private static class RequestBuilder implements ICompany, IFormat, IQuote, IBuild {
048
049        final RequestURLData requestURLData = new RequestURLData();
050
051        @Override
052        public IFormat withCompany(final Company company) {
053            this.requestURLData.setCompany(company);
054            return this;
055        }
056
057        @Override
058        public IQuote withFormat(final Format format) {
059            this.requestURLData.setFormat(format);
060            return this;
061        }
062
063        @Override
064        public IBuild addQuote(final String quotes) {
065            this.requestURLData.addQuote(quotes);
066            return this;
067        }
068
069        @Override
070        public IBuild addQuotes(final Collection<String> quotes) {
071            this.requestURLData.addQuotes(quotes);
072            return this;
073        }
074
075        @Override
076        public RequestURLData build() {
077            return this.requestURLData;
078        }
079
080        @Override
081        public String buildURL() {
082            return new RequestURLSerializer(this.requestURLData).getURL();
083        }
084    }
085}