コード例 #1
0
        /// <summary>
        /// Retrieve annotations for the specified SDMX <paramref name="annotable"/> object
        /// </summary>
        /// <param name="sysId">The artefact primary key value.</param>
        /// <param name="annotable">The SDMX object.</param>
        public void RetrieveAnnotations(long sysId, IAnnotableMutableObject annotable)
        {
            using (var command = this._annotationCommandBuilder.Build(new PrimaryKeySqlQuery(this._annotationSqlQueryInfo, sysId)))
                using (var dataReader = this._mappingStoreDb.ExecuteReader(command))
                {
                    int annIdIdx = dataReader.GetOrdinal("ANN_ID");
                    int idIdx    = dataReader.GetOrdinal("ID");
                    int txtIdx   = dataReader.GetOrdinal("TEXT");
                    int langIdx  = dataReader.GetOrdinal("LANGUAGE");
                    int typeIdx  = dataReader.GetOrdinal("TYPE");
                    int titleIdx = dataReader.GetOrdinal("TITLE");
                    int urlIdx   = dataReader.GetOrdinal("URL");

                    IDictionary <long, IAnnotationMutableObject> annotationMap = new Dictionary <long, IAnnotationMutableObject>();

                    while (dataReader.Read())
                    {
                        var annId = dataReader.GetInt64(annIdIdx);
                        IAnnotationMutableObject annotation;
                        if (!annotationMap.TryGetValue(annId, out annotation))
                        {
                            annotation = new AnnotationMutableCore
                            {
                                Id    = DataReaderHelper.GetString(dataReader, idIdx),
                                Title = DataReaderHelper.GetString(dataReader, titleIdx),
                                Type  = DataReaderHelper.GetString(dataReader, typeIdx)
                            };
                            var url = DataReaderHelper.GetString(dataReader, urlIdx);
                            Uri uri;
                            if (!string.IsNullOrWhiteSpace(url) && Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri))
                            {
                                annotation.Uri = uri;
                            }

                            annotable.AddAnnotation(annotation);
                        }

                        var text = DataReaderHelper.GetString(dataReader, txtIdx);
                        if (!string.IsNullOrWhiteSpace(text))
                        {
                            annotation.AddText(DataReaderHelper.GetString(dataReader, langIdx), text);
                        }
                    }
                }
        }
コード例 #2
0
        /// <summary>
        /// Retrieve annotations for all specified <paramref name="annotateables"/> with parent
        /// </summary>
        /// <typeparam name="T">The sub type of <see cref="IAnnotableMutableObject"/></typeparam>
        /// <param name="parentSysId">The parent primary key value.</param>
        /// <param name="annotateables">The SDMX objects that accept annotations.</param>
        public void RetrieveAnnotations <T>(long parentSysId, IDictionary <long, T> annotateables)
            where T : IAnnotableMutableObject
        {
            using (var command = this._annotationCommandBuilder.Build(new PrimaryKeySqlQuery(this._annotationSqlQueryInfo, parentSysId)))
            {
                _log.InfoFormat(CultureInfo.InvariantCulture, "Executing query for identifiable annotations : {0}", command.CommandText);
                using (var dataReader = this._mappingStoreDb.ExecuteReader(command))
                {
                    int sysIdIdx = dataReader.GetOrdinal("SYSID");
                    int annIdIdx = dataReader.GetOrdinal("ANN_ID");
                    int idIdx    = dataReader.GetOrdinal("ID");
                    int txtIdx   = dataReader.GetOrdinal("TEXT");
                    int langIdx  = dataReader.GetOrdinal("LANGUAGE");
                    int typeIdx  = dataReader.GetOrdinal("TYPE");
                    int titleIdx = dataReader.GetOrdinal("TITLE");
                    int urlIdx   = dataReader.GetOrdinal("URL");

                    IDictionary <long, IAnnotationMutableObject> annotationMap = new Dictionary <long, IAnnotationMutableObject>();

                    while (dataReader.Read())
                    {
                        var annId = dataReader.GetInt64(annIdIdx);
                        IAnnotationMutableObject annotation;
                        if (!annotationMap.TryGetValue(annId, out annotation))
                        {
                            annotation = new AnnotationMutableCore
                            {
                                Id    = DataReaderHelper.GetString(dataReader, idIdx),
                                Title = DataReaderHelper.GetString(dataReader, titleIdx),
                                Type  = DataReaderHelper.GetString(dataReader, typeIdx)
                            };
                            var url = DataReaderHelper.GetString(dataReader, urlIdx);
                            Uri uri;
                            if (!string.IsNullOrWhiteSpace(url) && Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri))
                            {
                                annotation.Uri = uri;
                            }

                            var sysId = dataReader.GetInt64(sysIdIdx);
                            T   annotable;
                            if (annotateables.TryGetValue(sysId, out annotable))
                            {
                                annotable.AddAnnotation(annotation);
                            }
                            else
                            {
                                _log.WarnFormat(CultureInfo.InvariantCulture, "Possible bug detected while retrieving annotations. Could not find SDMX object of type ({0}) with primary key value {1}", typeof(T), sysId);
                            }
                        }

                        var text = DataReaderHelper.GetString(dataReader, txtIdx);
                        if (!string.IsNullOrWhiteSpace(text))
                        {
                            annotation.AddText(DataReaderHelper.GetString(dataReader, langIdx), text);
                        }
                    }

                    this._mappingStoreDb.CancelSafe(command);
                }
            }
        }