private static ConfigurationDocument LoadInternal(XmlDocument doc) { var mgr = new XmlNamespaceManager(doc.NameTable); mgr.AddNamespace("xs", XmlNamespaces.XS); //NOXLATE mgr.AddNamespace("xsi", XmlNamespaces.XSI); //NOXLATE mgr.AddNamespace("fdo", XmlNamespaces.FDO); //NOXLATE mgr.AddNamespace("gml", XmlNamespaces.GML); //NOXLATE mgr.AddNamespace("xlink", XmlNamespaces.XLINK); //NOXLATE mgr.AddNamespace("fds", XmlNamespaces.FDS); //NOXLATE ConfigurationDocument conf = null; var root = doc.DocumentElement; if (root == null || root.Name != "fdo:DataStore") //NOXLATE { return(null); } //Sample the first schema mapping node. Even if there are multiples //they will all be the same provider //NOTE: Why does the XPath query (commented out) fail? var map = root.LastChild; //root.SelectSingleNode("SchemaMapping"); if (map != null && map.Name == "SchemaMapping") //NOXLATE { var prov = map.Attributes["provider"]; //NOXLATE if (prov != null) { if (prov.Value.StartsWith("OSGeo.ODBC")) //NOXLATE { conf = new OdbcConfigurationDocument(); } else if (prov.Value.StartsWith("OSGeo.Gdal")) //NOXLATE { conf = new GdalConfigurationDocument(); } else if (prov.Value.StartsWith("OSGeo.WMS")) //NOXLATE { conf = new WmsConfigurationDocument(); } else { conf = new GenericConfigurationDocument(); } } } if (conf != null) { conf.ReadXml(doc.SelectSingleNode("fdo:DataStore", mgr), mgr); //NOXLATE return(conf); } return(null); }
public TableConfigurationDialog(IEditorService edSvc, OdbcConfigurationDocument doc, string schemaName) : this() { _edSvc = edSvc; var scNames = doc.GetSpatialContextNames(); tableConfigCtrl.SetSpatialContexts(scNames); var sc = doc.GetSpatialContext(scNames[0]); txtCoordinateSystem.Text = sc.CoordinateSystemWkt; var schema = doc.GetSchema(schemaName); Dictionary<string, TableOverrideItem> tables = new Dictionary<string, TableOverrideItem>(); List<TableOverrideItem> existing = new List<TableOverrideItem>(); foreach (var tbl in doc.GetMappingsForSchema(schemaName)) { var cls = doc.GetClass(schemaName, tbl.ClassName); tables[tbl.ClassName] = new TableOverrideItem() { Override = true, Class = cls, TableName = tbl.ClassName, Key = cls.IdentityProperties.Count > 0 ? cls.IdentityProperties[0].Name : string.Empty, X = tbl.XColumn, Y = tbl.YColumn, Z = tbl.ZColumn }; if (!string.IsNullOrEmpty(cls.DefaultGeometryPropertyName)) { var prop = cls.FindProperty(cls.DefaultGeometryPropertyName) as GeometricPropertyDefinition; if (prop != null) tables[tbl.ClassName].SpatialContext = prop.SpatialContextAssociation; } existing.Add(tables[tbl.ClassName]); } foreach (var cls in schema.Classes) { if (!tables.ContainsKey(cls.Name)) { tables[cls.Name] = new TableOverrideItem() { Override = false, Class = cls, TableName = cls.Name, Geometry = false, Key = cls.IdentityProperties.Count > 0 ? cls.IdentityProperties[0].Name : string.Empty }; } } foreach (var tbl in tables.Values) { _tables.Add(tbl); } }
private void DoDocumentReset() { _fs.SetConfigurationContent(null); _fs.ConfigurationDocument = null; _service.SyncSessionCopy(); _doc = null; BuildDefaultDocument(); if (null != _doc) { _fs.ConfigurationDocument = "config.xml"; _fs.SetConfigurationContent(_doc.ToXml()); MessageBox.Show(Strings.ConfigurationDocumentReset); } }
private void BuildDefaultDocument() { _doc = new OdbcConfigurationDocument(); var xmlDoc = new XmlDocument(); XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable); mgr.AddNamespace("xs", XmlNamespaces.XS); //NOXLATE mgr.AddNamespace("xsi", XmlNamespaces.XSI); //NOXLATE mgr.AddNamespace("fdo", XmlNamespaces.FDO); //NOXLATE mgr.AddNamespace("gml", XmlNamespaces.GML); //NOXLATE mgr.AddNamespace("xlink", XmlNamespaces.XLINK); //NOXLATE mgr.AddNamespace("fds", XmlNamespaces.FDS); //NOXLATE //This may have changed, so reapply var props = Use64BitDriver ? this.ChildEditor.Get64BitConnectionProperties() : this.ChildEditor.ConnectionProperties; _fs.ApplyConnectionProperties(props); _service.SyncSessionCopy(); try { var schemaName = _fs.GetSchemaNames()[0]; var classNames = _fs.GetClassNames(schemaName); var diag = new FilteredLogicalSchemaDialog(classNames); if (diag.ShowDialog() == DialogResult.Cancel) throw new ApplicationException(Strings.TextNoItemSelected); var names = diag.ClassNames; BusyWaitDelegate worker = () => { classNames = names.Select(x => x.Contains(":") ? x.Split(':')[1] : x).ToArray(); //NOXLATE var schema = _fs.CurrentConnection.FeatureService.DescribeFeatureSourcePartial(_fs.ResourceID, schemaName, classNames); _doc.AddSchema(schema); //Only one schema is supported by ODBC so this is ok var scList = _fs.GetSpatialInfo(false); foreach (var sc in scList.SpatialContext) { _doc.AddSpatialContext(sc); } return null; }; BusyWaitDialog.Run(Strings.TextPreparingConfigurationDocument, worker, (obj, ex) => { if (ex != null) throw ex; //Done }); } catch (Exception ex) { _doc = null; MessageBox.Show(ex.Message); } }
private void btnEditSchema_Click(object sender, EventArgs e) { if (CheckValidConnection()) { if (string.IsNullOrEmpty(_defaultSchemaName)) { var names = _fs.GetSchemaNames(); if (names.Length == 1) { _defaultSchemaName = names[0]; } else { MessageBox.Show(Strings.NoSchemasInFeatureSource); return; } } string xml = _fs.GetConfigurationContent(); if (!string.IsNullOrEmpty(xml)) { _doc = (OdbcConfigurationDocument)ConfigurationDocument.LoadXml(xml); } else { if (_doc == null) { BuildDefaultDocument(); } } var diag = new TableConfigurationDialog(_service, _doc, _defaultSchemaName); if (diag.ShowDialog() == DialogResult.OK) { _doc.ClearMappings(); foreach (var table in diag.ConfiguredTables) { _doc.AddOverride(table); } foreach (var sc in _doc.SpatialContexts) { sc.CoordinateSystemWkt = diag.CoordinateSystemWkt; } string updatedContent = _doc.ToXml(); _fs.SetConfigurationContent(updatedContent); OnResourceChanged(); } } }
public void TestOdbcSaveLoad() { var schema = new FeatureSchema("Default", "Test schema"); var cls = new ClassDefinition("Cities", "Cities class"); cls.AddProperty(new DataPropertyDefinition("ID", "Primary Key") { DataType = DataPropertyType.Int64, IsNullable = false, IsAutoGenerated = true }, true); cls.AddProperty(new DataPropertyDefinition("Name", "City Name") { DataType = DataPropertyType.String, IsNullable = true, IsAutoGenerated = false, Length = 255 }); cls.AddProperty(new GeometricPropertyDefinition("Geometry", "Geometry property") { GeometricTypes = FeatureGeometricType.Point, SpecificGeometryTypes = new SpecificGeometryType[] { SpecificGeometryType.Point }, HasElevation = false, HasMeasure = false, SpatialContextAssociation = "Default" }); cls.AddProperty(new DataPropertyDefinition("Population", "Population") { DataType = DataPropertyType.Int32, IsNullable = true, IsAutoGenerated = false }); cls.DefaultGeometryPropertyName = "Geometry"; schema.AddClass(cls); var sc = new FdoSpatialContextListSpatialContext(); sc.CoordinateSystemName = "LL84"; sc.CoordinateSystemWkt = ""; sc.Description = "Default Spatial Context"; sc.Extent = new FdoSpatialContextListSpatialContextExtent() { LowerLeftCoordinate = new FdoSpatialContextListSpatialContextExtentLowerLeftCoordinate() { X = "-180.0", Y = "-180.0" }, UpperRightCoordinate = new FdoSpatialContextListSpatialContextExtentUpperRightCoordinate() { X = "180.0", Y = "180.0" } }; sc.ExtentType = FdoSpatialContextListSpatialContextExtentType.Static; sc.Name = "Default"; sc.XYTolerance = 0.0001; sc.ZTolerance = 0.0001; var conf = new OdbcConfigurationDocument(); conf.AddSchema(schema); conf.AddSpatialContext(sc); var ov = new OdbcTableItem(); ov.SchemaName = schema.Name; ov.ClassName = cls.Name; ov.SpatialContextName = sc.Name; ov.XColumn = "Lon"; ov.YColumn = "Lat"; conf.AddOverride(ov); string path = "OdbcConfigTest.xml"; File.WriteAllText(path, conf.ToXml()); conf = null; string xml = File.ReadAllText(path); conf = ConfigurationDocument.LoadXml(xml) as OdbcConfigurationDocument; Assert.NotNull(conf); ov = conf.GetOverride("Default", "Cities"); Assert.NotNull(ov); Assert.AreEqual("Default", ov.SchemaName); Assert.AreEqual("Cities", ov.ClassName); Assert.AreEqual(sc.Name, ov.SpatialContextName); Assert.AreEqual("Lon", ov.XColumn); Assert.AreEqual("Lat", ov.YColumn); }