/// <summary> /// Give a data source format, this method provides a default and file extension filter string. /// </summary> /// <param name="format">The data source file format to get the extensions for.</param> /// <param name="defaultExt">Default file extension.</param> /// <param name="filters">A file extension filter string</param> public static void GetFileExtensions(DataSourceFormat format, out string defaultExt, out string filters) { switch (format) { case DataSourceFormat.CSV: defaultExt = ".csv"; filters = "CSV (*.csv)|*.csv|Text (*.txt)|*.txt|Zip (*.zip)|*.zip|All files (*.*)|*.*"; break; case DataSourceFormat.TAB: case DataSourceFormat.PIPE: defaultExt = ".txt"; filters = "Text (*.txt)|*.txt|Zip (*.zip)|*.zip|All files (*.*)|*.*"; break; case DataSourceFormat.SHP: defaultExt = ".zip"; filters = "Zip (*.zip)|*.zip|All files (*.*)|*.*"; break; case DataSourceFormat.KML: defaultExt = ".kml"; filters = "Kml (*.kml)|*.kml|Kmz (*.kmz)|*.kmz|Xml (.xml)|*.xml|Zip (*.zip)|*.zip|All files (*.*)|*.*"; break; case DataSourceFormat.XML: default: defaultExt = ".xml"; filters = "Xml (*.xml)|*.xml|Zip (*.zip)|*.zip|All files (*.*)|*.*"; break; } }
private void GetFileExtensions(DataSourceFormat format, out string defaultExt, out string filters) { switch (format) { case DataSourceFormat.CSV: defaultExt = ".csv"; filters = "CSV (*.csv)|*.csv|Text (*.txt)|*.txt|All files (*.*)|*.*"; break; case DataSourceFormat.TAB: case DataSourceFormat.PIPE: defaultExt = ".txt"; filters = "Text (*.txt)|*.txt|All files (*.*)|*.*"; break; case DataSourceFormat.XML: default: defaultExt = ".xml"; filters = "Xml (.xml)|*.xml"; break; } }
/// <summary> /// Uploads KML and SHP files streams as a data source. /// </summary> /// <param name="dataSourceStream">A file stream for a data source that is in KML or SHP file format.</param> /// <param name="format">Data Source file Format.</param> /// <param name="loadOperation">The type of operation to perform when uploading a data source.</param> /// <param name="info">Information about the datasource.</param> /// <param name="setPublic">A boolean value indicating if the data source should be made public or not.</param> /// <returns>The final data flow job when the upload process completes or is aborted.</returns> public async Task <DataflowJob> Upload(Stream dataSourceStream, DataSourceFormat format, LoadOperation loadOperation, BasicDataSourceInfo info, bool setPublic) { var result = new DataflowJob(); try { if (string.IsNullOrWhiteSpace(info.MasterKey)) { throw new Exception("A valid Bing Maps key must be specified as a master key for the data source."); } if (format != DataSourceFormat.KML && format != DataSourceFormat.SHP) { var dataSource = new DataSource(info); if (await dataSource.ReadAsync(dataSourceStream, format)) { return(await Upload(dataSource, loadOperation, setPublic)); } else { throw new Exception("Unable to read data source file."); } } //Handle KML and SHP files. string request = string.Format("https://spatial.virtualearth.net/REST/v1/Dataflows/LoadDataSource?loadOperation={0}&dataSourceName={1}&setPublic={2}&input={3}&output=json&key={4}&clientApi=SDSToolkit", loadOperation, info.DataSourceName, (setPublic) ? 1 : 0, (format == DataSourceFormat.KML) ? "kml" : "shp", info.MasterKey); if (!string.IsNullOrWhiteSpace(info.QueryKey)) { request += "&queryKey=" + info.QueryKey; } if (!string.IsNullOrWhiteSpace(info.Description)) { request += "&description=" + Uri.EscapeDataString(info.Description); } ReportUploadStatus("Creating upload job."); var dataflowJobLocation = await CreateUploadJob(request, dataSourceStream, format); var statusUrl = new Uri(dataflowJobLocation + "?output=json&key=" + info.MasterKey); ReportUploadStatus("Upload job created. Monitoring status."); result = await MonitorStatus(statusUrl); ReportUploadStatus("Upload job " + result.Status); } catch (Exception ex) { result.ErrorMessage = ex.Message; result.Status = "Aborted"; ReportUploadStatus("Upload aborted.\r\n" + ex.Message); } return(result); }
private Task <string> CreateUploadJob(string createJobUri, Stream dataSourceStream, DataSourceFormat format) { var tcs = new TaskCompletionSource <string>(); //Include the data to geocode in the HTTP request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(createJobUri); // The HTTP method must be 'POST'. request.Method = "POST"; request.ContentType = "application/octet-stream"; request.ContinueTimeout = 1800000; request.BeginGetRequestStream((a) => { var r = (HttpWebRequest)a.AsyncState; using (var postStream = request.EndGetRequestStream(a)) { if (format == DataSourceFormat.SHP || XmlUtilities.IsStreamCompressed(dataSourceStream)) { dataSourceStream.CopyTo(postStream); } else { using (var zipStream = new GZipStream(postStream, CompressionMode.Compress)) { dataSourceStream.CopyTo(zipStream); } } } request.BeginGetResponse((a2) => { try { var r2 = (HttpWebRequest)a2.AsyncState; var response = (HttpWebResponse)r2.EndGetResponse(a2); string dataflowJobLocation = string.Empty; foreach (var hKey in response.Headers.AllKeys) { if (string.Compare(hKey, "Location", StringComparison.OrdinalIgnoreCase) == 0) { dataflowJobLocation = response.Headers[hKey]; break; } } tcs.SetResult(dataflowJobLocation); } catch (WebException ex) { if (ex.Response != null) { var ser = new DataContractJsonSerializer(typeof(DataflowResponse)); var res = ser.ReadObject(ex.Response.GetResponseStream()) as DataflowResponse; if (res.ErrorDetails != null && res.ErrorDetails.Length > 0) { tcs.SetException(new Exception(string.Join("\r\n", res.ErrorDetails))); return; } } tcs.SetException(ex); } }, request); }, request); return(tcs.Task); }