/// <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)); } }
/// <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); }
/// <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); }
/// <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)); } }
/// <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)); } }
/// <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) { }
/// <summary> /// Initializes static members of the <see cref="ArtefactFinalStatus"/> class. /// </summary> static ArtefactFinalStatus() { _empty = new ArtefactFinalStatus(-1, false); }