/** * Copyright 2013 Twitter, Inc. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ package com.twitter.hbc.core.endpoint; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.twitter.hbc.core.Constants; import com.twitter.hbc.core.HttpConstants; import com.twitter.joauth.UrlCodec; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class BaseEndpoint implements Endpoint { protected final ConcurrentMap<String, String> queryParameters; protected final ConcurrentMap<String, String> postParameters; protected final String path; protected final String httpMethod; protected volatile String apiVersion; public BaseEndpoint(String path, String httpMethod) { this.path = Preconditions.checkNotNull(path); this.httpMethod = Preconditions.checkNotNull(httpMethod); Preconditions.checkArgument(HttpConstants.checkHttpMethod(httpMethod)); this.queryParameters = new ConcurrentHashMap<String, String>(); this.postParameters = new ConcurrentHashMap<String, String>(); this.apiVersion = Constants.CURRENT_API_VERSION; } public String getPath(String apiVersion) { return "/" + apiVersion + this.path; } public final String getPath() { return getPath(apiVersion); } @Override public String getURI() { addDefaultParams(); if (queryParameters.isEmpty()) { return getPath(); } else { return getPath() + "?" + generateParamString(queryParameters); } } protected void addDefaultParams() {} protected String generateParamString(Map<String, String> params) { return Joiner.on("&") .withKeyValueSeparator("=") .join(params); } @Override public String getQueryParamString() { return generateParamString(queryParameters); } @Override public String getPostParamString() { return generateParamString(postParameters); } @Override public String getHttpMethod() { return httpMethod; } @Override public void addPostParameter(String param, String value) { postParameters.put(UrlCodec.encode(param), UrlCodec.encode(value)); } @Override public void removePostParameter(String param) { postParameters.remove(UrlCodec.encode(param)); } @Override public void addQueryParameter(String param, String value) { queryParameters.put(UrlCodec.encode(param), UrlCodec.encode(value)); } @Override public void removeQueryParameter(String param) { queryParameters.remove(UrlCodec.encode(param)); } public void setApiVersion(String apiVersion) { this.apiVersion = Preconditions.checkNotNull(apiVersion); } }