001package com.pusher.client.util;
002
003import java.io.UnsupportedEncodingException;
004import java.net.URLEncoder;
005import java.util.HashMap;
006import java.util.Map;
007
008/**
009 * Form URL-Encoded Connection Factory
010 *
011 * Allows HttpAuthorizer to write URL parameters to the connection
012 */
013public class UrlEncodedConnectionFactory extends ConnectionFactory {
014
015    private Map<String, String> mQueryStringParameters = new HashMap<String, String>();
016
017    /**
018     * Create a Form URL-encoded factory
019     */
020    public UrlEncodedConnectionFactory() {
021    }
022
023    /**
024     * Create a Form URL-encoded factory
025     *
026     * @param queryStringParameters extra parameters that need to be added to query string.
027     */
028    public UrlEncodedConnectionFactory(final Map<String, String> queryStringParameters) {
029        this.mQueryStringParameters = queryStringParameters;
030    }
031
032    @Override
033    public String getCharset() {
034        return "UTF-8";
035    }
036
037    @Override
038    public String getContentType() {
039        return "application/x-www-form-urlencoded";
040    }
041
042    public String getBody() {
043        final StringBuffer urlParameters = new StringBuffer();
044        try {
045            urlParameters.append("channel_name=").append(URLEncoder.encode(getChannelName(), getCharset()));
046            urlParameters.append("&socket_id=").append(URLEncoder.encode(getSocketId(), getCharset()));
047
048            // Adding extra parameters supplied to be added to query string.
049            for (final String parameterName : mQueryStringParameters.keySet()) {
050                urlParameters.append("&").append(parameterName).append("=");
051                urlParameters.append(URLEncoder.encode(mQueryStringParameters.get(parameterName), getCharset()));
052            }
053        } catch (UnsupportedEncodingException e) {
054            e.printStackTrace();
055        }
056        return urlParameters.toString();
057    }
058}