/// <summary> /// Initializes a new instance of the <see cref="GroupInformation"/> class. /// </summary> /// <param name="thisGroup"> /// The group entity /// </param> public GroupInformation(GroupEntity thisGroup) { this._thisGroup = thisGroup; }
/// <summary> /// The method is used to add a <see cref="GroupEntity"/> /// to the data structure definition list of groups /// </summary> /// <param name="group"> /// The <see cref="GroupEntity"/> /// that needs to be added /// </param> public void AddGroup(GroupEntity group) { this._groups.Add(group); }
/// <summary> /// The method populates all the <see cref="ComponentEntity">DSD components</see> /// of a <see cref="DsdEntity"/> object by the data structure definition identifier /// </summary> /// <param name="mappingStoreDb"> /// The <see cref="Database"/> instance for Mapping Store database /// </param> /// <param name="sysId"> /// The data flow with the specified system identifier /// </param> /// <param name="dsd"> /// The populated <see cref="DsdEntity"/>object containing also the /// <see cref="ComponentEntity">DSD components</see> /// </param> private static void PoulateDsdComponentsByDsdSysId(Database mappingStoreDb, long sysId, ref DsdEntity dsd) { GroupEntity group; string id; string paramId = mappingStoreDb.BuildParameterName(ParameterNameConstants.IdParameter); var sqlCommand = new StringBuilder(); sqlCommand.Append("SELECT G.GR_ID AS GR_ID, G.ID AS ID, DG.COMP_ID AS COMP_ID "); sqlCommand.Append("FROM DSD D, DSD_GROUP G, DIM_GROUP DG "); sqlCommand.AppendFormat("WHERE D.DSD_ID = G.DSD_ID AND G.GR_ID = DG.GR_ID AND D.DSD_ID = {0} ", paramId); sqlCommand.Append("ORDER BY G.GR_ID"); // used to store the groups given the dimension system id. Is used later to gather actual ComponentVO objects and set them to Group var groupsFromDim = new Dictionary<long, List<GroupEntity>>(); // holds the groups created given their group id var groupsFromId = new Dictionary<string, GroupEntity>(); using (DbCommand command = mappingStoreDb.GetSqlStringCommand(sqlCommand.ToString())) { mappingStoreDb.AddInParameter(command, ParameterNameConstants.IdParameter, DbType.Int64, sysId); using (IDataReader dataReader = mappingStoreDb.ExecuteReader(command)) { // we expect only 1 record here ? while (dataReader.Read()) { id = DataReaderHelper.GetString(dataReader, "ID"); // do we have a new group id if (!groupsFromId.ContainsKey(id)) { group = new GroupEntity(DataReaderHelper.GetInt64(dataReader, "GR_ID")) { Id = id }; dsd.AddGroup(group); groupsFromId.Add(id, group); } else { group = groupsFromId[id]; } long dimId = DataReaderHelper.GetInt64(dataReader, "COMP_ID"); List<GroupEntity> groupsList; if (!groupsFromDim.TryGetValue(dimId, out groupsList)) { groupsList = new List<GroupEntity>(); groupsFromDim.Add(dimId, groupsList); } groupsList.Add(group); } } } sqlCommand = new StringBuilder(); sqlCommand.Append("SELECT COMP.COMP_ID, COMP.ID as CID, COMP.TYPE, COMP.DSD_ID, COMP.CON_ID, COMP.CL_ID, "); sqlCommand.Append("COMP.IS_FREQ_DIM, COMP.IS_MEASURE_DIM, COMP.ATT_ASS_LEVEL, COMP.ATT_STATUS, "); sqlCommand.Append("COMP.ATT_IS_TIME_FORMAT, COMP.XS_ATTLEVEL_DS, COMP.XS_ATTLEVEL_GROUP, "); sqlCommand.Append("COMP.XS_ATTLEVEL_SECTION, COMP.XS_ATTLEVEL_OBS, COMP.XS_MEASURE_CODE, "); sqlCommand.Append("AG.GR_ID, GR.ID AS GID, MC.ID as MID "); sqlCommand.Append("FROM DSD INNER JOIN COMPONENT COMP ON DSD.DSD_ID = COMP.DSD_ID "); sqlCommand.Append("LEFT OUTER JOIN ATT_GROUP AG ON COMP.COMP_ID = AG.COMP_ID "); sqlCommand.Append("LEFT OUTER JOIN DSD_GROUP GR ON AG.GR_ID = GR.GR_ID "); sqlCommand.Append("LEFT OUTER JOIN ATT_MEASURE AM ON AM.ATT_COMP_ID = COMP.COMP_ID "); sqlCommand.Append("LEFT OUTER JOIN COMPONENT MC ON AM.MEASURE_COMP_ID = MC.COMP_ID "); sqlCommand.AppendFormat("WHERE DSD.DSD_ID = {0} ", paramId); // make sure that they are returned in the order they were inserted (proper order) sqlCommand.Append("ORDER BY COMP.COMP_ID "); // hashmap keeping components already met with key the sys id. var componentsMap = new Dictionary<long, ComponentEntity>(); using (DbCommand command = mappingStoreDb.GetSqlStringCommand(sqlCommand.ToString())) { mappingStoreDb.AddInParameter(command, ParameterNameConstants.IdParameter, DbType.Int64, sysId); using (IDataReader dataReader = mappingStoreDb.ExecuteReader(command)) { // GetOrdinal positions int compIdIdx = dataReader.GetOrdinal("COMP_ID"); int type = dataReader.GetOrdinal("TYPE"); int isFreqDim = dataReader.GetOrdinal("IS_FREQ_DIM"); int isMeasureDim = dataReader.GetOrdinal("IS_MEASURE_DIM"); int attAssLevel = dataReader.GetOrdinal("ATT_ASS_LEVEL"); int attStatus = dataReader.GetOrdinal("ATT_STATUS"); int attIsTimeFormat = dataReader.GetOrdinal("ATT_IS_TIME_FORMAT"); int crossSectionalAttachmentlevelDataSet = dataReader.GetOrdinal("XS_ATTLEVEL_DS"); int attlevelGroup = dataReader.GetOrdinal("XS_ATTLEVEL_GROUP"); int attlevelSection = dataReader.GetOrdinal("XS_ATTLEVEL_SECTION"); int attlevelObs = dataReader.GetOrdinal("XS_ATTLEVEL_OBS"); int measureCode = dataReader.GetOrdinal("XS_MEASURE_CODE"); int gid = dataReader.GetOrdinal("GID"); int cid = dataReader.GetOrdinal("CID"); int mid = dataReader.GetOrdinal("MID"); while (dataReader.Read()) { long compSysId = DataReaderHelper.GetInt64(dataReader, compIdIdx); // check if new populate ComponentEntity component; if (!componentsMap.TryGetValue(compSysId, out component)) { component = new ComponentEntity(compSysId); component.Id = DataReaderHelper.GetString(dataReader, cid); component.SetType(DataReaderHelper.GetString(dataReader, type)); component.CrossSectionalLevelDataSet = DataReaderHelper.GetBoolean( dataReader, crossSectionalAttachmentlevelDataSet); component.CrossSectionalLevelGroup = DataReaderHelper.GetBoolean(dataReader, attlevelGroup); component.CrossSectionalLevelSection = DataReaderHelper.GetBoolean( dataReader, attlevelSection); component.CrossSectionalLevelObs = DataReaderHelper.GetBoolean(dataReader, attlevelObs); component.CrossSectionalMeasureCode = DataReaderHelper.GetString(dataReader, measureCode); switch (component.ComponentType) { case SdmxComponentType.Dimension: component.FrequencyDimension = DataReaderHelper.GetBoolean(dataReader, isFreqDim); component.MeasureDimension = DataReaderHelper.GetBoolean(dataReader, isMeasureDim); dsd.Dimensions.Add(component); break; case SdmxComponentType.Attribute: component.SetAttachmentLevel(DataReaderHelper.GetString(dataReader, attAssLevel)); component.SetAssignmentStatus(DataReaderHelper.GetString(dataReader, attStatus)); component.AttTimeFormat = DataReaderHelper.GetBoolean(dataReader, attIsTimeFormat); dsd.Attributes.Add(component); break; case SdmxComponentType.TimeDimension: dsd.TimeDimension = component; break; case SdmxComponentType.PrimaryMeasure: dsd.PrimaryMeasure = component; break; case SdmxComponentType.CrossSectionalMeasure: dsd.CrossSectionalMeasures.Add(component); break; } componentsMap.Add(compSysId, component); } // populate for current groups the related assigned groups if any id = DataReaderHelper.GetString(dataReader, gid); if (!string.IsNullOrEmpty(id)) { group = groupsFromId[id]; component.AttAssignmentGroups.Add(group); } var measureId = DataReaderHelper.GetString(dataReader, mid); if (!string.IsNullOrEmpty(measureId)) { component.AttAttachmentMeasures.Add(measureId); } // if component is a dimension used in group definition, add it in their object List<GroupEntity> groupFromDim; if (groupsFromDim.TryGetValue(compSysId, out groupFromDim)) { foreach (GroupEntity groupsItem in groupFromDim) { groupsItem.Dimensions.Add(component); } } } } } foreach (var kv in componentsMap) { kv.Value.Concept = GetConceptByComponentSysId(mappingStoreDb, kv.Key); kv.Value.CodeList = GetCodeListByComponentSysId(mappingStoreDb, kv.Key); } }
/// <summary> /// The method is used to add a <see cref="GroupEntity"/> /// to the component attribute assignment groups /// </summary> /// <param name="group"> /// The <see cref="GroupEntity"/> /// that needs to be added /// </param> public void AddAttAssignmentGroups(GroupEntity group) { this._attAssignmentGroups.Add(group); }