示例#1
0
        /// <summary>
        /// Updates  BeginDate/EndDate/ValueCount in the SeriesDataCart to the user-specified range
        /// </summary>
        /// <param name="series">Series to update</param>
        /// <param name="startDate">User-specified startDate</param>
        /// <param name="endDate">User-specified endDate</param>
        public static void UpdateDataCartToDateInterval(SeriesDataCart series, DateTime startDate, DateTime endDate)
        {
            // Update BeginDate/EndDate/ValueCount to the user-specified range
            var seriesStartDate = series.BeginDate < startDate ? startDate : series.BeginDate;
            // Fix http://hydrodesktop.codeplex.com/workitem/8468
            // HIS Central sometimes doesn't contains actual end dates for datasets,
            // so always set end date of series to user-specified endDate.
            var seriesEndDate = endDate; //var seriesEndDate = series.EndDate > endDate ? endDate : series.EndDate;

            var serverDateRange = series.EndDate.Subtract(series.BeginDate);
            var userDateRange   = seriesEndDate.Subtract(seriesStartDate);

            var userFromServerPercentage = serverDateRange.TotalDays > 0
                                               ? userDateRange.TotalDays / serverDateRange.TotalDays
                                               : 1.0;

            if (userFromServerPercentage > 1.0)
            {
                userFromServerPercentage = 1.0;
            }
            var esimatedValueCount = (int)(series.ValueCount * userFromServerPercentage);

            series.ValueCount = esimatedValueCount;
            series.BeginDate  = seriesStartDate;
            series.EndDate    = seriesEndDate;
        }
        private SeriesDataCart getDataCartFromMetadata(SeriesMetadata series, DataServiceInfo waterOneFlowServiceInfo)
        {
            var  result = new SeriesDataCart();
            Site cSite  = series.Site;

            result.SiteName  = cSite.Name;
            result.SiteCode  = cSite.Code;
            result.Latitude  = cSite.Latitude;
            result.Longitude = cSite.Longitude;

            Variable v = series.Variable;

            result.VariableName = v.Name;
            result.VariableCode = v.Code;
            result.DataType     = v.DataType;
            result.ValueType    = v.ValueType;

            result.SampleMedium    = v.SampleMedium;
            result.TimeSupport     = Convert.ToDouble(v.TimeSupport, CultureInfo.InvariantCulture);
            result.GeneralCategory = v.GeneralCategory;
            result.TimeUnit        = v.TimeUnit.Name;

            result.BeginDate  = Convert.ToDateTime(series.BeginDateTime, CultureInfo.InvariantCulture);
            result.EndDate    = Convert.ToDateTime(series.EndDateTime, CultureInfo.InvariantCulture);
            result.ValueCount = series.ValueCount;

            result.ServURL  = waterOneFlowServiceInfo.EndpointURL;
            result.ServCode = titleTextbox.Text;

            return(result);
        }
示例#3
0
        /// <summary>
        /// Gets the name of the data cart
        /// </summary>
        /// <param name="cart">the series data cart object</param>
        /// <returns>the unique name of the series data cart</returns>
        public static string GetDataCartName(SeriesDataCart cart)
        {
            string str  = String.Format("{0}-{1}", cart.SiteCode, cart.VariableCode);
            string str2 = str.Replace("/", "_");
            string str3 = str2.Replace(@"\", "_");
            string str4 = str3.Replace(":", "_");

            return(str4);
        }
示例#4
0
        /// <summary>
        /// Adds series to an existing feature set
        /// </summary>
        /// <param name="series">Series</param>
        /// <param name="fs">Feature set</param>
        private static void AddToFeatureSet(SeriesDataCart series, IFeatureSet fs)
        {
            double lat   = series.Latitude;
            double lon   = series.Longitude;
            var    coord = new Coordinate(lon, lat);

            var f = new Feature(FeatureType.Point, new[] { coord });

            fs.Features.Add(f);

            var row = f.DataRow;

            PopulateDataRow(series, row);
        }
示例#5
0
        public SearchResultItem(SeriesDataCart seriesDataCart, IFeatureSet featureSet)
        {
            if (seriesDataCart == null)
            {
                throw new ArgumentNullException("seriesDataCart");
            }
            if (featureSet == null)
            {
                throw new ArgumentNullException("featureSet");
            }

            SeriesDataCart = seriesDataCart;
            FeatureSet     = featureSet;
        }
示例#6
0
        /// <summary>
        /// Creates the HTTP SOAP web request for GetValues method
        /// </summary>
        /// <param name="dataCart">The series data cart containing the GetValues parameters</param>
        /// <returns>Returns the fully initialized web request object</returns>
        public static HttpWebRequest CreatePostRequest(SeriesDataCart dataCart)
        {
            string   url              = dataCart.ServURL;
            string   fullSiteCode     = dataCart.SiteCode;
            string   fullVariableCode = dataCart.VariableCode;
            DateTime startDate        = dataCart.BeginDate;
            DateTime endDate          = dataCart.EndDate;

            url = url.Trim().ToLower();
            //for http request, we need to remove the ?WSDL part from the url
            if (url.EndsWith("?wsdl"))
            {
                url = url.Replace("?wsdl", "");
            }

            //get the valid SOAP namespace
            string soapNamespace = GetCuahsiSoapNamespace(url);

            //create the SOAP Envelope
            string soapEnvelope = CreateSoapEnvelope(soapNamespace, fullSiteCode, fullVariableCode, startDate, endDate);

            //send the SOAP envelope to the service as a xml document
            XmlDocument doc = new XmlDocument();

            doc.Load(new StringReader(soapEnvelope));

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            //this is the valid SoapAction header for GetValues web method
            string soapAction = soapNamespace + "GetValuesObject";

            req.Headers.Add("SOAPAction", soapAction);

            req.ContentType = "text/xml;charset=\"utf-8\"";
            req.Accept      = "text/xml";
            req.Method      = "POST";
            Stream stm = req.GetRequestStream();

            doc.Save(stm);
            stm.Close();

            return(req);
        }
示例#7
0
 private static void PopulateDataRow(SeriesDataCart series, DataRow row)
 {
     row["DataSource"]  = series.ServCode;
     row["SiteName"]    = series.SiteName;
     row["VarName"]     = series.VariableName;
     row["SiteCode"]    = series.SiteCode;
     row["VarCode"]     = series.VariableCode;
     row["Keyword"]     = series.ConceptKeyword;
     row["ValueCount"]  = series.ValueCount;
     row["StartDate"]   = series.BeginDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
     row["EndDate"]     = series.EndDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
     row["ServiceURL"]  = series.ServURL;
     row["ServiceCode"] = series.ServCode;
     row["DataType"]    = series.DataType;
     row["ValueType"]   = series.ValueType;
     row["SampleMed"]   = series.SampleMedium;
     row["TimeUnits"]   = series.TimeUnit;
     row["TimeSupport"] = series.TimeSupport;
     row["Latitude"]    = series.Latitude;
     row["Longitude"]   = series.Longitude;
 }
示例#8
0
        /// <summary>
        /// Updates  BeginDate/EndDate/ValueCount in the SeriesDataCart to the user-specified range
        /// </summary>
        /// <param name="series">Series to update</param>
        /// <param name="startDate">User-specified startDate</param>
        /// <param name="endDate">User-specified endDate</param>
        public static void UpdateDataCartToDateInterval(SeriesDataCart series, DateTime startDate, DateTime endDate)
        {
            // Update BeginDate/EndDate/ValueCount to the user-specified range
            var seriesStartDate = series.BeginDate < startDate ? startDate : series.BeginDate;
            var seriesEndDate   = series.EndDate > endDate ? endDate : series.EndDate;

            var serverDateRange = series.EndDate.Subtract(series.BeginDate);
            var userDateRange   = seriesEndDate.Subtract(seriesStartDate);

            var userFromServerPercentage = serverDateRange.TotalDays > 0
                                               ? userDateRange.TotalDays / serverDateRange.TotalDays
                                               : 1.0;

            if (userFromServerPercentage > 1.0)
            {
                userFromServerPercentage = 1.0;
            }
            var esimatedValueCount = (int)(series.ValueCount * userFromServerPercentage);

            series.ValueCount = esimatedValueCount;
            series.BeginDate  = seriesStartDate;
            series.EndDate    = seriesEndDate;
        }
        /// <summary>
        /// Converts DataRow into SeriesDataCart
        /// </summary>
        /// <param name="row">DataRow to convert</param>
        /// <returns>SeriesDataCart</returns>
        public SeriesDataCart SeriesDataCartFromRow(DataRow row)
        {
            var result = new SeriesDataCart();
            result.SiteName = Convert.ToString(row["SiteName"]);
            result.SiteCode = Convert.ToString(row["SiteCode"]);
            result.Latitude = Convert.ToDouble(row["Latitude"], CultureInfo.InvariantCulture);
            result.Longitude = Convert.ToDouble(row["Longitude"], CultureInfo.InvariantCulture);

            //Variable v = new Variable();
            result.VariableName = Convert.ToString(row["VariableName"]);
            result.VariableCode = Convert.ToString(row["VariableCode"]);
            result.DataType = Convert.ToString(row["DataType"]);
            result.ValueType = Convert.ToString(row["ValueType"]);

            result.SampleMedium = Convert.ToString(row["SampleMedium"]);
            result.TimeSupport = Convert.ToDouble(row["TimeSupport"], CultureInfo.InvariantCulture);
            result.GeneralCategory = Convert.ToString(row["GeneralCategory"]);
            result.TimeUnit = Convert.ToString(row["TimeUnitsName"]);

            result.BeginDate = Convert.ToDateTime(row["BeginDateTime"], CultureInfo.InvariantCulture);
            result.EndDate = Convert.ToDateTime(row["EndDateTime"], CultureInfo.InvariantCulture);
            result.ValueCount = Convert.ToInt32(row["ValueCount"]);

            result.ServURL = Convert.ToString(row["ServiceEndpointURL"]);
            result.ServCode = Convert.ToString(row["ServiceTitle"]);

            return result;
        }
示例#10
0
        /// <summary>
        /// Read the list of series from the XML that is returned by HIS Central
        /// </summary>
        /// <param name="r">the xml reader</param>
        /// <returns>the list of intermediate 'SeriesDataCart' objects</returns>
        private SeriesDataCart ReadSeriesFromHISCentral(XmlReader r)
        {
            var usaCulture = new CultureInfo("en-US");

            var series = new SeriesDataCart();

            while (r.Read())
            {
                string nodeName = r.Name.ToLower();

                if (r.NodeType == XmlNodeType.Element)
                {
                    switch (nodeName)
                    {
                    case "servcode":
                        r.Read();
                        series.ServCode = r.Value;
                        break;

                    case "servurl":
                        r.Read();
                        series.ServURL = r.Value;
                        break;

                    case "location":
                        r.Read();
                        series.SiteCode = r.Value;
                        break;

                    case "varcode":
                        r.Read();
                        series.VariableCode = r.Value;
                        break;

                    case "varname":
                        r.Read();
                        series.VariableName = r.Value;
                        break;

                    case "begindate":
                        r.Read();
                        series.BeginDate = Convert.ToDateTime(r.Value, usaCulture);
                        break;

                    case "enddate":
                        r.Read();
                        series.EndDate = Convert.ToDateTime(r.Value, usaCulture);
                        break;

                    case "valuecount":
                        r.Read();
                        series.ValueCount = Convert.ToInt32(r.Value);
                        break;

                    case "sitename":
                        r.Read();
                        series.SiteName = r.Value;
                        break;

                    case "latitude":
                        r.Read();
                        series.Latitude = Convert.ToDouble(r.Value, CultureInfo.InvariantCulture);
                        break;

                    case "longitude":
                        r.Read();
                        series.Longitude = Convert.ToDouble(r.Value, CultureInfo.InvariantCulture);
                        break;

                    case "datatype":
                        r.Read();
                        series.DataType = r.Value;
                        break;

                    case "valuetype":
                        r.Read();
                        series.ValueType = r.Value;
                        break;

                    case "samplemedium":
                        r.Read();
                        series.SampleMedium = r.Value;
                        break;

                    case "timeunits":
                        r.Read();
                        series.TimeUnit = r.Value;
                        break;

                    case "conceptkeyword":
                        r.Read();
                        series.ConceptKeyword = r.Value;
                        break;

                    case "gencategory":
                        r.Read();
                        series.GeneralCategory = r.Value;
                        break;

                    case "timesupport":
                        r.Read();
                        series.TimeSupport = Convert.ToDouble(r.Value, CultureInfo.InvariantCulture);
                        break;
                    }
                }
                else if (r.NodeType == XmlNodeType.EndElement && nodeName == "seriesrecord")
                {
                    return(series);
                }
            }

            return(null);
        }
示例#11
0
        /// <summary>
        /// Read the list of series from the XML that is returned by HIS Central
        /// </summary>
        /// <param name="reader">the xml reader</param>
        /// <returns>the list of intermediate 'SeriesDataCart' objects</returns>
        private SeriesDataCart ReadSeriesFromHISCentral(XmlReader reader)
        {
            var series = new SeriesDataCart();
            while (reader.Read())
            {
                var nodeName = reader.Name.ToLower();
                if (reader.NodeType == XmlNodeType.Element)
                {
                    switch (nodeName)
                    {
                        case "servcode":
                            reader.Read();
                            series.ServCode = reader.Value;
                            break;
                        case "servurl":
                            reader.Read();
                            series.ServURL = reader.Value;
                            break;
                        case "location":
                            reader.Read();
                            series.SiteCode = reader.Value;
                            break;
                        case "varcode":
                            reader.Read();
                            series.VariableCode = reader.Value;
                            break;
                        case "varname":
                            reader.Read();
                            series.VariableName = reader.Value;
                            break;
                        case "begindate":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.BeginDate = Convert.ToDateTime(reader.Value, _invariantCulture);
                            else
                                return null;
                            break;
                        case "enddate":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.EndDate = Convert.ToDateTime(reader.Value, _invariantCulture);
                            else
                                return null;
                            break;
                        case "valuecount":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.ValueCount = Convert.ToInt32(reader.Value);
                            else
                                return null;
                            break;
                        case "sitename":
                            reader.Read();
                            series.SiteName = reader.Value;
                            break;
                        case "latitude":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.Latitude = Convert.ToDouble(reader.Value, CultureInfo.InvariantCulture);
                            else
                                return null;
                            break;
                        case "longitude":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.Longitude = Convert.ToDouble(reader.Value, CultureInfo.InvariantCulture);
                            else
                                return null;
                            break;
                        case "datatype":
                            reader.Read();
                            series.DataType = reader.Value;
                            break;
                        case "valuetype":
                            reader.Read();
                            series.ValueType = reader.Value;
                            break;
                        case "samplemedium":
                            reader.Read();
                            series.SampleMedium = reader.Value;
                            break;
                        case "timeunits":
                            reader.Read();
                            series.TimeUnit = reader.Value;
                            break;
                        case "conceptkeyword":
                            reader.Read();
                            series.ConceptKeyword = reader.Value;
                            break;
                        case "gencategory":
                            reader.Read();
                            series.GeneralCategory = reader.Value;
                            break;
                        case "timesupport":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.TimeSupport = Convert.ToDouble(reader.Value, CultureInfo.InvariantCulture);
                            break;
                        case "isregular":
                            reader.Read();
                            if (!String.IsNullOrWhiteSpace(reader.Value))
                                series.IsRegular = Convert.ToBoolean(reader.Value);
                            break;
                        case "variableunits":
                            reader.Read();
                            series.VariableUnits = reader.Value;
                            break;
                    }
                }
                else if (reader.NodeType == XmlNodeType.EndElement && nodeName == "seriesrecord")
                {
                    return series;
                }
            }

            return null;
        }
示例#12
0
 /// <summary>
 /// Given a Series Data cart, creates a GetValues web request
 /// </summary>
 /// <param name="dc">the series data cart containing information about the site, variable, begin data and end date</param>
 /// <returns>the web request for getting the values</returns>
 public static HttpWebRequest CreateGetValuesRequest(SeriesDataCart dc)
 {
     return(CreateGetValuesRequest(dc.ServURL, dc.SiteCode, dc.VariableCode, dc.BeginDate, dc.EndDate));
 }