CloudTVURLBuilder
欸..嚴格說來這不是一個設計模式, 當初寫這個CloudTVURLBuilder的關係, 是因為我們要組合HTTP Parameter, 然而我們有數十種不同組合的 Parameter, 若用土法煉鋼的方式, 那這程式會變得很醜, 於是我就創造了這個Builder, 於是使用端再也不用去煩惱要怎麼組合http parameter了, 他只要會使用這個builder跟丟入參數即可。
public class CloudTVURLBuilder {
private HashMap<CloudTVParams, String> mCloudTVParamsHashMap;
private HttpMethod mMethod = HttpMethod.GET;
private CloudTVUrl mCloudTVUrl;
private HashMap<String, String> mParameterHashMap;
public CloudTVURLBuilder(CloudTVUrl cloudTVUrl, HttpMethod httpMethod) {
init();
if (UserSingleton.getInstance() != null && httpMethod == HttpMethod.POST)
setValue(CloudTVParams.KEY_USER_ID, UserSingleton.getInstance().getId());
mMethod = httpMethod;
mCloudTVUrl = cloudTVUrl;
}
private void initHashMap() {
mParameterHashMap = new HashMap<>();
mCloudTVParamsHashMap = new HashMap<>();
mCloudTVParamsHashMap.put(CloudTVParams.KEY_VERSION, "version");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_SP_ID, "spId");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_USER_ID, "userId");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_CHANNEL_ID, "channelId");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_PAGE, "page");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_TYPE, "type");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_PLAY_DATE, "playDate");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_MENU_CODE, "menuCode");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_START_TIME, "startTime");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_END_TIME, "endTime");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_EPG_NAME, "epgName");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_EPG_ID, "epgId");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_EPISODE_NUMBER, "episodeNumber");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_PROGRAM_ID, "programId");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_BOOKING_TYPE, "bookingType");
mCloudTVParamsHashMap.put(CloudTVParams.KEY_PHONE, "phone");
}
private void init() {
initHashMap();
setValue(CloudTVParams.KEY_VERSION, Constants.WEB_SERVICE_CLOUDTV_VERSION);
setValue(CloudTVParams.KEY_TYPE, Constants.WEB_SERVICE_CLOUDTV_TYPE);
setValue(CloudTVParams.KEY_SP_ID, Constants.WEB_SERVICE_CLOUDTV_SPLD);
}
public String getParamsNameAndValue() {
StringBuilder params = new StringBuilder();
Iterator iterator = mParameterHashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry mapEntry = (Map.Entry) iterator.next();
params.append(mapEntry.getKey());
params.append("=");
params.append(mapEntry.getValue());
if (iterator.hasNext())
params.append("&");
}
return params.toString();
}
public String getURLandMethod() {
String prefix = "http://" + Constants.WEB_SERVICE_CLOUDTV_SERVER_IP + ":" + Constants.WEB_SERVICE_CLOUDTV_SERVER_PORT;
String method = enumToString(mCloudTVUrl);
return prefix + method;
}
public HttpMethod getHTTPMethod() {
return mMethod;
}
public String getValue(CloudTVParams key) {
if (!mCloudTVParamsHashMap.containsKey(key))
return "";
String paramName = mCloudTVParamsHashMap.get(key);
if (!mParameterHashMap.containsKey(paramName))
return "";
return mParameterHashMap.get(paramName);
}
public boolean setValue(CloudTVParams key, String value) {
if (!mCloudTVParamsHashMap.containsKey(key))
return false;
String paramName = mCloudTVParamsHashMap.get(key);
mParameterHashMap.put(paramName, value);
return false;
}
public String enumToString(CloudTVUrl cloudTVUrl) {
String cloudTVUrlString;
switch (cloudTVUrl) {
case BOOKING_CHANNEL_DAY_LIST:
cloudTVUrlString = "/cloudeer/rest/dev/user/booking/channel/day/list";
break;
case BOOKING_CHANNEL_LIST:
cloudTVUrlString = "/cloudeer/rest/dev/user/booking/channel/list";
break;
case BOOKING_CHANNEL_ADD:
cloudTVUrlString = "/cloudeer/rest/dev/user/booking/channel/add";
break;
case CHANNEL_LIST:
cloudTVUrlString = "/cloudeer/rest/dev/channel/list";
break;
case CHANNEL_EPG:
cloudTVUrlString = "/cloudeer/rest/dev/channel/epg";
break;
case CHANNEL_CATEGORY:
cloudTVUrlString = "/cloudeer/rest/dev/channel/category";
break;
case COLLECTION_CHANNEL_LIST:
cloudTVUrlString = "/cloudeer/rest/dev/user/collection/channel/list";
break;
case COLLECTION_CHANNEL_CHECK:
cloudTVUrlString = "/cloudeer/rest/dev/user/collection/channel/check";
break;
case COLLECTION_CHANNEL_ADD:
cloudTVUrlString = "/cloudeer/rest/dev/user/collection/channel/add";
break;
case COLLECTION_CHANNEL_DELETE:
cloudTVUrlString = "/cloudeer/rest/dev/user/collection/channel/delete";
break;
case WATCHING_ADD:
cloudTVUrlString = "/cloudeer/rest/dev/user/watchHistory/add";
break;
case QUERY_FRIEND:
cloudTVUrlString = "/plugins/push/user";
break;
default:
cloudTVUrlString = "";
break;
}
return cloudTVUrlString;
}
public enum CloudTVParams {
KEY_VERSION,
KEY_SP_ID,
KEY_USER_ID,
KEY_CHANNEL_ID,
KEY_PAGE, KEY_TYPE,
KEY_PLAY_DATE,
KEY_MENU_CODE,
KEY_START_TIME,
KEY_END_TIME,
KEY_EPG_NAME,
KEY_EPG_ID,
KEY_EPISODE_NUMBER,
KEY_PROGRAM_ID,
KEY_PHONE,
KEY_BOOKING_TYPE
}
public enum CloudTVUrl {
// Booking
BOOKING_CHANNEL_ADD, BOOKING_CHANNEL_LIST, BOOKING_CHANNEL_DAY_LIST,
// Channel
CHANNEL_CATEGORY, CHANNEL_EPG, CHANNEL_LIST,
// Watching History
WATCHING_ADD,
// Friends
QUERY_FRIEND,
// Collection
COLLECTION_CHANNEL_LIST, COLLECTION_CHANNEL_CHECK, COLLECTION_CHANNEL_ADD, COLLECTION_CHANNEL_DELETE
}
public enum HttpMethod {
POST, GET
}
}