Ejemplo n.º 1
0
        public List <SimpleValidationRule> GetValidationRules()
        {
            var rules    = new List <SimpleValidationRule>();
            var concepts = taxonomy.Concepts.Select(i => i.Value).ToList();

            foreach (var conceptelement in concepts)
            {
                var conceptrule = new ConceptValidationRule();
                conceptrule.ID = "v_tax_" + conceptelement.Content;


                if (conceptelement.Content.Contains(":ei"))
                {
                    var hierarchies = taxonomy.Hierarchies.Where(i => i.Item.Role == conceptelement.HierarchyRole).ToList();
                    if (hierarchies.Count == 0)
                    {
                        hierarchies = taxonomy.Hierarchies;
                    }
                    var hierarchy = hierarchies.FirstOrDefault(i => i.Item.Content == conceptelement.Domain.Content);
                    if (hierarchy != null)
                    {
                        //if (conceptelement.Content.Contains("218"))
                        //{
                        //}
                        var possibilities  = hierarchy.Where(i => i != hierarchy).Select(i => String.Format("{0} [{1}]", i.Item.Content, i.Item.LabelContent)).ToArray();
                        var possibilitystr = Utilities.Strings.ArrayToString(possibilities, ", ");
                        conceptrule.DisplayText = "Fact value for concept " + conceptelement.Content + " based on " + conceptelement.HierarchyRole + " should be " + possibilitystr;
                        conceptrule.IsOk        = (fact) => hierarchy.FirstOrDefault(i => i.Item.Content == fact.Value) != null;
                    }
                    else
                    {
                        var domainstr = taxonomy.GetDomainID(conceptelement.Domain);

                        var domainmembers  = taxonomy.SchemaElements.Where(i => i.Namespace == domainstr && i.Type == "nonnum:domainItemType").Select(i => new LogicalModel.Base.QualifiedName(i.Namespace + ":" + i.Name)).ToList();
                        var possibilities  = domainmembers.Select(i => String.Format("{0} [{1}]", i.Content, i.Name)).ToArray();
                        var possibilitystr = Utilities.Strings.ArrayToString(possibilities, ", ");
                        conceptrule.DisplayText = "Fact value for concept " + conceptelement.Content + "  should be " + possibilitystr;
                        conceptrule.IsOk        = (fact) => domainmembers.FirstOrDefault(i => i.Content == fact.Value) != null;
                    }

                    rules.Add(conceptrule);
                }
                if (conceptelement.Content.Contains(":bi"))
                {
                    conceptrule.DisplayText = "Fact value with concept " + conceptelement.Content + "  should be " + ConceptHints["bi"];
                    conceptrule.IsOk        = (fact) => {
                        return(fact.Value.In(boolvalues));
                    };
                    rules.Add(conceptrule);
                }
                if (conceptelement.Content.Contains(":di"))
                {
                    conceptrule.DisplayText = "Fact value for concept " + conceptelement.Content + " should be a date formatted, as yyyy-mm-dd ";
                    conceptrule.IsOk        = (fact) => Utilities.Converters.IsDate(fact.Value, "yyyy-MM-dd");
                    rules.Add(conceptrule);
                }
                conceptrule.Concept = conceptelement.Content;
            }
            var typedelements = taxonomy.SchemaElements.Where(i => i.FileName == "typ.xsd");

            foreach (var typedelement in typedelements)
            {
                var fullname = typedelement.Namespace + ":" + typedelement.Name;

                var typedrule = new TypedDimensionValidationRule();
                typedrule.ID = "v_tax_" + fullname;
                if (typedelement.Type == "xs:date")
                {
                    typedrule.DisplayText = "Typed Dimension Member for Domain " + fullname + " should be a date";
                    typedrule.IsOk        = (s) => Utilities.Converters.IsDate(s, "yyyy-MM-dd");
                    rules.Add(typedrule);
                }
                if (typedelement.Type == "xs:integer")
                {
                    typedrule.DisplayText = "Typed Dimension Member for Domain " + fullname + " should be an integer";
                    typedrule.IsOk        = (s) => Utilities.Converters.IsInteger(s);
                    rules.Add(typedrule);
                }
                typedrule.TypedDimension = fullname;
            }
            return(rules);
        }