void ParseMaximumWeaponCountElement(XElement maximumWeaponCountElement, WeaponSettingGuarantee weaponSettingGuarantee, SettingLimits weaponCountSettingLimits) { weaponSettingGuarantee.MaximumWeaponCount = CreateValueGenerator(maximumWeaponCountElement, weaponCountSettingLimits); //Parse optional attributes. IEnumerable <XAttribute> attributes = maximumWeaponCountElement.Attributes(); foreach (XAttribute attribute in attributes) { if (attribute.Name == "forceExcessWeaponsToValue") { int intValue; if (TryParseIntegerAttribute(maximumWeaponCountElement, attribute, out intValue)) { weaponSettingGuarantee.MaximumWeaponCountForcedValue = intValue; } } else { _errorCollection.AddInvalidAttribute(maximumWeaponCountElement, attribute); } } }
WeaponSettingGuarantee CreateWeaponSettingGuarantee(XElement weaponSettingGuaranteeElement) { //Get setting XAttribute settingAttribute = weaponSettingGuaranteeElement.Attribute("setting"); if (settingAttribute == null) { _errorCollection.AddAttributeNotFound("setting", weaponSettingGuaranteeElement); return(null); } WeaponSettings weaponSetting = WeaponSettings.Count; Enum.TryParse <WeaponSettings>(settingAttribute.Value, out weaponSetting); if (weaponSetting == WeaponSettings.Count) { _errorCollection.AddAttributeValueInvalidValue(weaponSettingGuaranteeElement, settingAttribute); return(null); } WeaponSettingGuarantee weaponSettingGuarantee = new WeaponSettingGuarantee(weaponSetting); SettingLimits weaponCountSettingLimits = new SettingLimits(0, 64); SettingLimits settingValueSettingLimits = new SettingLimits(0, 255); //Iterate through all elements. FoundElements foundElements = new FoundElements(); IEnumerable <XElement> elements = weaponSettingGuaranteeElement.Elements(); foreach (XElement element in elements) { //Handle minimum weapons element. if (element.Name.LocalName == ElementTypes.MinimumWeaponCount.ToString()) { if (!foundElements.Contains(ElementTypes.MinimumWeaponCount)) { foundElements.Add(ElementTypes.MinimumWeaponCount, element); weaponSettingGuarantee.MinimumWeaponCount = CreateValueGenerator(element, weaponCountSettingLimits); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MinimumWeaponCount)); } } //Handle maximum weapons element. else if (element.Name.LocalName == ElementTypes.MaximumWeaponCount.ToString()) { if (!foundElements.Contains(ElementTypes.MaximumWeaponCount)) { foundElements.Add(ElementTypes.MaximumWeaponCount, element); ParseMaximumWeaponCountElement(element, weaponSettingGuarantee, weaponCountSettingLimits); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MaximumWeaponCount)); } } //Handle minimum value element. else if (element.Name.LocalName == ElementTypes.MinimumSettingValue.ToString()) { if (!foundElements.Contains(ElementTypes.MinimumSettingValue)) { foundElements.Add(ElementTypes.MinimumSettingValue, element); weaponSettingGuarantee.MinimumSettingValue = CreateValueGenerator(element, settingValueSettingLimits); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MinimumSettingValue)); } } //Handle maximum weapons element. else if (element.Name.LocalName == ElementTypes.MaximumSettingValue.ToString()) { if (!foundElements.Contains(ElementTypes.MaximumSettingValue)) { foundElements.Add(ElementTypes.MaximumSettingValue, element); weaponSettingGuarantee.MaximumSettingValue = CreateValueGenerator(element, settingValueSettingLimits); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MaximumSettingValue)); } } //Handle inclusion filter element. else if (element.Name.LocalName == ElementTypes.InclusionFilter.ToString()) { if (!foundElements.Contains(ElementTypes.InclusionFilter)) { foundElements.Add(ElementTypes.InclusionFilter, element); ParseWeaponFilterElement(element, ref weaponSettingGuarantee.GetCategoryInclusionFilterRef(), ref weaponSettingGuarantee.GetInclusionMatchTypeRef()); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.InclusionFilter)); } } //Handle inclusion filter element. else if (element.Name.LocalName == ElementTypes.ExclusionFilter.ToString()) { if (!foundElements.Contains(ElementTypes.ExclusionFilter)) { foundElements.Add(ElementTypes.ExclusionFilter, element); ParseWeaponFilterElement(element, ref weaponSettingGuarantee.GetCategoryExclusionFilterRef(), ref weaponSettingGuarantee.GetExclusionMatchTypeRef()); } else { _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.ExclusionFilter)); } } //Invalid element. else { _errorCollection.AddInvalidElement(element); } } return(weaponSettingGuarantee); }