org.otalo.ao.client.JSONRequest.java Source code

Java tutorial

Introduction

Here is the source code for org.otalo.ao.client.JSONRequest.java

Source

/*
 * Copyright 2007 Google Inc.
 * Copyright (c) 2009 Regents of the University of California, Stanford University, and others
 * 
 * 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 org.otalo.ao.client;

import java.util.ArrayList;
import java.util.List;

import org.otalo.ao.client.model.JSOModel;

import com.google.gwt.core.client.JsArray;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;

/**
 * Class that acts as a client to a JSON service. 
 */
public final class JSONRequest {
    /**
     * Class for handling the response text associated with a request for a JSON
     * object.
     */
    public static final class AoAPI {
        public static final String USER = "user/";
        public static final String THREAD = "thread/";
        public static final String FORUM = "forum/";
        public static final String MESSAGES = "messages/";
        public static final String UPDATE_MESSAGE = "update/message/";
        public static final String MOVE = "move/";
        public static final String RECORD_OR_UPLOAD = "recordorupload/";
        public static final String APPROVE = "approve/";
        public static final String REJECT = "reject/";
        public static final String UPDATE_STATUS = "update/status/";
        public static final String LOGOUT = "/logout/";
        public static final String TAGS = "tags/";
        public static final String TAGS_BY_LINE = "tagsbyline/";
        public static final String MESSAGE_TAGS = "messagetag/";
        public static final String RESPONDERS = "responders/";
        public static final String MESSAGE_RESPONDERS = "messageresponder/";
        public static final String MODERATOR = "moderator/";
        public static final String LINE = "line/";
        public static final String DOWNLOAD = "download/mf/";
        public static final String DOWNLOAD_SURVEY_INPUT = "download/si/";
        public static final String SURVEY = "survey/";
        public static final String BCAST_MESSAGE = "bcast/";
        public static final String FORWARD_THREAD = "fwdthread/";
        public static final String SURVEY_INPUT = "surveyinput/";
        public static final String PROMPT_RESPONSES = "promptresponses/";
        public static final String CANCEL_SURVEY = "cancelsurvey/";
        public static final String SURVEY_DETAILS = "surveydetails/";
        public static final String REGULAR_BCAST = "regularbcast/";
        public static final String SMS = "sms/";
        public static final String SMS_RECIPIENTS = "smsrecipients/";
        public static final String SEND_SMS = "sendsms/";
        public static final String CREATE_GROUP = "s/creategroup/";
        public static final String GROUP = "group/";
        public static final String MEMBERS = "s/members/";
        public static final String UPDATE_MEMBER = "s/update/member/";
        public static final String ADD_MEMBERS = "s/addmembers/";
        public static final String UPDATE_GROUP_SETTINGS = "s/update/groupsettings/";
        public static final String UPDATE_MEMBER_STATUS = "s/update/memberstatus/";
        public static final String DELETE_GROUP = "s/deletegroup/";
        public static final String BROADCAST_REPORTS = "s/broadcastreports/";
        public static final String DOWNLOAD_BCAST_REPORT = "s/download/bcastreport/";
        public static final String DOWNLOAD_STREAM_REPORT = "s/download/streamreport/";
        public static final String BALANCE = "s/balance/";

        public static final String BUY_CREDITS = "payment/pay/";

        public static final String POSTS_TOP = "top";
        public static final String POSTS_ALL = "all";
        public static final String POSTS_RESPONSES = "responses";

        @Deprecated
        public static final String TAG_TYPE_CROP = "agri-crop";
        @Deprecated
        public static final String TAG_TYPE_TOPIC = "agri-topic";

        public static final String MSG_METADATA = "MESSAGE_METADATA";
        public static final String MEMBER_METADATA = "MEMBER_METADATA";

        /**
         * Search related constants
         * @author nikhil
         *
         */
        public static interface SearchConstants {
            public static final String SEARCH = "search/";
            public static final String SEARCH_PARAM = "search_data";

            //NOTE: THESE ALL OF THE CONSTANTS VALUE MUST BE CONSITANT WITH CONSTANTS ON SERVER SIDE IN VIEWS.PY

            //all the search related fields
            public static final String SEARCH_KEYWORD = "search_keyword";
            public static final String STATUS = "status";
            public static final String FROMDATE = "fromDate";
            public static final String TODATE = "toDate";
            public static final String TAG = "tags";
            public static final String AUTHOR = "author";
            public static final String PAGE_PARAM = "result_page";
            public static final String FORUM = "forum";

            //status related constants
            //NOTE: THESE CONSTANTS VALUE MUST BE MATCHED WITH STATUS VALUES ON SERVER SIDE IN MODELS.PY
            public static interface StausConstants {
                public static final String STATUS_ANY = "-1";
                public static final String STATUS_INPUT = "0";
                public static final String STATUS_APPROVED = "1";
                public static final String STATUS_REJECTED = "2";
                public static final String STATUS_RESPONDED = "3";
            }

            //author related constants
            //NOTE: THESE CONSTANTS VALUE MUST BE MATCHED WITH FIELD NAME IN Message_forumIndex in search_index.py file
            public static interface AuthorConstants {
                public static final String ANY = "author_any";
                public static final String AUTHOR_NAME = "author_name";
                public static final String AUTHOR_NUMBER = "author_number";
                public static final String AUTHOR_DISTRICT = "author_district";
                public static final String AUTHOR_TALUKA = "author_taluka";
                public static final String AUTHOR_VILLAGE = "author_village";
            }

            //forum related constants
            public static final String FORUM_ANY = "forum_any";

        }

        /**
         * Should be consistent with views.py validation codes
         * @author neil
         *
         */
        public enum ValidationError {
            INVALID_NUMBER(1), NO_CONTENT(2), INVALID_GROUPNAME(3), MEMBER_CREDITS_EXCEEDED(4), INVALID_DATE(
                    5), INVALID_GROUP_SETTING(
                            6), INVALID_FILE_FORMAT(7), MAX_GROUPS_REACHED(8), NOT_ENOUGH_BALANCE(9);

            private int code;

            private ValidationError(int code) {
                this.code = code;
            }

            public int getCode() {
                return code;
            }

            public static ValidationError getError(int code) {
                for (ValidationError s : values()) {
                    if (s.getCode() == code)
                        return s;
                }

                return null;
            }
        }
    }

    public static List<JSOModel> getModels(String jsonStr) {
        jsonStr = jsonStr.replaceAll("\\n", "");
        List<JSOModel> models = new ArrayList<JSOModel>();
        if (JSOModel.isArray(jsonStr)) {
            JsArray<JSOModel> data = JSOModel.arrayFromJson(jsonStr);

            for (int i = 0; i < data.length(); i++) {
                models.add(data.get(i));
            }

        } else {
            JSOModel data = JSOModel.fromJson(jsonStr);
            models.add(data);
        }

        return models;
    }

    private class JSONResponseTextHandler implements RequestCallback {
        public void onError(Request request, Throwable exception) {
            // TODO
        }

        public void onResponseReceived(Request request, Response response) {
            if (response.getStatusCode() == 200) {
                List<JSOModel> models = getModels(response.getText());

                requester.dataReceived(models);
            } else {
                onError(request, new RequestException(response.getText()));
            }

        }

    }

    public static final String BASE_URL = "/console/";
    private JSONRequester requester;

    /*
     * Fetch the requested URL.
     */
    public void doFetchURL(String fetchURL, JSONRequester requester) {
        this.requester = requester;
        // RequestBuilder used to issue HTTP GET requests.
        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, URL.encode(BASE_URL + fetchURL));
        try {
            requestBuilder.sendRequest(null, new JSONResponseTextHandler());
        } catch (RequestException ex) {
            // TODO
        }
    }

    /*
     * Fetch the requested URL.
     */
    public void doPost(String fetchURL, String postData, JSONRequester requester) {
        this.requester = requester;
        // RequestBuilder used to issue HTTP GET requests.
        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(BASE_URL + fetchURL));
        requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
        try {
            requestBuilder.sendRequest(postData, new JSONResponseTextHandler());
        } catch (RequestException ex) {
            // TODO
        }
    }

    public static void doPost(String url, String postData) {
        RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);

        try {
            builder.setHeader("Content-Type", "application/x-www-form-urlencoded");
            Request response = builder.sendRequest(postData, new RequestCallback() {

                public void onError(Request request, Throwable exception) {
                    // code omitted for clarity
                }

                public void onResponseReceived(Request request, Response response) {
                    // code omitted for clarity
                }
            });
        } catch (RequestException e) {
        }
    }

}