Beispiel #1
0
        public Deserializer(string filepath, string localization)
        {
            this.localization = localization;

            //Parse JSON into our auxiliary system
            string data = System.IO.File.ReadAllText(filepath);

            this.dataStructure = new AuxiliaryDataStructure();
            JToken token = (JToken)JsonConvert.DeserializeObject(data);

            this.dataStructure = token.ToObject <AuxiliaryDataStructure>();
            JToken            treeToken = token.Children <JProperty>().FirstOrDefault(x => x.Name == "tree");
            AuxiliaryTreeNode tree      = new AuxiliaryTreeNode();

            FillAuxiliaryTree(treeToken, ref tree);
            this.dataStructure.Tree = tree;

            //Set available_filters category
            this.availableFilters = new HashSet <IFilter>(dataStructure.AvailableFilters.Items.Values
                                                          .Select(x => new Filter.Filter(this.GetNameWithLocalization(x.Caption), x.Values.Values
                                                                                         .Select(y => this.GetNameWithLocalization(y.Caption)))));

            this.defaultFilters = new HashSet <IFilter>(this.availableFilters
                                                        .Where(x => this.dataStructure.AvailableFilters.Items
                                                               .Where(y => this.dataStructure.AvailableFilters.DefaultList.Contains(y.Key))
                                                               .Select(z => this.GetNameWithLocalization(z.Value.Caption))
                                                               .Contains(x.Name)));

            //Set tree_elements category
            this.treeElements = new HashSet <ITreeElement>();
            foreach (KeyValuePair <string, AuxiliaryItem> pair in this.dataStructure.TreeElements)
            {
                Dictionary <IFilter, IEnumerable <string> > filters = new Dictionary <IFilter, IEnumerable <string> >();
                if (pair.Value.Filters != null)
                {
                    foreach (KeyValuePair <string, List <string> > f in pair.Value.Filters)
                    {
                        filters.Add(this.GetFilter(f.Key), f.Value.Select(fil => this.GetNameWithLocalization(this.dataStructure.AvailableFilters.Items[f.Key].Values[fil].Caption)));
                    }
                }
                this.treeElements.Add(new TreeElement.TreeElement(
                                          pair.Key,
                                          pair.Value.Caption == null ? pair.Key : this.GetNameWithLocalization(pair.Value.Caption),
                                          this.defaultFilters
                                          .Union(pair.Value.FilterList == null ? new List <IFilter>() : this.availableFilters
                                                 .Where(x => this.dataStructure.AvailableFilters.Items
                                                        .Where(y => pair.Value.FilterList.Contains(y.Key))
                                                        .Select(z => this.GetNameWithLocalization(z.Value.Caption))
                                                        .Contains(x.Name))),
                                          filters
                                          ));
            }

            //Generate Tree
            ITreeElement root = this.GetTreeElement(this.dataStructure.Tree.Children.First().Key);

            this.FillResultTree(root, this.dataStructure.Tree.Children.First().Value);
            this.Tree = new Tree.Tree(root);
        }
Beispiel #2
0
 private void FillResultTree(ITreeElement treeElement, AuxiliaryTreeNode nodeInfo)
 {
     foreach (KeyValuePair <string, AuxiliaryTreeNode> pair in nodeInfo.Children)
     {
         ITreeElement child = this.GetTreeElement(pair.Key);
         FillResultTree(child, pair.Value);
         treeElement.AddChild(child);
     }
 }
Beispiel #3
0
 private static void FillAuxiliaryTree(JToken token, ref AuxiliaryTreeNode node)
 {
     if (token is JProperty)
     {
         AuxiliaryTreeNode child = new AuxiliaryTreeNode();
         foreach (JToken t in token.Children())
         {
             FillAuxiliaryTree(t, ref child);
         }
         node.Children.Add(((JProperty)token).Name, child);
     }
     else if (token is JObject)
     {
         foreach (JToken t in token.Children())
         {
             FillAuxiliaryTree(t, ref node);
         }
     }
 }