public static LogicalModel.Concept ToLogical(LogicalModel.Concept item)
        {
            var toitem = new LogicalModel.Concept();

            toitem.Content = item.Content;
            return(toitem);
        }
        public static List <LogicalModel.Concept> ToLogical(ConceptFilter item)
        {
            var result = new List <LogicalModel.Concept>();

            if (item is ConceptNameFilter)
            {
                var citem = item as ConceptNameFilter;
                foreach (var concept in citem.Concepts)
                {
                    var toitem = new LogicalModel.Concept();
                    toitem.Content = concept.QName.Content;
                    result.Add(toitem);
                }
            }
            return(result);
        }
Exemple #3
0
        public void LoadDefinitionHierarchy(LogicalModel.Table logicaltable)
        {
            var rootlocator = new Locator();

            rootlocator.ID = "Root";
            var rootNode = new Hierarchy <Locator>(rootlocator);

            DefinitionItems.Clear();
            DefinitionItems.Add(rootNode);
            XmlNamespaceManager nsmanager = null;
            var refdoc = this.Taxonomy.TaxonomyDocuments.FirstOrDefault(i => i.LocalPath == this.DefinitionPath);

            if (refdoc != null)
            {
                nsmanager = Utilities.Xml.GetTaxonomyNamespaceManager(refdoc.XmlDocument);
            }

            foreach (var definitionlink in DefinitionLinks)
            {
                definitionlink.LoadHierarchy();
                DefinitionItems.AddRange(definitionlink.DefinitionItems);
            }
            foreach (var definitionlink in DefinitionLinks)
            {
                var locatorswithroles = definitionlink.DefinitionRoot.Where(i => !String.IsNullOrEmpty(i.Item.TargetRole));
                foreach (var l in locatorswithroles)
                {
                    var ss = DefinitionLinks.FirstOrDefault(i => i.Role == l.Item.TargetRole).DefinitionRoot;
                    ss.Item.RoleType = l.Item.RoleType;
                    l.Item           = ss.Item;
                    l.Children       = ss.Children;
                }
                var hascube = definitionlink.DefinitionArcs.Any(i => i.RoleType == ArcRoleType.hypercube_dimension);
                if (hascube)
                {
                    if (definitionlink.DefinitionRoot.Find(i => i.Item.RoleType == ArcRoleType.domain_member) != null)
                    {
                        rootNode.Children.Add(definitionlink.DefinitionRoot);
                        definitionlink.DefinitionRoot.Parent = rootNode;
                    }
                    else
                    {
                        //no domain member found
                    }
                }
                else
                {
                    var hasall = definitionlink.DefinitionArcs.Any(i => i.RoleType == ArcRoleType.all);
                    if (hasall)
                    {
                        rootNode.Children.Add(definitionlink.DefinitionRoot);
                        definitionlink.DefinitionRoot.Parent = rootNode;
                    }
                }
            }

            DefinitionRoot = rootNode;

            LocateDefinitions();

            var nontrivialdomains = new Dictionary <string, LogicalModel.Dimensions.DimensionDomain>();

            var hypercubenodes = DefinitionItems.Where(i => i.Item.RoleType.In(ArcRoleType.all, ArcRoleType.notAll)).ToList();

            foreach (var hypercubenode in hypercubenodes)
            {
                var hypercube = new LogicalModel.HyperCube();
                //map the concepts
                var concepts = new List <Hierarchy <Locator> >();
                var parent   = hypercubenode.Parent;
                concepts.Add(parent);
                if (parent.Children.Count > 1)
                {
                    var parentconcepts = parent.Children.Where(i => i.Item.RoleType != ArcRoleType.all);
                    concepts.AddRange(parentconcepts);
                }

                foreach (var conceptnode in concepts)
                {
                    var logicalconcept = new LogicalModel.Concept();
                    if (conceptnode.Item.Element != null)
                    {
                        logicalconcept.Content = conceptnode.Item.Element.Key;
                        logicalconcept.Name    = conceptnode.Item.Element.Name;
                        hypercube.Concepts.Add(logicalconcept);
                    }
                    else
                    {
                        Logger.WriteLine(String.Format("Concept Element not found for {0}!", conceptnode.Item.ID));
                    }
                }

                //map the dimensions
                var domains = hypercubenode.Where(i => i.Item.RoleType == ArcRoleType.dimension_domain).Where(i => i.Children.Count > 0);
                domains = domains.Where(i => i.Children.FirstOrDefault(j => !j.Item.Element.IsDefaultMember) != null).ToList();

                var hypercubeitems = hypercubenode.Where(i => i.Item.RoleType == ArcRoleType.hypercube_dimension); //.Where(i => i.Children.Count > 0)
                foreach (var hypercubeitem in hypercubeitems)
                {
                    var logicalhypercubeitem = new LogicalModel.Dimensions.DimensionItem();
                    //logicalhypercubeitem.Content = hypercubeitem.Item.Element.Key;
                    logicalhypercubeitem.Name      = hypercubeitem.Item.Element.Name;
                    logicalhypercubeitem.Namespace = hypercubeitem.Item.Element.Namespace;
                    logicalhypercubeitem.LabelID   = hypercubeitem.Item.LabelID;

                    var fixedns = Taxonomy.FindNamespacePrefix(hypercubeitem.Item.Element.NamespaceURI, hypercubeitem.Item.Element.Namespace);
                    if (fixedns != logicalhypercubeitem.Namespace)
                    {
                        logicalhypercubeitem.Namespace = fixedns;
                    }
                    //if (logicalhypercubeitem.Name.Contains("RCP"))
                    //{

                    //}
                    if (hypercubeitem.Children.Count == 0)
                    {
                        var domainref = hypercubeitem.Item.Element.TypedDomainRef;
                        if (!String.IsNullOrEmpty(domainref))
                        {
                            var se_dim_doc = this.Taxonomy.TaxonomyDocuments.FirstOrDefault(i => i.TargetNamespacePrefix == hypercubeitem.Item.Element.Namespace);
                            //TODO
                            var localrelpath = Utilities.Strings.ResolveHref(LogicalModel.TaxonomyEngine.LocalFolder, se_dim_doc.LocalFolder, domainref);

                            //var path = Utilities.Strings.ResolveRelativePath(se_dim_doc.LocalFolder, domainref);
                            //var localrelpath = Utilities.Strings.GetRelativePath(LogicalModel.TaxonomyEngine.LocalFolder, path);
                            var se_domain_doc = this.Taxonomy.FindDocument(localrelpath);

                            var refid         = domainref.Substring(domainref.IndexOf("#") + 1);
                            var se_domain_key = se_domain_doc.TargetNamespacePrefix + ":" + refid;
                            var se_domain     = Taxonomy.SchemaElementDictionary[se_domain_key];

                            if (se_domain != null)
                            {
                                var logicaldomain = new LogicalModel.Dimensions.DimensionDomain();
                                logicaldomain.Content       = se_domain_key;
                                logicaldomain.Name          = se_domain.Name;
                                logicaldomain.DimensionItem = logicalhypercubeitem;
                                logicaldomain.LabelID       = se_domain.ID;
                                logicalhypercubeitem.Domains.Add(logicaldomain);

                                var logicalmember = new LogicalModel.Dimensions.TypedDimensionMember();
                                logicalmember.Content = logicaldomain.Name + ":*";
                                logicalmember.Name    = "*";
                                logicalmember.Domain  = logicaldomain;
                                logicalmember.LabelID = "";
                                //logicalmember.IsDefaultMember = domainmember.Item.Element.IsDefaultMember;
                                logicaldomain.DomainMembers.Add(logicalmember);

                                hypercube.DimensionItems.Add(logicalhypercubeitem);
                            }
                            else
                            {
                            }
                        }
                        //var xs = Taxonomy.SchemaElementDictionary[hypercubeitem.Item.]
                    }

                    var completedomains = hypercubeitem.Children.Where(i => i.Children.FirstOrDefault(j => !j.Item.Element.IsDefaultMember) != null).ToList();
                    if (completedomains.Count > 0)
                    {
                        hypercube.DimensionItems.Add(logicalhypercubeitem);
                    }
                    else
                    {
                    }

                    foreach (var domain in completedomains)
                    {
                        var logicaldomain = new LogicalModel.Dimensions.DimensionDomain();
                        logicaldomain.Content       = domain.Item.Element.Key;
                        logicaldomain.Name          = domain.Item.Element.Name;
                        logicaldomain.DimensionItem = logicalhypercubeitem;
                        logicaldomain.LabelID       = domain.Item.LabelID;
                        logicalhypercubeitem.Domains.Add(logicaldomain);

                        var domainmembers = domain.Children;//.Where(i=>!i.Item.Element.IsDefaultMember).ToList();
                        foreach (var domainmember in domainmembers)
                        {
                            var logicalmember = new LogicalModel.Dimensions.DimensionMember();
                            logicalmember.Content = domainmember.Item.Element.Key;
                            logicalmember.Name    = domainmember.Item.Element.Name;

                            var memelement   = domainmember.Item.Element;
                            var memfixedns   = Taxonomy.FindNamespacePrefix(memelement.NamespaceURI, memelement.Namespace);
                            var memberdomain = logicaldomain;
                            //if (memfixedns != logicaldomain.ID)
                            //{
                            //    LogicalModel.Dimensions.DimensionDomain ntdomain = null;
                            //    if (!nontrivialdomains.ContainsKey(memfixedns))
                            //    {
                            //        ntdomain = new LogicalModel.Dimensions.DimensionDomain();
                            //        var domelement = Taxonomy.GetDomain(memfixedns);
                            //        logicaldomain.Content = domelement.Key;
                            //        logicaldomain.Name = domelement.Name;
                            //        logicaldomain.DimensionItem = logicalhypercubeitem;
                            //        nontrivialdomains.Add(memfixedns, ntdomain);
                            //    }
                            //    ntdomain = nontrivialdomains[memfixedns];
                            //    memberdomain = ntdomain;
                            //}

                            logicalmember.Domain          = memberdomain;
                            logicalmember.LabelID         = domainmember.Item.LabelID;
                            logicalmember.IsDefaultMember = domainmember.Item.Element.IsDefaultMember;
                            logicaldomain.DomainMembers.Add(logicalmember);
                        }
                    }
                }

                logicaltable.HyperCubes.Add(hypercube);
            }

            /*
             * foreach (var hc in logicaltable.HyperCubes)
             * {
             *  foreach (var dimitem in hc.DimensionItems)
             *  {
             *      foreach (var domitem in dimitem.Domains)
             *      {
             *          var nsuri = nsmanager.LookupNamespace(domitem.Namespace);
             *          var fixedns = Taxonomy.FindNamespacePrefix(nsuri, domitem.Namespace);
             *          if (fixedns != domitem.Namespace)
             *          {
             *              domitem.Namespace = fixedns;
             *          }
             *
             *          foreach (var member in domitem.DomainMembers)
             *          {
             *              var memnsuri = nsmanager.LookupNamespace(member.Domain.Namespace);
             *              var memfixedns = Taxonomy.FindNamespacePrefix(nsuri, member.Domain.Namespace);
             *              if (memfixedns != member.Domain.Namespace)
             *              {
             *                  domitem.Namespace = memfixedns;
             *              }
             *          }
             *      }
             *
             *  }
             * }
             */
        }