protected string GenerateLongDescription(TraitView trait)
        {
            var ret = trait.Description;

            foreach (var pair in trait.AttributList)
            {
                var value = pair.Value;
                ret = GenerateLongDescriptionHelper(value, ret, Helper.GetShort(pair.ID));
            }
            foreach (var pair in trait.ValueList)
            {
                var value = pair.Value;
                var type  = DSAUtil.GetType(pair.ID);
                var item  = charakter.Values.GetItemByType(type);
                ret = GenerateLongDescriptionHelper(value, ret, item.ShortName);
            }
            foreach (var pair in trait.ResourceList)
            {
                var value = pair.Value;
                var type  = DSAUtil.GetType(pair.ID);
                var item  = charakter.Resources.GetByType(type);
                ret = GenerateLongDescriptionHelper(value, ret, item.ShortName);
            }

            foreach (var pair in trait.TalentList)
            {
                var talent = charakter.Talente.Get(pair.ID);

                if (pair.TAW != 0)
                {
                    ret = GenerateLongDescriptionHelper(pair.TAW, ret, talent.Name + " TAW");
                }
                if (pair.AT != null && pair.AT != 0 && typeof(AbstractTalentFighting).IsAssignableFrom(talent.GetType()))
                {
                    ret = GenerateLongDescriptionHelper((int)pair.AT, ret, talent.Name + " AT");
                }

                if (pair.PA != null && pair.PA != 0 && (typeof(TalentClose).IsAssignableFrom(talent.GetType()) || typeof(TalentWeaponless).IsAssignableFrom(talent.GetType())))
                {
                    ret = GenerateLongDescriptionHelper((int)pair.PA, ret, talent.Name + " PA");
                }

                if (pair.BL != null && pair.BL != 0 && (typeof(TalentClose).IsAssignableFrom(talent.GetType()) || typeof(TalentWeaponless).IsAssignableFrom(talent.GetType())))
                {
                    ret = GenerateLongDescriptionHelper((int)pair.BL, ret, talent.Name + " BL");
                }
            }

            var adventurePointString = "Abenteuerpunkte";

            if (trait.APGain != 0)
            {
                ret = ret + " " + trait.APGain + adventurePointString;
            }
            if (trait.APInvest != 0)
            {
                ret = ret + " " + " -" + trait.APInvest + adventurePointString;
            }

            return(ret);
        }
        private TraitView GetView(T_Trait trait)
        {
            var attributList = new List <IDValueView <CharakterAttribut> >();
            var sqlAttribut  = attributRepository.GetList(trait.Id);

            foreach (var item in sqlAttribut)
            {
                attributList.Add(new IDValueView <CharakterAttribut>
                {
                    ID    = (CharakterAttribut)item.AttributID,
                    Value = item.Value,
                    Name  = Enum.GetName(typeof(CharakterAttribut), item.AttributID),
                });
            }

            var resourceList = new List <IDValueView <string> >();
            var sqlresource  = resourceRepository.GetList(trait.Id);

            foreach (var item in sqlresource)
            {
                var innerType = DSAUtil.GetType(item.Type);
                var innerItem = this.charakter.Resources.GetByType(innerType);

                resourceList.Add(new IDValueView <string>
                {
                    ID    = item.Type,
                    Value = item.Value,
                    Name  = innerItem.Name
                });
            }

            var valueList = new List <IDValueView <string> >();
            var sqlvalue  = valueRepository.GetList(trait.Id);

            foreach (var item in sqlvalue)
            {
                var innerType = DSAUtil.GetType(item.Type);
                var innerItem = this.charakter.Values.GetItemByType(innerType);

                valueList.Add(new IDValueView <string>
                {
                    ID    = item.Type,
                    Value = item.Value,
                    Name  = innerItem.Name
                });
            }

            var talentList    = new List <TalentView>();
            var sqltalentList = talentRepository.GetList(trait.Id);

            foreach (var item in sqltalentList)
            {
                var talentGuid = new Guid(item.TalentID);
                var talent     = charakter.Talente.Get(talentGuid);
                talentList.Add(new TalentView()
                {
                    ID   = talentGuid,
                    AT   = item.AT,
                    PA   = item.PA,
                    BL   = item.BL,
                    TAW  = item.TAW,
                    Name = talent.Name
                });
            }

            var view = new TraitView
            {
                ID          = trait.Id,
                APGain      = trait.APGain,
                APInvest    = trait.APInvested,
                Description = trait.Description,
                GP          = trait.GP,
                Name        = trait.Name,
                Type        = (TraitType)trait.Type,
                Value       = trait.Value,

                ModifyDate   = trait.ModifyDate,
                CreationDate = trait.CreationDate,

                AttributList = attributList,
                ResourceList = resourceList,
                TalentList   = talentList,
                ValueList    = valueList,
                SkillList    = GetSkillList(trait)
            };

            view.LongDescription = this.GenerateLongDescription(view);
            return(view);
        }