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; } } }
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); }
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); }
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++; } }