private IEnumerable <string> getEvolutionChainToString(EvolvesTo evolutionChainDto)
        {
            List <string> evolution = new List <string>();

            if (evolutionChainDto != null && evolutionChainDto.species != null)
            {
                evolution.Add(evolutionChainDto.species.name);
            }
            if (evolutionChainDto != null && evolutionChainDto.evolves_to != null && evolutionChainDto.evolves_to.Any())
            {
                foreach (var item in evolutionChainDto.evolves_to)
                {
                    evolution.AddRange(getEvolutionChainToString(item));
                }
            }

            return(evolution);
        }
Beispiel #2
0
        //Build a CardCat Object from JSON
        public static void BuildCardsFromJSON(ApplicationDbContext ctx, IWebHostEnvironment env, string JSONPath)
        {
            JArray obj = Newtonsoft.Json.JsonConvert.DeserializeObject <JArray>(File.ReadAllText(JSONPath));

            foreach (var result in obj)
            {
                Card        CardObj;
                Set         SetObj;
                SpecialCard SpecialCardObj;
                TrainerCard TrainerCardObj;
                PokemonCard PokemonCardObj;

                string WebPath = env.WebRootPath;

                WebClient webClient = new WebClient();

                Uri uriCardImageURL   = new Uri((string)result["imageUrl"]);
                Uri uriCardImageHiURL = new Uri((string)result["imageUrlHiRes"]);

                //Set base image directories
                string CardImageDirectory   = WebPath + "/Images/Cards/LowRes/" + uriCardImageURL.Segments.ElementAt(uriCardImageURL.Segments.Length - 2).TrimEnd('/');
                string CardImageHiDirectory = WebPath + "/Images/Cards/HighRes/" + uriCardImageHiURL.Segments.ElementAt(uriCardImageHiURL.Segments.Length - 2).TrimEnd('/');

                //Check if directory exists and create if it doesn't
                if (!Directory.Exists(CardImageDirectory))
                {
                    Directory.CreateDirectory(CardImageDirectory);
                }
                if (!Directory.Exists(CardImageHiDirectory))
                {
                    Directory.CreateDirectory(CardImageHiDirectory);
                }

                //Create the local image file paths
                string CardImageLocalFile   = uriCardImageURL.Segments.ElementAt(uriCardImageURL.Segments.Length - 2).TrimEnd('/') + uriCardImageURL.Segments.Last();
                string CardImageHiLocalFile = uriCardImageHiURL.Segments.ElementAt(uriCardImageHiURL.Segments.Length - 2).TrimEnd('/') + uriCardImageHiURL.Segments.Last();

                string CardImageLocalPath   = CardImageDirectory + "/" + CardImageLocalFile;
                string CardImageHiLocalPath = CardImageHiDirectory + "/" + CardImageHiLocalFile;

                try
                {
                    //Only download images if there isn't already a file with this name
                    if (!File.Exists(CardImageLocalPath))
                    {
                        webClient.DownloadFile(uriCardImageURL, CardImageLocalPath);
                    }
                }
                catch (System.Net.WebException we)
                {
                    Console.WriteLine("ERROR: " + we.Message + ": " + uriCardImageURL);
                    //throw we;
                }
                catch (Exception e)
                {
                    //ILogger logger = Get;
                    //logger.LogWarning("ERROR: " + e.Message + ": " + uriCardImageURL);
                    Console.WriteLine("ERROR: " + e.Message + ": " + uriCardImageURL);
                    throw e;
                }

                try
                {
                    //Only download images if there isn't already a file with this name
                    if (!File.Exists(CardImageHiLocalPath))
                    {
                        webClient.DownloadFile(uriCardImageHiURL, CardImageHiLocalPath);
                    }
                }
                catch (System.Net.WebException we)
                {
                    Console.WriteLine("ERROR: " + we.Message + ": " + uriCardImageHiURL);
                    //throw we;
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR: " + e.Message + ": " + uriCardImageHiURL);
                    throw e;
                }

                //Store the local image URL path for web access
                string CardImageLocalURL   = "/Images/Cards/LowRes/" + uriCardImageURL.Segments.ElementAt(uriCardImageURL.Segments.Length - 2) + CardImageLocalFile;
                string CardImageHiLocalURL = "/Images/Cards/HighRes/" + uriCardImageHiURL.Segments.ElementAt(uriCardImageHiURL.Segments.Length - 2) + CardImageHiLocalFile;


                //Get a Generic Set Object
                SetObj = ObjectBuilderHelper.GetSetByNameNoInsert(ctx, (string)result["set"]);

                switch ((string)result["supertype"])
                {
                case "Energy":
                    switch ((string)result["subtype"])
                    {
                    case "Basic":
                        //Basic Energy
                        CardObj = ctx.Cards.SingleOrDefault(m => m.CardName.Equals((string)result["name"]) && m.CardNum.Equals((string)result["number"]))
                                  ?? new Card
                        {
                            CardName            = (string)result["name"],
                            CardImageURL        = (string)result["imageUrl"],
                            CardImageHiURL      = (string)result["imageUrlHiRes"],
                            CardImageLocalURL   = CardImageLocalURL,
                            CardImageHiLocalURL = CardImageHiLocalURL,
                            CardCat             = ObjectBuilderHelper.GetCardCatByName(ctx, (string)result["supertype"]),
                            CardType            = ObjectBuilderHelper.GetCardTypeByName(ctx, (string)result["subtype"]),
                            Set            = ObjectBuilderHelper.GetSetByNameNoInsert(ctx, (string)result["set"]),
                            CardNum        = (string)result["number"],
                            Artist         = (string)result["artist"],
                            CardRarity     = ObjectBuilderHelper.GetCardRarityByName(ctx, (string)result["rarity"]),
                            LastUpdateDate = DateTime.Now
                        };

                        Console.WriteLine("INFO: Card: " + CardObj.CardNum + " " + CardObj.CardName);

                        ctx.AddOrUpdate(CardObj);
                        break;

                    case "Special":
                        //Special Energy
                        SpecialCardObj = ctx.SpecialCards.SingleOrDefault(m => m.CardName.Equals((string)result["name"]) && m.CardNum.Equals((string)result["number"]))
                                         ?? new SpecialCard
                        {
                            CardName            = (string)result["name"],
                            CardImageURL        = (string)result["imageUrl"],
                            CardImageHiURL      = (string)result["imageUrlHiRes"],
                            CardImageLocalURL   = CardImageLocalURL,
                            CardImageHiLocalURL = CardImageHiLocalURL,
                            CardCat             = ObjectBuilderHelper.GetCardCatByName(ctx, (string)result["supertype"]),
                            CardType            = ObjectBuilderHelper.GetCardTypeByName(ctx, (string)result["subtype"]),
                            Set            = ObjectBuilderHelper.GetSetByNameNoInsert(ctx, (string)result["set"]),
                            CardNum        = (string)result["number"],
                            Artist         = (string)result["artist"],
                            CardRarity     = ObjectBuilderHelper.GetCardRarityByName(ctx, (string)result["rarity"]),
                            LastUpdateDate = DateTime.Now
                        };

                        Console.WriteLine("INFO: Special Card: " + SpecialCardObj.CardNum + " " + SpecialCardObj.CardName);

                        //SpecialCardText
                        if (result["text"] != null && result["text"].HasValues)
                        {
                            List <SpecialCardSpecialCardText> specialCardCardTexts = new List <SpecialCardSpecialCardText>();
                            foreach (var textitem in result["text"])
                            {
                                SpecialCardText SpecialCardTextObj = ctx.SpecialCardTexts.SingleOrDefault(m => m.CardTextLine.Equals((string)textitem))
                                                                     ?? new SpecialCardText
                                {
                                    CardTextLine   = textitem.ToString(),
                                    LastUpdateDate = DateTime.Now
                                };

                                if (SpecialCardTextObj != null)
                                {
                                    SpecialCardSpecialCardText specialCardSpecialCardText = new SpecialCardSpecialCardText();
                                    //if (SpecialCardObj.SpecialCardSpecialCardTexts != null)
                                    //{
                                    //    specialCardSpecialCardText = SpecialCardTextObj.SpecialCardSpecialCardTexts.SingleOrDefault(m => m.CardID.Equals(SpecialCardObj.CardID) && m.CardTextID.Equals(SpecialCardTextObj.SpecialCardTextID));

                                    //    if (specialCardSpecialCardText == null)
                                    //    {

                                    //Check list for existing object
                                    if (!specialCardCardTexts.Exists(a => a.CardID.Equals(SpecialCardObj) && a.CardText.Equals(SpecialCardTextObj)))
                                    {
                                        if (SpecialCardObj.SpecialCardSpecialCardTexts != null)
                                        {
                                            specialCardSpecialCardText = SpecialCardTextObj.SpecialCardSpecialCardTexts.SingleOrDefault(m => m.CardID.Equals(SpecialCardObj) && m.CardTextID.Equals(SpecialCardTextObj));
                                        }

                                        if (specialCardSpecialCardText == null)
                                        {
                                            specialCardCardTexts.Add(
                                                new SpecialCardSpecialCardText
                                            {
                                                SpecialCard = SpecialCardObj,
                                                CardText    = SpecialCardTextObj
                                            }
                                                );
                                        }
                                    }
                                }
                            }

                            SpecialCardObj.SpecialCardSpecialCardTexts = specialCardCardTexts;
                        }
                        ctx.AddOrUpdate(SpecialCardObj);
                        break;

                    default:
                        break;
                    }
                    break;

                case "Pokémon":
                    //int ConvRetreatCost = 0;
                    //if (result["convertedRetreatCost"] is null)
                    //{
                    //    ConvRetreatCost = 0;
                    //} else
                    //{
                    //    ConvRetreatCost = (int)result["convertedRetreatCost"];
                    //}
                    int NationalPokedexNumValue = -1;
                    int HPValue = -1;

                    if (result["nationalPokedexNumber"] != null)
                    {
                        NationalPokedexNumValue = (int)result["nationalPokedexNumber"];
                    }

                    if (result["hp"] != null)
                    {
                        HPValue = (int)result["hp"];
                    }

                    //Set SetObj = ctx.Sets.SingleOrDefault(m => m.SetCode.Equals((string)result["SetCode"]));

                    PokemonCardObj = ctx.PokemonCards.SingleOrDefault(m => m.CardName.Equals((string)result["name"]) && m.CardNum.Equals((string)result["number"]) && m.SetID == SetObj.SetID)
                                     ?? new PokemonCard
                    {
                        CardName            = (string)result["name"],
                        CardImageURL        = (string)result["imageUrl"],
                        CardImageHiURL      = (string)result["imageUrlHiRes"],
                        CardImageLocalURL   = CardImageLocalURL,
                        CardImageHiLocalURL = CardImageHiLocalURL,
                        CardCat             = ObjectBuilderHelper.GetCardCatByName(ctx, (string)result["supertype"]),
                        CardType            = ObjectBuilderHelper.GetCardTypeByName(ctx, (string)result["subtype"]),
                        Set        = SetObj,
                        CardNum    = (string)result["number"],
                        Artist     = (string)result["artist"],
                        CardRarity = ObjectBuilderHelper.GetCardRarityByName(ctx, (string)result["rarity"]),
                        HP         = HPValue,
                        //ConvertedRetreatCost = ConvRetreatCost,
                        //ConvertedRetreatCost = GetValueOrDefault<int>(result["convertedRetreatCost"]),
                        NationalPokedexNumber = NationalPokedexNumValue,
                        EvolvesFrom           = (string)result["evolvesFrom"],
                        LastUpdateDate        = DateTime.Now
                    };

                    Console.WriteLine("INFO: Pokemon Card: " + PokemonCardObj.CardNum + " " + PokemonCardObj.CardName);

                    //PokemonTypes
                    if (result["types"] != null && result["types"].HasValues)
                    {
                        List <PokemonCardPokemonType> pokemonCardPokemonTypes = new List <PokemonCardPokemonType>();
                        foreach (var textitem in result["types"])
                        {
                            PokemonType PokemonTypeObj = GetPokemonTypeByName(ctx, (string)textitem);

                            pokemonCardPokemonTypes.Add(
                                new PokemonCardPokemonType
                            {
                                PokemonCard = PokemonCardObj,
                                PokemonType = PokemonTypeObj
                            }
                                );
                        }

                        PokemonCardObj.PokemonCardPokemonTypes = pokemonCardPokemonTypes;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //EvolvesTo
                    if (result["evolvesTo"] != null && result["evolvesTo"].HasValues)
                    {
                        List <PokemonCardEvolvesTo> pokemonCardEvolvesTos = new List <PokemonCardEvolvesTo>();
                        foreach (var textitem in result["evolvesTo"])
                        {
                            EvolvesTo EvolvesToObj = GetEvolesToByName(ctx, (string)textitem);

                            //Check if the relationship exists and if not add it
                            if (EvolvesToObj != null)
                            {
                                PokemonCardEvolvesTo pokemonCardEvolvesTo = new PokemonCardEvolvesTo();
                                if (PokemonCardObj.PokemonCardEvolvesTos != null)
                                {
                                    pokemonCardEvolvesTo = PokemonCardObj.PokemonCardEvolvesTos.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj) && m.EvolvesTo.Equals(EvolvesToObj));

                                    if (pokemonCardEvolvesTo == null)
                                    {
                                        pokemonCardEvolvesTos.Add(
                                            new PokemonCardEvolvesTo
                                        {
                                            PokemonCard = PokemonCardObj,
                                            EvolvesTo   = EvolvesToObj
                                        }
                                            );
                                    }
                                }
                                //else
                                //{
                                //    pokemonCardEvolvesTo.PokemonCard = PokemonCardObj;
                                //    pokemonCardEvolvesTo.EvolvesTo = EvolvesToObj;
                                //}
                            }
                        }

                        PokemonCardObj.PokemonCardEvolvesTos = pokemonCardEvolvesTos;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //RetreatCosts
                    if (result["retreatCost"] != null && result["retreatCost"].HasValues)
                    {
                        List <PokemonCardRetreatCost> pokemonCardRetreatCosts = new List <PokemonCardRetreatCost>();
                        foreach (var textitem in result["retreatCost"])
                        {
                            EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)textitem);

                            //Check if the relationship exists and if not add it
                            if (EnergyTypeObj != null)
                            {
                                PokemonCardRetreatCost pokemonCardRetreatCost = new PokemonCardRetreatCost();
                                if (PokemonCardObj.PokemonCardRetreatCosts != null)
                                {
                                    pokemonCardRetreatCost = PokemonCardObj.PokemonCardRetreatCosts.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj.CardID) && m.EnergyType.Equals(EnergyTypeObj));

                                    if (pokemonCardRetreatCost == null)
                                    {
                                        //pokemonCardRetreatCosts.Add(
                                        //    new PokemonCardRetreatCost
                                        //    {
                                        //        PokemonCard = PokemonCardObj,
                                        //        EnergyType = EnergyTypeObj
                                        //    }
                                        //);
                                        pokemonCardRetreatCost.PokemonCard = PokemonCardObj;
                                        pokemonCardRetreatCost.EnergyType  = EnergyTypeObj;
                                    }
                                }
                                else
                                {
                                    pokemonCardRetreatCosts.Add(
                                        new PokemonCardRetreatCost
                                    {
                                        PokemonCard = PokemonCardObj,
                                        EnergyType  = EnergyTypeObj
                                    }
                                        );

                                    //pokemonCardRetreatCost.PokemonCard = PokemonCardObj;
                                    //pokemonCardRetreatCost.EnergyType = EnergyTypeObj;
                                }
                            }
                        }

                        PokemonCardObj.PokemonCardRetreatCosts = pokemonCardRetreatCosts;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //Weaknesses
                    if (result["weaknesses"] != null && result["weaknesses"].HasValues)
                    {
                        //JArray obj2 = JArray.Parse(result["weaknesses"]);
                        //Newtonsoft.Json.JsonConvert.DeserializeObject<JArray>((string)result["weaknesses"]);
                        JArray obj2 = (JArray)result.SelectToken("weaknesses");

                        List <PokemonCardWeakness> pokemonCardWeaknesses = new List <PokemonCardWeakness>();

                        foreach (var result2 in obj2)
                        {
                            EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)result2["type"]);

                            //Check list for existing object
                            if (!pokemonCardWeaknesses.Exists(a => a.Weakness.EnergyType.Equals(EnergyTypeObj) &&
                                                              a.Weakness.WeaknessValue.Equals((string)result2["value"])))
                            {
                                Weakness WeaknessObj = ctx.Weaknesses.SingleOrDefault(m => m.EnergyType.Equals(EnergyTypeObj) && m.WeaknessValue.Equals((string)result2["value"]))
                                                       ?? new Weakness
                                {
                                    EnergyType     = EnergyTypeObj,
                                    WeaknessValue  = (string)result2["value"],
                                    LastUpdateDate = DateTime.Now
                                };

                                //Check if the relationship exists and if not add it
                                if (WeaknessObj != null)
                                {
                                    PokemonCardWeakness pokemonCardWeakness = new PokemonCardWeakness();
                                    if (PokemonCardObj.PokemonCardWeaknesses != null)
                                    {
                                        pokemonCardWeakness = PokemonCardObj.PokemonCardWeaknesses.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj.CardID) && m.Weakness.Equals(WeaknessObj));

                                        if (pokemonCardWeakness == null)
                                        {
                                            pokemonCardWeaknesses.Add(
                                                new PokemonCardWeakness
                                            {
                                                PokemonCard = PokemonCardObj,
                                                Weakness    = WeaknessObj
                                            }
                                                );
                                        }
                                    }
                                }
                            }
                        }

                        PokemonCardObj.PokemonCardWeaknesses = pokemonCardWeaknesses;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //Resistance
                    if (result["resistances"] != null && result["resistances"].HasValues)
                    {
                        //JArray obj2 = JArray.Parse(result["weaknesses"]);
                        //Newtonsoft.Json.JsonConvert.DeserializeObject<JArray>((string)result["weaknesses"]);
                        JArray obj2 = (JArray)result.SelectToken("resistances");

                        List <PokemonCardResistance> pokemonCardResistances = new List <PokemonCardResistance>();

                        foreach (var result2 in obj2)
                        {
                            EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)result2["type"]);

                            //Check if list already has the object in it
                            if (!pokemonCardResistances.Exists(a => a.Resistance.EnergyType.Equals(EnergyTypeObj) &&
                                                               a.Resistance.ResistanceValue.Equals((string)result2["value"])))
                            {
                                Resistance ResistanceObj = ctx.Resistances.SingleOrDefault(m => m.EnergyType.Equals(EnergyTypeObj) && m.ResistanceValue.Equals((string)result2["value"]))
                                                           ?? new Resistance
                                {
                                    EnergyType      = EnergyTypeObj,
                                    ResistanceValue = (string)result2["value"],
                                    LastUpdateDate  = DateTime.Now
                                };

                                if (ResistanceObj != null)
                                {
                                    PokemonCardResistance pokemonCardResistance = new PokemonCardResistance();
                                    if (PokemonCardObj.PokemonCardResistances != null)
                                    {
                                        pokemonCardResistance = PokemonCardObj.PokemonCardResistances.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj.CardID) && m.Resistance.Equals(ResistanceObj));

                                        if (pokemonCardResistance == null)
                                        {
                                            pokemonCardResistances.Add(
                                                new PokemonCardResistance
                                            {
                                                PokemonCard = PokemonCardObj,
                                                Resistance  = ResistanceObj
                                            }
                                                );
                                        }
                                    }
                                }
                                //ctx.AddOrUpdate(pokemonCardResistances);
                                //ctx.SaveChanges();
                            }
                        }

                        PokemonCardObj.PokemonCardResistances = pokemonCardResistances;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //Ability
                    if (result["ability"] != null && result["ability"].HasValues)
                    {
                        //JArray obj2 = JArray.Parse(result["weaknesses"]);
                        //Newtonsoft.Json.JsonConvert.DeserializeObject<JArray>((string)result["weaknesses"]);
                        JObject AbilityJSON = (JObject)result.SelectToken("ability");

                        List <PokemonCardAbility> pokemonCardAbilities = new List <PokemonCardAbility>();

                        //foreach (var result2 in obj2)
                        //{
                        // EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)result2["type"]);
                        Ability AbilityObj = ctx.Abilities.SingleOrDefault(m => m.AbilityName.Equals((string)AbilityJSON["name"]) && m.AbilityText.Equals((string)AbilityJSON["text"]))
                                             ?? new Ability
                        {
                            AbilityName    = (string)AbilityJSON["name"],
                            AbilityText    = (string)AbilityJSON["text"],
                            AbilityType    = (string)AbilityJSON["type"],
                            LastUpdateDate = DateTime.Now
                        };

                        //Check if the relationship exists and if not add it
                        if (AbilityObj != null)
                        {
                            PokemonCardAbility pokemonCardAbility = new PokemonCardAbility();
                            if (PokemonCardObj.PokemonCardAbilities != null)
                            {
                                pokemonCardAbility = PokemonCardObj.PokemonCardAbilities.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj.CardID) && m.Ability.Equals(AbilityObj));
                            }

                            if (pokemonCardAbility.Ability == null)
                            {
                                pokemonCardAbilities.Add(
                                    new PokemonCardAbility
                                {
                                    PokemonCard = PokemonCardObj,
                                    Ability     = AbilityObj
                                }
                                    );
                            }
                        }
                        //}

                        PokemonCardObj.PokemonCardAbilities = pokemonCardAbilities;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    //Attack
                    if (result["attacks"] != null && result["attacks"].HasValues)
                    {
                        JArray obj2 = (JArray)result.SelectToken("attacks");

                        List <PokemonCardAttack> pokemonCardAttacks = new List <PokemonCardAttack>();

                        foreach (var result2 in obj2)
                        {
                            //EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)result2["type"]);
                            Attack AttackObj = ctx.Attacks.SingleOrDefault(m => m.AttackName.Equals((string)result2["name"]) && m.AttackText.Equals((string)result2["text"]))
                                               ?? new Attack
                            {
                                //EnergyType = EnergyTypeObj,
                                AttackName = (string)result2["name"],
                                AttackConvertedEnergyCost = (int)result2["convertedEnergyCost"],
                                AttackDamage   = (string)result2["damage"],
                                AttackText     = (string)result2["text"],
                                LastUpdateDate = DateTime.Now
                            };

                            //Energy for Attack
                            if (result2["cost"] != null && result2["cost"].HasValues)
                            {
                                List <AttackEnergy> attackEnergies = new List <AttackEnergy>();
                                foreach (var textitem in result2["cost"])
                                {
                                    EnergyType EnergyTypeObj = GetEnergyTypeByName(ctx, (string)textitem);

                                    attackEnergies.Add(
                                        new AttackEnergy
                                    {
                                        Attack     = AttackObj,
                                        EnergyType = EnergyTypeObj
                                    }
                                        );
                                }

                                AttackObj.AttackEnergies = attackEnergies;
                            }

                            //Check if the relationship exists and if not add it
                            if (AttackObj != null)
                            {
                                PokemonCardAttack pokemonCardAttack = new PokemonCardAttack();
                                if (PokemonCardObj.PokemonCardAttacks != null)
                                {
                                    pokemonCardAttack = PokemonCardObj.PokemonCardAttacks.SingleOrDefault(m => m.CardID.Equals(PokemonCardObj.CardID) && m.Attack.Equals(AttackObj));
                                }

                                if (pokemonCardAttack.Attack == null)
                                {
                                    pokemonCardAttacks.Add(
                                        new PokemonCardAttack
                                    {
                                        PokemonCard = PokemonCardObj,
                                        Attack      = AttackObj
                                    }
                                        );
                                }
                            }
                        }

                        PokemonCardObj.PokemonCardAttacks = pokemonCardAttacks;
                    }

                    ctx.AddOrUpdate(PokemonCardObj);
                    ctx.SaveChanges();

                    ctx.AddOrUpdate(PokemonCardObj);
                    break;

                case "Trainer":
                    TrainerCardObj = ctx.TrainerCards.SingleOrDefault(m => m.CardName.Equals((string)result["name"]) && m.CardNum.Equals((string)result["number"]))
                                     ?? new TrainerCard
                    {
                        CardName            = (string)result["name"],
                        CardImageURL        = (string)result["imageUrl"],
                        CardImageHiURL      = (string)result["imageUrlHiRes"],
                        CardImageLocalURL   = CardImageLocalURL,
                        CardImageHiLocalURL = CardImageHiLocalURL,
                        CardCat             = ObjectBuilderHelper.GetCardCatByName(ctx, (string)result["supertype"]),
                        CardType            = ObjectBuilderHelper.GetCardTypeByName(ctx, (string)result["subtype"]),
                        Set            = ObjectBuilderHelper.GetSetByNameNoInsert(ctx, (string)result["set"]),
                        CardNum        = (string)result["number"],
                        Artist         = (string)result["artist"],
                        CardRarity     = ObjectBuilderHelper.GetCardRarityByName(ctx, (string)result["rarity"]),
                        LastUpdateDate = DateTime.Now
                    };

                    Console.WriteLine("INFO: Trainer Card: " + TrainerCardObj.CardNum + " " + TrainerCardObj.CardName);

                    if (result["text"] != null && result["text"].HasValues)
                    {
                        List <TrainerCardTrainerCardText> trainerCardCardTexts = new List <TrainerCardTrainerCardText>();
                        foreach (var textitem in result["text"])
                        {
                            TrainerCardText TrainerCardTextObj = ctx.TrainerCardTexts.SingleOrDefault(m => m.CardTextLine.Equals((string)textitem))
                                                                 ?? new TrainerCardText
                            {
                                CardTextLine   = textitem.ToString(),
                                LastUpdateDate = DateTime.Now
                            };

                            if (TrainerCardTextObj != null)
                            {
                                TrainerCardTrainerCardText trainerCardTrainerCardText = new TrainerCardTrainerCardText();
                                //if (TrainerCardObj.TrainerCardTrainerCardTexts == null)
                                //{

                                //Check list for existing object
                                if (!trainerCardCardTexts.Exists(a => a.CardID.Equals(TrainerCardObj) && a.CardTextID.Equals(TrainerCardTextObj)))
                                {
                                    if (TrainerCardObj.TrainerCardTrainerCardTexts != null)
                                    {
                                        trainerCardTrainerCardText = TrainerCardTextObj.TrainerCardTrainerCardTexts.SingleOrDefault(m => m.CardID.Equals(TrainerCardObj) && m.CardTextID.Equals(TrainerCardTextObj));
                                    }

                                    if (trainerCardTrainerCardText == null)
                                    {
                                        trainerCardCardTexts.Add(
                                            new TrainerCardTrainerCardText
                                        {
                                            TrainerCard = TrainerCardObj,
                                            CardText    = TrainerCardTextObj
                                        }
                                            );
                                    }
                                }
                            }
                        }

                        TrainerCardObj.TrainerCardTrainerCardTexts = trainerCardCardTexts;
                    }
                    ctx.AddOrUpdate(TrainerCardObj);
                    break;

                default:
                    break;
                }
                //If Card - CardCat = Energy, CardType = Basic
                //If SpecialCard - CardCat = Energy. CardType = Special
                //If PokemonCard
                //If TrainerCar
                //GetCardByName(ctx, (string)result["pokemontypename"]);

                ctx.SaveChanges();
            }
        }