private WikiDataState PopulationData(Item item, PopulationData data, Boolean createStatement, Boolean overrideWrongData, out Statement statement) { var total = data.data.FirstOrDefault(y => y.type == PopulationDataType.total); var propertyName = WikiBase.PropertyIdPopulation; WikiDataState result = WikiDataState.Unknown; // Statement claim = item.Claims.FirstOrDefault(x => x.IsAboutProperty(WikiBase.PropertyIdCountry)) as Statement; var property = new EntityId(propertyName); var propertyPointInTime = new EntityId(WikiBase.PropertyIdPointInTime); var claimsForProperty = item.Claims.Where(x => property.Equals(x.mainSnak.PropertyId)); Statement claim = claimsForProperty.FirstOrDefault( x => x.Qualifiers.Any( y => y.PropertyId.Equals(propertyPointInTime) && y.DataValue is TimeValue && (y.DataValue as TimeValue).DateTime.Year == data.Year)) as Statement; var dataValue = new QuantityValue(total.total); var snak = new Snak(SnakType.Value, new EntityId(propertyName), dataValue); if ( claim == null ) { result = WikiDataState.NotSet; if ( createStatement ) { claim = item.createStatementForSnak(snak); } } else { Snak oldSnak = claim.mainSnak; var oldDataValue = snak.DataValue as QuantityValue; if ( oldDataValue.Equals(dataValue) ) { result = WikiDataState.Valid; } else { result = WikiDataState.WrongValue; if ( overrideWrongData ) { claim.mainSnak = snak; } } } statement = claim as Statement; return result; }
public void HandleQuantityParam() { var p1 = new QuantityValue(3.141M, "http://unitsofmeasure.org", "mg"); Assert.AreEqual("3.141|http://unitsofmeasure.org|mg", p1.ToString()); var p2 = new QuantityValue(3.141M, "mg"); Assert.AreEqual("3.141||mg", p2.ToString()); var p3 = new QuantityValue(3.141M, "http://system.com/id$4", "$/d"); Assert.AreEqual(@"3.141|http://system.com/id\$4|\$/d", p3.ToString()); var p4 = QuantityValue.Parse("3.141|http://unitsofmeasure.org|mg"); Assert.AreEqual(3.141M, p4.Number); Assert.AreEqual("http://unitsofmeasure.org", p4.Namespace); Assert.AreEqual("mg", p4.Unit); var p5 = QuantityValue.Parse("3.141||mg"); Assert.AreEqual(3.141M, p5.Number); Assert.IsNull(p5.Namespace); Assert.AreEqual("mg", p5.Unit); var p6 = QuantityValue.Parse(@"3.141|http://system.com/id\$4|\$/d"); Assert.AreEqual(3.141M, p6.Number); Assert.AreEqual("http://system.com/id$4", p6.Namespace); Assert.AreEqual("$/d", p6.Unit); var crit = Criterium.Parse("paramX=3.14||mg"); var p7 = ((UntypedValue)crit.Operand).AsQuantityValue(); Assert.AreEqual(3.14M, p7.Number); Assert.IsNull(p7.Namespace); Assert.AreEqual("mg", p7.Unit); }