| // |
| // NBPhoneMetaData.m |
| // libPhoneNumber |
| // |
| // Created by NHN Corp. Last Edited by BAND dev team (band_dev@nhn.com) |
| // |
| |
| #import "NBPhoneMetaData.h" |
| #import "NBPhoneNumberDesc.h" |
| #import "NBNumberFormat.h" |
| #import "NBPhoneNumberDefines.h" |
| |
| @implementation NBPhoneMetaData |
| |
| @synthesize generalDesc, fixedLine, mobile, tollFree, premiumRate, sharedCost, personalNumber, voip, pager, uan, emergency, voicemail, noInternationalDialling; |
| @synthesize codeID, countryCode; |
| @synthesize internationalPrefix, preferredInternationalPrefix, nationalPrefix, preferredExtnPrefix, nationalPrefixForParsing, nationalPrefixTransformRule, sameMobileAndFixedLinePattern, numberFormats, intlNumberFormats, mainCountryForCode, leadingDigits, leadingZeroPossible; |
| |
| - (id)init |
| { |
| self = [super init]; |
| |
| if (self) |
| { |
| [self setNumberFormats:[[NSMutableArray alloc] init]]; |
| [self setIntlNumberFormats:[[NSMutableArray alloc] init]]; |
| |
| self.leadingZeroPossible = NO; |
| self.mainCountryForCode = NO; |
| } |
| |
| return self; |
| } |
| |
| |
| - (NSString *)description |
| { |
| return [NSString stringWithFormat:@"* codeID[%@] countryCode[%@] generalDesc[%@] fixedLine[%@] mobile[%@] tollFree[%@] premiumRate[%@] sharedCost[%@] personalNumber[%@] voip[%@] pager[%@] uan[%@] emergency[%@] voicemail[%@] noInternationalDialling[%@] internationalPrefix[%@] preferredInternationalPrefix[%@] nationalPrefix[%@] preferredExtnPrefix[%@] nationalPrefixForParsing[%@] nationalPrefixTransformRule[%@] sameMobileAndFixedLinePattern[%@] numberFormats[%@] intlNumberFormats[%@] mainCountryForCode[%@] leadingDigits[%@] leadingZeroPossible[%@]", |
| self.codeID, self.countryCode, self.generalDesc, self.fixedLine, self.mobile, self.tollFree, self.premiumRate, self.sharedCost, self.personalNumber, self.voip, self.pager, self.uan, self.emergency, self.voicemail, self.noInternationalDialling, self.internationalPrefix, self.preferredInternationalPrefix, self.nationalPrefix, self.preferredExtnPrefix, self.nationalPrefixForParsing, self.nationalPrefixTransformRule, self.sameMobileAndFixedLinePattern?@"Y":@"N", self.numberFormats, self.intlNumberFormats, self.mainCountryForCode?@"Y":@"N", self.leadingDigits, self.leadingZeroPossible?@"Y":@"N"]; |
| } |
| |
| |
| - (void)buildData:(id)data |
| { |
| if (data != nil && [data isKindOfClass:[NSArray class]] ) |
| { |
| /* 1 */ self.generalDesc = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:1]]; |
| /* 2 */ self.fixedLine = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:2]]; |
| /* 3 */ self.mobile = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:3]]; |
| /* 4 */ self.tollFree = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:4]]; |
| /* 5 */ self.premiumRate = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:5]]; |
| /* 6 */ self.sharedCost = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:6]]; |
| /* 7 */ self.personalNumber = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:7]]; |
| /* 8 */ self.voip = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:8]]; |
| /* 21 */ self.pager = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:21]]; |
| /* 25 */ self.uan = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:25]]; |
| /* 27 */ self.emergency = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:27]]; |
| /* 28 */ self.voicemail = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:28]]; |
| /* 24 */ self.noInternationalDialling = [[NBPhoneNumberDesc alloc] initWithData:[data safeObjectAtIndex:24]]; |
| /* 9 */ self.codeID = [data safeObjectAtIndex:9]; |
| /* 10 */ self.countryCode = [data safeObjectAtIndex:10]; |
| /* 11 */ self.internationalPrefix = [data safeObjectAtIndex:11]; |
| /* 17 */ self.preferredInternationalPrefix = [data safeObjectAtIndex:17]; |
| /* 12 */ self.nationalPrefix = [data safeObjectAtIndex:12]; |
| /* 13 */ self.preferredExtnPrefix = [data safeObjectAtIndex:13]; |
| /* 15 */ self.nationalPrefixForParsing = [data safeObjectAtIndex:15]; |
| /* 16 */ self.nationalPrefixTransformRule = [data safeObjectAtIndex:16]; |
| /* 18 */ self.sameMobileAndFixedLinePattern = [[data safeObjectAtIndex:18] boolValue]; |
| /* 19 */ self.numberFormats = [self numberFormatArrayFromData:[data safeObjectAtIndex:19]]; // NBNumberFormat array |
| /* 20 */ self.intlNumberFormats = [self numberFormatArrayFromData:[data safeObjectAtIndex:20]]; // NBNumberFormat array |
| /* 22 */ self.mainCountryForCode = [[data safeObjectAtIndex:22] boolValue]; |
| /* 23 */ self.leadingDigits = [data safeObjectAtIndex:23]; |
| /* 26 */ self.leadingZeroPossible = [[data safeObjectAtIndex:26] boolValue]; |
| } |
| else |
| { |
| NSLog(@"nil data or wrong data type"); |
| } |
| } |
| |
| |
| - (id)initWithCoder:(NSCoder*)coder |
| { |
| if (self = [super init]) |
| { |
| self.generalDesc = [coder decodeObjectForKey:@"generalDesc"]; |
| self.fixedLine = [coder decodeObjectForKey:@"fixedLine"]; |
| self.mobile = [coder decodeObjectForKey:@"mobile"]; |
| self.tollFree = [coder decodeObjectForKey:@"tollFree"]; |
| self.premiumRate = [coder decodeObjectForKey:@"premiumRate"]; |
| self.sharedCost = [coder decodeObjectForKey:@"sharedCost"]; |
| self.personalNumber = [coder decodeObjectForKey:@"personalNumber"]; |
| self.voip = [coder decodeObjectForKey:@"voip"]; |
| self.pager = [coder decodeObjectForKey:@"pager"]; |
| self.uan = [coder decodeObjectForKey:@"uan"]; |
| self.emergency = [coder decodeObjectForKey:@"emergency"]; |
| self.voicemail = [coder decodeObjectForKey:@"voicemail"]; |
| self.noInternationalDialling = [coder decodeObjectForKey:@"noInternationalDialling"]; |
| self.codeID = [coder decodeObjectForKey:@"codeID"]; |
| self.countryCode = [coder decodeObjectForKey:@"countryCode"]; |
| self.internationalPrefix = [coder decodeObjectForKey:@"internationalPrefix"]; |
| self.preferredInternationalPrefix = [coder decodeObjectForKey:@"preferredInternationalPrefix"]; |
| self.nationalPrefix = [coder decodeObjectForKey:@"nationalPrefix"]; |
| self.preferredExtnPrefix = [coder decodeObjectForKey:@"preferredExtnPrefix"]; |
| self.nationalPrefixForParsing = [coder decodeObjectForKey:@"nationalPrefixForParsing"]; |
| self.nationalPrefixTransformRule = [coder decodeObjectForKey:@"nationalPrefixTransformRule"]; |
| self.sameMobileAndFixedLinePattern = [[coder decodeObjectForKey:@"sameMobileAndFixedLinePattern"] boolValue]; |
| self.numberFormats = [coder decodeObjectForKey:@"numberFormats"]; |
| self.intlNumberFormats = [coder decodeObjectForKey:@"intlNumberFormats"]; |
| self.mainCountryForCode = [[coder decodeObjectForKey:@"mainCountryForCode"] boolValue]; |
| self.leadingDigits = [coder decodeObjectForKey:@"leadingDigits"]; |
| self.leadingZeroPossible = [[coder decodeObjectForKey:@"leadingZeroPossible"] boolValue]; |
| } |
| return self; |
| } |
| |
| |
| - (void)encodeWithCoder:(NSCoder*)coder |
| { |
| [coder encodeObject:self.generalDesc forKey:@"generalDesc"]; |
| [coder encodeObject:self.fixedLine forKey:@"fixedLine"]; |
| [coder encodeObject:self.mobile forKey:@"mobile"]; |
| [coder encodeObject:self.tollFree forKey:@"tollFree"]; |
| [coder encodeObject:self.premiumRate forKey:@"premiumRate"]; |
| [coder encodeObject:self.sharedCost forKey:@"sharedCost"]; |
| [coder encodeObject:self.personalNumber forKey:@"personalNumber"]; |
| [coder encodeObject:self.voip forKey:@"voip"]; |
| [coder encodeObject:self.pager forKey:@"pager"]; |
| [coder encodeObject:self.uan forKey:@"uan"]; |
| [coder encodeObject:self.emergency forKey:@"emergency"]; |
| [coder encodeObject:self.voicemail forKey:@"voicemail"]; |
| [coder encodeObject:self.noInternationalDialling forKey:@"noInternationalDialling"]; |
| [coder encodeObject:self.codeID forKey:@"codeID"]; |
| [coder encodeObject:self.countryCode forKey:@"countryCode"]; |
| [coder encodeObject:self.internationalPrefix forKey:@"internationalPrefix"]; |
| [coder encodeObject:self.preferredInternationalPrefix forKey:@"preferredInternationalPrefix"]; |
| [coder encodeObject:self.nationalPrefix forKey:@"nationalPrefix"]; |
| [coder encodeObject:self.preferredExtnPrefix forKey:@"preferredExtnPrefix"]; |
| [coder encodeObject:self.nationalPrefixForParsing forKey:@"nationalPrefixForParsing"]; |
| [coder encodeObject:self.nationalPrefixTransformRule forKey:@"nationalPrefixTransformRule"]; |
| [coder encodeObject:[NSNumber numberWithBool:self.sameMobileAndFixedLinePattern] forKey:@"sameMobileAndFixedLinePattern"]; |
| [coder encodeObject:self.numberFormats forKey:@"numberFormats"]; |
| [coder encodeObject:self.intlNumberFormats forKey:@"intlNumberFormats"]; |
| [coder encodeObject:[NSNumber numberWithBool:self.mainCountryForCode] forKey:@"mainCountryForCode"]; |
| [coder encodeObject:self.leadingDigits forKey:@"leadingDigits"]; |
| [coder encodeObject:[NSNumber numberWithBool:self.leadingZeroPossible] forKey:@"leadingZeroPossible"]; |
| } |
| |
| |
| - (NSMutableArray*)numberFormatArrayFromData:(id)data |
| { |
| NSMutableArray *resArray = [[NSMutableArray alloc] init]; |
| if (data != nil && [data isKindOfClass:[NSArray class]]) |
| { |
| for (id numFormat in data) |
| { |
| NBNumberFormat *newNumberFormat = [[NBNumberFormat alloc] initWithData:numFormat]; |
| [resArray addObject:newNumberFormat]; |
| } |
| } |
| |
| return resArray; |
| } |
| |
| /* |
| - (NSString*)getNormalizedNationalPrefixFormattingRule |
| { |
| NSString *replacedFormattingRule = [self.nationalPrefixFormattingRule stringByReplacingOccurrencesOfString:@"$NP" withString:self.nationalPrefix]; |
| return replacedFormattingRule; |
| } |
| |
| |
| - (BOOL)sameMobileAndFixedLinePattern |
| { |
| if ([self.mobile isEqual:self.fixedLine]) return YES; |
| return NO; |
| } |
| |
| |
| - (NBPhoneNumberDesc*)inheriteValues:(NBPhoneNumberDesc*)targetDesc |
| { |
| if (targetDesc == nil) |
| { |
| targetDesc = [[NBPhoneNumberDesc alloc] init]; |
| } |
| |
| if (self.generalDesc != nil) |
| { |
| if (targetDesc.nationalNumberPattern == nil) |
| { |
| if (self.generalDesc.nationalNumberPattern != nil) |
| targetDesc.nationalNumberPattern = [self.generalDesc.nationalNumberPattern copy]; |
| } |
| |
| if (targetDesc.possibleNumberPattern == nil) |
| { |
| if (self.generalDesc.possibleNumberPattern != nil) |
| targetDesc.possibleNumberPattern = [self.generalDesc.possibleNumberPattern copy]; |
| } |
| |
| if (targetDesc.exampleNumber == nil) |
| { |
| if (self.generalDesc.exampleNumber != nil) |
| targetDesc.exampleNumber = [self.generalDesc.exampleNumber copy]; |
| } |
| } |
| |
| return targetDesc; |
| } |
| |
| |
| - (void)updateDescriptions |
| { |
| self.fixedLine = [[self inheriteValues:self.fixedLine] copy]; |
| self.mobile = [[self inheriteValues:self.mobile] copy]; |
| self.tollFree = [[self inheriteValues:self.tollFree] copy]; |
| self.premiumRate = [[self inheriteValues:self.premiumRate] copy]; |
| self.sharedCost = [[self inheriteValues:self.sharedCost] copy]; |
| self.personalNumber = [[self inheriteValues:self.personalNumber] copy]; |
| self.voip = [[self inheriteValues:self.voip] copy]; |
| self.pager = [[self inheriteValues:self.pager] copy]; |
| self.uan = [[self inheriteValues:self.uan] copy]; |
| self.emergency = [[self inheriteValues:self.emergency] copy]; |
| self.voicemail = [[self inheriteValues:self.voicemail] copy]; |
| self.noInternationalDialling = [[self inheriteValues:self.noInternationalDialling] copy]; |
| } |
| |
| |
| - (void)setAttributes:(NSDictionary*)data |
| { |
| NSString *attributeName = [data valueForKey:@"attributeName"]; |
| id attributeContent = [data valueForKey:@"nodeContent"]; |
| |
| if ([attributeContent isKindOfClass:[NSString class]] && [attributeContent length] > 0) |
| attributeContent = [NBPhoneNumberManager stringByTrimming:attributeContent]; |
| |
| if (attributeName && [attributeName isKindOfClass:[NSString class]] && [attributeName length] > 0 && [attributeName isEqualToString:@"id"] && |
| attributeContent && [attributeContent isKindOfClass:[NSString class]] && [attributeContent length] > 0) |
| { |
| [self setCodeID:attributeContent]; |
| } |
| else if (attributeName && [attributeName isKindOfClass:[NSString class]] && [attributeName length] > 0 && attributeContent && [attributeContent isKindOfClass:[NSString class]] && [attributeContent length] > 0) |
| { |
| @try { |
| if ([[attributeContent lowercaseString] isEqualToString:@"true"]) |
| { |
| [self setValue:[NSNumber numberWithBool:YES] forKey:attributeName]; |
| } |
| else if ([[attributeContent lowercaseString] isEqualToString:@"false"]) |
| { |
| [self setValue:[NSNumber numberWithBool:NO] forKey:attributeName]; |
| } |
| else |
| { |
| [self setValue:attributeContent forKey:attributeName]; |
| } |
| } |
| @catch (NSException *ex) { |
| NSLog(@"setAttributes setValue:%@ forKey:%@ error [%@]", attributeContent, attributeName, [attributeContent class]); |
| } |
| } |
| } |
| |
| |
| - (BOOL)setChilds:(id)data |
| { |
| if (data && [data isKindOfClass:[NSDictionary class]]) |
| { |
| NSString *nodeName = [data valueForKey:@"nodeName"]; |
| id nodeContent = [data valueForKey:@"nodeContent"]; |
| |
| if ([nodeContent isKindOfClass:[NSString class]] && [nodeContent length] > 0) |
| nodeContent = [NBPhoneNumberManager stringByTrimming:nodeContent]; |
| |
| // [TYPE] PhoneNumberDesc |
| if ([nodeName isEqualToString:@"generalDesc"] || [nodeName isEqualToString:@"fixedLine"] || [nodeName isEqualToString:@"mobile"] || [nodeName isEqualToString:@"shortCode"] || [nodeName isEqualToString:@"emergency"] || [nodeName isEqualToString:@"voip"] || [nodeName isEqualToString:@"voicemail"] || [nodeName isEqualToString:@"uan"] || [nodeName isEqualToString:@"premiumRate"] || [nodeName isEqualToString:@"nationalNumberPattern"] || [nodeName isEqualToString:@"sharedCost"] || [nodeName isEqualToString:@"tollFree"] || [nodeName isEqualToString:@"noInternationalDialling"] || [nodeName isEqualToString:@"personalNumber"] || [nodeName isEqualToString:@"pager"] || [nodeName isEqualToString:@"areaCodeOptional"]) |
| { |
| [self setNumberDescData:data]; |
| return YES; |
| } |
| else if ([nodeName isEqualToString:@"availableFormats"]) |
| { |
| [self setNumberFormatsData:data]; |
| return YES; |
| } |
| else if ([nodeName isEqualToString:@"comment"] == NO && [nodeContent isKindOfClass:[NSString class]]) |
| { |
| [self setValue:nodeContent forKey:nodeName]; |
| return YES; |
| } |
| else if ([nodeName isEqualToString:@"comment"]) |
| { |
| return YES; |
| } |
| } |
| |
| return NO; |
| } |
| |
| |
| - (void)setNumberFormatsData:(id)data |
| { |
| NSArray *nodeChildArray = [data valueForKey:@"nodeChildArray"]; |
| |
| for (id childNumberFormat in nodeChildArray) |
| { |
| NSArray *nodeChildAttributeNumberFormatArray = [childNumberFormat valueForKey:@"nodeAttributeArray"]; |
| NSArray *nodeChildNodeNumberFormatArray = [childNumberFormat valueForKey:@"nodeChildArray"]; |
| |
| NSString *nodeName = [childNumberFormat valueForKey:@"nodeName"]; |
| |
| if ([nodeName isEqualToString:@"numberFormat"]) |
| { |
| NBNumberFormat *newNumberFormat = [[NBNumberFormat alloc] init]; |
| |
| for (id childAttribute in nodeChildAttributeNumberFormatArray) |
| { |
| NSString *childNodeName = [childAttribute valueForKey:@"attributeName"]; |
| NSString *childNodeContent = nil; |
| |
| if ([childNodeName isEqualToString:@"comment"]) |
| { |
| continue; |
| } |
| |
| childNodeContent = [NBPhoneNumberManager stringByTrimming:[childAttribute valueForKey:@"nodeContent"]]; |
| |
| @try { |
| [newNumberFormat setValue:childNodeContent forKey:childNodeName]; |
| } |
| @catch (NSException *ex) { |
| NSLog(@"nodeChildAttributeArray setValue:%@ forKey:%@ error [%@] %@", childNodeContent, childNodeName, [childNodeContent class], childAttribute); |
| } |
| } |
| |
| for (id childNode in nodeChildNodeNumberFormatArray) |
| { |
| NSString *childNodeName = [childNode valueForKey:@"nodeName"]; |
| NSString *childNodeContent = nil; |
| |
| if ([childNodeName isEqualToString:@"comment"]) |
| { |
| continue; |
| } |
| |
| childNodeContent = [NBPhoneNumberManager stringByTrimming:[childNode valueForKey:@"nodeContent"]]; |
| |
| @try { |
| if ([childNodeName isEqualToString:@"leadingDigits"]) |
| { |
| [newNumberFormat.leadingDigitsPattern addObject:childNodeContent]; |
| } |
| else |
| { |
| if ([[childNodeContent lowercaseString] isEqualToString:@"true"]) |
| { |
| [newNumberFormat setValue:[NSNumber numberWithBool:YES] forKey:childNodeName]; |
| } |
| else if ([[childNodeContent lowercaseString] isEqualToString:@"false"]) |
| { |
| [newNumberFormat setValue:[NSNumber numberWithBool:NO] forKey:childNodeName]; |
| } |
| else |
| { |
| [newNumberFormat setValue:childNodeContent forKey:childNodeName]; |
| } |
| } |
| } |
| @catch (NSException *ex) { |
| NSLog(@"nodeChildArray setValue:%@ forKey:%@ error [%@] %@", childNodeContent, childNodeName, [childNodeContent class], childNode); |
| } |
| } |
| [self.numberFormats addObject:newNumberFormat]; |
| } |
| else if ([nodeName isEqualToString:@"comment"] == NO) |
| { |
| NSLog(@"process ========== %@", childNumberFormat); |
| } |
| } |
| } |
| |
| |
| - (void)setNumberDescData:(id)data |
| { |
| NSString *nodeName = [data valueForKey:@"nodeName"]; |
| NSArray *nodeChildArray = [data valueForKey:@"nodeChildArray"]; |
| |
| NBPhoneNumberDesc *newNumberDesc = [[NBPhoneNumberDesc alloc] init]; |
| |
| for (id childNode in nodeChildArray) |
| { |
| NSString *childNodeName = [childNode valueForKey:@"nodeName"]; |
| NSString *childNodeContent = [NBPhoneNumberManager stringByTrimming:[childNode valueForKey:@"nodeContent"]]; |
| |
| if ([childNodeName isEqualToString:@"comment"]) |
| { |
| continue; |
| } |
| |
| @try { |
| if (childNodeContent && childNodeContent.length > 0) |
| { |
| [newNumberDesc setValue:childNodeContent forKey:childNodeName]; |
| } |
| } |
| @catch (NSException *ex) { |
| NSLog(@"setNumberDesc setValue:%@ forKey:%@ error [%@]", childNodeContent, childNodeName, [childNodeContent class]); |
| } |
| } |
| |
| nodeName = [nodeName lowercaseString]; |
| |
| if ([nodeName isEqualToString:[@"generalDesc" lowercaseString]]) |
| self.generalDesc = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"fixedLine" lowercaseString]]) |
| self.fixedLine = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"mobile" lowercaseString]]) |
| self.mobile = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"tollFree" lowercaseString]]) { |
| [self setTollFree:newNumberDesc]; |
| } |
| |
| if ([nodeName isEqualToString:[@"premiumRate" lowercaseString]]) |
| self.premiumRate = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"sharedCost" lowercaseString]]) { |
| self.sharedCost = newNumberDesc; |
| } |
| |
| if ([nodeName isEqualToString:[@"personalNumber" lowercaseString]]) |
| self.personalNumber = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"voip" lowercaseString]]) |
| self.voip = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"pager" lowercaseString]]) |
| self.pager = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"uan" lowercaseString]]) |
| self.uan = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"emergency" lowercaseString]]) |
| self.emergency = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"voicemail" lowercaseString]]) |
| self.voicemail = newNumberDesc; |
| |
| if ([nodeName isEqualToString:[@"noInternationalDialling" lowercaseString]]) |
| self.noInternationalDialling = newNumberDesc; |
| |
| [self updateDescriptions]; |
| } |
| */ |
| |
| @end |