/// <summary> /// OBSOLETE /// TimeSeriesInputFactory function for validating and setting TimeSeriesInput objects. /// </summary> /// <param name="input"></param> /// <param name="dataset"></param> /// <param name="errorMsg"></param> /// <returns></returns> public ITimeSeriesInput OBS_SetTimeSeriesInput(ITimeSeriesInput input, List <string> dataset, out string errorMsg) { errorMsg = ""; TimeSeriesInput newInput = new TimeSeriesInput(); // Below preforms validation of required parameters when attempting to initialize dataset component inputs. // TODO: Append error messages to array and output to errorMsg on return. List <string> errors = new List <string>(); // Validates that the source string is not null or empty. if (String.IsNullOrWhiteSpace(input.Source)) { errors.Add("ERROR: Required 'Source' parameter was not found or is invalid."); //errorMsg += "ERROR: Required 'Source' parameter was not found or is invalid."; //return newInput; } else { newInput.Source = input.Source; } // Validating Geometry object if (input.Geometry == null) { errors.Add("ERROR: No geometry values found in the provided parameters."); //errorMsg += "ERROR: No geometry values found in the provided parameters."; //return newInput; } else { // Validates that the Latitude parameter is not invalid if (!input.Source.Contains("ncdc") && !input.Source.Contains("compare")) { if (input.Geometry.Point == null) { errors.Add("ERROR: No geometry values found in the provided parameters."); //errorMsg += "ERROR: No geometry values found in the provided parameters."; //return newInput; } else if (Double.IsNaN(input.Geometry.Point.Latitude)) { errors.Add("ERROR: Required 'Latitude' parameter was not found or is invalid."); //errorMsg += "ERROR: Required 'Latitude' parameter was not found or is invalid."; } // Validates that the Longitude parameter is not invalid else if (Double.IsNaN(input.Geometry.Point.Longitude)) { errors.Add("ERROR: Required 'Longitude' parameter was not found or is invalid."); //errorMsg += "ERROR: Required 'Longitude' parameter was not found or is invalid."; } if (!(errors.Any(s => s.Contains("Latitude")) || errors.Any(s => s.Contains("Longitude")) || errors.Any(s => s.Contains("geometry")))) { if (input.Geometry.Point.Latitude > -90 && input.Geometry.Point.Latitude < 90 && input.Geometry.Point.Longitude > -180 && input.Geometry.Point.Longitude < 180) { IPointCoordinate pC = new PointCoordinate() { Latitude = input.Geometry.Point.Latitude, Longitude = input.Geometry.Point.Longitude }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; } else { IPointCoordinate pC = new PointCoordinate() { Latitude = 0, Longitude = 0 }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; errors.Add("ERROR: Latitude or Longitude value is not a valid coordinate."); } } else { IPointCoordinate pC = new PointCoordinate() { Latitude = 0, Longitude = 0 }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; errors.Add("ERROR: Latitude or Longitude value is not a valid coordinate."); } } else { if (!input.Geometry.GeometryMetadata.ContainsKey("stationID")) { errors.Add("ERROR: " + input.Source + " used as source but no stationID value was found in Geometry.GeometryMetadata."); //errorMsg += "ERROR: " + input.Source + " used as source but no stationID value was found in Geometry.GeometryMetadata."; } IPointCoordinate pC = new PointCoordinate() { Latitude = 0.0, Longitude = 0.0 }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; } newInput.Geometry.GeometryMetadata = input.Geometry.GeometryMetadata ?? new Dictionary <string, string>(); newInput.Geometry.Description = input.Geometry.Description ?? ""; // Validates and sets Timezone information if (input.Geometry.Timezone == null) { newInput.Geometry.Timezone = new Timezone() { Name = "", Offset = 0.0, DLS = false }; } else { newInput.Geometry.Timezone = new Timezone() { }; newInput.Geometry.Timezone.Name = (String.IsNullOrWhiteSpace(input.Geometry.Timezone.Name)) ? "TZNotSet" : input.Geometry.Timezone.Name; newInput.Geometry.Timezone.Offset = (Double.IsNaN(input.Geometry.Timezone.Offset)) ? 0.0 : input.Geometry.Timezone.Offset; if (newInput.Geometry.Timezone.Offset > 12 || newInput.Geometry.Timezone.Offset < -12) { errors.Add("ERROR: Timezone offset value is not a valid timezone. Timezone offset provided: " + newInput.Geometry.Timezone.Offset.ToString()); //errorMsg += "ERROR: Timezone offset value is not a valid timezone. Timezone offset provided: " + newInput.Geometry.Timezone.Offset.ToString(); } newInput.Geometry.Timezone.DLS = (input.Geometry.Timezone.DLS == true) ? true : false; } } if (input.DateTimeSpan == null) { errors.Add("ERROR: DateTimeSpan object is null. DateTimeSpan, with a StartDate and EndDate, is required."); //errorMsg += "ERROR: DateTimeSpan object is null. DateTimeSpan, with a StartDate and EndDate, is required."; //return newInput; } else { // Validates that the StartDate parameter is not invalid if (input.DateTimeSpan.StartDate.Equals(DateTime.MinValue)) { errors.Add("ERROR: Required 'StartDate' parameter was not found or is invalid."); //errorMsg += "ERROR: Required 'StartDate' parameter was not found or is invalid."; } // Validates that the EndDate parameter is not invalid if (input.DateTimeSpan.EndDate.Equals(DateTime.MinValue)) { errors.Add("ERROR: Required 'EndDate' parameter was not found or is invalid."); //errorMsg += "ERROR: Required 'EndDate' parameter was not found or is invalid."; } if (!errorMsg.Contains("StartDate") || !errorMsg.Contains("EndDate")) { newInput.DateTimeSpan = new DateTimeSpan() { StartDate = input.DateTimeSpan.StartDate, EndDate = input.DateTimeSpan.EndDate }; } if (DateTime.Compare(newInput.DateTimeSpan.StartDate, newInput.DateTimeSpan.EndDate) >= 0) { errors.Add("ERROR: Start date must be before end date."); //errorMsg += "ERROR: Start date must be before end date."; } // Validates DateTime output format newInput.DateTimeSpan.DateTimeFormat = (String.IsNullOrWhiteSpace(input.DateTimeSpan.DateTimeFormat)) ? "yyyy-MM-dd HH" : input.DateTimeSpan.DateTimeFormat; try { string dateTest = newInput.DateTimeSpan.StartDate.ToString(newInput.DateTimeSpan.DateTimeFormat); } catch (FormatException fe) { errors.Add("ERROR: Problem with the DateTimeFormat. Provided DateTimeFormat: " + newInput.DateTimeSpan.DateTimeFormat + ". Error Message: " + fe.Message); //errorMsg += "ERROR: Problem with the DateTimeFormat. Provided DateTimeFormat: " + newInput.DateTimeSpan.DateTimeFormat + ". Error Message: " + fe.Message; } } // Validates the DataValueFormat parameter newInput.DataValueFormat = (String.IsNullOrWhiteSpace(input.DataValueFormat)) ? "E3" : input.DataValueFormat; try { double testValue = 12345.678901; string testString = testValue.ToString(newInput.DataValueFormat); } catch (FormatException fe) { errors.Add("ERROR: Problem with the DateValueFormat. Provded DataValueFormat: " + newInput.DataValueFormat + ". ErrorMessage: " + fe.Message); //errorMsg += "ERROR: Problem with the DateValueFormat. Provded DataValueFormat: " + newInput.DataValueFormat + ". ErrorMessage: " + fe.Message; } // Validates TemporalResolution parameter newInput.TemporalResolution = (String.IsNullOrWhiteSpace(input.TemporalResolution)) ? "default" : input.TemporalResolution.ToLower(); string[] validTemporalResolutions = new string[] { "hourly", "daily", "weekly", "monthly", "seasonal", "yearly", "default" }; // For non-uniform timeseries, leave as default. if (!Array.Exists(validTemporalResolutions, element => element == newInput.TemporalResolution)) { newInput.TemporalResolution = "default"; } // Validates TimeLocalized parameter, validation provided in the conditional check. newInput.TimeLocalized = (input.TimeLocalized == true) ? true : false; // Validates Units parameter newInput.Units = (String.IsNullOrWhiteSpace(input.Units)) ? "metric" : input.Units; string[] validUnits = new string[] { "metric", "imperial", "default" }; if (!Array.Exists(validUnits, element => element == newInput.Units)) { newInput.Units = "default"; } // Validates OutputFormat parameter newInput.OutputFormat = (String.IsNullOrWhiteSpace(input.OutputFormat)) ? "json" : input.OutputFormat; string[] validOutputFormat = new string[] { "json", "default" }; if (!Array.Exists(validOutputFormat, element => element == newInput.OutputFormat)) { newInput.OutputFormat = "default"; } newInput.BaseURL = new List <string>(); foreach (string ds in dataset) { string tempError = ""; newInput.BaseURL.Add(GetBaseURL(input.Source, ds, out tempError)); if (tempError.Contains("ERROR")) { //errorMsg += tempError; errors.Add(tempError); } } // Assign ITimeSeriesInput, if null assign empty ITimeSeriesOutput if (input.InputTimeSeries == null) { ITimeSeriesOutputFactory oFactory = new TimeSeriesOutputFactory(); newInput.InputTimeSeries = new Dictionary <string, TimeSeriesOutput>(); } else { newInput.InputTimeSeries = input.InputTimeSeries; } errorMsg = string.Join(" ", errors.ToArray()); return(newInput); }
/// <summary> /// TimeSeriesInputFactory function for validating and setting TimeSeriesInput objects. /// </summary> /// <param name="input"></param> /// <param name="dataset"></param> /// <param name="errorMsg"></param> /// <returns></returns> public override ITimeSeriesInput SetTimeSeriesInput(ITimeSeriesInput input, List <string> dataset, out string errorMsg) { errorMsg = ""; TimeSeriesInput newInput = new TimeSeriesInput(); // Below preforms validation of required parameters when attempting to initialize dataset component inputs. // Validates that the source string is not null or empty. if (String.IsNullOrWhiteSpace(input.Source)) { errorMsg += "ERROR: Required 'Source' parameter was not found or is invalid."; return(newInput); } else { newInput.Source = input.Source; } // Validating Geometry object if (input.Geometry == null) { errorMsg += "ERROR: No geometry values found in the provided parameters."; return(newInput); } else { newInput.Geometry = input.Geometry; } // Validates that the Latitude parameter is not invalid if (!input.Source.Contains("ncdc") && !input.Source.Contains("compare")) { if (input.Geometry.Point == null) { errorMsg += "ERROR: No geometry values found in the provided parameters."; return(newInput); } if (Double.IsNaN(input.Geometry.Point.Latitude)) { errorMsg += "ERROR: Required 'Latitude' parameter was not found or is invalid."; } // Validates that the Longitude parameter is not invalid if (Double.IsNaN(input.Geometry.Point.Longitude)) { errorMsg += "ERROR: Required 'Longitude' parameter was not found or is invalid."; } if (!errorMsg.Contains("Latitude") || !errorMsg.Contains("Longitude")) { if (input.Geometry.Point.Latitude > -90 && input.Geometry.Point.Latitude < 90 && input.Geometry.Point.Longitude > -180 && input.Geometry.Point.Longitude < 180) { IPointCoordinate pC = new PointCoordinate() { Latitude = input.Geometry.Point.Latitude, Longitude = input.Geometry.Point.Longitude }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; } else { errorMsg += "ERROR: Latitude or Longitude value is not a valid coordinate."; } } } else { if (!input.Geometry.GeometryMetadata.ContainsKey("stationID")) { errorMsg += "ERROR: " + input.Source + " used as source but no stationID value was found in Geometry.GeometryMetadata."; } IPointCoordinate pC = new PointCoordinate() { Latitude = 0.0, Longitude = 0.0 }; newInput.Geometry = new TimeSeriesGeometry() { Point = (PointCoordinate)pC }; } newInput.Geometry.GeometryMetadata = input.Geometry.GeometryMetadata ?? new Dictionary <string, string>(); newInput.Geometry.Description = input.Geometry.Description ?? ""; // Validates and sets Timezone information if (input.Geometry.Timezone == null) { newInput.Geometry.Timezone = new Timezone() { Name = "", Offset = 0.0, DLS = false }; } else { newInput.Geometry.Timezone = new Timezone() { }; newInput.Geometry.Timezone.Name = (String.IsNullOrWhiteSpace(input.Geometry.Timezone.Name)) ? "TZNotSet" : input.Geometry.Timezone.Name; newInput.Geometry.Timezone.Offset = (Double.IsNaN(input.Geometry.Timezone.Offset)) ? 0.0 : input.Geometry.Timezone.Offset; newInput.Geometry.Timezone.DLS = (input.Geometry.Timezone.DLS == true) ? true : false; } if (input.DateTimeSpan == null) { errorMsg += "ERROR: DateTimeSpan object is null. DateTimeSpan, with a StartDate and EndDate, is required."; return(newInput); } // Validates that the StartDate parameter is not invalid if (input.DateTimeSpan.StartDate.Equals(DateTime.MinValue)) { errorMsg += "ERROR: Required 'StartDate' parameter was not found or is invalid."; } // Validates that the EndDate parameter is not invalid if (input.DateTimeSpan.EndDate.Equals(DateTime.MinValue)) { errorMsg += "ERROR: Required 'EndDate' parameter was not found or is invalid."; } if (!errorMsg.Contains("StartDate") || !errorMsg.Contains("EndDate")) { newInput.DateTimeSpan = new DateTimeSpan() { StartDate = input.DateTimeSpan.StartDate, EndDate = input.DateTimeSpan.EndDate }; } if (!errorMsg.Contains("ERROR")) { if (DateTime.Compare(newInput.DateTimeSpan.StartDate, newInput.DateTimeSpan.EndDate) >= 0) { errorMsg += "ERROR: Start date must be before end date."; } } // Validates DateTime output format newInput.DateTimeSpan.DateTimeFormat = (String.IsNullOrWhiteSpace(input.DateTimeSpan.DateTimeFormat)) ? "yyyy-MM-dd HH": input.DateTimeSpan.DateTimeFormat; // TODO: Add validation of the given datetimeformat. If not valid set to default, TBD // Validates the DataValueFormat parameter newInput.DataValueFormat = (String.IsNullOrWhiteSpace(input.DataValueFormat)) ? "E3" : input.DataValueFormat; // TODO: Add validation of the given datavalueformat. If not valid set to default, TBD // Validates TemporalResolution parameter newInput.TemporalResolution = (String.IsNullOrWhiteSpace(input.TemporalResolution)) ? "default" : input.TemporalResolution; // TODO: Add validation of the provided temporalresolution. If not valid set to default // Validates TimeLocalized parameter newInput.TimeLocalized = (input.TimeLocalized == true) ? true : false; // TODO: Add validation of the provided timelocalized. If not valid set to true // Validates Units parameter newInput.Units = (String.IsNullOrWhiteSpace(input.Units)) ? "metric" : input.Units; // TODO: Add validation of the provided units. If not valid set to "metric" // Validates OutputFormat parameter newInput.OutputFormat = (String.IsNullOrWhiteSpace(input.OutputFormat)) ? "json" : input.OutputFormat; // TODO: Add validation of the provided output. If not valid set to "json" newInput.BaseURL = new List <string>(); foreach (string ds in dataset) { string tempError = ""; newInput.BaseURL.Add(GetBaseURL(input, ds, out tempError)); if (tempError.Contains("ERROR")) { errorMsg += tempError; } } return(newInput); }