Example #1
0
 public void Add(KeyValuePair <string, object> item)
 {
     if (item.Value is SharpObjectDynamic)
     {
         _obj.Add(new KeyValuePair <string, object>(item.Key, ((SharpObjectDynamic)item.Value).GetObject()));
     }
     else if (item.Value is SharpObjectListDynamic)
     {
         _obj.Add(new KeyValuePair <string, object>(item.Key, ((SharpObjectListDynamic)item.Value).GetObjectList()));
     }
     else
     {
         _obj.Add(item);
     }
 }
Example #2
0
        public virtual SharpObject GetObject(string source)
        {
            // TODO: Add option to use packed+collapsed rows for faster reading when only a few columns are needed

            if (ColumnWidths.Count == 0)
            {
                return(new SharpObject());
            }

            var column = 0;
            var width  = ColumnWidths[column];
            var sb     = new StringBuilder();
            var result = new SharpObject();

            foreach (var c in source)
            {
                sb.Append(c);
                width--;
                if (width == 0)
                {
                    var field = GetColumnName(ColumnNames[column]);
                    var value = GetColumnValue(ColumnNames[column], sb.ToString());

                    if (IncludeEmptyFields || (value != null && (!(value is string) || !string.IsNullOrEmpty(value.ToString()))))
                    {
                        var           parts = field.Split('/').ToList();
                        StringBuilder path  = new StringBuilder();
                        for (int i = 0; i < parts.Count - 1; i++)
                        {
                            if (path.Length > 0)
                            {
                                path.Append("/");
                            }
                            path.Append(parts[i]);

                            var p = path.ToString();
                            if (!result.ContainsKey(p))
                            {
                                result[p] = new SharpObject();
                            }
                        }


                        if (result.ContainsKey(field))
                        {
                            result.Add(field, value);
                        }
                        else
                        {
                            result[field] = value;
                        }
                    }

                    column++;
                    if (column >= ColumnWidths.Count)
                    {
                        break;
                    }
                    width = ColumnWidths[column];
                    sb.Clear();
                }
            }

            return(result);
        }
Example #3
0
        private SharpObject ApplyMap(SharpObject map, SharpObject record, SharpObject context)
        {
            var obj = new SharpObject();

            foreach (var item in map)
            {
                if (item.Value is SharpObject)
                {
                    obj[item.Key] = ApplyMap((SharpObject)item.Value, record, context);
                }
                else if (item.Value is SharpObjectList)
                {
                    foreach (var child in (SharpObjectList)item.Value)
                    {
                        obj.Add(item.Key, ApplyMap(child, record, context));
                    }
                }
                else
                {
                    if (item.Value is string)
                    {
                        object fieldValue = record.Format((string)item.Value);

                        string stringValue = fieldValue.ToString();
                        if (SharpObject.IsFormatRequired(stringValue))
                        {
                            fieldValue  = obj.Format(stringValue);
                            stringValue = fieldValue.ToString();
                        }

                        if (SharpObject.IsFormatRequired(stringValue))
                        {
                            fieldValue  = null;
                            stringValue = "";
                        }

                        var fieldName  = item.Key;
                        var fieldParts = fieldName.Split('_');
                        if (fieldParts.Length == 2)
                        {
                            var fieldType = fieldParts[1].ToLower();
                            switch (fieldType)
                            {
                            case "bool":
                                fieldName = fieldParts[0];
                                if (string.IsNullOrEmpty(stringValue))
                                {
                                    fieldValue = false;
                                }
                                else if (stringValue == "0" || stringValue == "1")
                                {
                                    fieldValue = stringValue == "1";
                                }
                                else if (stringValue.StartsWith("y", StringComparison.OrdinalIgnoreCase) || stringValue.StartsWith("n", StringComparison.OrdinalIgnoreCase))
                                {
                                    fieldValue = stringValue.StartsWith("y", StringComparison.OrdinalIgnoreCase);
                                }
                                else
                                {
                                    fieldValue = Convert.ToBoolean(stringValue);
                                }

                                break;

                            case "int":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToInt32(stringValue);
                                break;

                            case "long":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToInt64(stringValue);
                                break;

                            case "datetime":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToDateTime(stringValue);
                                break;

                            case "decimal":
                                fieldName  = fieldParts[0];
                                fieldValue = Convert.ToDecimal(stringValue);
                                break;

                            case "list":
                                fieldName  = fieldParts[0];
                                fieldValue = EncodedString.ParseList(stringValue);
                                break;
                            }
                        }

                        obj[fieldName] = fieldValue;
                    }
                    else
                    {
                        obj[item.Key] = item.Value;
                    }
                }
            }


            return(obj);
        }