예제 #1
0
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
     Model = new TreeViewModel(new List <ArchestrAObject>()
     {
         DatabasteFunctions.GetDerivationTree("localhost", _galaxy)
     });
     tvObjects.ItemsSource = Model.Children;
 }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                lstObjects.Items.Clear();

                bool checkParentArea     = chkParentAreaOnly.IsChecked == true && txtArea.Text.Length > 0;
                bool checkTagName        = txtObject.Text.Length > 0;
                bool checkParentTemplate = chkParentTemplateOnly.IsChecked == true && txtDerivedFrom.Text.Length > 0;
                bool checkAnyTemplate    = chkParentTemplateOnly.IsChecked == false && txtDerivedFrom.Text.Length > 0;
                bool checkAnyArea        = chkParentAreaOnly.IsChecked == false && txtArea.Text.Length > 0;
                bool instancesOnly       = chkInstances.IsChecked == true;

                List <ArchestrAObject>            areas                 = DatabasteFunctions.GetAreas(_node, _galaxy);
                List <ArchestrAObject>            allObjects            = DatabasteFunctions.GetAllObjects(_node, _galaxy);
                List <ArchestrAObject>            filteredObjects       = new List <ArchestrAObject>();
                List <ArchestrAObject>            filteredAreas         = new List <ArchestrAObject>();
                List <ArchestrAObject>            filteredTemplates     = new List <ArchestrAObject>();
                List <ArchestrAObject>            results               = new List <ArchestrAObject>();
                Dictionary <int, ArchestrAObject> allObjectsInAreas     = new Dictionary <int, ArchestrAObject>();
                Dictionary <int, ArchestrAObject> allObjectsOfTemplates = new Dictionary <int, ArchestrAObject>();

                if (checkParentArea || checkAnyArea)
                {
                    Regex r = new Regex(txtArea.Text);

                    foreach (var item in areas)
                    {
                        if (r.IsMatch(item.Name))
                        {
                            filteredAreas.Add(item);
                        }
                    }
                }

                if (checkTagName)
                {
                    Regex r = new Regex(txtObject.Text);

                    foreach (var item in allObjects)
                    {
                        if (r.IsMatch(item.Name))
                        {
                            filteredObjects.Add(item);
                        }
                    }
                }
                else
                {
                    filteredObjects = allObjects;
                }

                if (checkParentTemplate || checkAnyTemplate)
                {
                    Regex r = new Regex(txtDerivedFrom.Text);

                    foreach (var item in allObjects)
                    {
                        if (item.IsTemplate)
                        {
                            if (r.IsMatch(item.Name))
                            {
                                filteredTemplates.Add(item);
                            }
                        }
                    }
                }

                if (checkAnyArea)
                {
                    foreach (var item in filteredAreas)
                    {
                        var res = DatabasteFunctions.GetAllObjectsInArea(_node, _galaxy, item.ObjectID);
                        foreach (var i in res)
                        {
                            if (!allObjectsInAreas.ContainsKey(i.ObjectID))
                            {
                                allObjectsInAreas.Add(i.ObjectID, i);
                            }
                        }
                    }
                }

                if (checkAnyTemplate)
                {
                    foreach (var item in filteredTemplates)
                    {
                        var res = DatabasteFunctions.GetAllObjectsDerivedFrom(_node, _galaxy, item.ObjectID);
                        foreach (var i in res)
                        {
                            if (!allObjectsOfTemplates.ContainsKey(i.ObjectID))
                            {
                                allObjectsOfTemplates.Add(i.ObjectID, i);
                            }
                        }
                    }
                }


                List <ArchestrAObject> workingResults = new List <ArchestrAObject>();
                if (checkParentArea)
                {
                    workingResults.AddRange(from i in filteredObjects where (from j in filteredAreas where j.ObjectID == i.AreaID select j).FirstOrDefault() != null select i);
                }
                else if (checkAnyArea)
                {
                    workingResults.AddRange(from i in filteredObjects where (from j in allObjectsInAreas where j.Value.ObjectID == i.ObjectID select j.Value).FirstOrDefault() != null select i);
                }
                else
                {
                    workingResults = filteredObjects;
                }

                List <ArchestrAObject> workingResults2 = new List <ArchestrAObject>();

                if (checkParentTemplate)
                {
                    workingResults2.AddRange(from i in workingResults where (from j in filteredTemplates where j.ObjectID == i.ParentObjectID select j).FirstOrDefault() != null select i);
                }
                else if (checkAnyTemplate)
                {
                    workingResults2.AddRange(from i in workingResults where (from j in allObjectsOfTemplates where j.Value.ObjectID == i.ObjectID select j.Value).FirstOrDefault() != null select i);
                }
                else
                {
                    workingResults2 = workingResults;
                }

                if (instancesOnly)
                {
                    results.AddRange(from i in workingResults2 where i.IsTemplate == false select i);
                }
                else
                {
                    results = workingResults2;
                }

                foreach (var item in results)
                {
                    lstObjects.Items.Add(item);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }