// // CONSTRUCTOR public TabbedDocumentMetadata(Dataset dataset) { InitializeComponent(); // Store Dataset this._dataset = dataset; // Update Tab Propeties this.TabImage = Resources.BITMAP_METADATA; this.Text = dataset.Name; // Load Metadata this.LoadMetadata(); }
public DatasetEventArgs(Dataset dataset) { this.m_dataset = dataset; }
public Dataset(Dataset prototype) : base(prototype) { this._name = prototype.Name; this._childrenExpanded = prototype.ChildrenExpanded; this._fullPropsDefault = prototype.FullPropsDefault; this._metadataRetrieved = prototype.MetadataRetrieved; this._metadata = prototype.Metadata; this._datasetType = prototype.DatasetType; this._dsid = prototype.DSID; this._versioned = prototype.Versioned; this._canVersion = prototype.CanVersion; }
private void LoadModel() { // Store Selected EsriTable (if any) EsriTable table = null; if (this.treeView1.SelectedNode != null) { TreeNodeTable treeNodeTable = this.treeView1.SelectedNode as TreeNodeTable; if (treeNodeTable != null) { if (treeNodeTable.Table != null) { table = treeNodeTable.Table; } } } // Clear TreeView this.treeView1.Nodes.Clear(); // Exit if No Model if (this._model == null) { return; } // Get Datasets List <Dataset> datasets = this._model.GetDatasets(); // Get Domains List <Domain> domains = this._model.GetDomains(); // Start TreeView Update this.treeView1.BeginUpdate(); this.treeView1.Sorted = false; // Add Geodatabase Node TreeNodeGeodatabase treeNode = new TreeNodeGeodatabase(this._model); treeNode.ImageKey = Catalog.GEODATABASE; treeNode.SelectedImageKey = Catalog.GEODATABASE; treeNode.Text = this._model.Title; this.treeView1.Nodes.Add(treeNode); if (this.buttonItemCatalog.Checked) { // Sort Datasets datasets.Sort(); // Loop Throught Datasets foreach (Dataset dataset in datasets) { if (dataset is FeatureDataset) { // Get FeatureDataset FeatureDataset featureDataset = (FeatureDataset)dataset; // Add FeatureDataset Node TreeNode treeNode2 = this.CreateCatalogNode(treeNode, featureDataset); // Get Child Datasets List <Dataset> datasets2 = featureDataset.GetChildren(); datasets2.Sort(); foreach (Dataset dataset2 in datasets2) { TreeNode treeNode3 = this.CreateCatalogNode(treeNode2, dataset2); // Add Subtypes if ObjectClass if (dataset2 is ObjectClass) { // Get ObjectClass ObjectClass objectClass = (ObjectClass)dataset2; // Get Subtypes List <Subtype> subtypes = objectClass.GetSubtypes(); subtypes.Sort(); // Add Subtypes Nodes foreach (Subtype subtype in subtypes) { TreeNode treeNodeSubtype = this.CreateCatalogNode(treeNode3, subtype); } } } } } // Add Everything Else foreach (Dataset dataset in datasets) { // Skip FeatureDataset and FeatureDataset Objects if (dataset is FeatureDataset || dataset is GeometricNetwork || dataset is Network || dataset is RasterBand || dataset is Terrain || dataset is Topology) { continue; } // Skip Objects that Belong to a FeatureDataset if (dataset is FeatureClass || dataset is RelationshipClass) { Dataset parent = dataset.GetParent(); if (parent != null) { continue; } } // Create Node TreeNode treeNode2 = this.CreateCatalogNode(treeNode, dataset); // Add Subtypes if ObjectClass if (dataset is ObjectClass) { // Get ObjectClass ObjectClass objectClass = (ObjectClass)dataset; // Get Subtypes List <Subtype> subtypes = objectClass.GetSubtypes(); subtypes.Sort(); // Add Subtypes Nodes foreach (Subtype subtype in subtypes) { TreeNode treeNodeSubtype = this.CreateCatalogNode(treeNode2, subtype); } } // Add Raster Bands if (dataset.GetType() == typeof(RasterDataset)) { // Get RasterDataset RasterDataset rasterDataset = (RasterDataset)dataset; // Get RasterBands List <Dataset> rasterBands = rasterDataset.GetChildren(); // Add RasterBands foreach (Dataset datasetRasterBand in rasterBands) { if (datasetRasterBand.GetType() == typeof(RasterBand)) { RasterBand rasterBand = (RasterBand)datasetRasterBand; TreeNode treeNodeRasterBand = this.CreateCatalogNode(treeNode2, rasterBand); } } } } // Sort Domains domains.Sort(); // Add Domains foreach (Domain domain in domains) { TreeNode treeNodeDomain = this.CreateCatalogNode(treeNode, domain); } // Expand Geodatabase Node treeNode.Expand(); } else if (this.buttonItemCategorized.Checked) { // Loop for each Dataset foreach (Dataset dataset in datasets) { // Get Group Node Name string key = string.Empty; if (dataset.GetType() == typeof(FeatureDataset)) { key = Resources.TEXT_FEATURE_DATASET; } else if (dataset.GetType() == typeof(FeatureClass)) { key = Resources.TEXT_FEATURE_CLASS; } else if (dataset.GetType() == typeof(GeometricNetwork)) { key = Resources.TEXT_GEOMETRIC_NETWORK; } else if (dataset.GetType() == typeof(ObjectClass)) { key = Resources.TEXT_TABLE; } else if (dataset.GetType() == typeof(RasterBand)) { key = Resources.TEXT_RASTER_BAND; } else if (dataset.GetType() == typeof(RasterCatalog)) { key = Resources.TEXT_RASTER_CATALOG; } else if (dataset.GetType() == typeof(RasterDataset)) { key = Resources.TEXT_RASTER_DATASET; } else if (dataset.GetType() == typeof(RelationshipClass)) { key = Resources.TEXT_RELATIONSHIP; } else if (dataset.GetType() == typeof(Terrain)) { key = Resources.TEXT_TERRAIN; } else if (dataset.GetType() == typeof(Topology)) { key = Resources.TEXT_TOPOLOGY; } if (string.IsNullOrEmpty(key)) { continue; } // Get Group Node (create if it does not exist) TreeNodeGroup treeNodeGroup = null; foreach (TreeNodeGroup group in treeNode.Nodes) { if (group.Type == dataset.GetType()) { treeNodeGroup = group; break; } } if (treeNodeGroup == null) { treeNodeGroup = new TreeNodeGroup(dataset.GetType()); treeNodeGroup.ImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.SelectedImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.Text = key; treeNode.Nodes.Add(treeNodeGroup); } // Create New Dataset Node TreeNode treeNodeDataset = this.CreateCatalogNode(treeNodeGroup, dataset); } // Append Subtypes Nodes foreach (Dataset dataset in datasets) { // Is ObjectClass? if (dataset is ObjectClass) { // Cast to ObjectClass ObjectClass objectClass = (ObjectClass)dataset; // Get Subtypes List <Subtype> subtypes = objectClass.GetSubtypes(); if (subtypes.Count == 0) { continue; } // Find Subtype Group Node TreeNodeGroup treeNodeGroup = null; foreach (TreeNodeGroup group in treeNode.Nodes) { if (group.Type == typeof(Subtype)) { treeNodeGroup = group; break; } } if (treeNodeGroup == null) { treeNodeGroup = new TreeNodeGroup(typeof(Subtype)); treeNodeGroup.ImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.SelectedImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.Text = Resources.TEXT_SUBTYPE; treeNode.Nodes.Add(treeNodeGroup); } // Add Each Subtype foreach (Subtype subtype in subtypes) { TreeNode treeNodeSubtype = this.CreateCatalogNode(treeNodeGroup, subtype); } } } // Loop for each Domain foreach (Domain domain in domains) { // Get Group Node Name string key = string.Empty; if (domain.GetType() == typeof(DomainCodedValue)) { key = Resources.TEXT_CODED_VALUE; } else if (domain.GetType() == typeof(DomainRange)) { key = Resources.TEXT_RANGE_DOMAIN; } if (string.IsNullOrEmpty(key)) { continue; } // Get Group Node (create if it does not exist) TreeNodeGroup treeNodeGroup = null; foreach (TreeNodeGroup group in treeNode.Nodes) { if (group.Type == domain.GetType()) { treeNodeGroup = group; break; } } if (treeNodeGroup == null) { treeNodeGroup = new TreeNodeGroup(domain.GetType()); treeNodeGroup.ImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.SelectedImageKey = Catalog.FOLDER_CLOSED; treeNodeGroup.Text = key; treeNode.Nodes.Add(treeNodeGroup); } // Create New Dataset Node TreeNode treeNodeDomain = this.CreateCatalogNode(treeNodeGroup, domain); } // Expand Geodatabase Node treeNode.Expand(); // Traditional Text Sort this.treeView1.Sort(); } else if (this.buttonItemAlphabetical.Checked) { // Loop for each Dataset foreach (Dataset dataset in datasets) { // Create New Dataset Node TreeNode treeNodeDataset = this.CreateCatalogNode(treeNode, dataset); if (dataset is ObjectClass) { // Cast to ObjectClass ObjectClass objectClass = (ObjectClass)dataset; // Get and Add Subtypes List <Subtype> subtypes = objectClass.GetSubtypes(); foreach (Subtype subtype in subtypes) { TreeNode treeNodeSubtype = this.CreateCatalogNode(treeNode, subtype); } } } // Loop for each Domain foreach (Domain domain in domains) { TreeNode treeNodeDomain = this.CreateCatalogNode(treeNode, domain); } // Expand Geodatabase Node treeNode.Expand(); // Traditional Text Sort this.treeView1.Sort(); } // Reselect Previous EsriTable (if any) if (table != null) { if (this.treeView1.Nodes.Count == 1) { //TreeNode treeNode = this.treeView1.Nodes[0]; TreeNode treeNodeFind = this.FindNode(treeNode, table); if (treeNodeFind != null) { treeNodeFind.EnsureVisible(); treeNodeFind.TreeView.SelectedNode = treeNodeFind; } } } // End TreeView Update this.treeView1.EndUpdate(); }
// // PUBLIC METHODS // public override void OpenModel() { List <EsriShape <FeatureClass> > listFeatureClassFrom = new List <EsriShape <FeatureClass> >(); List <EsriShape <FeatureClass> > listFeatureClassTo = new List <EsriShape <FeatureClass> >(); List <EsriShape <Subtype> > listSubtypeFrom = new List <EsriShape <Subtype> >(); List <EsriShape <Subtype> > listSubtypeTo = new List <EsriShape <Subtype> >(); // Exit if invalid if (this._geometricNetwork == null) { return; } // Suspend Model if (ModelSettings.Default.EnableUndoRedo) { this.UndoList.Suspend(); } this.Suspend(); this.SuspendEvents = true; // Get SchemaModel SchemaModel schemaModel = (SchemaModel)this._geometricNetwork.Container; // Get Parent FeatureDataset Dataset parent = this._geometricNetwork.GetParent(); if (parent == null) { return; } FeatureDataset featureDataset = parent as FeatureDataset; if (featureDataset == null) { return; } // Add From and To FeatureDatasets EsriShape <FeatureDataset> featureDataset1 = new EsriShape <FeatureDataset>(featureDataset); EsriShape <FeatureDataset> featureDataset2 = new EsriShape <FeatureDataset>(featureDataset); this.Shapes.Add(this.Shapes.CreateKey(), featureDataset1); this.Shapes.Add(this.Shapes.CreateKey(), featureDataset2); // Add all Child FeatureClasses foreach (Dataset dataset in featureDataset.GetChildren()) { if (dataset.GetType() != typeof(FeatureClass)) { continue; } // Get FeatureClass FeatureClass featureClass = (FeatureClass)dataset; // Only allow Simle and Complex Edges switch (featureClass.FeatureType) { case esriFeatureType.esriFTSimpleEdge: case esriFeatureType.esriFTComplexEdge: break; default: continue; } //switch (featureClass.CLSID) { // case EsriRegistry.CLASS_SIMPLEEDGE: // case EsriRegistry.CLASS_COMPLEXEDGE: // break; // default: // continue; //} // Only continue if FeatureClass belongs to the GeometricNetwork bool participate = false; foreach (ControllerMembership controller in featureClass.ControllerMemberships) { if (controller is GeometricNetworkControllerMembership) { GeometricNetworkControllerMembership geometricNetworkControllerMembership = (GeometricNetworkControllerMembership)controller; if (geometricNetworkControllerMembership.GeometricNetworkName == this._geometricNetwork.Name) { participate = true; break; } } } if (!participate) { continue; } // Get Subtypes List <Subtype> subtypes = featureClass.GetSubtypes(); // Add From FetaureClasses and Subtypes EsriShape <FeatureClass> featureClass1 = new EsriShape <FeatureClass>(featureClass); this.Shapes.Add(this.Shapes.CreateKey(), featureClass1); listFeatureClassFrom.Add(featureClass1); // Add Line from FeatureDataset to FeatureClass Arrow arrow1 = new Arrow(); arrow1.BorderColor = ModelSettings.Default.DisabledLined; arrow1.DrawBackground = false; Line line1 = new Line(featureDataset1, featureClass1); line1.End.AllowMove = false; line1.End.Marker = arrow1; line1.Start.AllowMove = false; line1.BorderColor = ModelSettings.Default.DisabledLined; this.Lines.Add(this.Lines.CreateKey(), line1); // Add Subtypes and Link to FeatureClass foreach (Subtype subtype in subtypes) { EsriShape <Subtype> sub = new EsriShape <Subtype>(subtype); this.Shapes.Add(this.Shapes.CreateKey(), sub); listSubtypeFrom.Add(sub); Arrow arrow3 = new Arrow(); arrow3.BorderColor = ModelSettings.Default.DisabledLined; arrow3.DrawBackground = false; Line line = new Line(featureClass1, sub); line.End.AllowMove = false; line.End.Marker = arrow3; line.Start.AllowMove = false; line.BorderColor = ModelSettings.Default.DisabledLined; this.Lines.Add(this.Lines.CreateKey(), line); } // Add To FetaureClasses and Subtypes EsriShape <FeatureClass> featureClass2 = new EsriShape <FeatureClass>(featureClass); this.Shapes.Add(this.Shapes.CreateKey(), featureClass2); listFeatureClassTo.Add(featureClass2); // Add Line from FeatureDataset to FeatureClass Arrow arrow2 = new Arrow(); arrow2.BorderColor = ModelSettings.Default.DisabledLined; arrow2.DrawBackground = false; Line line2 = new Line(featureClass2, featureDataset2); line2.End.AllowMove = false; line2.Start.AllowMove = false; line2.Start.Marker = arrow2; line2.BorderColor = ModelSettings.Default.DisabledLined; this.Lines.Add(this.Lines.CreateKey(), line2); // Add Subtyes and Link to FeatureClasses foreach (Subtype subtype in subtypes) { EsriShape <Subtype> sub = new EsriShape <Subtype>(subtype); this.Shapes.Add(this.Shapes.CreateKey(), sub); listSubtypeTo.Add(sub); Arrow arrow4 = new Arrow(); arrow4.BorderColor = ModelSettings.Default.DisabledLined; arrow4.DrawBackground = false; Line line = new Line(sub, featureClass2); line.End.AllowMove = false; line.Start.Marker = arrow4; line.Start.AllowMove = false; line.BorderColor = ModelSettings.Default.DisabledLined; this.Lines.Add(this.Lines.CreateKey(), line); } } // Loop Through All Connectivity Rules foreach (ConnectivityRule connectivityRule in this._geometricNetwork.ConnectivityRules) { // Continue only if Edge Connectivity Rule if (!(connectivityRule is EdgeConnectivityRule)) { continue; } // Get Edge Connectivity Rule EdgeConnectivityRule edgeConnectivityRule = (EdgeConnectivityRule)connectivityRule; // Origin Table EsriTable origin = schemaModel.FindObjectClassOrSubtype( edgeConnectivityRule.FromClassID, edgeConnectivityRule.FromEdgeSubtypeCode); // Destination Table EsriTable destination = schemaModel.FindObjectClassOrSubtype( edgeConnectivityRule.ToClassID, edgeConnectivityRule.ToEdgeSubtypeCode); // Origin and Destination Shapes Shape shapeOrigin = null; Shape shapeDestiantion = null; // Find Origin Shape in Diagram foreach (EsriShape <FeatureClass> f in listFeatureClassFrom) { if (f.Parent == origin) { shapeOrigin = f; break; } } if (shapeOrigin == null) { foreach (EsriShape <Subtype> s in listSubtypeFrom) { if (s.Parent == origin) { shapeOrigin = s; break; } } } // Find Destination Shape in Diagram foreach (EsriShape <FeatureClass> f in listFeatureClassTo) { if (f.Parent == destination) { shapeDestiantion = f; break; } } if (shapeDestiantion == null) { foreach (EsriShape <Subtype> s in listSubtypeTo) { if (s.Parent == destination) { shapeDestiantion = s; break; } } } // Skip if Origin and Destination Shapes not found if (shapeOrigin == null || shapeDestiantion == null) { continue; } EsriLine <EdgeConnectivityRule> line2 = new EsriLine <EdgeConnectivityRule>(edgeConnectivityRule, shapeOrigin, shapeDestiantion); this.Lines.Add(this.Lines.CreateKey(), line2); } // Perform Layout this.ExecuteLayout(typeof(HierarchicalLayout), true); // Resume and Refresh Model this.SuspendEvents = false; this.Resume(); if (ModelSettings.Default.EnableUndoRedo) { this.UndoList.Resume(); } this.Refresh(); }