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); }
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); }
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)))); }
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)); }
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()); } }
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; } }
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); } } }
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); } }
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); }
/// <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()); } }
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); }
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)))); }
private JArray sort(JArray input) { var comparer = new JTokenEqualityComparer(); return(new JArray(input.OrderBy((item) => comparer.GetHashCode(item)))); }