/// <summary> /// Sends the specified <paramref name="complexStructureQuery"/> to the Web Service defined by <see cref="_config"/> /// </summary> /// <param name="complexStructureQuery">The <see cref="IComplexStructureQuery"/></param> /// <returns>The ISdmxObjects returned by the Web Service</returns> private ISdmxObjects SendQueryStructureRequest(IComplexStructureQuery complexStructureQuery, SDMXWSFunctionV21 sdmxwsFunctionV21) { IStructureQueryFormat <XDocument> queryFormat = new ComplexQueryFormatV21(); IComplexStructureQueryFactory <XDocument> factory = new ComplexStructureQueryFactoryV21 <XDocument>(); IComplexStructureQueryBuilderManager <XDocument> complexStructureQueryBuilderManager = new ComplexStructureQueryBuilderManager <XDocument>(factory); var wdoc = complexStructureQueryBuilderManager.BuildComplexStructureQuery(complexStructureQuery, queryFormat); var doc = new XmlDocument(); doc.LoadXml(wdoc.ToString()); string tempFileName = Path.GetTempFileName(); try { this.SendRequest(doc, sdmxwsFunctionV21, tempFileName); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.Null); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return(structureObjects); } finally { //Delete the temporary file File.Delete(tempFileName); } }
/// <summary> /// Sends the specified <paramref name="request"/> to the Web Service defined by <see cref="_config"/> /// </summary> /// <param name="request"> /// The <see cref="IComplexStructureQuery"/> /// </param> /// <returns> /// The ISdmxObjects returned by the Web Service /// </returns> private ISdmxObjects SendQueryStructureRequest(string request) { string tempFileName = Path.GetTempFileName(); try { this.SendRequest(request, tempFileName, RequestType.Structure); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.Null); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return(structureObjects); } finally { // Delete the temporary file File.Delete(tempFileName); } }
/// <summary> /// Sends the specified <paramref name="references"/> to the Web Service defined by <see cref="_config"/> /// </summary> /// <param name="references">The <see cref="IStructureReference"/></param> /// <param name="resolveReferences"> /// The resolve references /// </param> /// <returns>The QueryStructureResponse returned by the Web Service</returns> public ISdmxObjects SendQueryStructureRequest(IEnumerable <IStructureReference> references, bool resolveReferences) { var queryStructureRequestBuilderManager = new QueryStructureRequestBuilderManager(); IStructureQueryFormat <XDocument> queryFormat = new QueryStructureRequestFormat(); var wdoc = queryStructureRequestBuilderManager.BuildStructureQuery(references, queryFormat, resolveReferences); var doc = new XmlDocument(); doc.LoadXml(wdoc.ToString()); string tempFileName = Path.GetTempFileName(); try { this.SendRequest(doc, SDMXWSFunction.QueryStructure, tempFileName); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.Null); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return(structureObjects); } finally { //delete the temporary file File.Delete(tempFileName); } }
private ISdmxObjects GetSdmxOBJ(string FileName) { ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.VersionTwo); string FullNamePath = Path.Combine(Utils.GetTreeCachePath(), FileName); if (!File.Exists(FullNamePath)) { return(null); } using (var dataLocation = new FileReadableDataLocation(FullNamePath)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } return(structureObjects); }
public ISdmxObjects GetDsd(string DsdId, string DsdAgency, string DsdVersion, bool resolseRef = false) { Logger.InfoFormat( CultureInfo.InvariantCulture, Resources.InfoGettingStructureFormat3, DsdAgency, DsdId, DsdVersion); System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly(); string path = System.IO.Path.GetDirectoryName(ass.CodeBase); string templateFile = Path.Combine(path, "Model\\XMLQueryTemplate\\DOTSTAT_GetDataStructureDefinition.xml"); var doc = new XmlDocument(); doc.Load(templateFile); var nodesId = doc.GetElementsByTagName("KeyFamily"); if (nodesId == null || nodesId.Count < 1) { return(null); } nodesId[0].InnerText = DsdId; var nodeAgency = doc.GetElementsByTagName("Receiver"); if (nodeAgency == null || nodeAgency.Count < 1) { return(null); } nodeAgency[0].Attributes.GetNamedItem("id").Value = DsdAgency; string tempFileName = Path.GetTempFileName(); try { this.SendRequest(doc, SDMXWSFunction.GetDataStructureDefinition, tempFileName); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(tempFileName); var codes = xmlDoc.GetElementsByTagName("Code"); for (int i = 0; i < codes.Count; i++) { var val = codes.Item(i).Attributes.GetNamedItem("value"); var par = codes.Item(i).Attributes.GetNamedItem("parentCode"); if (val != null && par != null && val.Value == par.Value) { codes.Item(i).Attributes.GetNamedItem("parentCode").Value = null; } } var time_dimensions = xmlDoc.GetElementsByTagName("TimeDimension"); time_dimensions.Item(0).Attributes.RemoveNamedItem("codelist"); xmlDoc.Save(tempFileName); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.VersionTwo); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return(structureObjects); } finally { //delete the temporary file File.Delete(tempFileName); } }
/// <summary> /// Execute SDMX Query against the NSI WS to retrieve SDMX-ML Data as a Stream /// </summary> /// <param name="query"> /// The SDMX Query to execute /// </param> /// <param name="operationName"> /// The type of operation, GetCompactData or GetCrossSectionalData /// </param> /// <param name="tempFileName"> /// The temporary file name /// </param> /// <exception cref="NsiClientException">Failute to execute query</exception> /// <returns> /// The SDMX-ML data as a stream. /// </returns> public void ExecuteQuery(IDataQuery query, SDMXWSFunction operationName, string tempFileName) { if (query == null) { throw new ArgumentNullException("query"); } try { switch (operationName) { case SDMXWSFunction.GetCompactData: { this.SendSdmxQuery(query, SDMXWSFunctionV21.GetStructureSpecificData, tempFileName); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { var sdmxFooterMessage = SdmxMessageUtilExt.ParseSdmxFooterMessage(dataLocation); if (sdmxFooterMessage != null && (sdmxFooterMessage.Code.Equals("510") || sdmxFooterMessage.Code.Equals("130"))) { var sb = new StringBuilder(); foreach (var footerText in sdmxFooterMessage.FooterText) { sb.Append(footerText.Value + " "); } string info = string.Format(CultureInfo.InvariantCulture, Resources.SdmxFooterMessage, sb, sdmxFooterMessage.Code, sdmxFooterMessage.Severity); Logger.ErrorFormat(CultureInfo.InvariantCulture, Resources.MaxObservations, info); throw new FooterMessageException(Resources.EnterMoreCriteria); } } break; } case SDMXWSFunction.GetCrossSectionalData: { _nsiClientWs.ExecuteQuery(query, operationName, tempFileName); break; } default: { Logger.Error(Resources.ExceptionExecuteQuery); throw new NsiClientException(Resources.ExceptionExecuteQuery); } } } catch (NsiClientException e) { Logger.Error(Resources.ExceptionExecuteQuery); NsiClientHelper.TryToDelete(tempFileName); Logger.Error(e.Message, e); throw; } catch (DataflowException e) { throw; } catch (FooterMessageException e) { NsiClientHelper.TryToDelete(tempFileName); throw; } catch (Exception e) { Logger.Error(Resources.ExceptionExecuteQuery); NsiClientHelper.TryToDelete(tempFileName); throw new NsiClientException(Resources.ExceptionExecuteQuery, e); } }
internal IDataSetStore GetDataset(IDataflowObject df, IDataStructureObject kf, List <DataCriteria> Criterias, ref Dictionary <string, List <DataChacheObject> > DataCache, bool useAttr) { // if it is not time series then assume it is cross SDMXWSFunction op = SDMXWSFunction.GetCompactData; bool cross = (DataObjConfiguration._TypeEndpoint == EndpointType.V21 || DataObjConfiguration._TypeEndpoint == EndpointType.REST) ? NsiClientHelper.DataflowDsdIsCrossSectional(kf) : !Utils.IsTimeSeries(kf); if (cross) { op = SDMXWSFunction.GetCrossSectionalData; } var ser = new JavaScriptSerializer(); ser.MaxJsonLength = int.MaxValue; try { //commentato vecchio codice //IGetSDMX GetSDMXObject = WebServiceSelector.GetSdmxImplementation(DataObjConfiguration); //GetSDMXObject.ExecuteQuery(CreateQueryBean(df, kf, Criterias), op, FileTmpData); /* #region Connessione e Creazione DB SQLLite * string table = Path.Combine(Utils.GetAppPath(), string.Format(CultureInfo.InvariantCulture, "{0}-{1}.sqlite", Utils.MakeKey(df).Replace("+", "_").Replace(".", ""), Guid.NewGuid())); * string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, table); * var info = new DBInfo(ConnectionString); * string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", ""); * IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, true, useAttr); #endregion * fine vecchio codice*/ //Salvo in Session /* * if (DataCache == null) * DataCache = new Dictionary<string, List<DataChacheObject>>(); * if (!DataCache.ContainsKey(Utils.MakeKey(df))) * DataCache[Utils.MakeKey(df)] = new List<DataChacheObject>(); */ //string table=null; //FABIO NEW //IDataSetStore store = FindDataCacheChart(df, kf, Criterias, ref DataCache, useAttr,out table); //if (store == null) store = GetDataset(df, kf, Criterias, ref DataCache, useAttr); #region Connessione e Creazione DB SQLLite FABIO se nullo lo istanzio // if (store == null) // { string table = null; IGetSDMX GetSDMXObject = WebServiceSelector.GetSdmxImplementation(DataObjConfiguration); GetSDMXObject.ExecuteQuery(CreateQueryBean(df, kf, Criterias), op, FileTmpData); #region Connessione e Creazione DB SQLLite table = Path.Combine(Utils.GetAppPath(), string.Format(CultureInfo.InvariantCulture, "{0}-{1}.sqlite", Utils.MakeKey(df).Replace("+", "_").Replace(".", ""), Guid.NewGuid())); string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, table); var info = new DBInfo(ConnectionString); string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", ""); IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, true, useAttr); #endregion using (var dataLocation = new FileReadableDataLocation(FileTmpData)) { switch (op) { case SDMXWSFunction.GetCompactData: var compact = new CompactDataReaderEngine(dataLocation, df, kf); var readerCompact = new SdmxDataReader(kf, store); readerCompact.ReadData(compact); break; case SDMXWSFunction.GetCrossSectionalData: var dsdCrossSectional = (ICrossSectionalDataStructureObject)kf; var crossSectional = new CrossSectionalDataReaderEngine(dataLocation, dsdCrossSectional, df); var reader = new SdmxDataReader(kf, store); reader.ReadData(crossSectional); break; default: throw new ArgumentException(Resources.ExceptionUnsupported_operation + op.ToString(), "operation"); } } // } #endregion FABIO //using (var dataLocation = new FileReadableDataLocation(FileTmpData)) //{ // switch (op) // { // case SDMXWSFunction.GetCompactData: // var compact = new CompactDataReaderEngine(dataLocation, df, kf); // var readerCompact = new SdmxDataReader(kf, store); // readerCompact.ReadData(compact); // break; // case SDMXWSFunction.GetCrossSectionalData: // var dsdCrossSectional = (ICrossSectionalDataStructureObject)kf; // var crossSectional = new CrossSectionalDataReaderEngine(dataLocation, dsdCrossSectional, df); // var reader = new SdmxDataReader(kf, store); // reader.ReadData(crossSectional); // break; // default: // throw new ArgumentException(Resources.ExceptionUnsupported_operation + op.ToString(), "operation"); // } //} /* * Dictionary<string, List<string>> Criteri = new Dictionary<string, List<string>>(); * Criterias.ForEach(c => Criteri.Add(c.component, c.values)); * DataChacheObject dco = new DataChacheObject() * { * Criterias = Criteri, * DBFileName = table, * }; * * //aggiunta da fabio * DataCache[Utils.MakeKey(df)].Clear(); * //fine aggiunta fabio * DataCache[Utils.MakeKey(df)].Add(dco); */ return(store); } catch (Exception ex) { Logger.Warn(ex.Message, ex); throw ex; } finally { //delete the temporary file if (File.Exists(FileTmpData)) { File.Delete(FileTmpData); } } }
internal IDataSetStore GetDataset(IDataflowObject df, IDataStructureObject kf, List <DataCriteria> Criterias, ref Dictionary <string, List <DataChacheObject> > DataCache, bool useAttr, SessionQuery query) { // if it is not time series then assume it is cross SDMXWSFunction op = SDMXWSFunction.GetCompactData; bool cross = (DataObjConfiguration._TypeEndpoint == EndpointType.V21 || DataObjConfiguration._TypeEndpoint == EndpointType.REST) ? NsiClientHelper.DataflowDsdIsCrossSectional(kf) : !Utils.IsTimeSeries(kf); if (cross) { op = SDMXWSFunction.GetCrossSectionalData; } var ser = new JavaScriptSerializer(); ser.MaxJsonLength = int.MaxValue; try { #region Connessione e Creazione DB SQLLite FABIO se nullo lo istanzio string table = null; IGetSDMX GetSDMXObject = (query._IGetSDMX == null) ? WebServiceSelector.GetSdmxImplementation(DataObjConfiguration) : query._IGetSDMX; GetSDMXObject.ExecuteQuery(CreateQueryBean(df, kf, Criterias), op, FileTmpData); #region Connessione e Creazione DB SQLLite table = Path.Combine(Utils.GetAppPath(), string.Format(CultureInfo.InvariantCulture, "{0}-{1}.sqlite", Utils.MakeKey(df).Replace("+", "_").Replace(".", ""), Guid.NewGuid())); string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, table); var info = new DBInfo(ConnectionString); string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", ""); IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, true, useAttr); #endregion using (var dataLocation = new FileReadableDataLocation(FileTmpData)) { switch (op) { case SDMXWSFunction.GetCompactData: var compact = new CompactDataReaderEngine(dataLocation, df, kf); var readerCompact = new SdmxDataReader(kf, store); readerCompact.ReadData(compact); break; case SDMXWSFunction.GetCrossSectionalData: var dsdCrossSectional = (ICrossSectionalDataStructureObject)kf; var crossSectional = new CrossSectionalDataReaderEngine(dataLocation, dsdCrossSectional, df); var reader = new SdmxDataReader(kf, store); reader.ReadData(crossSectional); break; default: throw new ArgumentException(Resources.ExceptionUnsupported_operation + op.ToString(), "operation"); } } #endregion FABIO return(store); } catch (Exception ex) { Logger.Warn(ex.Message, ex); throw ex; } finally { //delete the temporary file if (File.Exists(FileTmpData)) { File.Delete(FileTmpData); } } }