public XMLExportOptions(User user, List <int> taxonIds)
        {
            InitializeComponent();
            TaxonIDs  = taxonIds;
            this.User = user;

            var lastFile = Config.GetUser(User, "XMLIOExport.LastExportFile", "");

            if (!string.IsNullOrEmpty(lastFile))
            {
                if (taxonIds.Count == 1)
                {
                    var service = new TaxaService(user);
                    var taxon   = service.GetTaxon(taxonIds[0]);
                    if (taxon != null)
                    {
                        var f         = new FileInfo(lastFile);
                        var directory = f.DirectoryName;
                        var taxaName  = taxon.TaxaFullName == null ? "Unnamed" : taxon.TaxaFullName;
                        txtFilename.Text = System.IO.Path.Combine(f.DirectoryName, SystemUtils.StripIllegalFilenameChars(taxaName) + ".xml");
                    }
                }
                else
                {
                    txtFilename.Text = lastFile;
                }
            }
        }
Beispiel #2
0
        private int GetTaxonNumber()
        {
            // test to see if an internal taxon id is present in the incoming dataset
            var existingTaxonId = Get("Taxon.ExistingTaxonID");

            if (!String.IsNullOrEmpty(existingTaxonId))
            {
                var existingTaxon = TaxaService.GetTaxon(Int32.Parse(existingTaxonId));
                if (existingTaxon != null)
                {
                    return(existingTaxon.TaxaID.Value);
                }
            }
            // No existing taxon found? need to create it

            var strLowestRank = LowestTaxonLevel();

            var taxon     = BuildTaxonCacheRecord();
            int elementID = -1;

            if (!_taxonCache.FindInCache(taxon, out elementID))
            {
                elementID = 0;
                foreach (TaxonRankName name in _ranks)
                {
                    elementID = AddElementID(elementID, name, strLowestRank);
                }
                taxon.TaxonID     = elementID;
                taxon.SourceRowID = CurrentRowId;
                _taxonCache.AddToCache(taxon);
            }

            return(elementID);
        }
Beispiel #3
0
        public TaxonNameDetails(int?taxonId, User user, Action <TaxonNameViewModel> successAction)  : base(user, "TaxonNameDetails::" + taxonId.Value)
        {
            _successAction = successAction;

            var   service = new TaxaService(user);
            Taxon taxon   = service.GetTaxon(taxonId.Value);

            _rank        = service.GetTaxonRank(taxon);
            _kingdomList = service.GetKingdomList();
            Kingdom kingdom = _kingdomList.Find((k) => k.KingdomCode.Equals(taxon.KingdomCode));

            _model = new TaxonNameViewModel(taxon, kingdom, _rank);

            _model.DataChanged += new DataChangedHandler(_model_DataChanged);

            InitializeComponent();

            cmbKingdom.ItemsSource = _kingdomList;

            this.chkChangedCombination.Visibility = (_rank != null && _rank.Category == "S" ? Visibility.Visible : Visibility.Hidden);

            if (taxon.AvailableName.ValueOrFalse() || taxon.LiteratureName.ValueOrFalse())
            {
                string phraseCategory = "ALN Name Status";
                chkChangedCombination.Visibility = System.Windows.Visibility.Hidden;
                if (taxon.AvailableName.ValueOrFalse())
                {
                    TaxonRank rank = service.GetTaxonRank(taxon);

                    if (rank != null)
                    {
                        switch (rank.Category.ToLower())
                        {
                        case "g": phraseCategory = "GAN Name Status";
                            break;

                        case "s": phraseCategory = "SAN Name Status";
                            break;
                        }
                    }
                }

                txtNameStatus.BindUser(PluginManager.Instance.User, PickListType.Phrase, phraseCategory, TraitCategoryType.Taxon);
            }
            else
            {
                txtNameStatus.Visibility = System.Windows.Visibility.Collapsed;
                lblNameStatus.Visibility = System.Windows.Visibility.Collapsed;
            }

            this.DataContext       = _model;
            this.ChangesCommitted += new PendingChangesCommittedHandler(TaxonNameDetails_ChangesCommitted);
        }
        public override ViewModelBase CreatePinnableViewModel(PinnableObject pinnable)
        {
            if (pinnable != null && pinnable.LookupType == LookupType.Taxon)
            {
                Taxon t = Service.GetTaxon(pinnable.ObjectID);
                if (t != null)
                {
                    var m = new TaxonViewModel(null, t, tt => tt.TaxaFullName);
                    return(m);
                }
            }

            if (pinnable != null && pinnable.LookupType == LookupType.DistributionRegion)
            {
                var service = new SupportService(User);
                var region  = service.GetDistributionRegion(pinnable.ObjectID);
                if (region != null)
                {
                    return(new DistributionRegionViewModel(region));
                }
            }

            return(null);
        }
        private DataMatrix AddMediaForTaxon(int taxonId, IProgressObserver progress)
        {
            var results = new DataMatrix();

            results.Columns.Add(new MatrixColumn {
                Name = "MultimediaID", IsHidden = true
            });
            results.Columns.Add(new MatrixColumn {
                Name = "TaxonID", IsHidden = true
            });
            results.Columns.Add(new MatrixColumn {
                Name = "MultimediaLink", IsHidden = true
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Taxon name"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Rank"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Multimedia Name"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Extension"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Multimedia Type"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Size"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "Attached To"
            });
            results.Columns.Add(new MatrixColumn {
                Name = "MaterialID", IsHidden = true
            });

            if (progress != null)
            {
                progress.ProgressMessage("Extracting multimedia details for item...");
            }

            // First add the multimedia for this item
            var links = SupportService.GetMultimediaItems(TraitCategoryType.Taxon.ToString(), taxonId);
            var taxon = TaxaService.GetTaxon(taxonId);

            foreach (MultimediaLink link in links)
            {
                AddTaxonRow(results, taxon, link);
            }

            if (_includeMaterial)
            {
                AddMaterialRowsForTaxon(results, taxon);
            }

            if (_recurse)
            {
                // Now find all the children of this item
                if (progress != null)
                {
                    progress.ProgressMessage("Retrieving child items...");
                }

                var children = TaxaService.GetExpandFullTree(taxonId);

                var elementCount = 0;
                int total        = children.Count;

                if (progress != null)
                {
                    progress.ProgressStart("Extracting multimedia for children...");
                }

                foreach (Taxon child in children)
                {
                    if (progress != null)
                    {
                        double percent = (((double)elementCount) / ((double)total)) * 100.0;
                        progress.ProgressMessage(string.Format("Processing {0}", child.TaxaFullName), percent);
                    }
                    elementCount++;

                    links = SupportService.GetMultimediaItems(TraitCategoryType.Taxon.ToString(), child.TaxaID.Value);
                    foreach (MultimediaLink link in links)
                    {
                        AddTaxonRow(results, child, link);
                    }

                    if (_includeMaterial)
                    {
                        AddMaterialRowsForTaxon(results, child);
                    }
                }
            }

            if (progress != null)
            {
                progress.ProgressEnd(string.Format("{0} multimedia items found.", results.Rows.Count));
            }


            return(results);
        }
        public override DataMatrix ExtractReportData(IProgressObserver progress)
        {
            var matrix = new DataMatrix();

            if (IsGroupedByTaxon)
            {
                matrix.Columns.Add(new MatrixColumn {
                    Name = "TaxonName"
                });
                matrix.Columns.Add(new MatrixColumn {
                    Name = "BiotaID", IsHidden = true
                });
            }

            matrix.Columns.Add(new MatrixColumn {
                Name = "Count"
            });

            foreach (string colname in SelectedColumns)
            {
                matrix.Columns.Add(new MatrixColumn {
                    Name = colname
                });
            }

            // Open the feature layer data
            SelectedFeatureLayer.DataSource.Open();

            var map = new Dictionary <string, FeatureCountPair>();

            if (progress != null)
            {
                progress.ProgressMessage("Counting points...", 0);
            }

            int pointCount = 0;

            foreach (VectorLayer pointLayer in SelectedPointLayers)
            {
                var ds = pointLayer.DataSource;
                ds.Open();
                pointCount += ds.GetFeatureCount();
            }

            if (progress != null)
            {
                progress.ProgressStart(String.Format("Processing {0} points...", pointCount));
            }

            int processed     = 0;
            int notFoundCount = 0;

            var materialService = new MaterialService(User);
            var taxaService     = new TaxaService(User);

            foreach (VectorLayer pointLayer in SelectedPointLayers)
            {
                var pointProvider = pointLayer.DataSource;
                pointProvider.Open();
                for (uint i = 0; i < pointProvider.GetFeatureCount(); ++i)
                {
                    var row = pointProvider.GetFeature(i);

                    Taxon taxon = null;
                    if (IsGroupedByTaxon)
                    {
                        int?materialId = (int?)row["MaterialID"];
                        if (materialId.HasValue)
                        {
                            var m = materialService.GetMaterial(materialId.Value);
                            if (m.BiotaID > 0)
                            {
                                if (_taxonCache.ContainsKey(m.BiotaID))
                                {
                                    taxon = _taxonCache[m.BiotaID];
                                }
                                else
                                {
                                    taxon = taxaService.GetTaxon(m.BiotaID);
                                    _taxonCache[m.BiotaID] = taxon;
                                }
                            }
                        }
                    }

                    SharpMap.Geometries.Point p = row.Geometry as Point;
                    if (!ProcessPoint(SelectedFeatureLayer.DataSource, pointLayer, p, map, taxon))
                    {
                        notFoundCount++;
                    }
                    processed++;
                    if (progress != null)
                    {
                        double percent = ((double)processed) / ((double)pointCount) * 100;
                        progress.ProgressMessage(String.Format("Processing {0} points...", pointCount), percent);
                    }
                }
            }

            if (progress != null)
            {
                progress.ProgressMessage("Constructing result set...", 100);
            }

            int countIndex   = matrix.IndexOf("Count");
            int taxaIndex    = matrix.IndexOf("TaxonName");
            int biotaIDIndex = matrix.IndexOf("BiotaID");

            foreach (FeatureCountPair pair in map.Values)
            {
                var matrixRow = matrix.AddRow();
                foreach (DataColumn col in pair.First.Table.Columns)
                {
                    if (SelectedColumns.Contains(col.ColumnName))
                    {
                        var index = matrix.IndexOf(col.ColumnName);
                        matrixRow[index] = pair.First[col];
                    }
                }
                matrixRow[countIndex] = pair.Second;
                if (IsGroupedByTaxon)
                {
                    matrixRow[taxaIndex]    = pair.Taxon == null ? "Unidentified" : pair.Taxon.TaxaFullName;
                    matrixRow[biotaIDIndex] = pair.Taxon == null ? -1 : pair.Taxon.TaxaID.Value;
                }
            }

            if (IncludeUnmatchedPointRow && notFoundCount > 0)
            {
                var unmatched = matrix.AddRow();
                unmatched[countIndex] = notFoundCount;
            }

            if (progress != null)
            {
                progress.ProgressEnd(String.Format("{0} points processed.", pointCount));
            }

            return(matrix);
        }
Beispiel #7
0
        void TaxonTooltipContent_Loaded(object sender, RoutedEventArgs e)
        {
            var service = new TaxaService(PluginManager.Instance.User);
            var Model   = service.GetTaxon(TaxonID);

            if (Model == null)
            {
                return;
            }

            var elementRank = service.GetTaxonRank(Model);

            var header = Model.TaxaFullName;

            if (Model.AvailableName.ValueOrFalse())
            {
                header += " (Available name)";
            }
            else if (Model.LiteratureName.ValueOrFalse())
            {
                header += " (Literature name)";
            }

            lblHeader.Content = header;
            var rankName = (elementRank == null ? "Unranked" : elementRank.LongName + (Model.AvailableName.ValueOrFalse() ? " Available Name" : ""));

            var kingdom = string.IsNullOrEmpty(Model.KingdomCode) ? "No Kingdom" : Model.KingdomCode;

            lblSystem.Content = string.Format("[{0}] {1} <{2}> Last updated: {3:g} by {4}", Model.TaxaID.Value, rankName, kingdom, Model.DateLastUpdated, Model.WhoLastUpdated);
            imgIcon.Source    = TaxonViewModel.ConstructIcon(Model.AvailableName.ValueOrFalse() || Model.LiteratureName.ValueOrFalse(), Model.ElemType, false);

            // Ancestry
            var bits = Model.Parentage.Split('\\');

            int i       = bits.Length - 1;
            int j       = 0;
            var parents = new Stack <Taxon>();

            while (--i >= 0 && j++ < 3)
            {
                if (!string.IsNullOrEmpty(bits[i]))
                {
                    var parentId = Int32.Parse(bits[i]);
                    var parent   = service.GetTaxon(parentId);
                    parents.Push(parent);
                }
            }

            i = 0;
            grdAncestry.Children.Clear();

            foreach (Taxon t in parents)
            {
                var parentPanel = new StackPanel()
                {
                    Orientation = Orientation.Horizontal, Margin = new Thickness(i * 15, i * 25, 0, 0)
                };
                var parentIcon = new Image()
                {
                    VerticalAlignment = System.Windows.VerticalAlignment.Top, UseLayoutRounding = true, SnapsToDevicePixels = true, Stretch = Stretch.None, Margin = new Thickness(6, 0, 6, 0)
                };
                parentIcon.Source = TaxonViewModel.ConstructIcon(t.AvailableName.ValueOrFalse() || t.LiteratureName.ValueOrFalse(), t.ElemType, false);
                parentPanel.Children.Add(parentIcon);
                var rank = service.GetTaxonRank(t);
                rankName = (rank == null ? "Unranked" : rank.LongName);
                var txt = new TextBlock()
                {
                    VerticalAlignment = System.Windows.VerticalAlignment.Top, Text = string.Format("{1}   ({0})", rankName, t.TaxaFullName)
                };
                parentPanel.Children.Add(txt);
                grdAncestry.Children.Add(parentPanel);
                i++;
            }
        }