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}