Пример #1
0
        private static void EnsurePreviousValueMatchCurrentValue(PatchRequest patchCmd, JProperty property)
        {
            var prevVal = patchCmd.PrevVal;

            if (prevVal == null)
            {
                return;
            }
            switch (prevVal.Type)
            {
            case JTokenType.Undefined:
                if (property != null)
                {
                    throw new ConcurrencyException();
                }
                break;

            default:
                if (property == null)
                {
                    throw new ConcurrencyException();
                }
                var equalityComparer = new JTokenEqualityComparer();
                if (equalityComparer.Equals(property.Value, prevVal) == false)
                {
                    throw new ConcurrencyException();
                }
                break;
            }
        }
    public int GetHashCode(JObject obj)
    {
        JTokenEqualityComparer comparer = new JTokenEqualityComparer();
        int hashCode = comparer.GetHashCode(obj);

        return(hashCode);
    }
Пример #3
0
        public void PublishSimple(string message, string topicUri, string @event)
        {
            var clientMock = new Mock <IWampClient>();
            Mock <IWampServer <JToken> > mock     = CallHandleOnMock(clientMock.Object, message);
            JTokenEqualityComparer       comparer = new JTokenEqualityComparer();

            mock.Verify(x => x.Publish(clientMock.Object,
                                       topicUri,
                                       It.Is((JToken value) => comparer.Equals(value, JToken.Parse(@event)))));
        }
        /// <summary>
        /// Determines if the entity have changed.
        /// </summary>
        /// <param name="entity">The entity.</param>
        /// <param name="documentMetadata">The document metadata.</param>
        /// <returns></returns>
        protected bool EntityChanged(object entity, DocumentMetadata documentMetadata)
        {
            if (documentMetadata == null)
            {
                return(true);
            }
            var newObj           = ConvertEntityToJson(entity, documentMetadata.Metadata);
            var equalityComparer = new JTokenEqualityComparer();

            return(equalityComparer.Equals(newObj, documentMetadata.OriginalValue) == false ||
                   equalityComparer.Equals(documentMetadata.Metadata, documentMetadata.OriginalMetadata) == false);
        }
Пример #5
0
        public void PublishExludedList(string message, string topicUri, string @event, string[] excluded)
        {
            var clientMock = new Mock <IWampClient>();
            Mock <IWampServer <JToken> > mock = CallHandleOnMock(clientMock.Object, message);

            JTokenEqualityComparer comparer = new JTokenEqualityComparer();


            mock.Verify(x => x.Publish(clientMock.Object,
                                       topicUri,
                                       It.Is((JToken value) => comparer.Equals(value, JToken.Parse(@event))),
                                       It.Is((string[] excludedParameter) => excluded.SequenceEqual(excludedParameter))));
        }
Пример #6
0
        public static JArray ComputeLCS(JArray a, JArray b, JTokenEqualityComparer equalityFunc)
        {
            var sequence = new JArray();

            if (a.Count == 0 || b.Count == 0)
            {
                return(sequence);
            }

            int[,] num = new int[a.Count, b.Count];

            for (int i = 0; i < a.Count; i++)
            {
                for (int j = 0; j < b.Count; j++)
                {
                    if (equalityFunc(a[i], b[j]))
                    {
                        if (i == 0 || j == 0)
                        {
                            num[i, j] = 1;
                        }
                        else
                        {
                            num[i, j] = 1 + num[i - 1, j - 1];
                        }
                    }
                    else
                    {
                        if (i == 0 && j == 0)
                        {
                            num[i, j] = 0;
                        }
                        else if ((i == 0) && !(j == 0))
                        {
                            num[i, j] = Math.Max(0, num[i, j - 1]);
                        }
                        else if (!(i == 0) && (j == 0))
                        {
                            num[i, j] = Math.Max(num[i - 1, j], 0);
                        }
                        else if (!(i == 0) && !(j == 0))
                        {
                            num[i, j] = Math.Max(num[i - 1, j], num[i, j - 1]);
                        }
                    }
                }
            }

            Backtrack(sequence, num, equalityFunc, a, b, a.Count - 1, b.Count - 1);
            return(sequence);
        }
        public void CompareEmptyProperties()
        {
            JObject o1 = JObject.Parse("{}");
            o1.Add(new JProperty("hi"));

            JObject o2 = JObject.Parse("{}");
            o2.Add(new JProperty("hi"));

            JTokenEqualityComparer c = new JTokenEqualityComparer();
            Assert.IsTrue(c.Equals(o1, o2));

            o1["hi"] = 10;
            Assert.IsFalse(c.Equals(o1, o2));
        }
        public void CompareEmptyProperties()
        {
            JObject o1 = JObject.Parse("{}");

            o1.Add(new JProperty("hi"));

            JObject o2 = JObject.Parse("{}");

            o2.Add(new JProperty("hi"));

            JTokenEqualityComparer c = new JTokenEqualityComparer();

            Assert.IsTrue(c.Equals(o1, o2));

            o1["hi"] = 10;
            Assert.IsFalse(c.Equals(o1, o2));
        }
Пример #9
0
        private void RemoveValue(PatchRequest patchCmd, string propName, JProperty property)
        {
            EnsurePreviousValueMatchCurrentValue(patchCmd, property);
            if (property == null)
            {
                property = new JProperty(propName, new JArray());
                document.Add(property);
            }
            var array = property.Value as JArray;

            if (array == null)
            {
                throw new InvalidOperationException("Cannot remove value from  '" + propName + "' because it is not an array");
            }
            var position = patchCmd.Position;
            var value    = patchCmd.Value;

            if (position == null && value == null)
            {
                throw new InvalidOperationException("Cannot remove value from  '" + propName + "' because position element does not exists or not an integer and no value was present");
            }
            if (position != null && value != null)
            {
                throw new InvalidOperationException("Cannot remove value from  '" + propName + "' because both a position and a value are set");
            }
            if (position < 0 || position >= array.Count)
            {
                throw new IndexOutOfRangeException("Cannot remove value from  '" + propName +
                                                   "' because position element is out of bound bounds");
            }

            if (value != null)
            {
                var equalityComparer = new JTokenEqualityComparer();
                var singleOrDefault  = array.FirstOrDefault(x => equalityComparer.Equals(x, value));
                if (singleOrDefault == null)
                {
                    return;
                }
                array.Remove(singleOrDefault);
                return;
            }
            array.RemoveAt(position.Value);
        }
        void Write(BinaryWriter bw, JArray value)
        {
            bw.Write((byte)32);
            List <uint> offsets = new List <uint>();
            List <Tuple <uint, int, JToken> > tokenCache = new List <Tuple <uint, int, JToken> >();
            JTokenEqualityComparer            comparer   = new JTokenEqualityComparer();

            using (MemoryStream ms = new MemoryStream())
            {
                BinaryWriter innerBw = new BinaryWriter(ms);
                foreach (JToken item in value)
                {
                    if (Optimize)
                    {
                        bool found    = false;
                        int  hashCode = comparer.GetHashCode(item);
                        foreach (var potentialEntry in tokenCache.Where(x => x.Item2 == hashCode))
                        {
                            if (comparer.Equals(item, potentialEntry.Item3))
                            {
                                found = true;
                                offsets.Add(potentialEntry.Item1);
                                break;
                            }
                        }
                        if (found)
                        {
                            continue;
                        }
                        else
                        {
                            tokenCache.Add(new Tuple <uint, int, JToken>((uint)ms.Length, hashCode, item));
                        }
                    }
                    offsets.Add((uint)ms.Length);
                    WriteTokenValue(innerBw, item);
                }
                innerBw.Flush();

                Write(bw, offsets.ToArray());
                bw.Write(ms.ToArray());
            }
        }
Пример #11
0
 private static void EnsurePreviousValueMatchCurrentValue(PatchRequest patchCmd, JProperty property)
 {
     var prevVal = patchCmd.PrevVal;
     if (prevVal == null)
         return;
     switch (prevVal.Type)
     {
         case JTokenType.Undefined:
             if (property != null)
                 throw new ConcurrencyException();
             break;
         default:
             if(property == null)
                 throw new ConcurrencyException();
             var equalityComparer = new JTokenEqualityComparer();
             if (equalityComparer.Equals(property.Value, prevVal) == false)
                 throw new ConcurrencyException();
             break;
     }
 }
Пример #12
0
 private static void Backtrack(JArray lcs, int[,] num, JTokenEqualityComparer equalityFunc, JArray a, JArray b, int i, int j)
 {
     if (equalityFunc(a[i], b[j]))
     {
         if (i > 0 && j > 0)
         {
             Backtrack(lcs, num, equalityFunc, a, b, i - 1, j - 1);
         }
         lcs.Add(a[i]);
     }
     else
     {
         if (j > 0 && (i == 0 || num[i, j - 1] >= num[i - 1, j]))
         {
             Backtrack(lcs, num, equalityFunc, a, b, i, j - 1);
         }
         else if (i > 0 && (j == 0 || num[i, j - 1] < num[i - 1, j]))
         {
             Backtrack(lcs, num, equalityFunc, a, b, i - 1, j);
         }
     }
 }
Пример #13
0
        public JToken FactValue(string fact, dynamic @params = null, string path = "")
        {
            var    comparer  = new JTokenEqualityComparer();
            int    hash1     = fact.GetHashCode();
            int    hash2     = path.GetHashCode();
            int    hash3     = comparer.GetHashCode(@params);
            string long_hash = string.Join(hash1.ToString(), hash2.ToString(), hash3.ToString());

            if (this.FactValueCache.ContainsKey(long_hash))
            {
                return(this.FactValueCache[long_hash]);
            }
            else
            {
                JToken factValueToken = "";

                if (this.DynamicFacts.ContainsKey(fact))
                {
                    factValueToken = this.DynamicFacts[fact].CalculateJToken(this, @params);
                }
                else
                {
                    if (!value.TryGetValue(fact, out factValueToken))
                    {
                        return(null);
                    }
                }
                if (!string.IsNullOrEmpty(path))
                {
                    factValueToken = factValueToken.SelectToken(path);
                    if (factValueToken == null)
                    {
                        return(null);
                    }
                }
                this.FactValueCache[long_hash] = factValueToken;
                return(factValueToken);
            }
        }
Пример #14
0
        public void PublishSimple(string message, string topicUri, string @event)
        {
            var clientMock = new Mock<IWampClient>();
            Mock<IWampServer<JToken>> mock = CallHandleOnMock(clientMock.Object, message);
            JTokenEqualityComparer comparer = new JTokenEqualityComparer();

            mock.Verify(x => x.Publish(clientMock.Object,
                                       topicUri,
                                       It.Is((JToken value) => comparer.Equals(value, JToken.Parse(@event)))));
        }
        MergeSeries <TGroupKey, TSeries, TChartValue>
        (
            this SeriesCollection target
            , JToken data
            , Func <JToken, JToken, bool>
            onLableDistinctEqualsPredictFunc
            , Func <JToken, int>
            onLableDistinctGetHashCodeProcessFunc
            , Func <JToken, string>
            onLableFactoryProcessFunc
            , Func <JToken, TGroupKey>
            onGroupingProcessFunc
            , Func <IGrouping <TGroupKey, JToken>, string>
            onSetSeriesViewTitleProcessFunc
            , Func <JToken, TChartValue>
            onAddChartValueProcessFunc
            , out string[] labels
        )
            where
        TSeries : Series, new()
        {
            var comparer = new JTokenEqualityComparer
                           (
                onLableDistinctEqualsPredictFunc
                , onLableDistinctGetHashCodeProcessFunc
                           );

            labels = data
                     .AsJEnumerable()
                     .Distinct
                     (
                comparer
                     )
                     .Select
                     (
                (x) =>
            {
                return
                (onLableFactoryProcessFunc(x));
            }
                     )
                     .ToArray();
            var groups = data
                         .AsJEnumerable()
                         .GroupBy
                         (
                (x) =>
            {
                return
                (onGroupingProcessFunc(x));
            }
                         );

            foreach (var group in groups)
            {
                ISeriesView seriesView = new TSeries
                {
                    Title = onSetSeriesViewTitleProcessFunc(group)
                };
                foreach (var item in group)
                {
                    if
                    (
                        seriesView
                        .Values
                        ==
                        null
                    )
                    {
                        seriesView
                        .Values = new ChartValues <TChartValue>();
                    }
                    var adding = onAddChartValueProcessFunc(item);
                    seriesView
                    .Values
                    .Add
                    (
                        adding
                    );
                }
                target
                .Add
                (
                    seriesView
                );
            }
            ;
            return
                (target);
        }
Пример #16
0
        /// <inheritdoc />
        public override int GetHashCode()
        {
            var hashCode = new JTokenEqualityComparer().GetHashCode(this);

            return(hashCode);
        }
        private string ParseSchemaDefinitions(RedoxJsonSchema rs)
        {
            string tokenName;
            string typeName;
            string error;

            try
            {
                JObject   tokenItems;
                JToken    token;
                JProperty tokenParent;
                var       sroot       = new JObject();
                var       objs        = sroot.Descendants();
                var       comparer    = new JTokenEqualityComparer();
                var       objectToken = JToken.FromObject("object");
                sroot = rs.Schema;
                objs  = sroot.Descendants()
                        .OfType <JObject>()
                        .Where(t => comparer.Equals(t["type"], objectToken))
                        .ToList();
                foreach (JObject o in objs)
                {
                    AllObjects.Add(o);
                    tokenParent = (JProperty)o.Parent;
                    tokenName   = tokenParent.Name;
                    if (tokenName == "items")
                    {
                        continue;
                    }
                    token = o;
                    if (!IsSimpleObject(o, out error))
                    {
                        continue;
                    }
                    if (!string.IsNullOrEmpty(error))
                    {
                        return(error);
                    }
                    if (!ObjectTypeDict.ContainsKey(tokenName))
                    {
                        ObjectTypeDict.Add(tokenName, token.Parent.ToString());
                        token["title"] = tokenName;
                        defs.Add(new JProperty(tokenName, token));
                    }
                    else if (!ObjectTypeDict.ContainsValue(token.Parent.ToString()))
                    {
                        tokenName = GetNewName(tokenName, ObjectTypeDict);
                        ObjectTypeDict.Add(tokenName, token.Parent.ToString());
                        token["title"] = tokenName;
                        defs.Add(new JProperty(tokenName, token));
                    }
                    else
                    {
                        token["title"] = tokenName;
                    }
                }
                var arrayToken = JToken.FromObject("array");
                var arrObjs    = sroot.Descendants()
                                 .OfType <JObject>()
                                 .Where(t => comparer.Equals(t["type"], arrayToken))
                                 .ToList();
                foreach (JToken a in arrObjs)
                {
                    tokenName  = ((JProperty)a.Parent).Name;
                    tokenItems = (JObject)a["items"];
                    typeName   = tokenName + "Item";
                    if (!ObjectTypeDict.ContainsKey(typeName))
                    {
                        if (IsSimpleObject(tokenItems, out error))
                        {
                            defs.Add(new JProperty(typeName, tokenItems));
                            ObjectTypeDict.Add(typeName, tokenItems.Parent.ToString());
                        }
                        if (!string.IsNullOrEmpty(error))
                        {
                            return(error);
                        }
                        tokenItems["title"] = typeName;
                    }
                    else if (!ObjectTypeDict.ContainsValue(tokenItems.Parent.ToString()))
                    {
                        typeName = GetNewName(typeName, ObjectTypeDict);
                        if (IsSimpleObject(tokenItems, out error))
                        {
                            defs.Add(new JProperty(typeName, tokenItems));
                            ObjectTypeDict.Add(typeName, tokenItems.Parent.ToString());
                        }
                        if (!string.IsNullOrEmpty(error))
                        {
                            return(error);
                        }
                        tokenItems["title"] = typeName;
                    }
                    else
                    {
                        tokenItems["title"] = typeName;
                    }
                }
                foreach (JObject o in objs)
                {
                    tokenParent = (JProperty)o.Parent;
                    tokenName   = tokenParent.Name;
                    if (tokenName == "items")
                    {
                        continue;
                    }
                    if (!IsSimpleObject(o, out error))
                    {
                        if (!string.IsNullOrEmpty(error))
                        {
                            return(error);
                        }
                        if (!ComplexObjectDict.ContainsKey(tokenName) && !ObjectTypeDict.ContainsKey(tokenName))
                        {
                            if (ComplexObjectDict.ContainsValue(o.Parent.ToString()))
                            {
                                tokenName = GetNewName(tokenName, ComplexObjectDict);
                            }
                            ComplexObjectDict.Add(tokenName, o.Parent.ToString());
                            ComplexObjectLists.Add(tokenName, new List <JObject>());
                            ComplexObjectLists[tokenName].Add(o);
                        }
                        else
                        {
                            if (ComplexObjectDict.ContainsValue(o.Parent.ToString()))
                            {
                                if (ComplexObjectLists[tokenName] == null)
                                {
                                    ComplexObjectLists[tokenName] = new List <JObject>();
                                }
                                ComplexObjectLists[tokenName].Add(o);
                            }
                            else
                            {
                                tokenName = GetNewName(tokenName, ComplexObjectDict);
                                ComplexObjectDict.Add(tokenName, o.Parent.ToString());
                                ComplexObjectLists.Add(tokenName, new List <JObject>());
                                ComplexObjectLists[tokenName].Add(o);
                            }
                        }
                        o["title"] = tokenName;
                    }
                    if (!string.IsNullOrEmpty(error))
                    {
                        return(error);
                    }
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
            return("");
        }
        private string ParseSchemas(out string error)
        {
            error = "";
            JObject root = new JObject();

            try
            {
                root["$schema"] = "http://json-schema.org/draft-04/schema#";
                root["type"]    = "object";
                JObject   rootProperties = new JObject();
                string    tokenName;
                JToken    token;
                JProperty tokenParent;
                var       sroot       = new JObject();
                var       objs        = sroot.Descendants();
                var       comparer    = new JTokenEqualityComparer();
                var       objectToken = JToken.FromObject("object");
                foreach (RedoxJsonSchema rs in schemaTextList)
                {
                    sroot          = rs.Schema;
                    sroot["title"] = rs.Category + "_" + rs.EndPointName;
                    sroot.Property("$schema").Remove();
                    rootProperties.Add(new JProperty(rs.Category + "_" + rs.EndPointName, sroot));
                }
                foreach (JObject o in AllObjects)
                {
                    token       = o;
                    tokenParent = (JProperty)token.Parent;
                    tokenName   = tokenParent.Name;
                    if (token["title"] == null || !IsSimpleObject(o, out error))
                    {
                        continue;
                    }
                    if (!string.IsNullOrEmpty(error))
                    {
                        return("");
                    }
                    if (ObjectTypeDict.ContainsKey(token["title"].ToString()))
                    {
                        token.Parent.Replace(new JProperty(tokenName, JObject.Parse("{ \"$ref\" : \"#/definitions/" + token["title"].ToString() + "\" }")));
                    }
                }
                root.Add(new JProperty("properties", rootProperties));
                foreach (KeyValuePair <string, List <JObject> > def in ComplexObjectLists)
                {
                    if (def.Value.Count() < 2)
                    {
                        continue;
                    }
                    if (!defs.ContainsKey(def.Key))
                    {
                        defs.Add(new JProperty(def.Key, def.Value[0]));
                    }
                    foreach (JObject jo in def.Value)
                    {
                        if (jo.Parent.Parent != null)
                        {
                            jo.Parent.Replace(new JProperty(def.Key, JObject.Parse("{ \"$ref\" : \"#/definitions/" + def.Key + "\" }")));
                        }
                    }
                }
                JObject defschk = (JObject)root["definitions"];
                if (defschk == null)
                {
                    root.Add(new JProperty("definitions", defs));
                }
                else
                {
                    defschk.Remove();
                    root.Add(new JProperty("definitions", defs));
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
                return("");
            }
            return(root.ToString());
        }
        void Write(BinaryWriter bw, JObject value)
        {
            bw.Write((byte)33);
            List <uint> offsets = new List <uint>();

            using (MemoryStream ms = new MemoryStream())
            {
                BinaryWriter innerBw = new BinaryWriter(ms);
                if (Version == 1)
                {
                    // Note: Optimization is not applicable here because key is stored with value,
                    // and all keys are unique
                    foreach (var entry in value.Values <JProperty>().OrderBy(x => x.Name, StringComparer.Ordinal))
                    {
                        offsets.Add((uint)ms.Length);
                        WriteKey(innerBw, entry.Name);
                        WriteTokenValue(innerBw, entry.Value);
                    }
                }
                else
                {
                    List <uint> keyIndexes = new List <uint>();
                    List <Tuple <uint, int, JToken> > tokenCache = new List <Tuple <uint, int, JToken> >();
                    JTokenEqualityComparer            comparer   = new JTokenEqualityComparer();

                    foreach (var entry in value.Values <JProperty>().OrderBy(x => x.Name, StringComparer.Ordinal))
                    {
                        if (Optimize)
                        {
                            bool found    = false;
                            int  hashCode = comparer.GetHashCode(entry.Value);
                            foreach (var potentialEntry in tokenCache.Where(x => x.Item2 == hashCode))
                            {
                                if (comparer.Equals(entry.Value, potentialEntry.Item3))
                                {
                                    found = true;
                                    offsets.Add(potentialEntry.Item1);
                                    keyIndexes.Add(keyNamesGen[entry.Name]);
                                    break;
                                }
                            }
                            if (found)
                            {
                                continue;
                            }
                            else
                            {
                                tokenCache.Add(new Tuple <uint, int, JToken>((uint)ms.Length, hashCode, entry.Value));
                            }
                        }
                        offsets.Add((uint)ms.Length);
                        keyIndexes.Add(keyNamesGen[entry.Name]);
                        WriteTokenValue(innerBw, entry.Value);
                    }
                    Write(bw, keyIndexes.ToArray());
                }
                ms.Flush();
                Write(bw, offsets.ToArray());
                bw.Write(ms.ToArray());
            }
        }
Пример #20
0
		private void RemoveValue(PatchRequest patchCmd, string propName, JProperty property)
		{
			EnsurePreviousValueMatchCurrentValue(patchCmd, property);
			if (property == null)
			{
				property = new JProperty(propName, new JArray());
				document.Add(property);
			}
			var array = GetArray(property, propName);

			var position = patchCmd.Position;
			var value = patchCmd.Value;
			if (position == null && value == null)
				throw new InvalidOperationException("Cannot remove value from  '" + propName + "' because position element does not exists or not an integer and no value was present");
			if (position != null && value != null)
				throw new InvalidOperationException("Cannot remove value from  '" + propName + "' because both a position and a value are set");
			if (position < 0 || position >= array.Count)
				throw new IndexOutOfRangeException("Cannot remove value from  '" + propName +
												   "' because position element is out of bound bounds");

			if (value != null)
			{
				var equalityComparer = new JTokenEqualityComparer();
				var singleOrDefault = array.FirstOrDefault(x => equalityComparer.Equals(x, value));
				if (singleOrDefault == null)
					return;
				array.Remove(singleOrDefault);
				return;
			}
			array.RemoveAt(position.Value);

		}
Пример #21
0
        public void PublishExludedList(string message, string topicUri, string @event, string[] excluded)
        {
            var clientMock = new Mock<IWampClient>();
            Mock<IWampServer<JToken>> mock = CallHandleOnMock(clientMock.Object, message);

            JTokenEqualityComparer comparer = new JTokenEqualityComparer();

            mock.Verify(x => x.Publish(clientMock.Object,
                                       topicUri,
                                       It.Is((JToken value) => comparer.Equals(value, JToken.Parse(@event))),
                                       It.Is((string[] excludedParameter) => excluded.SequenceEqual(excludedParameter))));
        }
Пример #22
0
        private JArray sort(JArray input)
        {
            var comparer = new JTokenEqualityComparer();

            return(new JArray(input.OrderBy((item) => comparer.GetHashCode(item))));
        }