com.dimdim.conference.ui.json.client.ResponseAndEventReader.java Source code

Java tutorial

Introduction

Here is the source code for com.dimdim.conference.ui.json.client.ResponseAndEventReader.java

Source

/*
 **************************************************************************
 *                                                                        *
 *               DDDDD   iii             DDDDD   iii                      *
 *               DD  DD      mm mm mmmm  DD  DD      mm mm mmmm           *
 *               DD   DD iii mmm  mm  mm DD   DD iii mmm  mm  mm          *
 *               DD   DD iii mmm  mm  mm DD   DD iii mmm  mm  mm          *
 *               DDDDDD  iii mmm  mm  mm DDDDDD  iii mmm  mm  mm          *
 *                                                                        *
 **************************************************************************
 **************************************************************************
 *                                                                        *
 * Part of the DimDim V 1.0 Codebase (http://www.dimdim.com)             *
 *                                                                        *
 * Copyright (c) 2006 Communiva Inc. All Rights Reserved.                 *
 *                                                                        *
 *                                                                        *
 * This code is licensed under the DimDim License                         *
 * For details please visit http://www.dimdim.com/license                 *
 *                                                                        *
 **************************************************************************
 */

package com.dimdim.conference.ui.json.client;

import java.util.ArrayList;

import com.google.gwt.user.client.Window;

import com.google.gwt.json.client.JSONValue;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONArray;

/**
 * @author Jayant Pandit
 * @email Jayant.Pandit@communiva.com
 * 
 * This class can be used to read the response and event json buffers received
 * from server into more directly useable objects.
 */
public class ResponseAndEventReader {
    private static final String KEY_TYPE = "type";
    private static final String KEY_EVENT_ID = "eventId";
    private static final String KEY_FEATURE_ID = "featureId";
    private static final String KEY_DATA = "data";
    private static final String KEY_DATA_TYPE = "dataType";
    private static final String KEY_DATA_OBJECT_CLASS = "objClass";

    private static final String DATA_OBJECT_CLASS_ROSTER_ENTRY = "RosterEntry";
    private static final String DATA_OBJECT_CLASS_RESOURCE_OBJECT = "ResourceObject";
    private static final String DATA_OBJECT_CLASS_PRESENTATION_CONTROL_EVENT = "PresentationControlEvent";
    private static final String DATA_OBJECT_CLASS_SETTINGS_EVENT = "SettingsEvent";
    private static final String DATA_OBJECT_CLASS_STREAM_CONTROL_EVENT = "StreamControlEvent";
    private static final String DATA_OBJECT_CLASS_CHAT_ENTRY = "ChatEntry";
    private static final String DATA_OBJECT_CLASS_POPOUT_PANEL_DATA = "PopoutPanelData";
    private static final String DATA_OBJECT_CLASS_FORM_DEFAULT_VALUES = "FormDefaultValues";
    private static final String DATA_OBJECT_CLASS_EMAIL_ATTEMPT_RESULT = "EmailAttemptResult";
    private static final String DATA_OBJECT_CLASS_WHITEBOARD_CONTROL = "wce";
    private static final String DATA_OBJECT_CLASS_COBROWSE_CONTROL = "cbce";
    private static final String DATA_OBJECT_CLASS_RECORDING_CONTROL = "RecordingControlEvent";

    private static final String KEY_VALUE_EVENT = "event";
    private static final String KEY_VALUE_SUCCESS = "success";
    //   private   static   final   String   KEY_VALUE_ERROR   =   "error";
    private static final String KEY_VALUE_MESSAGE = "message";
    private static final String KEY_VALUE_ALERT = "alert";

    private static final String KEY_VALUE_DATA_TYPE_OBJECT = "object";
    private static final String KEY_VALUE_DATA_TYPE_ARRAY = "array";
    private static final String KEY_VALUE_DATA_TYPE_STRING = "string";

    public String readMessage(JSONObject obj) {
        String message = null;
        if (obj.containsKey(KEY_TYPE) && obj.get(KEY_TYPE).toString().equals(KEY_VALUE_MESSAGE)) {
            message = "";
            if (obj.containsKey(KEY_DATA)) {
                message = obj.get(KEY_DATA).isString().stringValue();//.stringValue();
            }
        }
        return message;
    }

    public String readAlert(JSONObject obj) {
        String message = null;
        if (obj.containsKey(KEY_TYPE) && obj.get(KEY_TYPE).toString().equals(KEY_VALUE_ALERT)) {
            message = "";
            if (obj.containsKey(KEY_DATA)) {
                message = obj.get(KEY_DATA).isString().stringValue();//.stringValue();
            }
        }
        return message;
    }

    public UIServerResponse readGetEventsResponse(JSONValue value) {
        JSONArray eventsArray = value.isArray();
        UIServerResponse resp = null;
        if (eventsArray == null) {
            JSONObject obj = value.isObject();
            //Window.alert("ResponseAndEventReader:readResponse value.isObject()?::"+obj);
            if (obj != null) {
                eventsArray = obj.isArray();
                //Window.alert("ResponseAndEventReader:readResponse value.isArray()?::"+eventsArray);
                if (eventsArray == null) {
                    //   Read and make array out of it. We know this is an array.
                    eventsArray = new JSONArray();
                    //            String[] keys = obj.getKeys();
                    //            for (int i=0; i<keys.length; i++)
                    //            {
                    //               eventsArray.add(obj.get(keys[i]));
                    //            }
                }
            }
        }
        //Window.alert("ResponseAndEventReader:readResponse array?::"+eventsArray);
        if (eventsArray != null) {
            //Window.alert("Reading array");
            resp = new UIServerResponse();
            resp.setSuccess(true);
            ArrayList aryList = new ArrayList();
            int size = eventsArray.size();
            for (int i = 0; i < size; i++) {
                JSONValue arrayMember = eventsArray.get(i);
                //Window.alert("Reading array member:"+arrayMember);
                Object data = readResponse(arrayMember);
                //Window.alert("Read array member:"+data);
                aryList.add(data);
            }
            resp.setArrayList(aryList);
        }
        //      else if (obj != null)
        //      {
        //         resp = readResponse(value);
        //      }
        return resp;
    }

    public UIServerResponse readResponse(JSONValue value) {
        UIServerResponse resp = new UIServerResponse();
        JSONObject obj = value.isObject();
        //Window.alert("ResponseAndEventReader:readResponse::"+obj);
        //      Window.alert("ResponseAndEventReader:readResponse::"+obj.isArray());
        //      Window.alert("ResponseAndEventReader:readResponse::"+obj.isObject());
        if (obj != null) {
            //   At present we use only object returns for all urls.
            //Window.alert("Reading non array return");
            if (obj.containsKey(KEY_TYPE)) {
                //         System.out.println("1");
                String str = obj.get(KEY_TYPE).isString().stringValue();//.stringValue();
                //Window.alert(KEY_TYPE+":"+str);
                if (str.equals(KEY_VALUE_SUCCESS) || str.equals(KEY_VALUE_EVENT) || str.equals(KEY_VALUE_MESSAGE)) {
                    resp.setSuccess(true);
                }
            }
            if (obj.containsKey(KEY_FEATURE_ID)) {
                String featureId = obj.get(KEY_FEATURE_ID).isString().stringValue();//.stringValue();
                //Window.alert(KEY_FEATURE_ID+":"+featureId);
                resp.setFeatureId(featureId);
            }
            if (obj.containsKey(KEY_EVENT_ID)) {
                String eventId = obj.get(KEY_EVENT_ID).isString().stringValue();//.stringValue();
                //Window.alert(KEY_EVENT_ID+":"+eventId);
                resp.setEventId(eventId);
            }
            JSONValue v = obj.get(KEY_DATA);
            if (v != null) {
                //Window.alert(KEY_DATA+":");
                if (obj.containsKey(KEY_DATA_TYPE)) {
                    //   Supported types are array, string and object.
                    String dataType = obj.get(KEY_DATA_TYPE).isString().stringValue();//.stringValue();
                    //Window.alert(KEY_DATA_TYPE+":"+dataType);
                    if (dataType.equals(KEY_VALUE_DATA_TYPE_OBJECT)) {
                        Object data = readObject(obj.get(KEY_DATA).isObject());
                        resp.setData(data);
                    } else if (dataType.equals(KEY_VALUE_DATA_TYPE_STRING)) {
                        //   Assume a simple string.
                        String str = obj.get(KEY_DATA).toString();
                        resp.setData(str);
                    } else if (dataType.equals(KEY_VALUE_DATA_TYPE_ARRAY)) {
                        //   Assume a simple string.
                        //Window.alert(KEY_DATA+":v:"+v);
                        JSONObject vo = v.isObject();
                        //Window.alert(KEY_DATA+":v:"+vo);
                        JSONArray ary = v.isArray();
                        //Window.alert(KEY_DATA+":v:"+ary);
                        if (ary == null && vo != null) {
                            ary = vo.isArray();
                        }
                        ArrayList aryList = new ArrayList();
                        if (ary != null) {
                            int size = ary.size();
                            for (int i = 0; i < size; i++) {
                                JSONObject jsonObj = ary.get(i).isObject();
                                Object data = readObject(jsonObj);
                                aryList.add(data);
                            }
                        }
                        resp.setArrayList(aryList);
                    } else {
                        //Window.alert("Unrecognized data type:"+dataType);
                    }
                }
            } else {
                //Window.alert("No data found");
            }
        }
        return resp;
    }

    public Object readObject(JSONObject obj) {
        Object data = null;
        String dataObjectClass = obj.get(KEY_DATA_OBJECT_CLASS).isString().stringValue(); //.toString();
        //      Window.alert("ResponseAndEventReader:readObject:"+KEY_DATA_OBJECT_CLASS+":"+dataObjectClass);
        //      Window.alert("11"+dataObjectClass);
        if (dataObjectClass != null) {
            if (dataObjectClass.equals(DATA_OBJECT_CLASS_ROSTER_ENTRY)) {
                data = UIRosterEntry.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_PRESENTATION_CONTROL_EVENT)) {
                data = UIPresentationControlEvent.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_RESOURCE_OBJECT)) {
                //            Window.alert("Parsing presentation control object");
                data = UIResourceObject.parseJsonObject(obj);
                //            Window.alert("done");
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_STREAM_CONTROL_EVENT)) {
                //            Window.alert("Parsing screen share control object");
                data = UIStreamControlEvent.parseJsonObject(obj);
                //            Window.alert("done");
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_CHAT_ENTRY)) {
                data = UIChatEntry.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_SETTINGS_EVENT)) {
                data = UISettingsEvent.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_POPOUT_PANEL_DATA)) {
                data = UIPopoutPanelData.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_FORM_DEFAULT_VALUES)) {
                data = UIFormDefaultValues.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_EMAIL_ATTEMPT_RESULT)) {
                data = UIEmailAttemptResult.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_WHITEBOARD_CONTROL)) {
                data = UIWhiteboardControlEvent.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_COBROWSE_CONTROL)) {
                data = UICobrowseControlEvent.parseJsonObject(obj);
            } else if (dataObjectClass.equals(DATA_OBJECT_CLASS_RECORDING_CONTROL)) {
                data = UIRecordingControlEvent.parseJsonObject(obj);
            }
        }
        return data;
    }
}