http://server.com?action=search&query=%20
http://server.com?action=search&query=%20&document_type_id=N
http://server.com?action=search&query=%20&document_id=M
public class UrlBuilder { public UrlBuilder protocol(String protocol){ return this; } public UrlBuilder host(String host){ return this; } public UrlBuilder port(String port){ return this; } public UrlBuilder path(String path){ return this; } public UrlBuilder param(String key, String value){ return this; } public String build() { return null; } }
public class ServerUrlBuilder extends UrlBuilder{ public UrlBuilder fullSearch(String query){ return this; } public UrlBuilder fullSearch(String query, int documentTypeId){ return this; } public UrlBuilder documentSearch(String query, long documentId){ return this; } }
public class UrlBuilderTest extends TestCase { public void testRootUrl(){ UrlBuilder builder = new UrlBuilder(); String expected = "http://server.com/"; String actual = builder1.protocol(UrlBuilder.HTTP).host("server.com").build(); assertEquals(expected, actual); } public void testRootUrlWithOneParam(){ UrlBuilder builder = new UrlBuilder(); String expected = "http://server.com/?a=b"; String actual = builder.protocol(UrlBuilder.HTTP).host("server.com").param("a","b").build(); assertEquals(expected, actual); } public void testFullUrl(){ UrlBuilder builder = new UrlBuilder(); String expected = "http://server.com/folder/?a=b"; String actual = builder.protocol(UrlBuilder.HTTP).host("server.com").path("folder").param("a","b").build(); assertEquals(expected, actual); } }
public class SereverUrlBuilderTest extends TestCase { public void testFullSearch(){ ServerUrlBuilder builder = new ServerUrlBuilder(); String expected = "http://server.com?action=search&query= "; String actual = builder.fullSearch(" "); assertEquals(expected, actual); } public void testFullSearchWithDocumentTupeId(){ ServerUrlBuilder builder = new ServerUrlBuilder(); String expected = "http://server.com?action=search&query= &document_type_id=123"; String actual = builder.fullSearch(" ",123); assertEquals(expected, actual); } public void testDocumentSearch(){ ServerUrlBuilder builder = new ServerUrlBuilder(); String expected = "http://server.com?action=search&query= &document_id=123456"; String actual = builder.documentSearch(" ",123456); assertEquals(expected, actual); } }
public class UrlBuilder { public static final String HTTP = "http"; public static final String HTTPS = "https"; public static final String FTP = "ftp"; private static final String sProtocolHostSeparator = "://"; private static final String sPathSeparator = "/"; private static final String sParamSeparator = "?"; private static final String sParamEquals = "="; private static final String sParamConcotinator = "&"; private String mProtocol; private String mHost; private final ArrayList<String> mPath = new ArrayList<String>(); private final ArrayList<String> mParamKeys = new ArrayList<String>(); private final ArrayList<String> mParamValues = new ArrayList<String>(); public UrlBuilder(){} public UrlBuilder protocol(String protocol){ mProtocol = protocol; return this; } public UrlBuilder host(String host){ mHost = host; return this; } public UrlBuilder path(String path){ mPath.add(path); return this; } public UrlBuilder param(String key, String value){ mParamKeys.add(key); mParamValues.add(value); return this; } public String build() { final StringBuilder builder = new StringBuilder(); builder.append(mProtocol); builder.append(sProtocolHostSeparator); builder.append(mHost); builder.append(sPathSeparator); for(String path : mPath){ builder.append(path); builder.append(sPathSeparator); } if(mParamKeys.size()>0){ builder.append(sParamSeparator); for(int i=0; i<mParamKeys.size(); i++){ String key = mParamKeys.get(i); if(i!=0){ builder.append(sParamConcotinator); } String value = mParamValues.get(i); builder.append(key); builder.append(sParamEquals); builder.append(value); } } String result = builder.toString(); return result; } }
public class ServerUrlBuilder extends UrlBuilder{ public static final String SERVER_HOST = "server.com"; public static final String PARAM_ACTION = "action"; public static final String ACTION_SEARCH = "search"; public static final String PARAM_QUERY = "query"; public static final String PARAM_DOCUMENT_TYPE_ID = "document_type_id"; public static final String PARAM_DOCUMENT_ID = "document_id"; public UrlBuilder fullSearch(String query){ protocol(HTTP); host(SERVER_HOST); param(PARAM_ACTION, ACTION_SEARCH); param(PARAM_QUERY, query); return this; } public UrlBuilder fullSearch(String query, int documentTypeId){ protocol(HTTP); host(SERVER_HOST); param(PARAM_ACTION, ACTION_SEARCH); param(PARAM_QUERY, query); param(PARAM_DOCUMENT_TYPE_ID, documentTypeId); return this; } public UrlBuilder documentSearch(String query, long documentId){ protocol(HTTP); host(SERVER_HOST); param(PARAM_ACTION, ACTION_SEARCH); param(PARAM_QUERY, query); param(PARAM_DOCUMENT_ID, documentId); return this; } }
Source: https://habr.com/ru/post/130574/
All Articles