#import "XMPPStanza.h"
@implementation XMPPStanza
@synthesize from;
@synthesize to;
@synthesize type;
@synthesize ID;
+ stanzaWithName: (OFString*)name
{
return [[[self alloc] initWithName: name] autorelease];
}
+ stanzaWithName: (OFString*)name
type: (OFString*)type_
{
return [[[self alloc] initWithName: name
type: type_] autorelease];
}
+ stanzaWithName: (OFString*)name
ID: (OFString*)ID_
{
return [[[self alloc] initWithName: name
ID: ID_] autorelease];
}
+ stanzaWithName: (OFString*)name
type: (OFString*)type_
ID: (OFString*)ID_
{
return [[[self alloc] initWithName: name
type: type_
ID: ID_] autorelease];
}
+ stanzaWithElement: (OFXMLElement*)elem {
return [[[self alloc] initWithElement: elem] autorelease];
}
- initWithName: (OFString*)name_
{
return [self initWithName: name_
type: nil
ID: nil];
}
- initWithName: (OFString*)name_
type: (OFString*)type_
{
return [self initWithName: name_
type: type_
ID: nil];
}
- initWithName: (OFString*)name_
ID: (OFString*)ID_
{
return [self initWithName: name_
type: nil
ID: ID_];
}
- initWithName: (OFString*)name_
type: (OFString*)type_
ID: (OFString*)ID_
{
if (![name_ isEqual: @"iq"] &&
![name_ isEqual: @"message"] &&
![name_ isEqual: @"presence"])
of_log(@"Invalid stanza name!");
self = [super initWithName: name_];
@try {
[self setDefaultNamespace: @"jabber:client"];
if (type_)
[self setType: type_];
if (ID_)
[self setID: ID_];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- initWithElement: (OFXMLElement*)elem
{
self = [super initWithName: elem.name
namespace: elem.namespace];
@try {
OFXMLAttribute *attr;
OFXMLElement *el;
for (attr in elem.attributes) {
if ([attr.name isEqual: @"from"])
[self setFrom: [attr stringValue]];
else if ([attr.name isEqual: @"to"])
[self setTo: [attr stringValue]];
else if ([attr.name isEqual: @"type"])
[self setType: [attr stringValue]];
else if ([attr.name isEqual: @"id"])
[self setID: [attr stringValue]];
else
[self addAttribute: attr];
}
for (el in elem.children)
[self addChild: el];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[from release];
[to release];
[type release];
[ID release];
[super dealloc];
}
- (void)setFrom: (OFString*)from_
{
OFString* old = from;
from = [from_ copy];
[old release];
/* FIXME: Remove old attribute! */
[self addAttributeWithName: @"from"
stringValue: from_];
}
- (void)setTo: (OFString*)to_
{
OFString* old = to;
to = [to_ copy];
[old release];
/* FIXME: Remove old attribute! */
[self addAttributeWithName: @"to"
stringValue: to];
}
- (void)setType: (OFString*)type_
{
OFString* old = type;
type = [type_ copy];
[old release];
/* FIXME: Remove old attribute! */
[self addAttributeWithName: @"type"
stringValue: type];
}
- (void)setID: (OFString*)ID_
{
OFString* old = ID;
ID = [ID_ copy];
[old release];
/* FIXME: Remove old attribute! */
[self addAttributeWithName: @"id"
stringValue: ID];
}
@end