org.runnerup.export.util.SyncHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.runnerup.export.util.SyncHelper.java

Source

/*
 * Copyright (C) 2014 paradix@10g.pl
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.runnerup.export.util;

import android.annotation.TargetApi;
import android.content.ContentValues;
import android.os.Build;

import org.json.JSONException;
import org.json.JSONObject;
import org.runnerup.common.util.Constants;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@TargetApi(Build.VERSION_CODES.FROYO)
public final class SyncHelper {

    /**
     * The regex pattern to find a form input parameter in HTML.
     */
    public static final Pattern inputPattern = Pattern.compile("<input(.*?)>",
            Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    private static final Pattern attributePattern = Pattern.compile("(\\w+)=\"(.*?)\"");

    private SyncHelper() {
        throw new UnsupportedOperationException();
    }

    public static String URLEncode(String s) {
        try {
            return URLEncoder.encode(s, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return s;
        }
    }

    public static void postMulti(HttpURLConnection conn, Part<?> parts[]) throws IOException {
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****" + Long.toString(System.currentTimeMillis()) + "*****";
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
        DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
        for (Part<?> part : parts) {
            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
            outputStream.writeBytes("Content-Disposition: form-data; name=\"" + part.getName() + "\"");
            if (part.getFilename() != null)
                outputStream.writeBytes("; filename=\"" + part.getFilename() + "\"");
            outputStream.writeBytes(lineEnd);

            if (part.getContentType() != null)
                outputStream.writeBytes("Content-Type: " + part.getContentType() + lineEnd);
            if (part.getContentTransferEncoding() != null)
                outputStream
                        .writeBytes("Content-Transfer-Encoding: " + part.getContentTransferEncoding() + lineEnd);
            outputStream.writeBytes(lineEnd);
            part.getValue().write(outputStream);
            outputStream.writeBytes(lineEnd);
        }
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        outputStream.flush();
        outputStream.close();
    }

    public static Map<String, String> parseAttributes(String attributesStr) {
        Map<String, String> attributes = new HashMap<String, String>();
        Matcher matcher = attributePattern.matcher(attributesStr);
        while (matcher.find()) {
            String key = matcher.group(1);
            String value = "";
            String g = matcher.group(2);
            if (g != null) {
                value = g;
            }
            attributes.put(key, value.trim());
        }
        return attributes;
    }

    /**
     * For feed generation...
     */
    public static void setName(ContentValues c, String string) {
        // Jonas Oreland
        if (string.contains(" ")) {
            int index = string.indexOf(' ');
            c.put(Constants.DB.FEED.USER_FIRST_NAME, string.substring(0, index).trim());
            c.put(Constants.DB.FEED.USER_LAST_NAME, string.substring(index).trim());
        } else {
            c.put(Constants.DB.FEED.USER_FIRST_NAME, string);
        }
    }

    public static JSONObject parse(String in) throws JSONException {
        final Scanner s = new Scanner(in);
        final JSONObject o = new JSONObject(s.useDelimiter("\\A").next());
        s.close();
        return o;
    }

    public static JSONObject parse(InputStream in) throws JSONException {
        final Scanner s = new Scanner(in);
        final JSONObject o = new JSONObject(s.useDelimiter("\\A").next());
        s.close();
        return o;
    }

    public static JSONObject parse(Reader in) throws JSONException {
        final Scanner s = new Scanner(in);
        final JSONObject o = new JSONObject(s.useDelimiter("\\A").next());
        s.close();
        return o;
    }

    public static String readInputStream(InputStream in) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder buf = new StringBuilder();
        String s = null;
        while ((s = reader.readLine()) != null) {
            buf.append(s);
        }
        return buf.toString();
    }

    public static void postData(HttpURLConnection conn, FormValues fv) throws IOException {
        OutputStream wr = new BufferedOutputStream(conn.getOutputStream());
        if (fv != null) {
            fv.write(wr);
        }
        wr.flush();
        wr.close();
    }

    public static Map<String, String> parseHtml(String html) {
        Matcher matcher = inputPattern.matcher(html);
        Map<String, String> parameters = new HashMap<String, String>();

        while (matcher.find()) {
            Map<String, String> attributes = parseAttributes(matcher.group(1));
            String name = attributes.get("name");
            if (name != null) {
                String value = attributes.get("value");
                if (value == null) {
                    value = "";
                }
                parameters.put(name, value);
            }
        }
        return parameters;
    }

    public static String findName(Set<String> names, String s) {
        for (String k : names) {
            if (k.contains(s))
                return k;
        }
        return null;
    }
}