/// <summary> /// assists research of all Dimension (Escluded timeDimension) in DataTableMessageObject for format the SeriesKey /// </summary> /// <param name="dim">Dimension test</param> /// <returns>Return true if DataMessageObject is Valid</returns> internal bool OnlySeriesKey(DataMessageObject dim) { try { if (dim == null || dim.Val == null) { return(false); } if (dim.ColImpl.ConceptType == ConceptTypeEnum.Dimension) { if (string.IsNullOrEmpty(DimensionAtObservation) || new List <string> { "TIME_PERIOD", "ALLDIMENSIONS" }.Contains(DimensionAtObservation.Trim().ToUpper())) { if (((IDimensionConcept)dim.ColImpl).DimensionType != DimensionTypeEnum.Time) { return(true); } } else { if (dim.ColImpl.Id.Trim().ToUpper() != DimensionAtObservation.Trim().ToUpper()) { return(true); } } } return(false); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.GetSeriesKey, ex); } }
internal void SettingValues(List <DataMessageObject> dmo, SdmxJsonBaseDataWriter dataWriterEngine) { try { bool AddedDatasetAttribute = false; foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { dataWriterEngine.AddSerie(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString(), dataWriterEngine.GetKeyPosition(dataWriterEngine._dsd, seriesKey.ColImpl.ConceptObjectCode), true); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) { dataWriterEngine.AddAttribute(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString(), "Serie"); } DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject ObsVal = null; if (string.IsNullOrEmpty(DimensionAtObservation)) { DimensionAtObservation = "TIME_PERIOD"; } ObsVal = dmo.Find(dimT => dimT.ColImpl.Id.Trim().ToUpper() == DimensionAtObservation.Trim().ToUpper()); dataWriterEngine.AddObsValue(ObsVal.Val.ToString()); if (dataWriterEngine.JsonStruct.Observation.ID == null) { dataWriterEngine.JsonStruct.Observation.Role = "time"; dataWriterEngine.JsonStruct.Observation.ID = ObsVal.ColImpl.Id; } if (!AddedDatasetAttribute) { foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) { dataWriterEngine.AddAttribute(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString(), "DataSet"); } AddedDatasetAttribute = true; } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) { dataWriterEngine.AddAttribute(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString(), "Observation"); } } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteTimeSeriesData, ex); } }
/// <summary> /// Write a TimeSeries Data in FLAT format /// </summary> /// <param name="dataWriterEngine">input structure contains data</param> private void WriteFlatData(IDataWriterEngine dataWriterEngine) { try { dataWriterEngine.StartSeries(); bool AddedDatasetAttribute = false; List <DataMessageObject> dmo = _tableResponse.GetNext(); do { if (dmo == null) { break; } //Aggiungo gli Attributi di Dataset if (!AddedDatasetAttribute) { foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } AddedDatasetAttribute = true; } //OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject time = dmo.Find(dimT => dimT.ColImpl.ConceptType == ConceptTypeEnum.Dimension && ((IDimensionConcept)dimT.ColImpl).DimensionType == DimensionTypeEnum.Time); dataWriterEngine.WriteObservation(time.Val.ToString(), val.Val.ToString()); foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString()); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } dmo = _tableResponse.GetNext(); } while (dmo != null); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteFlatData, ex); } }
/// <summary> /// assists research of all Attribute with AttachmentLevel= DimensionGroup in DataTableMessageObject for format the SeriesKey /// </summary> /// <param name="att">Attribute test</param> /// <returns>Return true if DataMessageObject is Valid</returns> internal bool OnlySeriesAttribute(DataMessageObject att) { try { if (att == null || att.Val == null || att.Val.ToString() == String.Empty) { return(false); } if (att.ColImpl.ConceptType == ConceptTypeEnum.Attribute) { if (((IAttributeConcept)att.ColImpl).AttributeAttachmentLevelType == AttributeAttachmentLevel.DimensionGroup) { return(true); } } return(false); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.GetSeriesAttribute, ex); } }
/// <summary> /// assists research of all Attribute with AttachmentLevel= DataSet in DataTableMessageObject for format the DatasetDescription /// </summary> /// <param name="att">Attribute test</param> /// <returns>Return true if DataMessageObject is Valid</returns> internal bool OnlyDatasetAttribute(DataMessageObject att) { try { if (att == null || att.Val == null) { return(false); } if (att.ColImpl.ConceptType == ConceptTypeEnum.Attribute) { if (((IAttributeConcept)att.ColImpl).AttributeAttachmentLevelType == AttributeAttachmentLevel.DataSet) { return(true); } } return(false); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.GetDataSetAttribute, ex); } }
/// <summary> /// Write a TimeSeries Data /// </summary> /// <param name="dataWriterEngine">input structure contains data</param> private void WriteTimeSeriesData(IDataWriterEngine dataWriterEngine) { //TODO: MAX - FORSE E' QUESTA LA PARTE DA MODIFICARE!! try { bool AddedDatasetAttribute = false; List <DataMessageObject> dmo = _tableResponse.GetNext(); do { if (dmo == null) { break; } //Aggiungo gli Attributi di Dataset if (!AddedDatasetAttribute) { foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } AddedDatasetAttribute = true; } //SERIE if (CheckChanged(dmo)) { dataWriterEngine.StartSeries(); foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString()); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } } //OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject ObsVal = null; if (string.IsNullOrEmpty(DimensionAtObservation) || new List <string> { "TIME_PERIOD", "ALLDIMENSIONS" }.Contains(DimensionAtObservation.Trim().ToUpper())) { ObsVal = dmo.Find(dimT => dimT.ColImpl.ConceptType == ConceptTypeEnum.Dimension && ((IDimensionConcept)dimT.ColImpl).DimensionType == DimensionTypeEnum.Time); dataWriterEngine.WriteObservation(ObsVal.Val.ToString(), val.Val.ToString()); } else { ObsVal = dmo.Find(dimT => dimT.ColImpl.Id.Trim().ToUpper() == DimensionAtObservation.Trim().ToUpper()); dataWriterEngine.WriteObservation(ObsVal.ColImpl.Id, ObsVal.Val.ToString(), val.Val.ToString()); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) { if (seriesAttribute.Val.ToString() != String.Empty) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } } dmo = _tableResponse.GetNext(); } while (dmo != null); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteTimeSeriesData, ex); } }
/// <summary> /// Write a DataMessage in XmlWriter /// </summary> /// <param name="writer">Stream Destination</param> public override void WriteDataMessage(IFlyWriter writer) { try { IRDFDataWriterEngine dataWriterEngine = null; switch (MessageType) { case MessageTypeEnum.Rdf: dataWriterEngine = new RDFDataWriterEngine(writer.__SdmxXml); break; } if (dataWriterEngine == null) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, new Exception("No Type Message recognized")); } DataStructureObjectImpl dsd = _retrievalManager._dsd; // start dataset dataWriterEngine.StartDataset(dsd.Immutated.TimeDimension.Id, _retrievalManager.DataFlowID, _retrievalManager._dsd.Id); //// Aggiungo dataset Title //if (FlyConfiguration.DatasetTitle && !string.IsNullOrEmpty(this._retrievalManager.DataFlowTitle)) // dataWriterEngine.WriteAttributeValue("Title", this._retrievalManager.DataFlowTitle); //Aggiungo gli Attributi di Dataset //bool AddedDatasetAttribute = false; this.LastSeriesKey = null; List <DataMessageObject> dmo = _tableResponse.GetNext(); do { if (dmo == null) { break; } //if (!AddedDatasetAttribute) //{ // foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) // dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); // AddedDatasetAttribute = true; //} //SERIE //if (CheckChanged(dmo)) //{ List <string> Vals = new List <string>(); Vals.Add(RDFProvider.Constants.RDFConstants.RdfDataset + _retrievalManager.DataFlowID); foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { Vals.Add(seriesKey.Val.ToString()); } dataWriterEngine.StartSeries(string.Join("/", Vals), _retrievalManager.DataFlowID); foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { if (seriesKey.ColImpl.ConceptDSDInfo != null) { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString(), seriesKey.ColImpl.ConceptDSDInfo.CodelistVersion, seriesKey.ColImpl.ConceptDSDInfo.CodelistId); } else { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString(), FlyConfiguration.Version, string.Format("CL_{0}", seriesKey.ColImpl.ConceptObjectCode)); } } //foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) // dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); //} //OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject time = dmo.Find(dimT => dimT.ColImpl.ConceptType == ConceptTypeEnum.Dimension && ((IDimensionConcept)dimT.ColImpl).DimensionType == DimensionTypeEnum.Time); dataWriterEngine.RDFWriteObservation(time.ColImpl.ConceptObjectCode, time.Val.ToString(), val.Val.ToString()); //foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) // dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); dmo = _tableResponse.GetNext(); } while (dmo != null); dataWriterEngine.Close(); writer.__SdmxXml.Flush(); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteDataMessage, ex); } }
/// <summary> /// Write a DataMessage in XmlWriter /// </summary> /// <param name="writer">Stream Destination</param> public override void WriteDataMessage(IFlyWriter writer) { try { using (TextWriter tw = new StreamWriter(new MemoryStream())) { DsplTextWriter dsplTextWriter = new DsplTextWriter(tw); IDsplDataWriterEngine dataWriterEngine = null; switch (MessageType) { case MessageTypeEnum.Dspl: dataWriterEngine = new DsplBaseDataWriter(dsplTextWriter); break; } try { if (dataWriterEngine == null) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, new Exception("No Type Message recognized")); } DataStructureObjectImpl dsd = _retrievalManager._dsd; IHeader header = FlyConfiguration.HeaderSettings.GetHeader(); dataWriterEngine.WriteHeader(header); // start dataset dataWriterEngine.SetDsdOrder(dsd.Immutated); dataWriterEngine.StartDataset(_retrievalManager.GetDataflowFromSdmxObject(), dsd.Immutated, new DsplBaseDataWriter.RetreiveCodelistDelegate(GetCodelist)); dataWriterEngine.StartSeries(null); List <DataMessageObject> dmo = _tableResponse.GetNext(); do { if (dmo == null) { break; } foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString()); } //OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject time = dmo.Find(dimT => dimT.ColImpl.ConceptType == ConceptTypeEnum.Dimension && ((IDimensionConcept)dimT.ColImpl).DimensionType == DimensionTypeEnum.Time); dataWriterEngine.WriteObservation(time.Val.ToString(), val.Val.ToString()); dmo = _tableResponse.GetNext(); } while (dmo != null); dataWriterEngine.CloseAndZip(writer.__DsplJSONTextWriter); writer.__DsplJSONTextWriter.Flush(); } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteFlatData, ex); } finally { dataWriterEngine.ClearTempFolder(); } } } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteDataMessage, ex); } }
public void WriteAttributes(DataMessageObject attributes) { var value = this.GetAttValPosition(attributes.ColId.ToString(), attributes.Val.ToString()); WriteAttributeValue(attributes.ColId.ToString(), value); }
/// <summary> /// Write a TimeSeries Data /// </summary> /// <param name="dataWriterEngine">input structure contains data</param> private void WriteTimeSeriesData(SdmxJsonBaseDataWriter dataWriterEngine) { try { bool AddedDatasetAttribute = false; List <DataMessageObject> dmo = _tableResponse.GetNext(); do { if (dmo == null) { break; } SettingValues(dmo, dataWriterEngine); if (!AddedDatasetAttribute) { dataWriterEngine.StartElement("attributes", false); foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) { dataWriterEngine.WriteAttributes(seriesAttribute); } AddedDatasetAttribute = true; dataWriterEngine.CloseArray(); dataWriterEngine.StartSeries(); } //SERIE if (CheckChanged(dmo)) { if (dataWriterEngine.StartedObservations) { dataWriterEngine.CloseObject(); dataWriterEngine.CloseObject(); dataWriterEngine._startedObservations = false; } dataWriterEngine.WriteSeriesKey(dmo); // write series attributes dataWriterEngine.StartElement("attributes", false); foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) { dataWriterEngine.WriteAttributes(seriesAttribute); } dataWriterEngine.CloseArray(); if (!dataWriterEngine._startedObservations) { dataWriterEngine.StartElement("observations", true); dataWriterEngine._startedObservations = true; } } ////OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject ObsVal = null; ObsVal = dmo.Find(dimT => dimT.ColImpl.Id.Trim().ToUpper() == DimensionAtObservation.Trim().ToUpper()); dataWriterEngine.WriteObservation(dataWriterEngine.GetObsValPosition(ObsVal.Val.ToString()), val.Val.ToString()); //Write Observation Attributes foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) { dataWriterEngine.WriteAttributes(seriesAttribute); } dataWriterEngine.CloseArray(); dmo = _tableResponse.GetNext(); } while (dmo != null); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteTimeSeriesData, ex); } }
/// <summary> /// Write a DataMessage in XmlWriter /// </summary> /// <param name="writer">Stream Destination</param> public override void WriteDataMessage(IFlyWriter writer) { try { IDataWriterEngine dataWriterEngine = null; switch (MessageType) { case MessageTypeEnum.Compact_20: dataWriterEngine = new CompactDataWriterEngine(writer.__SdmxXml, SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo)); break; case MessageTypeEnum.Generic_20: dataWriterEngine = new GenericDataWriterEngine(writer.__SdmxXml, SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo)); break; case MessageTypeEnum.CrossSectional_20: break; } if (dataWriterEngine == null) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.InternalError, new Exception("No Type Message recognized")); } // write header dataWriterEngine.WriteHeader(FlyConfiguration.HeaderSettings.GetHeader()); // start dataset DataStructureObjectImpl dsd = _retrievalManager._dsd; dataWriterEngine.StartDataset(null, dsd.Immutated, null); // Aggiungo dataset Title if (FlyConfiguration.DatasetTitle && !string.IsNullOrEmpty(this._retrievalManager.DataFlowTitle)) { dataWriterEngine.WriteAttributeValue("Title", this._retrievalManager.DataFlowTitle); } this.LastSeriesKey = null; List <DataMessageObject> dmo = _tableResponse.GetNext(); if (dmo != null) { //Aggiungo gli Attributi di Dataset foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyDatasetAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } //GROUPS if (_retrievalManager.Groups != null && _retrievalManager.Groups.Count > 0) { foreach (DataGroupObject group in _retrievalManager.Groups) { dataWriterEngine.StartGroup(group.GroupId); foreach (GroupReferenceObject GroupKey in group.DimensionReferences) { dataWriterEngine.WriteGroupKeyValue(GroupKey.ConceptCode, GroupKey.ConceptValue.ToString()); } foreach (GroupReferenceObject GroupAttribute in group.AttributeReferences) { dataWriterEngine.WriteAttributeValue(GroupAttribute.ConceptCode, GroupAttribute.ConceptValue.ToString()); } } } do { if (dmo == null) { break; } //SERIE if (CheckChanged(dmo)) { dataWriterEngine.StartSeries(); foreach (DataMessageObject seriesKey in dmo.FindAll(dim => OnlySeriesKey(dim))) { dataWriterEngine.WriteSeriesKeyValue(seriesKey.ColImpl.ConceptObjectCode, seriesKey.Val.ToString()); } foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlySeriesAttribute(att))) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } } //OBSERVATION DataMessageObject val = dmo.Find(dimV => dimV.ColImpl.ConceptType == ConceptTypeEnum.Attribute && ((IAttributeConcept)dimV.ColImpl).IsValueAttribute); DataMessageObject time = dmo.Find(dimT => dimT.ColImpl.ConceptType == ConceptTypeEnum.Dimension && ((IDimensionConcept)dimT.ColImpl).DimensionType == DimensionTypeEnum.Time); dataWriterEngine.WriteObservation(time.Val.ToString(), val.Val.ToString()); foreach (DataMessageObject seriesAttribute in dmo.FindAll(att => OnlyObservationAttribute(att))) { if (seriesAttribute.Val.ToString() != String.Empty) { dataWriterEngine.WriteAttributeValue(seriesAttribute.ColImpl.ConceptObjectCode, seriesAttribute.Val.ToString()); } } dmo = _tableResponse.GetNext(); } while (dmo != null); } dataWriterEngine.Close(); writer.__SdmxXml.Flush(); } catch (SdmxException) { throw; } catch (Exception ex) { throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.ErrorWriteDataMessage, ex); } }