public static FetchClimateBatchResponce BuildBatchResult(DataSet ds) { if (IsProcessingSuccessful(ds)) // success { FetchClimateBatchResponce res = new FetchClimateBatchResponce(); if (ds.Metadata.ContainsKey(Namings.metadataNameServiceVersion)) { res.ServiceVersion = ds.Metadata[Namings.metadataNameServiceVersion].ToString(); } var activeParameter = Namings.GetParameterByName((string)ds.Metadata[Namings.metadataNameParameter]); //var activeCoverage = Namings.GetCoverageByName((string)ds.Metadata[Namings.metadataNameCoverage]); res.Values = null; double[] result = (double[])ds.Variables[Namings.VarNameResult].GetData(); double[] uncertatinty = null; string[] provenance = null; if (ds.Variables.Contains(Namings.VarNameUncertainty)) { uncertatinty = (double[])ds.Variables[Namings.VarNameUncertainty].GetData(); } else { uncertatinty = new double[result.Length]; } provenance = new string[result.Length]; ushort[] ids = null; short[] provArr = null; string[] descs = null; if (ds.Variables.Contains(Namings.VarNameResultProvenance) && ds.Variables.Contains(Namings.VarNameConfigProcDesc) && ds.Variables.Contains(Namings.VarNameConfigProcId)) { ids = (ushort[])ds.Variables[Namings.VarNameConfigProcId].GetData(); descs = (string[])ds.Variables[Namings.VarNameConfigProcDesc].GetData(); provArr = (short[])ds.Variables[Namings.VarNameResultProvenance].GetData(); for (int i = 0; i < provArr.Length; i++) { provenance[i] = descs[ids[provArr[i]]]; } } else { provArr = Enumerable.Repeat <short>(0, provenance.Length).ToArray(); } Func <double, double, ClimateParameterValue> ClimateValueConstructor = null; switch (activeParameter) { case Service.ClimateParameter.FC_TEMPERATURE: ClimateValueConstructor = (r, u) => new TemperatureValue(r, u); break; case Service.ClimateParameter.FC_PRECIPITATION: ClimateValueConstructor = (r, u) => new PrecipitationValue(r, u); break; case Service.ClimateParameter.FC_SOIL_MOISTURE: ClimateValueConstructor = (r, u) => new SoilMoistureValue(r, u); break; case Service.ClimateParameter.FC_RELATIVE_HUMIDITY: ClimateValueConstructor = (r, u) => new RelativeHumidityValue(r, u); break; case Service.ClimateParameter.FC_ELEVATION: ClimateValueConstructor = (r, u) => new ElevationValue(r, u); break; case Service.ClimateParameter.FC_DIURNAL_TEMPERATURE_RANGE: ClimateValueConstructor = (r, u) => new DiurnalTemperatureRangeValue(r, u); break; case Service.ClimateParameter.FC_FROST_DAY_FREQUENCY: ClimateValueConstructor = (r, u) => new FrostDayFrequencyValue(r, u); break; case Service.ClimateParameter.FC_WET_DAY_FREQUENCY: ClimateValueConstructor = (r, u) => new WetDayFrequencyValue(r, u); break; case Service.ClimateParameter.FC_WIND_SPEED: ClimateValueConstructor = (r, u) => new WindSpeedValue(r, u); break; case Service.ClimateParameter.FC_SUN_PERCENTAGE: ClimateValueConstructor = (r, u) => new SunPercentageValue(r, u); break; default: throw new NotSupportedException(); } res.Values = result .Zip(uncertatinty, ClimateValueConstructor) .Zip(provArr, (val, id) => { val.ProvenanceId = id; return(val); }) .Select(val => { val.ProcDesc = descs; val.ProcIds = ids; return(val); }) .Zip(provenance, (val, prov) => { val.Provenance = prov; return(val); }) .ToArray(); res.ProvenanceUsed = ds.Metadata.ContainsKey(Namings.metadataNameProvenanceUsed) && (ds.Metadata[Namings.metadataNameProvenanceUsed] != null) ? ds.Metadata[Namings.metadataNameProvenanceUsed].ToString() : "Unknown"; return(res); } else // failure { StringBuilder sb = new StringBuilder("Computation failed"); string[] mess = ds.GetData <string[]>(Namings.VarNameLogMessage); string[] types = ds.GetData <string[]>(Namings.VarNameLogMessageType); DateTime[] times = ds.GetData <DateTime[]>(Namings.VarNameLogMessageTime); for (int i = 0; i < mess.Length; i++) { sb.AppendLine().Append(String.Format("{0}({1}):{2}", times[i], types[i], mess[i])); } throw new Exception(sb.ToString()); } }
public static FetchClimateBatchResponce BuildBatchResult(DataSet ds) { if (IsProcessingSuccessful(ds)) // success { FetchClimateBatchResponce res = new FetchClimateBatchResponce(); if (ds.Metadata.ContainsKey(Namings.metadataNameServiceVersion)) res.ServiceVersion = ds.Metadata[Namings.metadataNameServiceVersion].ToString(); var activeParameter=Namings.GetParameterByName((string)ds.Metadata[Namings.metadataNameParameter]); //var activeCoverage = Namings.GetCoverageByName((string)ds.Metadata[Namings.metadataNameCoverage]); res.Values=null; double[] result = (double[])ds.Variables[Namings.VarNameResult].GetData(); double[] uncertatinty = null; string[] provenance = null; if (ds.Variables.Contains(Namings.VarNameUncertainty)) uncertatinty = (double[])ds.Variables[Namings.VarNameUncertainty].GetData(); else uncertatinty = new double[result.Length]; provenance = new string[result.Length]; ushort[] ids = null; short[] provArr = null; string[] descs = null; if (ds.Variables.Contains(Namings.VarNameResultProvenance) && ds.Variables.Contains(Namings.VarNameConfigProcDesc) && ds.Variables.Contains(Namings.VarNameConfigProcId)) { ids = (ushort[])ds.Variables[Namings.VarNameConfigProcId].GetData(); descs = (string[])ds.Variables[Namings.VarNameConfigProcDesc].GetData(); provArr = (short[])ds.Variables[Namings.VarNameResultProvenance].GetData(); for (int i = 0; i < provArr.Length; i++) provenance[i] = descs[ids[provArr[i]]]; } else { provArr=Enumerable.Repeat<short>(0, provenance.Length).ToArray(); } Func<double,double,ClimateParameterValue> ClimateValueConstructor = null; switch(activeParameter) { case Service.ClimateParameter.FC_TEMPERATURE: ClimateValueConstructor = (r, u) => new TemperatureValue(r, u); break; case Service.ClimateParameter.FC_PRECIPITATION: ClimateValueConstructor = (r, u) => new PrecipitationValue(r, u); break; case Service.ClimateParameter.FC_SOIL_MOISTURE: ClimateValueConstructor = (r, u) => new SoilMoistureValue(r, u); break; case Service.ClimateParameter.FC_RELATIVE_HUMIDITY: ClimateValueConstructor = (r, u) => new RelativeHumidityValue(r, u); break; case Service.ClimateParameter.FC_ELEVATION: ClimateValueConstructor = (r, u) => new ElevationValue(r, u); break; case Service.ClimateParameter.FC_DIURNAL_TEMPERATURE_RANGE: ClimateValueConstructor = (r, u) => new DiurnalTemperatureRangeValue(r, u); break; case Service.ClimateParameter.FC_FROST_DAY_FREQUENCY: ClimateValueConstructor = (r, u) => new FrostDayFrequencyValue(r, u); break; case Service.ClimateParameter.FC_WET_DAY_FREQUENCY: ClimateValueConstructor = (r, u) => new WetDayFrequencyValue(r, u); break; case Service.ClimateParameter.FC_WIND_SPEED: ClimateValueConstructor = (r, u) => new WindSpeedValue(r, u); break; case Service.ClimateParameter.FC_SUN_PERCENTAGE: ClimateValueConstructor = (r,u) => new SunPercentageValue(r,u); break; default: throw new NotSupportedException(); } res.Values = result .Zip(uncertatinty, ClimateValueConstructor) .Zip(provArr, (val, id) => { val.ProvenanceId = id; return val; }) .Select(val => { val.ProcDesc = descs; val.ProcIds = ids; return val; }) .Zip(provenance, (val, prov) => { val.Provenance = prov; return val; }) .ToArray(); res.ProvenanceUsed = ds.Metadata.ContainsKey(Namings.metadataNameProvenanceUsed) && (ds.Metadata[Namings.metadataNameProvenanceUsed]!=null) ? ds.Metadata[Namings.metadataNameProvenanceUsed].ToString() : "Unknown"; return res; } else // failure { StringBuilder sb = new StringBuilder("Computation failed"); string[] mess = ds.GetData<string[]>(Namings.VarNameLogMessage); string[] types = ds.GetData<string[]>(Namings.VarNameLogMessageType); DateTime[] times = ds.GetData<DateTime[]>(Namings.VarNameLogMessageTime); for (int i = 0; i < mess.Length; i++) { sb.AppendLine().Append(String.Format("{0}({1}):{2}", times[i], types[i], mess[i])); } throw new Exception(sb.ToString()); } }