public void GetSiteInfo_SaveXmlFilesFlag_ReturnsSameData(string url, string siteCode) { try { var target = new WaterOneFlowClient(url, 5) { SaveXmlFiles = false }; var series1 = target.GetSiteInfo(siteCode); target.SaveXmlFiles = true; var series2 = target.GetSiteInfo(siteCode); Assert.AreEqual(series1.Count, series2.Count); for (var i = 0; i < series1.Count; i++) { var site1 = series1[i].Site; var site2 = series2[i].Site; Assert.AreEqual(site1.Code, site2.Code); Assert.AreEqual(site1.Name, site2.Name); Assert.AreEqual(series1[i].ValueCount, series2[i].ValueCount); } } catch (WebException ex) { if (ex.Status.HasFlag(WebExceptionStatus.ProtocolError) || ex.Status.HasFlag(WebExceptionStatus.Timeout)) { Assert.Inconclusive("Unable to test GetSiteInfo() from: " + url); } throw; } }
public void CanSaveMultipleSeries() { Random random = new Random(); //string url1 = @"http://his02.usu.edu/littlebearriver/cuahsi_1_0.asmx"; //string url2 = @"http://icewater.boisestate.edu/dcew2dataservices/cuahsi_1_0.asmx"; string url3 = @"http://his.crwr.utexas.edu/TXEvap/cuahsi_1_0.asmx"; MetadataCacheManagerSQL manager = TestConfig.MetadataCacheManager; WaterOneFlowClient client = new WaterOneFlowClient(url3); IList <Site> siteList = client.GetSites(); IList <SeriesMetadata> seriesList = new List <SeriesMetadata>(); DataServiceInfo service = GeDatatService(random.Next()); manager.SaveDataService(service); foreach (Site site in siteList) { IList <SeriesMetadata> seriesList1 = client.GetSiteInfo(site.Code); foreach (SeriesMetadata series in seriesList1) { seriesList.Add(series); } } foreach (SeriesMetadata series in seriesList) { manager.SaveSeries(series, service); } }
private void button1_Click(object sender, EventArgs e) { variablesListBox.Items.Clear(); waterOneFlowClient = new WaterOneFlowClient(urlTextbox.Text); // Update service info in the metadata database var waterOneFlowServiceInfo = waterOneFlowClient.ServiceInfo; var service = waterOneFlowServiceInfo; // Get all sites for this service IList <Site> siteList; siteList = waterOneFlowClient.GetSites(); var variableList = new List <string>(); foreach (var site in siteList) { // Get series for this site IList <SeriesMetadata> currentSeriesList; try { currentSeriesList = waterOneFlowClient.GetSiteInfo(site.Code); } catch (WebException ex) { if (ex.Response != null) { var rdr = new StreamReader(ex.Response.GetResponseStream()); rdr.ReadToEnd(); } continue; } // Save series info to metadata cache database foreach (var series in currentSeriesList) { if (!variableList.Contains(series.Variable.Name)) { var variable = series.Variable.Name; variableList.Add(variable); } } } foreach (var variable in variableList) { this.variablesListBox.Items.Add(variable, false); } if (variablesListBox.Items.Count != 0) { button1.Enabled = false; button2.Enabled = true; button3.Enabled = true; button4.Enabled = true; } }
public void TestLittleBearRiver_10() { string url = @"http://icewater.usu.edu/LittleBearRiver/cuahsi_1_0.asmx"; WaterOneFlowClient client = new WaterOneFlowClient(url); IList <Site> sites = client.GetSites(); IList <SeriesMetadata> seriesList = client.GetSiteInfo(sites[0].Code); IList <Series> downloadedData = client.GetValues(seriesList[0].Site.Code, seriesList[0].Variable.Code, DateTime.MinValue, DateTime.Now); Assert.IsNotNull(seriesList); Assert.Greater(seriesList.Count, 0); Assert.AreNotEqual(seriesList[0].Source.ToString(), "unknown"); Assert.AreNotEqual(seriesList[0].Method.ToString(), "unknown"); }
public void TestTCOON_11() { string url = @"http://his.crwr.utexas.edu/tcoonts/tcoon.asmx"; WaterOneFlowClient client = new WaterOneFlowClient(url); IList <Site> sites = client.GetSites(); IList <SeriesMetadata> seriesList = client.GetSiteInfo(sites[0].Code); //IList<Series> downloadedData = client.GetValues(seriesList[0].Site.Code, seriesList[0].Variable.Code, DateTime.MinValue, DateTime.Now); //Assert.IsNotNull(downloadedData); //Assert.Greater(downloadedData.Count, 0); //Assert.AreNotEqual(downloadedData[0].Source.ToString(), "unknown"); //Assert.AreNotEqual(downloadedData[0].Method.ToString(), "unknown"); }
public void CanSaveOneSeries() { Random random = new Random(); string url = @"http://his.crwr.utexas.edu/TXEvap/cuahsi_1_0.asmx"; MetadataCacheManagerSQL manager = TestConfig.MetadataCacheManager; WaterOneFlowClient client = new WaterOneFlowClient(url); IList <Site> sites = client.GetSites(); IList <SeriesMetadata> seriesList = client.GetSiteInfo(sites[0].Code); SeriesMetadata firstSeries = seriesList[0]; DataServiceInfo service = GeDatatService(random.Next()); manager.SaveDataService(service); firstSeries.DataService = service; manager.SaveSeries(firstSeries, service); }
private void button2_Click(object sender, EventArgs e) { variablesListBox.Enabled = false; urlTextbox.Enabled = false; titleTextbox.Enabled = false; button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; waterOneFlowClient = new WaterOneFlowClient(urlTextbox.Text); var waterOneFlowServiceInfo = waterOneFlowClient.ServiceInfo; // Trim the query off of the URL if it still exists int index = waterOneFlowServiceInfo.EndpointURL.IndexOf("?"); if (index > -1) { waterOneFlowServiceInfo.EndpointURL = waterOneFlowServiceInfo.EndpointURL.Substring(0, index); } var serviceInfo = new DataServiceInfo(); serviceInfo.IsHarvested = false; serviceInfo.ServiceName = waterOneFlowServiceInfo.ServiceName; serviceInfo.Version = waterOneFlowServiceInfo.Version; serviceInfo.ServiceType = waterOneFlowServiceInfo.ServiceType; serviceInfo.Protocol = waterOneFlowServiceInfo.Protocol; serviceInfo.VariableCount = waterOneFlowServiceInfo.VariableCount; IList <Site> siteList; siteList = waterOneFlowClient.GetSites(); // Default extent for the service. These values are designed to be overwritten as we query sites in the service double east = -180; double west = 360; double north = -90; double south = 90; int valueCount = 0; var totalDataCartSeriesList = new List <SeriesDataCart>(); foreach (var site in siteList) { // Get series for this site IList <SeriesMetadata> currentSeriesList; var dataCartSeriesList = new List <SeriesDataCart>(); try { currentSeriesList = waterOneFlowClient.GetSiteInfo(site.Code); } catch (WebException ex) { continue; } catch (Exception ex) { continue; } // Update service extent if (site.Latitude > north) { north = site.Latitude; } if (site.Latitude < south) { south = site.Latitude; } if (site.Longitude > east) { east = site.Longitude; } if (site.Longitude < west) { west = site.Longitude; } // Save series info to metadata cache database foreach (var series in currentSeriesList) { valueCount += series.ValueCount; try { if (checkedVariables.Count != 0) { if (checkedVariables.Contains(series.Variable.Name)) { var seriesDataCart = getDataCartFromMetadata(series, waterOneFlowServiceInfo); dataCartSeriesList.Add(seriesDataCart); } } else { var seriesDataCart = getDataCartFromMetadata(series, waterOneFlowServiceInfo); dataCartSeriesList.Add(seriesDataCart); } } catch (Exception ex) { continue; } } totalDataCartSeriesList.AddRange(dataCartSeriesList); variablesListBox.Enabled = true; urlTextbox.Enabled = true; titleTextbox.Enabled = true; button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button4.Enabled = true; } // Update service info serviceInfo.IsHarvested = true; serviceInfo.HarveDateTime = DateTime.Now; serviceInfo.EastLongitude = east; serviceInfo.WestLongitude = west; serviceInfo.NorthLatitude = north; serviceInfo.SouthLatitude = south; serviceInfo.SiteCount = siteList.Count; serviceInfo.ValueCount = valueCount; serviceInfo.VariableCount = waterOneFlowServiceInfo.VariableCount; SearchResult resultFeatureSet = null; if (totalDataCartSeriesList.Count > 0) { resultFeatureSet = SearchHelper.ToFeatureSetsByDataSource(totalDataCartSeriesList); } if (resultFeatureSet != null) { //We need to reproject the Search results from WGS84 to the projection of the map. var wgs84 = KnownCoordinateSystems.Geographic.World.WGS1984; foreach (var item in resultFeatureSet.ResultItems) { item.FeatureSet.Projection = wgs84; } var layers = ShowSearchResults(resultFeatureSet); Debug.WriteLine("ShowSearchResults done."); // Unselect all layers in legend (http://hydrodesktop.codeplex.com/workitem/8559) App.Map.MapFrame.GetAllLayers().ForEach(r => r.IsSelected = false); // Select first search result layer var first = layers.FirstOrDefault().GetParentItem(); if (first != null) { first.IsSelected = true; } // Unselect "Map Layers" legend item (http://hydrodesktop.codeplex.com/workitem/8458) App.Legend.RootNodes .ForEach(delegate(ILegendItem item) { if (item.LegendText == "Map Layers") { item.IsSelected = false; } }); Debug.WriteLine("Finished."); } }
private string FetchMetadata(List <string> serviceUrls, DoWorkEventArgs e) { var totalServices = serviceUrls.Count; var currentService = 0; var seriesCount = 0; // Keeps track of how many series were successfully processed var cacheManager = DatabaseOperations.GetCacheManager(); var errors = new StringBuilder(); // Keep track of errors and report them at the end foreach (var serviceUrl in serviceUrls) { // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress currentService++; bgwMain.ReportProgress(100 * (currentService - 1) / totalServices, "Reading database info for service " + currentService + " of " + totalServices + "..."); // Get the service info for this item var serviceInfo = DatabaseOperations.GetDataServiceFromCache(serviceUrl); // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100 * (currentService - 1) / totalServices, "Deleting old records for service " + currentService + " of " + totalServices + "..."); // Delete existing records for this service cacheManager.DeleteRecordsForService(serviceInfo, false); // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100 * (currentService - 1) / totalServices, "Connecting to service " + currentService + " of " + totalServices + "..."); // Create a WaterOneFlow Service for this URL WaterOneFlowClient waterOneFlowClient; try { waterOneFlowClient = new WaterOneFlowClient(serviceUrl); } catch (Exception ex) { // Flag the error and continue to the next service errors.AppendLine("Could not connect to service with URL: " + serviceUrl + ".\n" + ex.Message + "\n\n"); continue; } // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100 * (currentService - 1) / totalServices, "Updating database description for service " + currentService + " of " + totalServices + "..."); // Update service info in the metadata database var waterOneFlowServiceInfo = waterOneFlowClient.ServiceInfo; serviceInfo.IsHarvested = false; serviceInfo.ServiceName = waterOneFlowServiceInfo.ServiceName; serviceInfo.Version = waterOneFlowServiceInfo.Version; serviceInfo.ServiceType = waterOneFlowServiceInfo.ServiceType; serviceInfo.Protocol = waterOneFlowServiceInfo.Protocol; serviceInfo.VariableCount = (cacheManager.GetVariablesByService((int)serviceInfo.Id)).Count; cacheManager.UpdateDataRow(serviceInfo); // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100 * (currentService - 1) / totalServices, "Downloading site list for service " + currentService + " of " + totalServices + "..."); // Get all sites for this service IList <Site> siteList; try { siteList = waterOneFlowClient.GetSites(); } catch (WebException ex) { var sr = new StreamReader(ex.Response.GetResponseStream()); sr.ReadToEnd(); // Flag the error and continue to the next service errors.AppendLine("Could not get site list from service with URL: " + serviceUrl + ".\n" + ex.Message + "\n\n"); continue; } // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } var totalSteps = siteList.Count; var currentStep = 0; // Error tracking var siteErrorCount = 0; // Keeps track of how many errors we had while downloading site info for the current service var saveErrorCount = 0; // Keeps track of how many errors we had while saving site info for the current service var firstSiteError = ""; // Records the message from the first error we had while getting site info for the current service var firstSaveError = ""; // Records the message from the first error we had while saving site info for the current service // Default extent for the service. These values are designed to be overwritten as we query sites in the service double east = -180; double west = 360; double north = -90; double south = 90; int valueCount = 0; IList <Site> siteList1, siteList2; if (siteList.Count % 2 == 0) { siteList1 = (siteList as List <Site>).GetRange(0, siteList.Count / 2); siteList2 = (siteList as List <Site>).GetRange(siteList.Count / 2, siteList.Count / 2); } else { siteList1 = (siteList as List <Site>).GetRange(0, (siteList.Count / 2) + 1); siteList2 = (siteList as List <Site>).GetRange((siteList.Count / 2) + 1, siteList.Count / 2); } var thread1 = new Thread(() => ProcessSites(siteList1)); thread1.Start(); var thread2 = new Thread(() => ProcessSites(siteList2)); thread2.Start(); foreach (var site in siteList) { // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress currentStep++; bgwMain.ReportProgress(100 * currentStep / totalSteps, "Processing site " + currentStep + " of " + totalSteps + " from service " + currentService + " of " + totalServices + "..."); // Get series for this site IList <SeriesMetadata> currentSeriesList; try { currentSeriesList = waterOneFlowClient.GetSiteInfo(site.Code); } catch (WebException ex) { // Flag the error and continue to the next site siteErrorCount++; if (siteErrorCount == 1) { firstSiteError = ex.Message; } if (ex.Response != null) { var rdr = new StreamReader(ex.Response.GetResponseStream()); rdr.ReadToEnd(); } continue; } catch (Exception ex) { // Flag the error and continue to the next site siteErrorCount++; if (siteErrorCount == 1) { firstSiteError = ex.Message; } continue; } // Update service extent if (site.Latitude > north) { north = site.Latitude; } if (site.Latitude < south) { south = site.Latitude; } if (site.Longitude > east) { east = site.Longitude; } if (site.Longitude < west) { west = site.Longitude; } // Save series info to metadata cache database foreach (var series in currentSeriesList) { valueCount += series.ValueCount; // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } try { cacheManager.SaveSeries(series, serviceInfo); } catch (Exception ex) { // Flag the error and continue to the next series saveErrorCount++; if (saveErrorCount == 1) { firstSaveError = ex.Message; } continue; } // Keep track of how many series were successfully processed seriesCount++; } } // Log errors if (siteErrorCount == 1) { errors.AppendLine("Could not get site info for 1 site in service with URL: " + serviceUrl + "\n" + firstSiteError + "\n\n"); } else if (siteErrorCount > 1) { errors.AppendLine("Could not get site info for " + siteErrorCount + " sites in service with URL: " + serviceUrl + "\n" + firstSiteError + "\n\n"); } if (saveErrorCount == 1) { errors.AppendLine("Could not save site info for 1 site in service with URL: " + serviceUrl + "\n" + firstSaveError + "\n\n"); } else if (saveErrorCount > 1) { errors.AppendLine("Could not save site info for " + siteErrorCount + " sites in service with URL: " + serviceUrl + "\n" + firstSaveError + "\n\n"); } // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100 * currentService / totalServices, "Updating harvested statistics for service " + currentService + " of " + totalServices + "..."); // Update service info serviceInfo.IsHarvested = true; serviceInfo.HarveDateTime = DateTime.Now; serviceInfo.EastLongitude = east; serviceInfo.WestLongitude = west; serviceInfo.NorthLatitude = north; serviceInfo.SouthLatitude = south; serviceInfo.SiteCount = siteList.Count; serviceInfo.ValueCount = valueCount; serviceInfo.VariableCount = (cacheManager.GetVariablesByService((int)serviceInfo.Id)).Count; cacheManager.UpdateDataRow(serviceInfo); // Updates properties like harvest datetime and service extent } // Check for cancel if (bgwMain.CancellationPending) { e.Cancel = true; return("Operation cancelled"); } // Update progress bgwMain.ReportProgress(100, "Operation complete"); // Report result var message = "Download complete. " + seriesCount + " series saved to metadata cache database."; if (errors.Length > 0) { message += "\n\nSome errors occurred during the operation:\n\n" + errors; } return(message); }