CocoaShare/Classes/Dropbox/DropboxSDK/MPOAuth/MPURLRequestParameter.m

171 lines
4.6 KiB
Mathematica
Raw Normal View History

2011-02-01 09:51:02 -06:00
//
// MPURLParameter.m
// MPOAuthConnection
//
// Created by Karl Adam on 08.12.05.
// Copyright 2008 matrixPointer. All rights reserved.
//
#import "MPURLRequestParameter.h"
#import "NSString+URLEscapingAdditions.h"
@implementation MPURLRequestParameter
+ (NSArray *)parametersFromString:(NSString *)inString {
NSMutableArray *foundParameters = [NSMutableArray arrayWithCapacity:10];
NSScanner *parameterScanner = [[NSScanner alloc] initWithString:inString];
NSString *thisName = nil;
NSString *thisValue = nil;
MPURLRequestParameter *currentParameter = nil;
while (![parameterScanner isAtEnd]) {
thisName = nil;
thisValue = nil;
[parameterScanner scanUpToString:@"=" intoString:&thisName];
[parameterScanner scanString:@"=" intoString:NULL];
[parameterScanner scanUpToString:@"&" intoString:&thisValue];
[parameterScanner scanString:@"&" intoString:NULL];
currentParameter = [[MPURLRequestParameter alloc] init];
currentParameter.name = thisName;
currentParameter.value = [thisValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[foundParameters addObject:currentParameter];
[currentParameter release];
}
[parameterScanner release];
return foundParameters;
}
+ (NSArray *)parametersFromDictionary:(NSDictionary *)inDictionary {
NSMutableArray *parameterArray = [[NSMutableArray alloc] init];
MPURLRequestParameter *aURLParameter = nil;
NSArray *keys = [inDictionary allKeys];
for (int i=0; i<[keys count]; i++) {
aURLParameter = [[MPURLRequestParameter alloc] init];
aURLParameter.name = [keys objectAtIndex:i];
aURLParameter.value = [inDictionary objectForKey:[keys objectAtIndex:i]];
[parameterArray addObject:aURLParameter];
[aURLParameter release];
}
return [parameterArray autorelease];
}
+ (NSDictionary *)parameterDictionaryFromString:(NSString *)inString {
NSMutableDictionary *foundParameters = [NSMutableDictionary dictionaryWithCapacity:10];
if (inString) {
NSScanner *parameterScanner = [[NSScanner alloc] initWithString:inString];
NSString *thisName = nil;
NSString *thisValue = nil;
while (![parameterScanner isAtEnd]) {
thisName = nil;
thisValue = nil;
[parameterScanner scanUpToString:@"=" intoString:&thisName];
[parameterScanner scanString:@"=" intoString:NULL];
[parameterScanner scanUpToString:@"&" intoString:&thisValue];
[parameterScanner scanString:@"&" intoString:NULL];
[foundParameters setObject:[thisValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] forKey:thisName];
}
[parameterScanner release];
}
return foundParameters;
}
+ (NSString *)parameterStringForParameters:(NSArray *)inParameters {
NSMutableString *queryString = [[NSMutableString alloc] init];
int i = 0;
int parameterCount = [inParameters count];
MPURLRequestParameter *aParameter = nil;
for (; i < parameterCount; i++) {
aParameter = [inParameters objectAtIndex:i];
[queryString appendString:[aParameter URLEncodedParameterString]];
if (i < parameterCount - 1) {
[queryString appendString:@"&"];
}
}
return [queryString autorelease];
}
+ (NSString *)parameterStringForDictionary:(NSDictionary *)inParameterDictionary {
NSArray *parameters = [self parametersFromDictionary:inParameterDictionary];
NSString *queryString = [self parameterStringForParameters:parameters];
return queryString;
}
#pragma mark -
- (id)init {
if (self = [super init]) {
}
return self;
}
- (id)initWithName:(NSString *)inName andValue:(NSString *)inValue {
if (self = [super init]) {
name = [inName copy];
value = [inValue copy];
}
return self;
}
- (oneway void)dealloc {
[name release];
[value release];
[super dealloc];
}
- (void)setName:(NSString *)theName {
[name release];
name = [theName copy];
}
- (NSString *)name {
return name;
}
- (void)setValue:(NSString *)theValue {
[value release];
value = [theValue copy];
}
- (NSString *)value {
return value;
}
#pragma mark -
- (NSString *)URLEncodedParameterString {
return [NSString stringWithFormat:@"%@=%@", [name stringByAddingURIPercentEscapesUsingEncoding:NSUTF8StringEncoding], value ? [value stringByAddingURIPercentEscapesUsingEncoding:NSUTF8StringEncoding] : @""];
}
#pragma mark -
- (NSComparisonResult)compare:(id)inObject {
NSComparisonResult result = [name compare:[(MPURLRequestParameter *)inObject name]];
if (result == NSOrderedSame) {
result = [value compare:[(MPURLRequestParameter *)inObject value]];
}
return result;
}
- (NSString *)description {
return [NSString stringWithFormat:@"<%@: %p %@>", NSStringFromClass([self class]), self, [self URLEncodedParameterString]];
}
@end