public void DataAPIGetItems()
        {
            // Arrange
            JsonObject JsonResponse;

            string endpoint = this.baseDataAPIUrl + "/itembank/items";

            string action = "get";

            JsonObject security = new JsonObject();

            security.set("consumer_key", this.consumerKey);
            security.set("domain", this.domain);

            JsonObject request = new JsonObject();

            request.set("limit", 3);

            // Act
            DataApi da = new DataApi();
            Remote  r  = da.request(endpoint, security, this.consumerSecret, request, action);

            JsonResponse = JsonObjectFactory.fromString(r.getBody());

            // Assert
            Assert.True(JsonResponse.getJsonObject("meta").getBool("status"));
        }
コード例 #2
0
        public void inputJSONEqualsOutput()
        {
            string     JSON       = "{\"boolean\":true,\"integer\":1,\"decimal\":1.2,\"string\":\"string\",\"object\":{\"property\":null},\"array\":[null,[2]]}";
            JsonObject jo         = JsonObjectFactory.fromString(JSON);
            string     outputJSON = jo.toJson();

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(JSON, outputJSON),
                "Input JSON (" + JSON + ") doesn't equal the output (" + outputJSON + ")"
                );

            JSON       = "[0,1,2,3,4,5,6,7,8,9,10]";
            jo         = JsonObjectFactory.fromString(JSON);
            outputJSON = jo.toJson();

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(JSON, outputJSON),
                "Input JSON (" + JSON + ") doesn't equal the output (" + outputJSON + ")"
                );

            JSON       = "[0,\"1\",2,\"3\",4,\"5\",6,\"7\",8,\"9\",10]";
            jo         = JsonObjectFactory.fromString(JSON);
            outputJSON = jo.toJson();

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(JSON, outputJSON),
                "Input JSON (" + JSON + ") doesn't equal the output (" + outputJSON + ")"
                );
        }
コード例 #3
0
        public static string Simple()
        {
            string     uuid     = Uuid.generate();
            string     courseId = "mycourse";
            string     questionsApiActivityJson = Assess.questionsApiActivity(uuid, courseId);
            JsonObject questionsApiActivity     = JsonObjectFactory.fromString(questionsApiActivityJson);

            string service = "assess";

            JsonObject security = new JsonObject();

            security.set("consumer_key", Credentials.ConsumerKey);
            security.set("user_id", "$ANONYMIZED_USER_ID");
            security.set("domain", Credentials.Domain);

            string secret = Credentials.ConsumerSecret;

            JsonObject request = new JsonObject();

            request.set("name", "Demo Activity (8 questions)");
            request.set("state", "initial");
            request.set("items", Assess.items(uuid));
            request.set("questionsApiActivity", questionsApiActivity);

            Init init = new Init(service, security, secret, request);

            return(init.generate());
        }
コード例 #4
0
        public void MergingJSONObjectsWorksProperly()
        {
            JsonObject jo1       = new JsonObject();
            JsonObject jo2       = new JsonObject();
            JsonObject jo3       = new JsonObject();
            JsonObject joResult1 = new JsonObject();

            jo1.set("a", "a");
            jo1.set("b", "b");
            jo1.set("c", "c");

            jo2.set("d", "d");
            jo2.set("e", "e");
            jo2.set("f", "f");

            jo3.set("a", "d");
            jo3.set("b", "e");
            jo3.set("c", "f");

            joResult1.set("a", "a");
            joResult1.set("b", "b");
            joResult1.set("c", "c");
            joResult1.set("d", "d");
            joResult1.set("e", "e");
            joResult1.set("f", "f");

            JsonObject joResult2 = Tools.array_merge(jo1, jo2);

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects doesn't work properly"
                );

            joResult1 = new JsonObject();
            joResult1.set("a", "a");
            joResult1.set("b", "b");
            joResult1.set("c", "c");

            joResult2 = Tools.array_merge(jo1, jo3);

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects doesn't work properly"
                );

            joResult1 = new JsonObject();
            joResult1.set("a", "d");
            joResult1.set("b", "e");
            joResult1.set("c", "f");

            joResult2 = Tools.array_merge(jo1, jo3, true);

            // overwrite works for objects
            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects using the same property names with overwriting enabled doesn't work properly"
                );
        }
コード例 #5
0
ファイル: PasteCommand.cs プロジェクト: geevensingh/DevTools
        public override void Execute(object parameter)
        {
            string jsonString = ClipboardManager.TryGetText();

            Debug.Assert(JsonObjectFactory.TryAgressiveDeserialize(jsonString).Result.IsSuccessful());
            this.MainWindow.Raw_TextBox.Text = jsonString;
            this.MainWindow.SetDisplayMode(MainWindow.DisplayMode.TreeView);
            this.Update();
        }
コード例 #6
0
    private void JsonObjectTest()
    {
        //创建一个JsonObject对象
        var jsonObj = JsonObjectFactory.CreateJsonObject(Resources.Load <TextAsset>("test").text);

        Debug.Log("----------------转换为JSON---------------");
        Debug.Log(jsonObj.ToJson());
        Debug.Log("----------------判断code属性是否存在---------------");
        Debug.Log(jsonObj.ContainsKey("code"));
        Debug.Log("----------------获取子对象data---------------");
        Debug.Log("获取子对象data:" + jsonObj["data"].ToJson());
        Debug.Log("----------------获取子对象data的name属性---------------");
        Debug.Log("获取子对象data的name字段:" + jsonObj["data"]["name"].GetString());
        Debug.Log("----------------修改data的值---------------");
        jsonObj["data"] = new JsonObject(1);
        Debug.Log("----------------修改后data的值---------------");
        Debug.Log(jsonObj["data"].GetNumber());
        Debug.Log("----------------添加一个新的Number属性test add num---------------");
        jsonObj.Add("test add num", 1);
        Debug.Log(jsonObj["test add num"].GetNumber());
        Debug.Log("----------------添加一个新的boolean属性test add boolean---------------");
        jsonObj.Add("test add boolean", false);
        Debug.Log(jsonObj["test add boolean"].GetBoolean());
        Debug.Log("----------------添加一个新的string属性---------------");
        jsonObj.Add("test add string", "new string");
        Debug.Log(jsonObj["test add string"].GetString());
        Debug.Log("----------------添加一个数组属性test add array---------------");
        var array = new JsonObject();

        array.Add(1);
        array.Add(2);
        array.Add(3);
        jsonObj.Add("test add array", array);
        Debug.Log(jsonObj["test add array"].ToJson());
        Debug.Log("----------------添加一个object属性test add subObject---------------");
        var subObj = new JsonObject();

        subObj.Add("sub obj num", 1);
        subObj.Add("sub obj boolean", false);
        jsonObj.Add("test add subObject", subObj);
        Debug.Log(jsonObj["test add subObject"].ToJson());
        Debug.Log("----------------修改后的json---------------");
        Debug.Log(jsonObj.ToJson());
        Debug.Log("----------------遍历所有根属性---------------");
        foreach (var item in jsonObj)
        {
            Debug.Log(item.Key + ":" + item.Value);
        }

        var helloWorldJsonObj = JsonObjectFactory.CreateJsonObject("{}");

        JsonUtility.FromJson <HelloWorld>(helloWorldJsonObj.ToJson());

        Debug.Log((char)0x1f);
    }
コード例 #7
0
        public IRestResponse <TRequest> Execute <TRequest>(IRestRequest request)
            where TRequest : class
        {
            var mockResponse = new Mock <IRestResponse <TRequest> >();
            var mockData     = JsonObjectFactory.Get <TRequest>();

            mockResponse.SetupGet(r => r.Data)
            .Returns(mockData.Object);
            _calls.Add(typeof(TRequest));
            return(mockResponse.Object);
        }
コード例 #8
0
        /// <summary>
        /// Callback function with the same definition as defined delegate (ProcessData) in DataApi
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private static bool DataApiRecursiveCallback(string data)
        {
            JsonObject jo = JsonObjectFactory.fromString(data);

            if (jo != null)
            {
                return(true);
            }

            return(false);
        }
コード例 #9
0
        /// <summary>
        /// Makes a single request to the data api
        /// </summary>
        /// <param name="url">URL to send the request</param>
        /// <param name="securityPacketJson">Security details</param>
        /// <param name="secret">Private key</param>
        /// <param name="requestPacketJson">Request packet</param>
        /// <param name="action">Action for the request</param>
        /// <param name="callback">Callback to process JSON data. Returning false in callback breaks from the loop of recursive requests.</param>
        /// <returns>Instance of the Remote class</returns>
        public JsonObject requestRecursive(string url, string securityPacketJson, string secret, string requestPacketJson = null, string action = null, ProcessData callback = null)
        {
            JsonObject securityPacket = JsonObjectFactory.fromString(securityPacketJson);
            JsonObject requestPacket  = null;

            if (requestPacketJson != null)
            {
                requestPacket = JsonObjectFactory.fromString(requestPacketJson);
            }

            return(this.requestRecursive(url, securityPacket, secret, requestPacket, action, callback));
        }
コード例 #10
0
        /// <summary>
        /// Generate the data necessary to make a request to quesetions service.
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        private JsonObject generateQuestions(JsonObject output)
        {
            output = this.securityPacket;

            output.remove("domain");

            if (!Tools.empty(this.requestPacket))
            {
                output = JsonObjectFactory.merge(output, this.requestPacket, false, false);
            }

            return(output);
        }
コード例 #11
0
ファイル: PasteCommand.cs プロジェクト: geevensingh/DevTools
        private async void Update()
        {
            string jsonString = ClipboardManager.TryGetText();
            bool   possible   = !string.IsNullOrWhiteSpace(jsonString) && this.MainWindow.Raw_TextBox.Text != jsonString;

            if (possible)
            {
                DeserializeResult deserializeResult = await JsonObjectFactory.TryAgressiveDeserialize(jsonString);

                this.SetCanExecute(deserializeResult.IsSuccessful());
            }
            else
            {
                this.SetCanExecute(false);
            }
        }
コード例 #12
0
        /// <summary>
        /// Convert JSON strings into JsonObjects
        /// </summary>
        /// <param name="service"></param>
        /// <param name="securityPacketJson"></param>
        /// <param name="secret"></param>
        /// <param name="requestPacketJson"></param>
        /// <param name="action"></param>
        private void Initialize(string service, string securityPacketJson, string secret, string requestPacketJson = null, string action = null)
        {
            JsonObject securityPacket = JsonObjectFactory.fromString(securityPacketJson);
            JsonObject requestPacket;

            if (requestPacketJson == null)
            {
                requestPacket = null;
            }
            else
            {
                requestPacket = JsonObjectFactory.fromString(requestPacketJson);
            }

            this.Initialize(service, securityPacket, secret, requestPacket, action);
        }
コード例 #13
0
        public void MergingJSONArraysWorksProperly()
        {
            JsonObject ja1       = new JsonObject(true);
            JsonObject ja2       = new JsonObject(true);
            JsonObject jaResult1 = new JsonObject(true);

            ja1.set("a");
            ja1.set("b");
            ja1.set("c");

            ja2.set("d");
            ja2.set("e");
            ja2.set("f");

            jaResult1.set("a");
            jaResult1.set("b");
            jaResult1.set("c");
            jaResult1.set("d");
            jaResult1.set("e");
            jaResult1.set("f");

            JsonObject jaResult2 = Tools.array_merge(ja1, ja2);

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jaResult1, jaResult2),
                "Merging of two arrays doesn't work properly"
                );

            jaResult1 = new JsonObject(true);
            jaResult1.set("d");
            jaResult1.set("e");
            jaResult1.set("f");

            jaResult2 = Tools.array_merge(ja1, ja2, true);

            // overwrite should only work for objects
            Assert.IsFalse(
                JsonObjectFactory.JSONEquality(jaResult1, jaResult2),
                "Merging of two arrays with overwriting enabled does work properly"
                );
        }
コード例 #14
0
        public static string Simple(out string uuid)
        {
            uuid = Uuid.generate();
            string courseId = "mycourse";

            string service = "questions";

            JsonObject security = new JsonObject();

            security.set("consumer_key", Credentials.ConsumerKey);
            security.set("domain", Credentials.Domain);
            security.set("user_id", "$ANONYMIZED_USER_ID");

            string secret = Credentials.ConsumerSecret;

            JsonObject request = JsonObjectFactory.fromString(Questions.requestJson(uuid, courseId));

            Init init = new Init(service, security, secret, request);

            return(init.generate());
        }
コード例 #15
0
        public void RecursiveMergingJSONArraysWorksProperly()
        {
            JsonObject jo1       = new JsonObject();
            JsonObject jo2       = new JsonObject();
            JsonObject joResult1 = new JsonObject();
            JsonObject joResult2;



            joResult2 = Tools.array_merge_recursive(jo1, jo2, false);
            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects recursively using the same property names doesn't work properly"
                );

            joResult2 = Tools.array_merge_recursive(jo1, jo2, true);
            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects recursively using the same property names with overwriting enabled doesn't work properly"
                );
        }
コード例 #16
0
        public static TestRequest getTestRequestFor(string service, string action = null)
        {
            JsonObject security = JsonObjectFactory.fromString(TestRequest.BaseSecurity);
            JsonObject request = JsonObjectFactory.fromString(TestRequest.requests.GetValueOrDefault(service));

            switch (service)
            {
                case "assess":
                case "questions":
                    security.set("user_id", "$ANONYMIZED_USER_ID");
                    break;

                case "items":
                    security.set("user_id", request.getString("user_id"));
                    break;

                default:
                    // no changes
                    break;
            }

            return new TestRequest(service, security, request, action);
        }
コード例 #17
0
 private void ConfigureJsonFactory <TJson>()
     where TJson : class
 {
     JsonFactory.Setup(f => f.Create <TJson>())
     .Returns(JsonObjectFactory.Get <TJson>().Object);
 }
コード例 #18
0
        public void JSONEqualityMethodWorksProperly()
        {
            string JSON = "{\"boolean\":true,\"integer\":1,\"decimal\":1.2,\"string\":\"string\",\"object\":{\"property\":null},\"array\":[null,[2]]}";

            // building a structure for comparison purposes
            JsonObject jo      = new JsonObject();
            JsonObject joInner = new JsonObject();
            JsonObject ja      = new JsonObject(true);
            JsonObject jaInner = new JsonObject(true);

            jo.set("boolean", true);
            jo.set("integer", 1);
            jo.set("decimal", 1.2m);
            jo.set("string", "string");
            jo.set("object", joInner);
            jo.set("array", ja);
            joInner.setNull("property");
            ja.setNull();
            ja.set(jaInner);
            jaInner.set(2);

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(JSON, JSON),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jo, jo),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jo, JSON),
                "JSONEquality method doesn't work correctly"
                );

            JsonObject jo1 = new JsonObject();
            JsonObject jo2 = new JsonObject();
            JsonObject jo3 = new JsonObject();

            jo1.set("a", "a");
            jo1.set("b", "b");
            jo1.set("c", "c");

            jo2.set("d", "d");
            jo2.set("e", "e");
            jo2.set("f", "f");

            jo3.set("a", "d");
            jo3.set("b", "e");
            jo3.set("c", "f");

            Assert.IsFalse(
                JsonObjectFactory.JSONEquality(jo1, jo2),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsFalse(
                JsonObjectFactory.JSONEquality(jo1, jo3),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsFalse(
                JsonObjectFactory.JSONEquality(jo2, jo3),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jo1, jo1),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jo2, jo2),
                "JSONEquality method doesn't work correctly"
                );

            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(jo3, jo3),
                "JSONEquality method doesn't work correctly"
                );
        }
コード例 #19
0
        public void RecursiveMergingJSONObjectsWorksProperly()
        {
            JsonObject jo1       = new JsonObject();
            JsonObject jo1o      = new JsonObject();
            JsonObject jo1a      = new JsonObject(true);
            JsonObject jo1ao1    = new JsonObject();
            JsonObject jo1ao2    = new JsonObject();
            JsonObject jo2       = new JsonObject();
            JsonObject jo2o      = new JsonObject();
            JsonObject jo2a      = new JsonObject(true);
            JsonObject jo2ao1    = new JsonObject();
            JsonObject jo2ao2    = new JsonObject();
            JsonObject joResult1 = new JsonObject();
            JsonObject joResult2;

            jo1.set("a", "a1");
            jo1.set("b", "b1");
            jo1.set("obj", jo1o);
            jo1.set("arr", jo1a);
            jo1o.set("d", "d1");
            jo1o.set("e", "e1");
            jo1a.set(true);
            jo1a.setNull();
            jo1a.set("string");
            jo1a.set(1);
            jo1a.set(1.2m);
            jo1a.set(jo1ao1);
            jo1a.set(jo1ao2);
            jo1ao1.set("a", "a1");
            jo1ao1.set("b", "b1");
            jo1ao2.set("a", "a1");
            jo1ao2.set("b", "b1");

            jo2.set("a", "a2");
            jo2.set("c", "c2");
            jo2.set("obj", jo2o);
            jo2.set("arr", jo2a);
            jo2o.set("d", "d2");
            jo2o.set("f", "f2");
            jo2a.set(true);
            jo2a.setNull();
            jo2a.set("string");
            jo2a.set(1);
            jo2a.set(1.2m);
            jo2a.set(jo2ao1);
            jo2a.set(jo2ao2);
            jo2ao1.set("a", "a2");
            jo2ao1.set("b", "b2");
            jo2ao2.set("a", "a2");
            jo2ao2.set("b", "b2");

            joResult1 = JsonObjectFactory.fromString(@"{
    ""a"": ""a1"",
    ""b"": ""b1"",
    ""c"": ""c2"",
    ""obj"": {
        ""d"": ""d1"",
        ""e"": ""e1"",
        ""f"": ""f2""
    },
    ""arr"": [
        true,
        null,
        ""string"",
        1,
        1.2,
        {
            ""a"": ""a1"",
            ""b"": ""b1""
        },
        {
            ""a"": ""a1"",
            ""b"": ""b1""
        },
        true,
        null,
        ""string"",
        1,
        1.2,
        {
            ""a"": ""a2"",
            ""b"": ""b2""
        },
        {
            ""a"": ""a2"",
            ""b"": ""b2""
        }
    ]
}");

            joResult2 = Tools.array_merge_recursive(jo1, jo2, false);
            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects recursively using the same property names doesn't work properly"
                );

            joResult1 = JsonObjectFactory.fromString(@"{
    ""a"": ""a2"",
    ""b"": ""b1"",
    ""c"": ""c2"",
    ""obj"": {
        ""d"": ""d2"",
        ""e"": ""e1"",
        ""f"": ""f2""
    },
    ""arr"": [
        true,
        null,
        ""string"",
        1,
        1.2,
        {
            ""a"": ""a1"",
            ""b"": ""b1""
        },
        {
            ""a"": ""a1"",
            ""b"": ""b1""
        },
        true,
        null,
        ""string"",
        1,
        1.2,
        {
            ""a"": ""a2"",
            ""b"": ""b2""
        },
        {
            ""a"": ""a2"",
            ""b"": ""b2""
        }
    ]
}");

            joResult2 = Tools.array_merge_recursive(jo1, jo2, true);
            Assert.IsTrue(
                JsonObjectFactory.JSONEquality(joResult1, joResult2),
                "Merging of two objects recursively using the same property names with overwriting enabled doesn't work properly"
                );
        }
コード例 #20
0
        /// <summary>
        /// Makes a single request to the data api
        /// </summary>
        /// <param name="url">URL to send the request</param>
        /// <param name="securityPacket">Security details</param>
        /// <param name="secret">Private key</param>
        /// <param name="requestPacket">Request packet</param>
        /// <param name="action">Action for the request</param>
        /// <param name="callback">Callback to process JSON data. Returning false in callback breaks from the loop of recursive requests.</param>
        /// <returns>Instance of the Remote class</returns>
        private JsonObject handleRequestRecursive(string url, JsonObject securityPacket, string secret, JsonObject requestPacket = null, string action = null, ProcessData callback = null)
        {
            JsonObject response = new JsonObject(true);
            JsonObject data, meta;
            Remote     request;
            int        recursion = 0;

            do
            {
                request = this.request(url, securityPacket, secret, requestPacket, action);
                data    = JsonObjectFactory.fromString(request.getBody());

                if (data == null)
                {
                    throw new Exception("Request wasn't successful");
                }

                meta = data.getJsonObject("meta");

                recursion++;

                if (meta.getBool("status"))
                {
                    if (callback != null)
                    {
                        // return if callback returns false
                        if (!callback(data.toJson()))
                        {
                            return(response);
                        }
                    }
                    else
                    {
                        response = Tools.array_merge(response, data.getJsonObject("data"));
                    }
                }
                else
                {
                    throw new Exception(Json.encode(data));
                }

                if (Tools.array_key_exists("next", meta) && !Tools.empty(data.getJsonObject("data")))
                {
                    string next = meta.getString("next");
                    if (next != null)
                    {
                        requestPacket.set("next", next);
                        securityPacket.remove("signature");
                    }
                    else
                    {
                        throw new Exception("data['meta']['next'] is not a string");
                    }
                }
                else
                {
                    requestPacket.remove("next");
                }
            }while(Tools.array_key_exists("next", requestPacket));

            return(response);
        }
コード例 #21
0
 /// <summary>
 /// Processing responseBody into JsonObject.
 /// </summary>
 private void process()
 {
     this.responseBodyJsonObject = JsonObjectFactory.fromString(this.responseBody);
 }
コード例 #22
0
        /// <summary>
        /// Set any options for services that aren't generic
        /// </summary>
        private void setServiceOptions()
        {
            switch (this.service)
            {
            case "assess":
            // fall-through
            case "questions":

                this.signRequestData = false;

                if (this.service == "assess" && Tools.array_key_exists("questionsApiActivity", this.requestPacket))
                {
                    JsonObject questionsApi = this.requestPacket.getJsonObject("questionsApiActivity");
                    if (questionsApi == null)
                    {
                        throw new Exception("requestPacket['questionsApiActivity'] is not an array");
                    }

                    string domain = "assess.learnosity.com";
                    if (Tools.array_key_exists("domain", this.securityPacket))
                    {
                        domain = this.securityPacket.getString("domain");
                    }
                    else if (Tools.array_key_exists("domain", questionsApi))
                    {
                        domain = questionsApi.getString("domain");
                    }

                    JsonObject questionsApiActivity = new JsonObject();

                    List <string> signatureList = new List <string>();

                    signatureList.Add(this.securityPacket.getString("consumer_key"));
                    signatureList.Add(domain);
                    signatureList.Add(this.securityPacket.getString("timestamp"));

                    if (Tools.array_key_exists("expires", this.securityPacket))
                    {
                        signatureList.Add(this.securityPacket.getString("expires"));
                        questionsApiActivity.set("expires", this.securityPacket.getString("expires"));
                        questionsApi.remove("expires");
                    }

                    signatureList.Add(this.securityPacket.getString("user_id"));
                    signatureList.Add(this.secret);

                    string signature = this.hashValue(signatureList.ToArray());

                    questionsApiActivity.set("consumer_key", this.securityPacket.getString("consumer_key"));
                    questionsApiActivity.set("timestamp", this.securityPacket.getString("timestamp"));
                    questionsApiActivity.set("user_id", this.securityPacket.getString("user_id"));
                    questionsApiActivity.set("signature", signature);

                    questionsApi.remove("domain");
                    questionsApi.remove("consumer_key");
                    questionsApi.remove("timestamp");
                    questionsApi.remove("user_id");
                    questionsApi.remove("signature");

                    questionsApiActivity = JsonObjectFactory.merge(questionsApiActivity, questionsApi);

                    this.requestPacket.set("questionsApiActivity", questionsApiActivity);
                }

                break;

            case "items":
            // fall-through
            case "reports":

                if (!Tools.array_key_exists("user_id", this.securityPacket) && Tools.array_key_exists("user_id", this.requestPacket))
                {
                    this.securityPacket.set("user_id", this.requestPacket.getString("user_id"));
                }

                break;

            case "events":

                string     consumer_key = this.securityPacket.getString("consumer_key");
                JsonObject hashedUsers;

                this.signRequestData = false;

                JsonObject requestPackageUsers = this.requestPacket.getJsonObject("users");
                if (requestPackageUsers != null)
                {
                    string[] users = requestPackageUsers.getValuesArray();
                    if (users != null && users.Length > 0)
                    {
                        hashedUsers = new JsonObject();
                        for (int i = 0; i < users.Length; i++)
                        {
                            string user_id = users[i];
                            hashedUsers.set(user_id, Tools.hash(this.algorithm, user_id + this.secret));
                        }
                        this.requestPacket.set("users", hashedUsers);
                    }
                }

                break;

            default:
                // do nothing
                break;
            }
        }