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]);
        }
Пример #6
0
        // 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);
        }