public void TranslatorUtils_TranslateShapeToObject_whenRsBothAndColumnsMixed_FullRSPresentInShape() { //------------Setup for test-------------------------- var translatorUtils = new TranslatorUtils(); var shape = new StringBuilder(@"<DataList> <rs Description="""" IsEditable=""True"" ColumnIODirection=""Both""> <result Description="""" IsEditable=""True"" ColumnIODirection=""Output"" /> <val Description="""" IsEditable=""True"" ColumnIODirection=""Input"" /> </rs> </DataList>"); //------------Execute Test--------------------------- ErrorResultTO invokeErrors; var dl = translatorUtils.TranslateShapeToObject(shape, false, out invokeErrors); //------------Assert Results------------------------- IBinaryDataListEntry entry; string error; dl.TryGetEntry("rs", out entry, out error); var keys = dl.FetchAllUserKeys(); Assert.AreEqual(0, invokeErrors.FetchErrors().Count); Assert.AreEqual(1, keys.Count); Assert.AreEqual("rs", keys[0]); Assert.AreEqual("result", entry.Columns[0].ColumnName); Assert.AreEqual("val", entry.Columns[1].ColumnName); }
/// <summary> /// Converts the and filter. /// </summary> /// <param name="payload">The payload.</param> /// <param name="filterShape">The filter shape.</param> /// <param name="errors">The errors.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">payload</exception> public StringBuilder ConvertAndFilter(IBinaryDataList payload, StringBuilder filterShape, out ErrorResultTO errors) { if (payload == null) { throw new ArgumentNullException("payload"); } int keyCnt = 0; errors = new ErrorResultTO(); TranslatorUtils tu = new TranslatorUtils(); ErrorResultTO invokeErrors; IBinaryDataList targetDl = tu.TranslateShapeToObject(filterShape, false, out invokeErrors); errors.MergeErrors(invokeErrors); IList <string> itemKeys = targetDl.FetchAllUserKeys(); StringBuilder result = new StringBuilder("{"); foreach (string key in itemKeys) { IBinaryDataListEntry entry; IBinaryDataListEntry tmpEntry; string error; if (payload.TryGetEntry(key, out entry, out error) && targetDl.TryGetEntry(key, out tmpEntry, out error)) { if (entry.IsRecordset) { result.Append(ProcessRecordSet(entry, out error)); errors.AddError(error); } else { result.Append(ProcessScalar(entry)); } // wack in , for field separator ;) keyCnt++; if (keyCnt < itemKeys.Count) { result.Append(","); } } errors.AddError(error); } result.Append("}"); return(result); }
public void CanDataListHelperCreateTargetShape() { // BuildTargetShape var targetShape = new StringBuilder("<DataList><result Description=\"\" IsEditable=\"True\" ColumnIODirection=\"Output\" /></DataList>"); ErrorResultTO invokeErrors; TranslatorUtils tu = new TranslatorUtils(); var dl = tu.TranslateShapeToObject(targetShape, false, out invokeErrors); var keys = dl.FetchAllUserKeys(); Assert.AreEqual(0, invokeErrors.FetchErrors().Count); Assert.AreEqual(1, keys.Count); Assert.AreEqual("result", keys[0]); }
public void BinaryDataList_FetchAllRecordSetKeys_WhenHasScalars_ShouldReturn0() { //------------Setup for test-------------------------- // BuildTargetShape var targetShape = new StringBuilder("<DataList><result Description=\"\" IsEditable=\"True\" ColumnIODirection=\"Output\" /></DataList>"); ErrorResultTO invokeErrors; TranslatorUtils tu = new TranslatorUtils(); var dl = tu.TranslateShapeToObject(targetShape, false, out invokeErrors); //------------Execute Test--------------------------- var keys = dl.FetchAllRecordSetKeys(); //------------Assert Results------------------------- Assert.AreEqual(0, invokeErrors.FetchErrors().Count); Assert.AreEqual(0, keys.Count); }
public void BinaryDataList_FetchAllRecordSetKeys_WhenHasRecordSetsOnly_ShouldReturn0() { //------------Setup for test-------------------------- // BuildTargetShape var targetShape = new StringBuilder("<DataList><rs><Col1/><Col2/></rs><rec><Col4/><Col5/></rec></DataList>"); ErrorResultTO invokeErrors; TranslatorUtils tu = new TranslatorUtils(); var dl = tu.TranslateShapeToObject(targetShape, false, out invokeErrors); //------------Execute Test--------------------------- var keys = dl.FetchAllRecordSetKeys(); //------------Assert Results------------------------- Assert.AreEqual(0, invokeErrors.FetchErrors().Count); Assert.AreEqual(2, keys.Count); Assert.AreEqual("rs", keys[0]); Assert.AreEqual("rec", keys[1]); }
// internal to impl api methods private IBinaryDataList ConvertTo(byte[] input, StringBuilder targetShape, out ErrorResultTO errors, bool onlyMapInputs) { errors = new ErrorResultTO(); string payload = Encoding.UTF8.GetString(input); IBinaryDataList result = new BinaryDataList(); TranslatorUtils tu = new TranslatorUtils(); // build shape if (targetShape == null) { errors.AddError("Null payload or shape"); } else { ErrorResultTO invokeErrors; result = tu.TranslateShapeToObject(targetShape, true, out invokeErrors); errors.MergeErrors(invokeErrors); // populate the shape if (payload != string.Empty) { try { string toLoad = DataListUtil.StripCrap(payload); // clean up the rubish ;) XmlDocument xDoc = new XmlDocument(); // BUG 9626 - 2013.06.11 - TWR: ensure our DocumentElement toLoad = string.Format("<Tmp{0}>{1}</Tmp{0}>", Guid.NewGuid().ToString("N"), toLoad); xDoc.LoadXml(toLoad); if (xDoc.DocumentElement != null) { XmlNodeList children = xDoc.DocumentElement.ChildNodes; IDictionary <string, int> indexCache = new Dictionary <string, int>(); // BUG 9626 - 2013.06.11 - TWR: refactored for recursion TryConvert(children, result, indexCache, errors, onlyMapInputs); } // Transfer System Tags for (int i = 0; i < TranslationConstants.systemTags.Length; i++) { string key = TranslationConstants.systemTags.GetValue(i).ToString(); string query = String.Concat("//", key); XmlNode n = xDoc.SelectSingleNode(query); // try system namespace tags ;) if (n == null) { var values = "//" + DataListUtil.BuildSystemTagForDataList(key, false); query = values; n = xDoc.SelectSingleNode(query); } if (n != null && !string.IsNullOrEmpty(n.InnerXml)) { string bkey = DataListUtil.BuildSystemTagForDataList(key, false); string error; IBinaryDataListEntry sysEntry; if (result.TryGetEntry(bkey, out sysEntry, out error)) { sysEntry.TryPutScalar(Dev2BinaryDataListFactory.CreateBinaryItem(n.InnerXml, bkey), out error); } } } } catch (Exception e) { // if use passed in empty input they only wanted the shape ;) if (input.Length > 0) { errors.AddError(e.Message); } } } } return(result); }