Exemplo n.º 1
0
        /// <summary>
        /// Validates the SDMX V20.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <param name="format">
        /// The format.
        /// </param>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException">
        /// This dataflow uses SDMX v2.0 only
        ///     DataStructureDefinition.
        /// </exception>
        private static void ValidateSdmxV20(IBaseDataQuery dataQuery, BaseConstantType <BaseDataFormatEnumType> format)
        {
            if (!dataQuery.DataStructure.IsCompatible(SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo)))
            {
                // TODO check java message/error in this case
                throw new SdmxNoResultsException("This dataflow uses SDMX v2.1 only DataStructureDefinition.");
            }

            switch (format.EnumType)
            {
            case BaseDataFormatEnumType.Null:
                break;

            case BaseDataFormatEnumType.Generic:
            case BaseDataFormatEnumType.Compact:
            case BaseDataFormatEnumType.Utility:
            case BaseDataFormatEnumType.Edi:
                ValidateSdmxV20TimeSeries(dataQuery);
                break;

            case BaseDataFormatEnumType.CrossSectional:
                ValidateErrors(Validator.ValidateForCrossSectional(dataQuery.DataStructure));
                break;

            default:
                throw new SdmxSemmanticException("SDMX v2.0 Unsupported format " + format);
            }
        }
 /// <summary>
 ///     Visits the specified data query.
 /// </summary>
 /// <param name="dataQuery">The data query.</param>
 public void Visit(IBaseDataQuery dataQuery)
 {
     foreach (var visitor in this._dataQueryVisitors)
     {
         visitor.Visit(dataQuery);
     }
 }
        /// <summary>
        /// Validates the specified data query.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <exception cref="SdmxSemmanticException">
        /// Unsupported format or validation error.
        /// </exception>
        /// <exception cref="ArgumentNullException"><paramref name="dataQuery"/> is <see langword="null" />.</exception>
        public void Validate(IBaseDataQuery dataQuery)
        {
            if (dataQuery == null)
            {
                throw new ArgumentNullException("dataQuery");
            }

            switch (this._schema.EnumType)
            {
                case SdmxSchemaEnumType.Null:
                    break;
                case SdmxSchemaEnumType.VersionOne:
                    break;
                case SdmxSchemaEnumType.VersionTwo:
                    ValidateSdmxV20(dataQuery, this._format);
                    break;
                case SdmxSchemaEnumType.VersionTwoPointOne:
                    ValidateSdmxV21(dataQuery);
                    break;
                case SdmxSchemaEnumType.Edi:
                    ValidateSdmxV20TimeSeries(dataQuery);
                    break;
                case SdmxSchemaEnumType.Ecv:
                    break;
                case SdmxSchemaEnumType.Csv:
                    break;
                case SdmxSchemaEnumType.Json:
                    break;
                default:
                    throw new SdmxSemmanticException(string.Format("Unsupported format {0}", this._schema.ToEnglishString()));
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Validates the SDMX V21.
 /// </summary>
 /// <param name="query">
 /// The query.
 /// </param>
 /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException">
 /// This dataflow uses SDMX v2.0 only
 ///     DataStructureDefinition.
 /// </exception>
 private static void ValidateSdmxV21(IBaseDataQuery query)
 {
     // ReSharper restore UnusedParameter.Local
     // TODO check java message/error in this case
     if (query.DataStructure is ICrossSectionalDataStructureObject)
     {
         throw new SdmxSemmanticException("This dataflow uses SDMX v2.0 only DataStructureDefinition.");
     }
 }
        /// <summary>
        ///     Visits the specified data query.
        /// </summary>
        /// <param name="dataQuery">The data query.</param>
        public void Visit(IBaseDataQuery dataQuery)
        {
            if (dataQuery == null)
            {
                throw new ArgumentNullException("dataQuery");
            }

            this.Authorize(dataQuery.Dataflow);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Validates the specified data query.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <exception cref="SdmxSemmanticException">
        /// Unsupported format or validation error.
        /// </exception>
        public void Validate(IBaseDataQuery dataQuery)
        {
            if (dataQuery == null)
            {
                throw new ArgumentNullException("dataQuery");
            }

            switch (this._schema.EnumType)
            {
            case SdmxSchemaEnumType.Null:
                break;

            case SdmxSchemaEnumType.VersionOne:
                break;

            case SdmxSchemaEnumType.VersionTwo:
                ValidateSdmxV20(dataQuery, this._format);
                break;

            case SdmxSchemaEnumType.VersionTwoPointOne:
                ValidateSdmxV21(dataQuery);
                break;

            case SdmxSchemaEnumType.Edi:
                ValidateSdmxV20TimeSeries(dataQuery);
                break;

            case SdmxSchemaEnumType.Ecv:
                break;

            case SdmxSchemaEnumType.Csv:
                break;

            case SdmxSchemaEnumType.Json:
                break;

            default:
                throw new SdmxSemmanticException(string.Format("Unsupported format {0}", this._schema.ToEnglishString()));
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Validates a SDMX V20 <paramref name="dataQuery"/> if it is valid for Time Series data.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <exception cref="DataRetrieverException">
        /// It is not compatible with time series
        /// </exception>
        private static void ValidateSdmxV20TimeSeries(IBaseDataQuery dataQuery)
        {
            var errors = Validator.ValidateForCompact(dataQuery.DataStructure);

            ValidateErrors(errors);
        }
 /// <summary>
 /// Visits the specified data query.
 /// </summary>
 /// <param name="dataQuery">The data query.</param>
 public void Visit(IBaseDataQuery dataQuery)
 {
     this._dataflowLogManager.Log(dataQuery.Dataflow);
 }
Exemplo n.º 9
0
 /// <summary>
 /// Validates the SDMX V21.
 /// </summary>
 /// <param name="query">
 /// The query.
 /// </param>
 /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException">
 /// This dataflow uses SDMX v2.0 only
 ///     DataStructureDefinition.
 /// </exception>
 private static void ValidateSdmxV21(IBaseDataQuery query)
 {
     // ReSharper restore UnusedParameter.Local
     // TODO check java message/error in this case
     if (query.DataStructure is ICrossSectionalDataStructureObject)
     {
         throw new SdmxSemmanticException("This dataflow uses SDMX v2.0 only DataStructureDefinition.");
     }
 }
Exemplo n.º 10
0
 /// <summary>
 /// Validates a SDMX V20 <paramref name="dataQuery"/> if it is valid for Time Series data.
 /// </summary>
 /// <param name="dataQuery">
 /// The data query.
 /// </param>
 /// <exception cref="DataRetrieverException">
 /// It is not compatible with time series
 /// </exception>
 private static void ValidateSdmxV20TimeSeries(IBaseDataQuery dataQuery)
 {
     var errors = Validator.ValidateForCompact(dataQuery.DataStructure);
     ValidateErrors(errors);
 }
Exemplo n.º 11
0
        /// <summary>
        /// Validates the SDMX V20.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <param name="format">
        /// The format.
        /// </param>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException">
        /// This dataflow uses SDMX v2.0 only
        ///     DataStructureDefinition.
        /// </exception>
        private static void ValidateSdmxV20(IBaseDataQuery dataQuery, BaseConstantType<BaseDataFormatEnumType> format)
        {
            if (!dataQuery.DataStructure.IsCompatible(SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo)))
            {
                // TODO check java message/error in this case
                throw new SdmxNoResultsException("This dataflow uses SDMX v2.1 only DataStructureDefinition.");
            }

            switch (format.EnumType)
            {
                case BaseDataFormatEnumType.Null:
                    break;
                case BaseDataFormatEnumType.Generic:
                case BaseDataFormatEnumType.Compact:
                case BaseDataFormatEnumType.Utility:
                case BaseDataFormatEnumType.Edi:
                    ValidateSdmxV20TimeSeries(dataQuery);
                    break;
                case BaseDataFormatEnumType.CrossSectional:
                    ValidateErrors(Validator.ValidateForCrossSectional(dataQuery.DataStructure));
                    break;
                default:
                    throw new SdmxSemmanticException("SDMX v2.0 Unsupported format " + format);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Validates the specified data query.
        /// </summary>
        /// <param name="dataQuery">
        /// The data query.
        /// </param>
        /// <exception cref="SdmxSemmanticException">
        /// Unsupported format or validation error.
        /// </exception>
        //public void Validate(IBaseDataQuery dataQuery)
        //{
        //    if (dataQuery == null)
        //    {
        //        throw new ArgumentNullException("dataQuery");
        //    }

        //    switch (this._schema.EnumType)
        //    {
        //        case SdmxSchemaEnumType.Null:
        //            break;
        //        case SdmxSchemaEnumType.VersionOne:
        //            break;
        //        case SdmxSchemaEnumType.VersionTwo:
        //            ValidateSdmxV20(dataQuery, this._format);
        //            break;
        //        case SdmxSchemaEnumType.VersionTwoPointOne:
        //            ValidateSdmxV21(dataQuery);
        //            break;
        //        case SdmxSchemaEnumType.Edi:
        //            ValidateSdmxV20TimeSeries(dataQuery);
        //            break;
        //        case SdmxSchemaEnumType.Ecv:
        //            break;
        //        case SdmxSchemaEnumType.Csv:
        //            break;
        //        case SdmxSchemaEnumType.Json:
        //            break;
        //        default:
        //            throw new SdmxSemmanticException(string.Format("Unsupported format {0}", this._schema.ToEnglishString()));
        //    }
        //}

        public void Validate(IBaseDataQuery dataQuery)
        {
            if (dataQuery == null)
            {
                throw new ArgumentNullException("dataQuery");
            }

            ValidateSdmxV21(dataQuery);

        }
 /// <summary>
 ///     Visits the specified data query.
 /// </summary>
 /// <param name="dataQuery">The data query.</param>
 public void Visit(IBaseDataQuery dataQuery)
 {
     this._validator.Validate(dataQuery);
 }
        /// <summary>
        ///     Validates the specified data query.
        /// </summary>
        /// <param name="dataQuery">The data query.</param>
        /// <param name="dataWriter">The data writer.</param>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException">0 observations found (SDMX v2.1 behavior)</exception>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxResponseTooLargeException">Emulating default limit</exception>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxResponseSizeExceedsLimitException">Emulating server side limit</exception>
        /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxSemmanticException">Invalid component in query</exception>
        private void Validate(IBaseDataQuery dataQuery, IDataWriterEngine dataWriter)
        {
            switch (dataQuery.Dataflow.Id)
            {
                case Dataflows.NoResults:
                    if (this._sdmxSchema == SdmxSchemaEnumType.VersionTwoPointOne)
                    {
                        throw new SdmxNoResultsException("0 observations found (SDMX v2.1 behavior)");
                    }

                    break;
                case Dataflows.ResponseTooLarge:
                    WriteData(dataQuery, dataWriter);
                    throw new SdmxResponseTooLargeException("Emulating default limit");
                case Dataflows.ResponseExceedsLimit:
                    WriteData(dataQuery, dataWriter);
                    throw new SdmxResponseSizeExceedsLimitException("Emulating server side limit");
                case Dataflows.Semantic:
                    throw new SdmxSemmanticException("Invalid component in query");
            }
        }
        /// <summary>
        ///     Writes the data.
        /// </summary>
        /// <param name="dataQuery">The data query.</param>
        /// <param name="dataWriter">The data writer.</param>
        private static void WriteData(IBaseDataQuery dataQuery, IDataWriterEngine dataWriter)
        {
            if (dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.NoData || dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.Full)
            {
                if (dataQuery.Dataflow.Id.Equals("TEST_GROUPS"))
                {
                    dataWriter.StartGroup("Sibling");
                    dataWriter.WriteGroupKeyValue("REF_AREA", "LU");
                    dataWriter.WriteGroupKeyValue("ADJUSTMENT", "N");
                    dataWriter.WriteGroupKeyValue("STS_INDICATOR", "PROD");
                    dataWriter.WriteGroupKeyValue("STS_ACTIVITY", "NS0030");
                    dataWriter.WriteGroupKeyValue("STS_INSTITUTION", "1");
                    dataWriter.WriteGroupKeyValue("STS_BASE_YEAR", "2000");

                    dataWriter.WriteAttributeValue("DECIMALS", "1");
                    dataWriter.WriteAttributeValue("UNIT", "UNIT");
                }
            }

            // TODO support dimension at observation != TIME_PERIOD
            dataWriter.StartSeries();
            dataWriter.WriteSeriesKeyValue("FREQ", "M");
            dataWriter.WriteSeriesKeyValue("REF_AREA", "LU");
            dataWriter.WriteSeriesKeyValue("ADJUSTMENT", "N");
            dataWriter.WriteSeriesKeyValue("STS_INDICATOR", "PROD");
            dataWriter.WriteSeriesKeyValue("STS_ACTIVITY", "NS0030");
            dataWriter.WriteSeriesKeyValue("STS_INSTITUTION", "1");
            dataWriter.WriteSeriesKeyValue("STS_BASE_YEAR", "2000");
            if (dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.NoData || dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.Full)
            {
                dataWriter.WriteAttributeValue("TIME_FORMAT", "P1M");
            }

            var startDate = new DateTime(2010, 01, 01);
            if (dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.Full || dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.DataOnly)
            {
                int firstObsCount = 5;
                if (dataQuery.FirstNObservations.HasValue)
                {
                    firstObsCount = Math.Min(firstObsCount, dataQuery.FirstNObservations.Value);
                }

                for (int i = 0; i < firstObsCount; i++)
                {
                    dataWriter.WriteObservation(startDate.AddMonths(i), "1.0", TimeFormat.GetFromEnum(TimeFormatEnumType.Month));
                    if (dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.Full)
                    {
                        dataWriter.WriteAttributeValue("OBS_STATUS", "A");
                    }
                }

                if (dataQuery.LastNObservations.HasValue)
                {
                    int lastObsStart = Math.Max(5 - dataQuery.LastNObservations.Value, firstObsCount);

                    for (int i = lastObsStart; i < 5; i++)
                    {
                        dataWriter.WriteObservation(startDate.AddMonths(i), "1.0", TimeFormat.GetFromEnum(TimeFormatEnumType.Month));
                        if (dataQuery.DataQueryDetail.EnumType == DataQueryDetailEnumType.Full)
                        {
                            dataWriter.WriteAttributeValue("OBS_STATUS", "A");
                        }
                    }
                }
            }
        }