private bool CompareAggregatedFields(AggregatedFields newAggregatedFields, AggregatedFields currAggregatedFields) { foreach (FieldsAggregationGroup newGroup in newAggregatedFields.FieldsAggregationGroup) { var query = currAggregatedFields.FieldsAggregationGroup.Where(g => g.Format == newGroup.Format && g.MapFromSide == newGroup.MapFromSide && g.SourceField.Count == newGroup.SourceField.Count && g.TargetFieldName == newGroup.TargetFieldName); if (query.Count() == 0) { return(false); } Debug.Assert(query.Count() == 1, "query.Count() != 1"); FieldsAggregationGroup currGroup = query.First(); foreach (var sourceField in newGroup.SourceField) { var sourceFldQuery = currGroup.SourceField.Where(f => f.Index == sourceField.Index && f.SourceFieldName == sourceField.SourceFieldName && f.valueMap == sourceField.valueMap); if (sourceFldQuery.Count() == 0) { return(false); } } } return(true); }
public void SetAggregatedFieldMap(MigrationTestEnvironment env, Configuration config) { // Aggregated fields AggregatedFields aggregatedFields = new AggregatedFields(); FieldsAggregationGroup group = new FieldsAggregationGroup(); group.MapFromSide = env.GetSourceSideTypeEnum(); group.TargetFieldName = FIELD_DESCRIPTION; group.Format = AggregationFormat; SourceField f0 = new SourceField(); f0.Index = 0; f0.SourceFieldName = FIELD_TITLE; SourceField f1 = new SourceField(); f1.Index = 1; f1.SourceFieldName = "System.Rev"; group.SourceField.Add(f0); group.SourceField.Add(f1); aggregatedFields.FieldsAggregationGroup.Add(group); // construct FieldMap // Map all fields explictly using wildcard MappedField defaultField = env.NewMappedField("*", "*"); FieldMap fieldMap = new FieldMap(); fieldMap.name = "BugToBugFieldMap"; fieldMap.MappedFields.MappedField.Add(defaultField); // TODO: Create another test case for aggreated fields feature // Construct configurations with conflicting field maps //MappedField mField1 = env.NewMappedField(FIELD_TITLE,FIELD_DESCRIPTION); //MappedField mField2 = env.NewMappedField(FIELD_DESCRIPTION,FIELD_TITLE); //fieldMap.MappedFields.MappedField.Add(mField1); //fieldMap.MappedFields.MappedField.Add(mField2); fieldMap.AggregatedFields = aggregatedFields; WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement(); typeMapping.LeftWorkItemTypeName = "Bug"; typeMapping.RightWorkItemTypeName = "Bug"; typeMapping.fieldMap = fieldMap.name; WITSessionCustomSetting customSetting = new WITSessionCustomSetting(); customSetting.WorkItemTypes.WorkItemType.Add(typeMapping); customSetting.FieldMaps.FieldMap.Add(fieldMap); SetWitSessionCustomSetting(config, customSetting); }
void TestEnvironment_InsertWronglyIndexedAggrSrcField(Configuration config) { // Aggregated fields AggregatedFields aggregatedFields = new AggregatedFields(); FieldsAggregationGroup group = new FieldsAggregationGroup(); group.MapFromSide = SourceSideTypeEnum.Left; group.TargetFieldName = FIELD_DESCRIPTION; group.Format = AggregationFormat; // NOTE: both source fields are assigned with indice 10 SourceField f0 = new SourceField(); f0.Index = 10; f0.SourceFieldName = FIELD_TITLE; SourceField f1 = new SourceField(); f1.Index = 10; f1.SourceFieldName = FIELD_DESCRIPTION; group.SourceField.Add(f0); group.SourceField.Add(f1); aggregatedFields.FieldsAggregationGroup.Add(group); // construct FieldMap // Map all fields explictly using wildcard MappedField defaultField = new MappedField(); defaultField.LeftName = "*"; defaultField.RightName = "*"; defaultField.MapFromSide = SourceSideTypeEnum.Left; FieldMap fieldMap = new FieldMap(); fieldMap.name = "BugToBugFieldMap"; fieldMap.MappedFields.MappedField.Add(defaultField); fieldMap.AggregatedFields = aggregatedFields; WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement(); typeMapping.LeftWorkItemTypeName = "Bug"; typeMapping.RightWorkItemTypeName = "Bug"; typeMapping.fieldMap = fieldMap.name; WITSessionCustomSetting customSetting = new WITSessionCustomSetting(); customSetting.WorkItemTypes.WorkItemType.Add(typeMapping); customSetting.FieldMaps.FieldMap.Add(fieldMap); SetWitSessionCustomSetting(config, customSetting); }
internal void AddInvalidAggregationGroup(FieldMap fieldMap, FieldsAggregationGroup aggregationGroup) { if (!m_perFldMapInvalidAggrTargetFld.ContainsKey(fieldMap.name)) { m_perFldMapInvalidAggrTargetFld.Add(fieldMap.name, new List <string>()); } if (!m_perFldMapInvalidAggrTargetFld[fieldMap.name].Contains(aggregationGroup.TargetFieldName)) { m_perFldMapInvalidAggrTargetFld[fieldMap.name].Add(aggregationGroup.TargetFieldName); } }
private bool IsSourceFieldIndexValid(FieldsAggregationGroup aggregationGroup) { List <int> usedIndex = new List <int>(aggregationGroup.SourceField.Count); foreach (var srcFld in aggregationGroup.SourceField) { if (usedIndex.Contains(srcFld.Index)) { return(false); } usedIndex.Add(srcFld.Index); } return(true); }
private bool IsTargetFieldMapped(FieldsAggregationGroup aggregationGroup) { switch (aggregationGroup.MapFromSide) { case SourceSideTypeEnum.Left: case SourceSideTypeEnum.Right: return(IsTargetFieldMapped(aggregationGroup.MapFromSide, aggregationGroup.TargetFieldName)); case SourceSideTypeEnum.Any: return(IsTargetFieldMapped(SourceSideTypeEnum.Left, aggregationGroup.TargetFieldName) || IsTargetFieldMapped(SourceSideTypeEnum.Right, aggregationGroup.TargetFieldName)); default: throw new InvalidOperationException(); } }
protected void Initialize(string targetField, string targetWorkItemType) { // find workItemType if (m_conflictRuleViewModel.RTConflict.SourceSideMigrationSource == null) { m_conflictRuleViewModel.RTConflict.SourceSideMigrationSourceReference.Load(); } Guid migrationSourceUniqueId = m_conflictRuleViewModel.RTConflict.SourceSideMigrationSource.UniqueId; var leftSources = m_configuration.SessionGroup.Sessions.Session.Select(x => x.LeftMigrationSourceUniqueId); if (leftSources.Contains(migrationSourceUniqueId.ToString())) // conflict happens on left side { IsLeftSidedConflict = true; WorkItemTypeMappingElement workItemTypeMapping = m_session.WITCustomSetting.WorkItemTypes.WorkItemType.FirstOrDefault(x => string.Equals(x.LeftWorkItemTypeName, targetWorkItemType)); if (workItemTypeMapping != null && !string.IsNullOrEmpty(workItemTypeMapping.fieldMap)) { // try to find mappedField m_fieldMap = m_session.WITCustomSetting.FieldMaps.FieldMap.FirstOrDefault(x => string.Equals(x.name, workItemTypeMapping.fieldMap)); if (m_fieldMap != null) { m_fieldsAggregationGroup = m_fieldMap.AggregatedFields.FieldsAggregationGroup.FirstOrDefault(x => string.Equals(x.TargetFieldName, targetField) && x.MapFromSide == SourceSideTypeEnum.Right); if (m_fieldsAggregationGroup != null) { SourceField = targetField; } else { m_mappedField = m_fieldMap.MappedFields.MappedField.FirstOrDefault(x => string.Equals(x.LeftName, targetField)); if (m_mappedField != null) { SourceField = m_mappedField.RightName; } else { SourceField = targetField; } } } } } else // conflict happens on right side { IsLeftSidedConflict = false; Debug.Assert(m_configuration.SessionGroup.Sessions.Session.Select(x => x.RightMigrationSourceUniqueId).Contains(migrationSourceUniqueId.ToString())); // try to find workItemTypeMapping WorkItemTypeMappingElement workItemTypeMapping = m_session.WITCustomSetting.WorkItemTypes.WorkItemType.FirstOrDefault(x => string.Equals(x.RightWorkItemTypeName, targetWorkItemType)); if (workItemTypeMapping != null && !string.IsNullOrEmpty(workItemTypeMapping.fieldMap)) { // try to find mappedField m_fieldMap = m_session.WITCustomSetting.FieldMaps.FieldMap.FirstOrDefault(x => string.Equals(x.name, workItemTypeMapping.fieldMap)); if (m_fieldMap != null) { m_fieldsAggregationGroup = m_fieldMap.AggregatedFields.FieldsAggregationGroup.FirstOrDefault(x => string.Equals(x.TargetFieldName, targetField) && x.MapFromSide == SourceSideTypeEnum.Left); if (m_fieldsAggregationGroup != null) { SourceField = targetField; } else { m_mappedField = m_fieldMap.MappedFields.MappedField.FirstOrDefault(x => string.Equals(x.RightName, targetField)); if (m_mappedField != null) { SourceField = m_mappedField.LeftName; } else { SourceField = targetField; } } } } } }
public AggregatedFieldMapViewModel(FieldsAggregationGroup field, WITSessionCustomSetting customSettings) { m_field = field; }