Ejemplo n.º 1
0
 public RuleBookTemplateModel(string name, string baseClassName, RuleEngineRule[] rules, LookupTable[] tables)
 {
     Name = name;
     BaseClassName = baseClassName;
     _rules = rules;
     Tables = tables;
 }
Ejemplo n.º 2
0
        public void CreateAndDropTableMultipleDatabases()
        {
            var table = new LookupTable("TestTable");
            var keyColumns = new[]
            {
                new FactorTableColumnDefinition("ColumnA", true)
                {
                    LookupType = LookupType.ExactMatch
                },
                new FactorTableColumnDefinition("ColumnB", true)
                {
                    LookupType = LookupType.ExactMatch
                }
            };
            var dataColumns = new[]
            {
                new FactorTableColumnDefinition("IntColumn", false)
                {
                    DataType = typeof(int)
                },
                new FactorTableColumnDefinition("DecimalColumn", false)
                {
                    DataType = typeof(decimal)
                }
            };
            table.Keys = keyColumns;
            table.Columns = dataColumns;
            table.Properties.Schema = "dbo";
            table.Properties.Context = "ISO";

            _multipleRepository.ImportTables(new[] { table }, false);

            var addedTable =
                _multipleRepository.GetRatingTables(
                    t => t.Name.Equals("TestTable", StringComparison.InvariantCultureIgnoreCase) &&
                         t.Properties.Schema == "dbo").FirstOrDefault();

            Assert.IsTrue(addedTable != null);

            _multipleRepository.DropTables(new[] { _multipleRepository.GetLookupTable(addedTable.ChangeId) });

            var noTable = _multipleRepository.GetRatingTables(
                    t => t.Name.Equals("TestTable", StringComparison.InvariantCultureIgnoreCase) &&
                         t.Properties.Schema == "dbo");

            Assert.IsTrue(!noTable.Any());
        }
Ejemplo n.º 3
0
        public ActionResult AddLookupTable(string name, string keys, string columns, string data = null)
        {
            //var columnsLine = lines.First();
            var keyColumns = keys.Split("|".ToCharArray());
            var valueColumns = columns.Split("|".ToCharArray());
            var allColumns = keyColumns.Concat(valueColumns);

            // Create the table
            //var ftId = Guid.NewGuid();
            var rt = new LookupTable()
            {
                Name = name,
                Keys = (from key in keyColumns
                        select new FactorTableColumnDefinition(key, true)).ToArray(),
                Columns = (from valueColumn in valueColumns
                           select new FactorTableColumnDefinition(valueColumn, false)).ToArray(),
            };

            TableStrategy.ImportTables(new LookupTable[] { rt }, false);

            // Import and data
            if (data != null)
            {
                var lines = data.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                var dataLines = lines.Skip(1);
                foreach (var dataLine in dataLines)
                    TableStrategy.SaveLookupTableRow(new LookupTableRowModel()
                                                         {
                                                             ChangeId = Guid.NewGuid(),
                                                             TableName = name,
                                                             EffectiveDate = MissionControlDate,
                                                             //RowId = Guid.NewGuid().ToString(),
                                                             Active = true,
                                                             Values =
                                                                 dataLine.Split("|".ToCharArray()).Select(p => p.Trim())
                                                                 .ToArray()
                                                         });
            }
            return View("Index", TableStrategy.GetRatingTables());
        }
Ejemplo n.º 4
0
        public bool IsMatch(LookupTable table, params object[] keyValues)
        {
            for (int index = 0; index < keyValues.Length; index++)
            {
                // The key value
                var key = keyValues[index];
                // The definition of this key
                var keyDefinition = table.Keys[index];
                // How should we match the keyValues
                var matcher = GetMatcher(keyDefinition.LookupType);
                // Sort the rows in the correct order based on the lookuptype
                var rowKeyValue = KeyValues[index];

                if (!matcher(key, rowKeyValue)) return false;
            }
            return true;
        }
        private LookupTable DecorateFlatTable(string name, GetTableColumns_Result[] tableColumns, bool includeRows = true)
        {
            var ratingTable = new LookupTable(name)
            {
                Keys =
                    tableColumns.Where(p => p.IsKey != null && p.IsKey == true).Select(
                        p => new FactorTableColumnDefinition(p.ColumnName, true)
                                 {
                                     LookupType = (LookupType)Enum.Parse(typeof(LookupType), p.LookupType, true)
                                 }).ToArray(),
                Columns =
                    tableColumns.Where(p => p.IsKey != null && p.IsKey == false).Select(
                        p => new FactorTableColumnDefinition(p.ColumnName, false)).ToArray()
            };
            if (includeRows)
            {
                var allColumns = ratingTable.Keys.Concat(ratingTable.Columns).ToArray();
                //RatingTablesDb.Connection.Open();

                RatingTableQuery(
                    FlatTableQueries.BuildVersionedQuery(ratingTable.Name, allColumns.Select(p => p.Name).ToArray(), EffectiveDate),
                        reader => ReadLookupTableRows(ratingTable, reader));
            }
            return ratingTable;
        }
        private static void ReadLookupTableRows(LookupTable ratingTable, SqlDataReader reader)
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    var LookupTableRow = new LookupTableRow();
                    var index = 0;
                    LookupTableRow.RowId = reader.GetInt64(index++).ToString();
                    LookupTableRow.ChangeId = reader.GetGuid(index++).ToString();
                    LookupTableRow.EffectiveDate = reader.GetDateTime(index++);
                    LookupTableRow.Active = reader.GetBoolean(index++);

                    foreach (var key in ratingTable.Keys)
                    {
                        var value = reader.GetString(index);
                        if (value.Contains("::"))
                        {
                            var lhValues = value.Split("::".ToCharArray(),
                                                       StringSplitOptions.RemoveEmptyEntries);
                            LookupTableRow.KeyValues.Add(new LookupTableKey(lhValues[0],
                                                                            lhValues[1]));
                        }
                        else
                        {
                            LookupTableRow.KeyValues.Add(new LookupTableKey(value, null));
                        }

                        index++;
                    }
                    foreach (var column in ratingTable.Columns)
                    {
                        LookupTableRow.ColumnValues.Add(column.Name, reader.GetString(index));
                        index++;
                    }
                    ratingTable.Rows.Add(LookupTableRow);
                }
            }
        }
Ejemplo n.º 7
0
        //public LookupTable ToLookupTable(DataTable table)
        //{
        //    if (!table.Rows.Cast<DataRow>().Any())
        //        return new LookupTable();
        //    var lookupTable = new LookupTable();
        //    var xml = XElement.Parse(table.Rows.Cast<DataRow>().First()[0].ToString());
        //    var tableXml = xml.Element("table");
        //    if (tableXml != null)
        //    {
        //        lookupTable.Name = tableXml.Element("name").Value;
        //        lookupTable.Properties.Schema = tableXml.Element("schema").Value;
        //        lookupTable.Properties.EffectiveDate = tableXml.Element("effectiveDate").Value;
        //        foreach (var row in tableXml.Element("rows").Elements("row"))
        //        {
        //            var columns = row.Elements().Where(x => !MetadataColumnNames.Contains(x.Name.ToString()));
        //        }
        //    }
        //    return lookupTable;
        //}
        public LookupTable ToLookupTable(IDictionary<string, object> parameters, DataTable table)
        {
            var dataTableColumns = table.Columns.Cast<DataColumn>().ToList();

            var metadataXml = XElement.Parse(Convert.ToString(parameters["Metadata"]));
            var factorKeyColumns = new List<FactorTableColumnDefinition>();
            var factorNonKeyColumns = new List<FactorTableColumnDefinition>();
            var metadataColumns = new List<FactorTableColumnDefinition>();

            var columnXml = metadataXml.Elements("ColumnMetadata");

            foreach (var column in columnXml.Elements("Column"))
            {
                //get the base properties
                var columnName = column.Element("Name");

                var columnDefinition = new FactorTableColumnDefinition
                {
                    Name = columnName != null ? columnName.Value : string.Empty
                };

                columnDefinition.DataType =
                    dataTableColumns.Single(c => c.ColumnName == columnDefinition.Name).DataType;

                //get the extended properties
                if (column.Elements("Properties").Descendants().Any())
                {
                    foreach (var property in column.Elements("Properties").Elements("Property"))
                    {
                        var propertyName = property.Element("Name");
                        if (propertyName != null)
                        {
                            var propertyValue = property.Element("Value");

                            if (propertyValue != null && !string.IsNullOrEmpty(propertyValue.Value))
                            {
                                if (propertyName.Value == "IsKey")
                                    columnDefinition.IsKey = propertyValue.Value == "1";
                                else if (propertyName.Value == "LookupType")
                                    columnDefinition.LookupType =
                                        (LookupType)Enum.Parse(typeof(LookupType), propertyValue.Value);
                            }
                        }
                    }
                }

                if (MetadataColumnNames.Contains(columnDefinition.Name))
                    metadataColumns.Add(columnDefinition);
                else if (columnDefinition.IsKey)
                    factorKeyColumns.Add(columnDefinition);
                else
                    factorNonKeyColumns.Add(columnDefinition);
            }

            var properties = new ExpandoObject() as IDictionary<string, object>;
            foreach (var property in metadataXml.Elements().Where(e => e.Name != "ColumnMetadata"))
            {
                properties.Add(property.Name.ToString(), property.Value);
            }

            var lookupTable = new LookupTable(properties["Table"].ToString(),
                metadataColumns.ToArray(),
                factorKeyColumns.ToArray(),
                factorNonKeyColumns.ToArray())
            {
                Id = parameters["ChangeId"].ToString(),
                Properties = properties
            };

            foreach (var row in table.Rows.Cast<DataRow>())
            {
                var lookupTableRow = new LookupTableRow
                {
                    Active = Convert.ToBoolean(row["Active"]),
                    EffectiveDate = Convert.ToDateTime(row["EffectiveDate"]),
                    ExpirationDate = Convert.ToDateTime(row["ExpirationDate"]),
                    RowId = row["Id"].ToString(),
                    Sequence = Convert.ToInt32(row["Sequence"]),
                    ChangeId = row["ChangeId"].ToString(),
                    IsOverride = Convert.ToBoolean(row["IsOverride"].ToString())
                };

                foreach (var key in lookupTable.Keys)
                {
                    lookupTableRow.KeyValues.Add(new LookupTableKey(key.Name, row[key.Name].ToString(), null));
                }

                foreach (var col in lookupTable.Columns)
                {
                    lookupTableRow.ColumnValues.Add(col.Name, row[col.Name]);
                }

                lookupTable.Rows.Add(lookupTableRow);
            }

            return lookupTable;
        }
Ejemplo n.º 8
0
        public LookupTableRowModel ToLookupTableRowModel(LookupTable table, LookupTableRow row)
        {
            if (row == null)
                return null;

            var metadata = new Dictionary<string, object>
            {
                { "Id", row.RowId },
                { "Sequence", row.Sequence },
                { "ChangeId", row.ChangeId },
                { "EffectiveDate", row.EffectiveDate },
                { "ExpirationDate", row.ExpirationDate },
                { "Active", row.Active },
                { "IsOverride", row.IsOverride }
            };

            for (var x = 0; x < row.KeyValues.Count(); x++)
            {
                metadata[table.Keys[x].Name] = row.KeyValues[x].LowValue;

                if (!string.IsNullOrEmpty(row.KeyValues[x].HighValue))
                    metadata[table.Keys[x].Name] += "::" + row.KeyValues[x].HighValue;
            }

            for (var x = 0; x < row.ColumnValues.Count; x++)
            {
                metadata[table.Columns[x].Name] = row.ColumnValues[table.Columns[x].Name];
            }

            return new LookupTableRowModel
            {
                RowId = Convert.ToInt64(row.RowId),
                ChangeId = Guid.Parse(row.ChangeId),
                Sequence = row.Sequence,
                IsOverride = row.IsOverride,
                EffectiveDate = row.EffectiveDate,
                Active = row.Active,
                Values = metadata.Select(v => v.Value.ToString()).ToArray(),
                ItemValues = metadata,
                TableId = table.Id,
                TableName = table.Name
            };
        }
Ejemplo n.º 9
0
        public LookupTableModel ToLookupTableModel(LookupTable table)
        {
            var model = new LookupTableModel
            {
                Id = table.Id,
                ChangeId = table.Id,
                Name = table.Name,
                Description = table.Name,
                IsoName = table.Name,
                Active = table.Properties.Active == "1"
            };

            model.Properties.EffectiveDate = Convert.ToDateTime(table.Properties.EffectiveDate);
            model.Properties.Schema = Convert.ToString(table.Properties.Schema);
            model.Properties.TableType = Convert.ToString(table.Properties.TableType);
            model.Properties.Context = Convert.ToString(table.Properties.Context);

            return model;
        }
Ejemplo n.º 10
0
 public RuleBookTemplateModel(string name, RuleEngineRule[] rules, LookupTable[] tables)
     : this(name, "CompiledRuleBookBase", rules, tables)
 {
 }