예제 #1
0
        /// <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;
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        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);
        }