/// <summary> /// Parse URL, get special tags and replace with latest available date /// Supported : /// [currentmonth] /// [previousmonth] /// [lastyearmonth] /// [currentyear] /// [lastyear] /// </summary> private void DetectPeriods() { if (!string.IsNullOrEmpty(_tableId) && (_url.Contains("Perioden") || _url.Contains("Periods")) && (_url.Contains("previousmonth") || _url.Contains("currentmonth") || _url.Contains("lastyearmonth") || _url.Contains("currentyear") || _url.Contains("lastyear"))) { // English Periods data differs from Dutch string periodUrl = _url.Contains("Periods") ? string.Format("{0}{1}/Periods?$format=json", _baseUrl, _tableId) : string.Format("{0}{1}/Perioden?$format=json", _baseUrl, _tableId); string json = GetJson(periodUrl); PropertyItems propertyItems = Deserialize <PropertyItems>(json); if ((propertyItems != null) && (propertyItems.Items != null) && (propertyItems.Items.Any())) { List <PropertyItem> searchItems = propertyItems.Items.OrderByDescending(x => x.Key).Where(p => p.Key.Contains("MM")).ToList(); if (searchItems.Any()) { string currentmonth = searchItems[0].Key; _url = _url.Replace("[currentmonth]", currentmonth); if (propertyItems.Items.Count > 1) { string previousmonth = searchItems[1].Key; _url = _url.Replace("[previousmonth]", previousmonth); } int year = Convert.ToInt32(currentmonth.Substring(0, 4)); year = year - 1; string lastyearmonth = currentmonth.Replace(currentmonth.Substring(0, 4), year.ToString()); _url = _url.Replace("[lastyearmonth]", lastyearmonth); } searchItems = propertyItems.Items.OrderByDescending(x => x.Key).Where(p => p.Key.Contains("JJ")).ToList(); if (searchItems.Any()) { _url = _url.Replace("[currentyear]", searchItems[0].Key); if (propertyItems.Items.Count > 1) { _url = _url.Replace("[previousyear]", searchItems[1].Key); } } } else { Console.WriteLine("Could not parse period table {0}", periodUrl); } } }
public SeriesTableViewModel GetTable() { if (string.IsNullOrEmpty(_tableId)) { return(null); } PropertyItems regions = null; string json = GetJson(string.Format("{0}Tables?$format=json&$filter=(Identifier%20eq%20%27{1}%27)", _catalogUrl, _tableId)); TableInfoViewModel tableInfo = Deserialize <TableInfoViewModel>(json); json = GetJson(_url); SeriesTableViewModel seriesTableViewModel = Deserialize <SeriesTableViewModel>(json); string propertiesUrl = string.Format("{0}{1}/DataProperties?$format=json", _baseUrl, _tableId); json = GetJson(propertiesUrl); DataPropertiesViewModel properties = Deserialize <DataPropertiesViewModel>(json); if ((tableInfo == null) || (properties == null) || (seriesTableViewModel == null)) { return(null); } // Parse properties var regionAvailable = properties.DataProperties.FirstOrDefault(s => s.Datatype == "GeoDimension"); if (regionAvailable != null) { string regionKey = regionAvailable.Key; json = GetJson(string.Format("{0}{1}/{2}?$format=json", _baseUrl, _tableId, regionKey)); regions = Deserialize <PropertyItems>(json); } foreach (DataColumn col in seriesTableViewModel.Data.Columns) { var propertyColumn = properties.DataProperties.FirstOrDefault(s => s.Key == col.ColumnName); if (propertyColumn != null) { col.ColumnName = string.Format("{0} {1}", propertyColumn.Title, string.IsNullOrEmpty(propertyColumn.Unit) ? string.Empty : string.Format("({0})", propertyColumn.Unit)); if (propertyColumn.Type == "TimeDimension") { foreach (DataRow row in seriesTableViewModel.Data.Rows) { string periode = row[col.ColumnName].ToString(); row[col.ColumnName] = ParsePeriod(periode); } } if ((propertyColumn.Type == "GeoDimension") && (regions != null)) { foreach (DataRow row in seriesTableViewModel.Data.Rows) { string region = row[col.ColumnName].ToString(); var regionName = regions.Items.FirstOrDefault(x => x.Key == region); if (regionName != null) { row[col.ColumnName] = regionName.Title; } } } } } if (_transpose) { seriesTableViewModel.Data = Transpose(seriesTableViewModel.Data); } if ((tableInfo.TableInfos != null) && (tableInfo.TableInfos.Any())) { seriesTableViewModel.TableInfo = tableInfo.TableInfos[0]; } seriesTableViewModel.TableId = _tableId; return(seriesTableViewModel); }