示例#1
0
        void TestEnvironment_InsertTwoFieldMapToSameTargetInMappedField(MigrationTestEnvironment env, Configuration config)
        {
            // Map field
            MappedField mField1 = env.NewMappedField(FIELD_PRIORITY, FIELD_PRIORITY);

            mField1.valueMap = string.Empty; // set value map name to be empty string

            // Map to SAME field again
            MappedField defaultField = env.NewMappedField(FIELD_AREA_PATH, FIELD_PRIORITY);

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#2
0
        public WorkItemTypeViewModel(WorkItemTypeMappingElement workItemType, WITSessionCustomSetting customSettings)
        {
            m_workItemType = workItemType;
            FieldMap fieldMap = customSettings.FieldMaps.FieldMap.FirstOrDefault(x => string.Equals(x.name, m_workItemType.fieldMap));

            if (fieldMap != null)
            {
                foreach (FieldsAggregationGroup aggregatedField in fieldMap.AggregatedFields.FieldsAggregationGroup)
                {
                    FieldMapViewModelBase fieldMapViewModel = FieldMapViewModelFactory.CreateInstance(aggregatedField, customSettings);
                    if (fieldMapViewModel != null)
                    {
                        m_fieldMaps.Add(fieldMapViewModel);
                    }
                }
                foreach (MappedField mappedField in fieldMap.MappedFields.MappedField)
                {
                    FieldMapViewModelBase fieldMapViewModel = FieldMapViewModelFactory.CreateInstance(mappedField, customSettings);
                    if (fieldMapViewModel != null)
                    {
                        m_fieldMaps.Add(fieldMapViewModel);
                    }
                }
            }
        }
示例#3
0
        public void SetMissingStateReasonFieldMap(MigrationTestEnvironment env, Configuration config)
        {
            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";

            MappedField mField1 = env.NewMappedField(CoreFieldReferenceNames.State, CoreFieldReferenceNames.Title);

            MappedField mField2 = env.NewMappedField(CoreFieldReferenceNames.Reason, CoreFieldReferenceNames.Description);

            fieldMap.MappedFields.MappedField.Add(mField1);
            fieldMap.MappedFields.MappedField.Add(mField2);

            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
        private void TestEnvironment_FieldMapToEmpty(MigrationTestEnvironment env, Configuration config)
        {
            // Map field
            MappedField mField1 = env.NewMappedField(FIELD_PRIORITY, String.Empty);

            mField1.valueMap = string.Empty; // set value map name to be empty string

            // Map the rest of the fields using wild card
            MappedField defaultField = env.NewMappedField("*", "*");

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#5
0
        private void SetFieldMap_NoWildCardMap(Configuration config)
        {
            // Map Description to an invalide field
            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_DESCRIPTION;
            mField1.RightName   = FIELD_DESCRIPTION;
            mField1.MapFromSide = SourceSideTypeEnum.Left;

            // The field map does not have a wild card mapping like below:
            // Map the rest of the fields using wild card
            //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.MappedFields.MappedField.Add(mField1);

            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);
        }
示例#6
0
        public void SetMissingStateReasonFieldMap(Configuration config)
        {
            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";

            MappedField mField1 = new MappedField();

            mField1.LeftName    = CoreFieldReferenceNames.State;
            mField1.RightName   = CoreFieldReferenceNames.Title;
            mField1.MapFromSide = SourceSideTypeEnum.Left;

            MappedField mField2 = new MappedField();

            mField2.LeftName    = CoreFieldReferenceNames.Reason;
            mField2.RightName   = CoreFieldReferenceNames.Description;
            mField2.MapFromSide = SourceSideTypeEnum.Left;

            fieldMap.MappedFields.MappedField.Add(mField1);
            fieldMap.MappedFields.MappedField.Add(mField2);

            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);
        }
示例#7
0
        public void SetExcludePriorityFieldMap(MigrationTestEnvironment env, Configuration config)
        {
            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";

            MappedField mField1 = env.NewMappedField(FIELD_TITLE, FIELD_TITLE);

            mField1.MapFromSide = env.GetSourceSideTypeEnum();

            MappedField mField2 = env.NewMappedField(FIELD_DESCRIPTION, String.Empty);

            mField2.MapFromSide = env.GetSourceSideTypeEnum();

            fieldMap.MappedFields.MappedField.Add(mField1);
            fieldMap.MappedFields.MappedField.Add(mField2);

            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);
        }
示例#8
0
        public void SetExcludePriorityFieldMap(Configuration config)
        {
            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";

            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_TITLE;
            mField1.RightName   = FIELD_TITLE;
            mField1.MapFromSide = SourceSideTypeEnum.Left;

            MappedField mField2 = new MappedField();

            mField2.LeftName    = FIELD_DESCRIPTION;
            mField2.RightName   = string.Empty;
            mField2.MapFromSide = SourceSideTypeEnum.Left;

            fieldMap.MappedFields.MappedField.Add(mField1);
            fieldMap.MappedFields.MappedField.Add(mField2);

            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);
        }
示例#9
0
        private void SetFieldMap_NoWildCardMap(MigrationTestEnvironment env, Configuration config)
        {
            // Map Description to an invalide field
            MappedField mField1 = env.NewMappedField(FIELD_DESCRIPTION, FIELD_DESCRIPTION);

            // The field map does not have a wild card mapping like below:
            // Map the rest of the fields using wild card
            //MappedField defaultField = env.NewMappedField("*","*");

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            //fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            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);
        }
示例#10
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);
        }
示例#11
0
        public void SetConditionalWildcardPriorityValueMap(Configuration config)
        {
            // Map P2 to P1
            Value v1 = new Value();

            v1.LeftValue  = "2";
            v1.RightValue = "1";
            ValueMap vMap = new ValueMap();

            vMap.name = "PriorityValueMap";
            vMap.Value.Add(v1);

            Value v2 = new Value();

            v2.LeftValue  = "*";
            v2.RightValue = "3";
            v2.When.ConditionalSrcFieldName  = "System.Description";
            v2.When.ConditionalSrcFieldValue = ConditionalValueMapDescription;
            vMap.Value.Add(v2);

            // Map field
            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_PRIORITY;
            mField1.RightName   = FIELD_PRIORITY;
            mField1.MapFromSide = SourceSideTypeEnum.Left;
            mField1.valueMap    = vMap.name;

            // Map the rest of the fields using wild card
            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.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#12
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);
        }
示例#13
0
        public void SetConditionalHybridPriorityValueMap(MigrationTestEnvironment env, Configuration config)
        {
            // Map P2 to P1
            Value v1 = env.NewValue("2", "1");

            Value v2 = env.NewValue("*", "1");

            v2.When.ConditionalSrcFieldName  = "System.Description";
            v2.When.ConditionalSrcFieldValue = ConditionalValueMapDescription;

            Value v3 = env.NewValue("2", "3");

            v3.When.ConditionalSrcFieldName  = "System.Description";
            v3.When.ConditionalSrcFieldValue = ConditionalValueMapDescription;

            ValueMap vMap = new ValueMap();

            vMap.name = "PriorityValueMap";
            vMap.Value.Add(v1);
            vMap.Value.Add(v2);
            vMap.Value.Add(v3);

            // Map field
            MappedField mField1 = env.NewMappedField(FIELD_PRIORITY, FIELD_PRIORITY);

            mField1.valueMap = vMap.name;

            // Map the rest of the fields using wild card
            MappedField defaultField = env.NewMappedField("*", "*");

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#14
0
        public void SetUserValueMap(Configuration config)
        {
            // User Map
            Value v1 = new Value();

            v1.LeftValue  = SourceUser;
            v1.RightValue = TargetUser;
            ValueMap vMap = new ValueMap();

            vMap.name = "UserMap";
            vMap.Value.Add(v1);

            // Map field
            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_ASSIGNEDTO;
            mField1.RightName   = FIELD_ASSIGNEDTO;
            mField1.MapFromSide = SourceSideTypeEnum.Left;
            mField1.valueMap    = vMap.name;

            // Map the rest of the fields using wild card
            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.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#15
0
        private void SetInvalidFieldValueMap(Configuration config)
        {
            ValueMap vMap = new ValueMap();

            vMap.name = "PriorityValues";
            var value = new Value();

            value.LeftValue  = "*";
            value.RightValue = "10000";
            vMap.Value.Add(value);

            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_PRIORITY;
            mField1.RightName   = FIELD_PRIORITY;
            mField1.MapFromSide = SourceSideTypeEnum.Left;
            mField1.valueMap    = "PriorityValues";

            // Map the rest of the fields using wild card
            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.MappedFields.MappedField.Add(mField1);

            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);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#16
0
        public void SetUserValueMap(MigrationTestEnvironment env, Configuration config)
        {
            // User Map
            Value v1 = env.NewValue(SourceUser, TargetUser);

            ValueMap vMap = new ValueMap();

            vMap.name = "UserMap";
            vMap.Value.Add(v1);

            // Map field
            MappedField mField1 = env.NewMappedField(FIELD_ASSIGNEDTO, FIELD_ASSIGNEDTO);

            mField1.valueMap = vMap.name;

            // Map the rest of the fields using wild card
            MappedField defaultField = env.NewMappedField("*", "*");

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#17
0
        private void SetEmptyValueMapNameInFieldMap(Configuration config)
        {
            // Map field
            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_PRIORITY;
            mField1.RightName   = FIELD_PRIORITY;
            mField1.MapFromSide = SourceSideTypeEnum.Left;
            mField1.valueMap    = string.Empty; // set value map name to be empty string

            // Map the rest of the fields using wild card
            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.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#18
0
        void TestEnvironment_InsertTwoFieldMapFromSameSourceInMappedField(Configuration config)
        {
            // Map field
            MappedField mField1 = new MappedField();

            mField1.LeftName    = FIELD_PRIORITY;
            mField1.RightName   = FIELD_PRIORITY;
            mField1.MapFromSide = SourceSideTypeEnum.Left;
            mField1.valueMap    = string.Empty; // set value map name to be empty string

            // Map to SAME field again
            MappedField defaultField = new MappedField();

            defaultField.LeftName    = FIELD_PRIORITY;
            defaultField.RightName   = FIELD_AREA_PATH;
            defaultField.MapFromSide = SourceSideTypeEnum.Left;

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#19
0
        private void SetInvalidFieldValueMap(MigrationTestEnvironment env, Configuration config)
        {
            ValueMap vMap = new ValueMap();

            vMap.name = "PriorityValues";
            var value = env.NewValue("*", "10000");

            vMap.Value.Add(value);

            MappedField mField1 = env.NewMappedField(FIELD_PRIORITY, FIELD_PRIORITY);

            mField1.valueMap = "PriorityValues";

            // Map the rest of the fields using wild card
            MappedField defaultField = env.NewMappedField("*", "*");

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            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);
            customSetting.ValueMaps.ValueMap.Add(vMap);

            SetWitSessionCustomSetting(config, customSetting);
        }
        public void MapWorkItemTypeFieldValues(string itemId, XmlDocument workItemDescriptionDocument, Guid sourceId)
        {
            XmlDocument copy = new XmlDocument();

            copy.LoadXml(workItemDescriptionDocument.OuterXml);

            XmlElement rootNode = workItemDescriptionDocument.DocumentElement;

            if (null == rootNode)
            {
                throw new MigrationException(MigrationToolkitResources.InvalideChangeActionDescription, itemId);
            }

            bool isLeft = DecideSidenessInConfig(sourceId, m_session);
            SourceSideTypeEnum sourceSide = isLeft ? SourceSideTypeEnum.Left : SourceSideTypeEnum.Right;

            MapOwnerUserId(rootNode, sourceSide);

            #region Map work item type

            string sourceWorkItemType = rootNode.Attributes["WorkItemType"].Value;
            WorkItemTypeMappingElement typeMapEntry =
                m_session.WITCustomSetting.WorkItemTypes.GetMappingEntry(sourceSide, sourceWorkItemType);

            if (null == typeMapEntry)
            {
                throw new UnmappedWorkItemTypeException(sourceWorkItemType);
            }

            string targetWorkItemType = m_session.WITCustomSetting.WorkItemTypes.GetMappedType(
                sourceSide,
                sourceWorkItemType,
                typeMapEntry);

            rootNode.SetAttribute("WorkItemType", targetWorkItemType);

            #endregion

            if (null == typeMapEntry || /* backward compatibility */
                string.IsNullOrEmpty(typeMapEntry.fieldMap) || /* backward compatibility */
                typeMapEntry.fieldMap.Equals(WitMappingConfigVocab.All, StringComparison.OrdinalIgnoreCase))
            {
                XmlNode columnsNode = rootNode.SelectSingleNode("/WorkItemChanges/Columns");
                if (null == columnsNode)
                {
                    throw new MigrationException(MigrationToolkitResources.InvalideChangeActionDescription, itemId);
                }
                XmlNodeList columns = rootNode.SelectNodes("/WorkItemChanges/Columns/Column");
                if (null == columns)
                {
                    throw new MigrationException(MigrationToolkitResources.InvalideChangeActionDescription, itemId);
                }

                List <XmlNode> fieldsToExclude = new List <XmlNode>();
                foreach (XmlNode fieldColumn in columnsNode)
                {
                    if (IsSkippingField(fieldColumn))
                    {
                        fieldsToExclude.Add(fieldColumn);
                    }
                }

                foreach (XmlNode excludedField in fieldsToExclude)
                {
                    excludedField.ParentNode.RemoveChild(excludedField);
                }
                fieldsToExclude.Clear();
            }
            else
            {
                #region look up the field map entry to use

                FieldMap fieldMapEntry = null;
                foreach (FieldMap fieldMap in m_session.WITCustomSetting.FieldMaps.FieldMap)
                {
                    if (fieldMap.name == typeMapEntry.fieldMap)
                    {
                        fieldMapEntry = fieldMap;
                        break;
                    }
                }

                #endregion

                #region Map field and value

                if (null != fieldMapEntry)
                {
                    XmlNode columnsNode = rootNode.SelectSingleNode("/WorkItemChanges/Columns");
                    if (null == columnsNode)
                    {
                        throw new MigrationException(MigrationToolkitResources.InvalideChangeActionDescription, itemId);
                    }

                    #region map aggregated fields
                    List <string> aggregatedFields = new List <string>(); // store the aggregated fields so that we won't delete them later
                    if (fieldMapEntry.AggregatedFields.FieldsAggregationGroup.Count() > 0)
                    {
                        foreach (var fieldsGroup in fieldMapEntry.AggregatedFields.FieldsAggregationGroup)
                        {
                            if (fieldsGroup.MapFromSide != sourceSide || fieldsGroup.SourceField.Count == 0)
                            {
                                continue;
                            }

                            bool canUseMappingConfig = true;

                            // apply value map to the aggregated fields and identify the field columns
                            // Note:
                            // 1. Aggregated fields may appear in normal field maps
                            // 2. If an aggregated field does not appear in normal field map,
                            //    the field will be dropped after the translation
                            // 3. If a field appear in both aggregated and normal field mapping,
                            //    it may use different value maps
                            foreach (SourceField srcField in fieldsGroup.SourceField)
                            {
                                XmlNode srcFieldCol = rootNode.SelectSingleNode(
                                    string.Format("/WorkItemChanges/Columns/Column[@ReferenceName='{0}']", srcField.SourceFieldName));

                                if (null != srcFieldCol)
                                {
                                    // map field value and cache the result
                                    srcField.FieldColumnNode = srcFieldCol;

                                    string mappedValue;
                                    if (GetMappedFieldValue(sourceSide, srcFieldCol.FirstChild.InnerText, srcField.valueMap, copy.DocumentElement, out mappedValue))
                                    {
                                        srcField.MappedValue = mappedValue;
                                    }
                                    else
                                    {
                                        srcField.MappedValue = srcFieldCol.FirstChild.InnerText;
                                    }
                                }
                                else
                                {
                                    // one of the aggregated field is not present in the WIT description document
                                    TraceManager.TraceInformation(
                                        "Aggregating field '{0}' is not in the WIT update document of Change Action {1}'",
                                        srcField.SourceFieldName,
                                        itemId);

                                    canUseMappingConfig = false;
                                    break;
                                }
                            }

                            if (!canUseMappingConfig)
                            {
                                continue;
                            }

                            string[] srcFieldValues = new string[fieldsGroup.SourceField.Count];
                            foreach (SourceField srcField in fieldsGroup.SourceField)
                            {
                                if (srcField.Index >= 0 && srcField.Index < srcFieldValues.Length)
                                {
                                    srcFieldValues[srcField.Index] = srcField.MappedValue ?? string.Empty;
                                }
                                else
                                {
                                    TraceManager.TraceError(
                                        "Source aggregation field '{0}' has a wrong index of '{1}' in the configuration.",
                                        srcField.SourceFieldName ?? string.Empty, srcField.Index.ToString());
                                }
                            }

                            for (int i = 0; i < srcFieldValues.Length; ++i)
                            {
                                if (srcFieldValues[i] == null)
                                {
                                    TraceManager.TraceError(
                                        "Aggregated field format '{0}' has NULL value at index '{1}'.",
                                        fieldsGroup.Format, i.ToString());
                                    canUseMappingConfig = false;
                                }
                            }

                            if (!canUseMappingConfig)
                            {
                                continue;
                            }

                            try
                            {
                                string aggregatedFieldName  = fieldsGroup.TargetFieldName;
                                string aggregatedFieldValue = string.Format(
                                    System.Globalization.CultureInfo.InvariantCulture,
                                    fieldsGroup.Format, srcFieldValues);

                                // first, try looking for the field in the document (the field may exist on source side
                                // and included in the delta document)
                                XmlNode aggregatedFieldInDoc = rootNode.SelectSingleNode(
                                    string.Format("/WorkItemChanges/Columns/Column[@ReferenceName='{0}']", aggregatedFieldName));

                                if (null == aggregatedFieldInDoc)
                                {
                                    XmlElement aggregatedFieldCol = columnsNode.OwnerDocument.CreateElement("Column");
                                    aggregatedFieldCol.SetAttribute("ReferenceName", aggregatedFieldName);
                                    aggregatedFieldCol.SetAttribute("Type", string.Empty);
                                    aggregatedFieldCol.SetAttribute("DisplayName", string.Empty);
                                    columnsNode.AppendChild(aggregatedFieldCol);
                                    XmlElement v = columnsNode.OwnerDocument.CreateElement("Value");
                                    v.InnerText = aggregatedFieldValue;
                                    aggregatedFieldCol.AppendChild(v);
                                }
                                else
                                {
                                    aggregatedFieldInDoc.FirstChild.InnerText = aggregatedFieldValue;
                                }

                                aggregatedFields.Add(aggregatedFieldName);
                            }
                            catch (System.FormatException formatException)
                            {
                                TraceManager.TraceException(formatException);
                            }
                        }
                    }
                    #endregion

                    // map field and values
                    XmlNodeList columns = rootNode.SelectNodes("/WorkItemChanges/Columns/Column");
                    if (null == columns)
                    {
                        throw new MigrationException(MigrationToolkitResources.InvalideChangeActionDescription, itemId);
                    }

                    List <XmlNode> fieldsToExclude = new List <XmlNode>();
                    foreach (XmlNode fieldColumn in columns)
                    {
                        string srcFieldRefName = fieldColumn.Attributes["ReferenceName"].Value;
                        string srcFieldValue   = fieldColumn.FirstChild.InnerText;

                        MappedField mappedFieldEntry = fieldMapEntry.MappedFields.GetMappedFieldEntry(
                            sourceSide, srcFieldRefName);
                        if (null == mappedFieldEntry)
                        {
                            if (!aggregatedFields.Contains(srcFieldRefName, StringComparer.OrdinalIgnoreCase))
                            {
                                // record the unmapped fields and delete them after the field/value mapping is applied
                                // aggregated fields are added by us and are target-specific - they shouldn't be deleted
                                fieldsToExclude.Add(fieldColumn);
                            }
                            continue;
                        }
                        else
                        {
                            string mapFromField = (isLeft ? mappedFieldEntry.LeftName : mappedFieldEntry.RightName);
                            if (mapFromField.Equals(WitMappingConfigVocab.Any, StringComparison.OrdinalIgnoreCase))
                            {
                                if (IsSkippingField(fieldColumn))
                                {
                                    fieldsToExclude.Add(fieldColumn);
                                }
                            }
                        }

                        string tgtFieldRefName = fieldMapEntry.MappedFields.GetMappedFieldName(sourceSide, srcFieldRefName, mappedFieldEntry);
                        if (string.IsNullOrEmpty(tgtFieldRefName))
                        {
                            // record the fields that are mapped to "", semantically the field is excluded on target side
                            fieldsToExclude.Add(fieldColumn);
                            continue;
                        }

                        MapFieldValue(fieldMapEntry, sourceSide, fieldColumn, srcFieldRefName, tgtFieldRefName, srcFieldValue, mappedFieldEntry.valueMap, copy.DocumentElement);
                        fieldColumn.Attributes["ReferenceName"].Value = tgtFieldRefName;
                    }

                    // delete the unmapped fields
                    foreach (XmlNode unmappedField in fieldsToExclude)
                    {
                        unmappedField.ParentNode.RemoveChild(unmappedField);
                    }
                    fieldsToExclude.Clear();
                    aggregatedFields.Clear();

                    // apply missing field & default values
                    var missingFieldMappings = fieldMapEntry.MappedFields.GetMissingFieldEntries(sourceSide);
                    foreach (MappedField mappedFieldEntry in missingFieldMappings)
                    {
                        if (null == mappedFieldEntry)
                        {
                            continue;
                        }

                        string     missingFieldName = (sourceSide == SourceSideTypeEnum.Left ? mappedFieldEntry.RightName : mappedFieldEntry.LeftName);
                        XmlElement missingField     = columnsNode.OwnerDocument.CreateElement("Column");
                        missingField.SetAttribute("ReferenceName", missingFieldName);
                        missingField.SetAttribute("Type", string.Empty);
                        missingField.SetAttribute("DisplayName", string.Empty);
                        columnsNode.AppendChild(missingField);

                        // note missing fields do not have "from" value, hence User Id lookup is not needed.
                        string missingFieldValue = string.Empty;
                        if (!string.IsNullOrEmpty(mappedFieldEntry.valueMap))
                        {
                            string mappedValue;
                            if (GetMappedFieldValue(sourceSide, missingFieldValue, mappedFieldEntry.valueMap, copy.DocumentElement, out mappedValue))
                            {
                                missingFieldValue = mappedValue;
                            }
                            else
                            {
                                // use the source value when there is no value map, i.e.
                                // missingFieldValue = missingFieldValue;
                            }
                        }

                        XmlElement v = columnsNode.OwnerDocument.CreateElement("Value");
                        v.InnerText = missingFieldValue;
                        missingField.AppendChild(v);
                    }
                }

                #endregion
            }
        }
示例#21
0
        void TestEnvironment_InsertTwoFieldMapFromSameSourceInMappedFieldRight(MigrationTestEnvironment env, Configuration config)
        {
            // Map field
            MappedField mField1 = env.NewMappedField(FIELD_PRIORITY, FIELD_PRIORITY);

            mField1.MapFromSide = env.GetTargetSideTypeEnum();
            mField1.valueMap    = string.Empty; // set value map name to be empty string

            // Map to SAME field again
            MappedField defaultField = env.NewMappedField(FIELD_PRIORITY, FIELD_AREA_PATH);

            defaultField.MapFromSide = env.GetTargetSideTypeEnum();

            FieldMap fieldMap = new FieldMap();

            fieldMap.name = "BugToBugFieldMap";
            fieldMap.MappedFields.MappedField.Add(defaultField);
            fieldMap.MappedFields.MappedField.Add(mField1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping = new WorkItemTypeMappingElement();

            typeMapping.LeftWorkItemTypeName  = "Bug";
            typeMapping.RightWorkItemTypeName = "Bug";
            typeMapping.fieldMap = fieldMap.name;

            //=================== another work item type mapping
            MappedField mField1_1 = env.NewMappedField(FIELD_PRIORITY, FIELD_PRIORITY);

            mField1_1.MapFromSide = SourceSideTypeEnum.Right;
            mField1_1.valueMap    = string.Empty; // set value map name to be empty string

            // Map to SAME field again
            MappedField defaultField_1 = env.NewMappedField(FIELD_PRIORITY, FIELD_AREA_PATH);

            defaultField_1.MapFromSide = SourceSideTypeEnum.Right;

            FieldMap fieldMap_1 = new FieldMap();

            fieldMap_1.name = "BugToBugFieldMap_1";
            fieldMap_1.MappedFields.MappedField.Add(defaultField_1);
            fieldMap_1.MappedFields.MappedField.Add(mField1_1);

            // Map work item type
            WorkItemTypeMappingElement typeMapping_1 = new WorkItemTypeMappingElement();

            typeMapping_1.LeftWorkItemTypeName  = "Bug_1";
            typeMapping_1.RightWorkItemTypeName = "Bug_1";
            typeMapping_1.fieldMap = fieldMap_1.name;


            // Build WIT Session custom setting
            WITSessionCustomSetting customSetting = new WITSessionCustomSetting();

            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping);
            customSetting.WorkItemTypes.WorkItemType.Add(typeMapping_1);
            customSetting.FieldMaps.FieldMap.Add(fieldMap);
            customSetting.FieldMaps.FieldMap.Add(fieldMap_1);

            SetWitSessionCustomSetting(config, customSetting);
        }
示例#22
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;
                            }
                        }
                    }
                }
            }
        }