コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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();
            }
        }
コード例 #7
0
        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;
                            }
                        }
                    }
                }
            }
        }
コード例 #8
0
 public AggregatedFieldMapViewModel(FieldsAggregationGroup field, WITSessionCustomSetting customSettings)
 {
     m_field = field;
 }