#import "MuTapResult.h"

@implementation MuTapResult
-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock {}
@end


@implementation MuTapResultInternalLink

@synthesize pageNumber;

-(id) initWithPageNumber:(int)aNumber
{
	self = [super init];
	if (self)
	{
		pageNumber = aNumber;
	}
	return self;
}

-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock
{
	internalLinkBlock(self);
}

@end


@implementation MuTapResultExternalLink

@synthesize url;

-(id) initWithUrl:(NSString *)aString
{
	self = [super init];
	if (self)
	{
		url = [aString retain];
	}
	return self;
}

-(void) dealloc
{
	[url release];
	[super dealloc];
}

-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock
{
	externalLinkBlock(self);
}

@end


@implementation MuTapResultRemoteLink

@synthesize fileSpec, pageNumber, newWindow;

-(id) initWithFileSpec:(NSString *)aString pageNumber:(int)aNumber newWindow:(BOOL)aBool
{
	self = [super init];
	if (self)
	{
		fileSpec = [aString retain];
		pageNumber = aNumber;
		newWindow = aBool;
	}
	return self;
}

-(void) dealloc
{
	[fileSpec release];
	[super dealloc];
}

-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock
{
	remoteLinkBlock(self);
}

@end


@implementation MuTapResultWidget

-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock
{
	widgetBlock(self);
}

@end


@implementation MuTapResultAnnotation

@synthesize annot;

-(id) initWithAnnotation:(MuAnnotation *)aAnnot
{
	self = [super init];
	if (self)
	{
		annot = [aAnnot retain];
	}
	return self;
}

-(void) dealloc
{
	[annot release];
	[super dealloc];
}

-(void) switchCaseInternal:(void (^)(MuTapResultInternalLink *))internalLinkBlock caseExternal:(void (^)(MuTapResultExternalLink *))externalLinkBlock caseRemote:(void (^)(MuTapResultRemoteLink *))remoteLinkBlock caseWidget:(void (^)(MuTapResultWidget *))widgetBlock caseAnnotation:(void (^)(MuTapResultAnnotation *))annotationBlock
{
	annotationBlock(self);
}

@end