示例#1
0
        /// <summary>
        /// Converts the concept schemes to code lists.
        /// </summary>
        /// <param name="state">
        /// The state.
        /// </param>
        /// <param name="conceptSchemesPerMeasureDimension">
        /// The concept schemes per measure dimension.
        /// </param>
        private void ConvertConceptSchemes(DbTransactionState state, IEnumerable <KeyValuePair <long, IMaintainableRefObject> > conceptSchemesPerMeasureDimension)
        {
            var transactionalDatabase         = new Database(this._database, state.Transaction);
            var mutableObjectRetrievalManager = this.GetRetrievalManager(transactionalDatabase);
            var codelistPrimaryKeyCache       = new Dictionary <IMaintainableRefObject, ArtefactFinalStatus>();

            foreach (var keyValuePair in conceptSchemesPerMeasureDimension)
            {
                ArtefactFinalStatus artefactFinalStatus;
                if (!codelistPrimaryKeyCache.TryGetValue(keyValuePair.Value, out artefactFinalStatus))
                {
                    artefactFinalStatus = ArtefactBaseEngine.GetFinalStatus(state, new StructureReferenceImpl(keyValuePair.Value, SdmxStructureEnumType.CodeList));

                    if (artefactFinalStatus.IsEmpty)
                    {
                        var conceptScheme = mutableObjectRetrievalManager.GetMutableConceptScheme(keyValuePair.Value, false, false);
                        var codelist      = conceptScheme.ConvertToCodelist();
                        var importStatus  = this._importEngine.Insert(state, codelist.ImmutableInstance);
                        artefactFinalStatus = new ArtefactFinalStatus(importStatus.PrimaryKeyValue, true);
                    }

                    codelistPrimaryKeyCache.Add(keyValuePair.Value, artefactFinalStatus);
                }

                state.ExecuteNonQueryFormat(
                    UpdateComponentCodelist,
                    transactionalDatabase.CreateInParameter("clId", DbType.Int64, artefactFinalStatus.PrimaryKey),
                    transactionalDatabase.CreateInParameter("compId", DbType.Int64, keyValuePair.Key));
            }
        }
示例#2
0
        /// <summary>
        /// Build the error message based on the specified <paramref name="dsdStatus"/>.
        /// </summary>
        /// <param name="maintainable">
        /// The maintainable.
        /// </param>
        /// <param name="dsdStatus">
        /// The <c>DSD</c> status
        /// </param>
        /// <returns>
        /// The <see cref="ImportMessage"/>.
        /// </returns>
        private static ImportMessage BuildErrorMessage(IDataflowObject maintainable, ArtefactFinalStatus dsdStatus)
        {
            var maintainableRefObject = maintainable.DataStructureRef.MaintainableReference;
            var message = string.Format(
                CultureInfo.InvariantCulture,
                "Dataflow {0} uses the DSD:\r\n ID: {1}\r\n VERSION:{2}\r\n AGENCY: {3}\r\n which doesn't exist in the Mapping Store",
                maintainable.Id,
                maintainableRefObject.MaintainableId,
                maintainableRefObject.Version,
                maintainableRefObject.AgencyId);
            ImportMessage importMessage;
            var           structureReference = maintainable.AsReference;

            if (dsdStatus == null || dsdStatus.PrimaryKey < 1)
            {
                var doesntExistMessage = string.Format(CultureInfo.InvariantCulture, "{0} which doesn't exist in the Mapping Store", message);
                _log.Error(doesntExistMessage);
                importMessage = new ImportMessage(ImportMessageStatus.Error, structureReference, doesntExistMessage);
            }
            else
            {
                var notFinalMessage = string.Format(CultureInfo.InvariantCulture, "{0} which is not Final", message);
                _log.Error(notFinalMessage);
                importMessage = new ImportMessage(ImportMessageStatus.Error, structureReference, notFinalMessage);
            }

            return(importMessage);
        }
示例#3
0
        /// <summary>
        /// Returns the final status (id and is final value) of the specified <paramref name="reference"/>; otherwise it returns null
        /// </summary>
        /// <param name="state">
        /// The state.
        /// </param>
        /// <param name="reference">
        /// The structure reference.
        /// </param>
        /// <exception cref="ArgumentException">
        /// <paramref name="reference"/> unsupported structure
        /// </exception>
        /// <returns>
        /// The <see cref="ArtefactFinalStatus"/> of the specified <paramref name="reference"/>; otherwise it returns null.
        /// </returns>
        public static ArtefactFinalStatus GetFinalStatus(DbTransactionState state, IStructureReference reference)
        {
            if (state == null)
            {
                throw new ArgumentNullException("state");
            }

            if (reference == null)
            {
                throw new ArgumentNullException("reference");
            }

            var tableInfo = _tableInfoBuilder.Build(reference.MaintainableStructureEnumType.EnumType);

            if (tableInfo == null)
            {
                _log.WarnFormat("Unsupported structure type {0}", reference.MaintainableStructureEnumType.EnumType);
                return(ArtefactFinalStatus.Empty);
                ////throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Resources.ExceptionUnsupportedStructureReferenceFormat1, reference), "reference");
            }

            var finalQueryBuilder = new IsFinalQueryBuilder(state.Database);

            var query = finalQueryBuilder.Build(tableInfo);

            var maintainableRefObject = reference.MaintainableReference;
            var version = maintainableRefObject.SplitVersion(3);
            ArtefactFinalStatus artefactFinalStatus = ArtefactFinalStatus.Empty;

            state.ExecuteReaderFormat(
                query,
                reader =>
            {
                if (reader.Read())
                {
                    var primaryKey      = DataReaderHelper.GetInt64(reader, "primaryKey");
                    var finalStatus     = DataReaderHelper.GetBoolean(reader, "isFinal");
                    artefactFinalStatus = new ArtefactFinalStatus(primaryKey, finalStatus);
                }
            },
                state.Database.CreateInParameter("id", DbType.AnsiString, maintainableRefObject.MaintainableId),
                state.Database.CreateInParameter("agency", DbType.AnsiString, maintainableRefObject.AgencyId),
                state.Database.CreateInParameter("version1", DbType.AnsiString, version[0].ToDbValue(0)),
                state.Database.CreateInParameter("version2", DbType.AnsiString, version[1].ToDbValue(0)),
                state.Database.CreateInParameter("version3", DbType.AnsiString, version[2].ToDbValue()));

            return(artefactFinalStatus);
        }
示例#4
0
        /// <summary>
        /// Validate codelist.
        /// </summary>
        /// <param name="codelistStatus">
        /// The codelist status.
        /// </param>
        /// <param name="component">
        /// The component.
        /// </param>
        /// <exception cref="MappingStoreException">
        /// The specified <paramref name="codelistStatus"/> is not valid.
        /// </exception>
        private static void ValidateCodelist(ArtefactFinalStatus codelistStatus, IStructureReference component)
        {
            if (codelistStatus == null)
            {
                throw new ArgumentNullException("codelistStatus");
            }

            if (codelistStatus.PrimaryKey < 1)
            {
                throw new MappingStoreException(GetError("Codelist {0}, Agency {1}, Version {2} is not available. Cannot import DSD.", component));
            }

            if (!codelistStatus.IsFinal)
            {
                throw new MappingStoreException(GetError("Referenced Codelist {0}, Agency {1}, Version {2} is not Final. Cannot import DSD.", component));
            }
        }
示例#5
0
        /// <summary>
        /// Validate the specified CodeList reference.
        /// </summary>
        /// <param name="refereceStatus">
        /// The codeList status.
        /// </param>
        /// <param name="codelistRef">
        /// The CodeList reference.
        /// </param>
        /// <exception cref="MappingStoreException">
        /// The specified <paramref name="refereceStatus"/> is not valid.
        /// </exception>
        public void ValidateFinalStatus(ArtefactFinalStatus refereceStatus, IStructureReference codelistRef)
        {
            if (refereceStatus == null)
            {
                throw new ArgumentNullException("refereceStatus");
            }

            if (refereceStatus.PrimaryKey < 1)
            {
                throw new MappingStoreException(this.GetError("Reference {3} {0}, Agency {1}, Version {2} is not available. Cannot import StructureSet.", codelistRef));
            }

            if (!refereceStatus.IsFinal)
            {
                throw new MappingStoreException(this.GetError("Referenced {3} {0}, Agency {1}, Version {2} is not Final. Cannot import StructureSet.", codelistRef));
            }
        }
示例#6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ItemSchemeFinalStatus"/> class.
 /// </summary>
 /// <param name="finalStatus">
 /// The final Status.
 /// </param>
 /// <param name="itemIdMap">
 /// The item Id Map.
 /// </param>
 public ItemSchemeFinalStatus(ArtefactFinalStatus finalStatus, ItemStatusCollection itemIdMap)
 {
     this.ItemIdMap   = itemIdMap;
     this.FinalStatus = finalStatus;
 }
示例#7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ItemSchemeFinalStatus"/> class.
 /// </summary>
 /// <param name="finalStatus">
 /// The final Status.
 /// </param>
 public ItemSchemeFinalStatus(ArtefactFinalStatus finalStatus)
     : this(finalStatus, null)
 {
 }
 /// <summary>
 /// Initializes static members of the <see cref="ArtefactFinalStatus"/> class.
 /// </summary>
 static ArtefactFinalStatus()
 {
     _empty = new ArtefactFinalStatus(-1, false);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ItemSchemeFinalStatus"/> class.
 /// </summary>
 /// <param name="finalStatus">
 /// The final Status.
 /// </param>
 /// <param name="itemIdMap">
 /// The item Id Map.
 /// </param>
 public ItemSchemeFinalStatus(ArtefactFinalStatus finalStatus, ItemStatusCollection itemIdMap)
 {
     this.ItemIdMap = itemIdMap;
     this.FinalStatus = finalStatus;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ItemSchemeFinalStatus"/> class.
 /// </summary>
 /// <param name="finalStatus">
 /// The final Status.
 /// </param>
 public ItemSchemeFinalStatus(ArtefactFinalStatus finalStatus)
     : this(finalStatus, null)
 {
 }
示例#11
0
 /// <summary>
 /// Initializes static members of the <see cref="ArtefactFinalStatus"/> class.
 /// </summary>
 static ArtefactFinalStatus()
 {
     _empty = new ArtefactFinalStatus(-1, false);
 }