private Boolean addAlias(String aliasName, Character c) { CharacterAlias ca = new CharacterAlias(); bool result1 = addAlias(aliasName, ref ca); bool result2 = false; //Add Alias to map need to map them.. if (result1) { CharacterAliasMap cam = new Models.CharacterAliasMap(); cam.AliasID = ca.AliasId; cam.CharacterID = c.Id; result2 = CharacterAliasMap.Add(cam); } return(result1 && result2); }
public Character AddCharacter(String characterName, int movieID, int personID, string creditID, int castID, int creditOrder) { //Save what was passed in - mostly for debugging String originalCharacterName = characterName; //Not to be modified ////Debugging //if (characterName.Contains("Soldier")) //{ // //Walk through code //} //Standardize on what characters can be in the name characterName = removeIllegalCharacters(characterName); //Save OriginalCharacterName for use with Credit Mapping String originalCleanCharacterName = characterName; //Not to be modified //Tag awareness!! //(voice) - //(uncredited) characters should be just the character and have an alias .. //However the Original characterName must be preserved for the mapping String nicName = getNicName(characterName); String newCharacterName = characterName; if (characterName.Contains("(uncredited)")) { //Make up regular character name and alias the uncredited newCharacterName = characterName.Replace("(uncredited)", "").Trim(); characterName = newCharacterName + " ~ " + characterName; } if (nicName.Length > 0) { characterName += " ~ " + nicName; } //Try Direct Exact Match Character c = GetCharacter(characterName); //No Direct Match try direct match to Alias if (c == null) { //See if there are Aliases to Search. HashSet <CharacterAlias> cas = findOrAddAliases(characterName, newCharacterName); //In the case of Bruce Banner ~ The Hulk vs Bruce Banner ~ Hulk //Bruce Banner already existed (as does The Hulk) so we want to use Bruce Banner and Add the new Alias //Also Possibly update the Character foreach (CharacterAlias ca in cas) { CharacterAliasMap cam = CharacterAliasMap.FirstOrDefault(o => o.AliasID == ca.AliasId); if (cam != null) { c = GetCharacter(cam.CharacterID); if (c != null) { //BUG = way out of hand on prompts here.. //Prompt to update Character.. //Merge old and new // characterName = characterName.Replace(c.Name, ""); //String newFullName = c.Name + characterName.Replace(newCharacterName + " ~", " ~"); if (c.Name != newCharacterName) // No Point in asking if identical! { if (MessageBox.Show("Is " + c.Name + " the same character as " + newCharacterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; //return c; // Not same Character } if (c.Name.Length < newCharacterName.Length) { if (MessageBox.Show("Update " + c.Name + " to " + newCharacterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = newCharacterName; } } } break; } } else //Character Alias Map is null { //If an Alias was added in this movie but the base character didn't have any aliases then either //the Character Alias Map should have individual character names in it to find the Character or Original Character Name //from MovieCharacterMap map. //Very iffy for Generic names MovieCharacterMap mcmt = MovieCharacterMap.FirstOrDefault(o => o.OriginalCharacterName == ca.Name); if (mcmt != null) { c = GetCharacter(mcmt.CharacterId); if (c != null) { if (MessageBox.Show("Is " + c.Name + " the same character as " + newCharacterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; //return c; // Not same Character } //Prompt to update Character.. if (!characterName.Contains("uncredited")) { String newFullName = c.Name + characterName.Replace(newCharacterName + " ~", " ~"); if (MessageBox.Show("Update " + c.Name + " to " + characterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = characterName; } } break; } } } } //Try to see if it's a case of Maria Hill vs Agent Maria Hill if (c == null) { c = matchByRemovingFirst(characterName); if (c != null && MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character } if (c == null) { c = matchByRemovingLast(characterName); if (c != null && MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character } } } //Try Direct Match to characterName parts (Alias) if (c == null) { //Try to match to characterName parts (Alias) String[] substrings = getSplitName(characterName, '~'); if (substrings.Count() > 1) { foreach (String item in substrings) { c = GetCharacter(item.Trim()); if (c != null) { if (MessageBox.Show("Is " + c.Name + " the same character as " + characterName + "?", "Confirm Character Identity", MessageBoxButtons.YesNo) == DialogResult.No) { c = null;// Not same Character continue; } if (MessageBox.Show("Update " + c.Name + " to " + characterName + "?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) { c.Name = characterName; // Update } cas = findOrAddAliases(characterName, newCharacterName); break; } } } } //If c is still null - Add a new Character.. if (c == null) { c = new Character(); c.Name = newCharacterName; // Want Clean Name if one exists c.Id = NextCharacterIndex++; Characters.Add(c); } //Need a Character Before Alias mapping can be done if (cas.Count > 0 && c != null) { //Already have Aliases but need to map them.. foreach (CharacterAlias ca in cas) { if (ca.Name == c.Name) { continue; // Don't make and alias to Actual Character Name } CharacterAliasMap cam = new Models.CharacterAliasMap(); cam.AliasID = ca.AliasId; cam.CharacterID = c.Id; bool result = CharacterAliasMap.Add(cam); } } } //Add Mapping of Character / Actor / Role //Mapping to cleaned up Character Name but preserving originalCharacterName for Character Movie relation. MovieCharacterMap mcm = new MovieCharacterMap(c.Id, originalCleanCharacterName, movieID, creditOrder, castID, creditID, personID); MovieCharacterMap.Add(mcm); // Add to Universe Map. return(c); }