public void Load() { SpeciesAttributes = new List <Model.ISpeciesAttributeValue>(); List <Library.DBObject.Attribute> attributes = new List <Library.DBObject.Attribute>( IKeyManager.GetAttributeEnumeratorForKey(Species.key_id).OrderBy(n => n.position)); Dictionary <Int64, Library.DBObject.SpeciesAttributeChoice> speciesAttributeChoicesMap = IKeyManager.GetSpeciesAttributeChoiceEnumeratorForSpecies(Species.id).ToDictionary(n => n.attributechoice_id, n => n); Dictionary <Int64, Library.DBObject.SpeciesAttributeSize> speciesAttributeSizesMap = IKeyManager.GetSpeciesSizeAttributeEnumeratorForSpecies(Species.id).ToDictionary(n => n.attribute_id, n => n); foreach (var attribute in attributes) { Library.Database.AttributeType attributeType = (Library.Database.AttributeType)attribute.type; switch (attributeType) { case Library.Database.AttributeType.Choice: { List <Library.DBObject.AttributeChoice> attributeChoices = IKeyManager.GetAttributeChoiceEnumeratorForAttribute(attribute.id).OrderBy(n => n.position).ToList(); foreach (var attributeChoice in attributeChoices) { Model.SpeciesAttributeChoice speciesAttributeChoice = new Model.SpeciesAttributeChoice(); speciesAttributeChoice.Attribute = attribute; speciesAttributeChoice.AttributeChoice = attributeChoice; if (speciesAttributeChoicesMap.ContainsKey(attributeChoice.id)) { speciesAttributeChoice.IsUsed = true; speciesAttributeChoice.SpeciesAttributeChoiceValue = speciesAttributeChoicesMap[attributeChoice.id]; } SpeciesAttributes.Add(speciesAttributeChoice); speciesAttributeChoice.OnChanged += SpeciesAttribute_OnChanged; } } break; case Library.Database.AttributeType.MaximumSize: case Library.Database.AttributeType.MinimumSize: Model.SpeciesAttributeSize speciesAttributeSize = new Model.SpeciesAttributeSize(); speciesAttributeSize.Attribute = attribute; if (speciesAttributeSizesMap.ContainsKey(attribute.id)) { speciesAttributeSize.IsUsed = true; speciesAttributeSize.SpeciesAttributeSizeValue = speciesAttributeSizesMap[attribute.id]; } SpeciesAttributes.Add(speciesAttributeSize); speciesAttributeSize.OnChanged += SpeciesAttribute_OnChanged; break; } } }
private void SpeciesAttribute_OnChanged(Model.ISpeciesAttributeValue sender) { if (sender is Model.SpeciesAttributeChoice) { Model.SpeciesAttributeChoice speciesAttributeChoice = sender as Model.SpeciesAttributeChoice; if (sender.IsUsed) { speciesAttributeChoice.SpeciesAttributeChoiceValue = new Library.DBObject.SpeciesAttributeChoice(); speciesAttributeChoice.SpeciesAttributeChoiceValue.key_id = Key.id; speciesAttributeChoice.SpeciesAttributeChoiceValue.species_id = Species.id; speciesAttributeChoice.SpeciesAttributeChoiceValue.attributechoice_id = speciesAttributeChoice.AttributeChoice.id; IKeyManager.Insert(speciesAttributeChoice.SpeciesAttributeChoiceValue); } else { if (speciesAttributeChoice.SpeciesAttributeChoiceValue != null) { IKeyManager.Delete(speciesAttributeChoice.SpeciesAttributeChoiceValue); speciesAttributeChoice.SpeciesAttributeChoiceValue = null; } } } else if (sender is Model.SpeciesAttributeSize) { Model.SpeciesAttributeSize speciesAttributeSize = sender as Model.SpeciesAttributeSize; if (sender.IsUsed) { if (speciesAttributeSize.SpeciesAttributeSizeValue != null) { IKeyManager.Update(speciesAttributeSize.SpeciesAttributeSizeValue); } else { speciesAttributeSize.SpeciesAttributeSizeValue = new Library.DBObject.SpeciesAttributeSize(); speciesAttributeSize.SpeciesAttributeSizeValue.key_id = Key.id; speciesAttributeSize.SpeciesAttributeSizeValue.species_id = Species.id; speciesAttributeSize.SpeciesAttributeSizeValue.attribute_id = speciesAttributeSize.Attribute.id; speciesAttributeSize.SpeciesAttributeSizeValue.value = 1; IKeyManager.Insert(speciesAttributeSize.SpeciesAttributeSizeValue); } } else { if (speciesAttributeSize.SpeciesAttributeSizeValue != null) { IKeyManager.Delete(speciesAttributeSize.SpeciesAttributeSizeValue); speciesAttributeSize.SpeciesAttributeSizeValue = null; } } } }