use XML::Atom::Entry;
use List::Util qw( first );
+use constant ACTIVITY_NAMESPACE_URI => "http://activitystrea.ms/spec/1.0/";
+use constant ACTIVITY_NAMESPACE => XML::Atom::Namespace->new(
+ 'activity' => ACTIVITY_NAMESPACE_URI,
+);
+
sub init_empty {
my $entry = shift;
$entry->{entry} = XML::Atom::Entry->new(Version => 1.0);
}
}
+sub activity_verbs {
+ my $entry = shift->{entry};
+
+ if (@_) {
+ my @verbs = @_;
+
+ # Remove all of the existing verb elements.
+ my @existing_verbs = XML::Atom::Util::childlist($entry->elem, ACTIVITY_NAMESPACE_URI(), 'verb');
+ foreach my $elem (@existing_verbs) {
+ $entry->elem->removeChild($elem);
+ }
+
+ foreach my $verb (@verbs) {
+ $entry->set(ACTIVITY_NAMESPACE(), 'verb', $verb, undef, 1);
+ }
+ }
+ else {
+ # FIXME: This currently returns all decendent verbs, not just
+ # children. This might get troublesome if, for example,
+ # there's ever an activity entry with an activity as its
+ # object, or something crazy like that.
+ return $entry->getlist(ACTIVITY_NAMESPACE(), 'verb');
+ }
+}
+
+sub activity_object_types {
+ my $entry = shift->{entry};
+
+ if (@_) {
+ my @types = @_;
+
+ # Remove all of the existing type elements.
+ my @existing_types = XML::Atom::Util::childlist($entry->elem, ACTIVITY_NAMESPACE_URI(), 'object-type');
+ foreach my $elem (@existing_types) {
+ $entry->elem->removeChild($elem);
+ }
+
+ foreach my $type (@types) {
+ $entry->set(ACTIVITY_NAMESPACE(), 'object-type', $type, undef, 1);
+ }
+ }
+ else {
+ # FIXME: This currently returns all decendent types, not just
+ # children. This means that it'll erroneously return
+ # an activity:object-type nested inside an activity:object.
+ return $entry->getlist(ACTIVITY_NAMESPACE(), 'object-type');
+ }
+}
+
+sub activity_object {
+ my $entry = shift->{entry};
+
+ if (@_) {
+ # Need to accept any arbitrary XML::Feed::Entry and turn it into
+ # an XML::Atom::Entry here, then call:
+ # $entry->set(ACTIVITY_NAMESPACE, 'object', $xml_atom_entry);
+ die "setting activity_object is not yet implemented";
+ } else {
+ my ($object_elem) = XML::Atom::Util::childlist($entry->elem, ACTIVITY_NAMESPACE_URI(), 'object');
+ if (defined $object_elem) {
+ my $ret = XML::Atom::Entry->new(Elem => $object_elem);
+ # If we're holding an activity:object element then our primary
+ # namespace will be set wrong, so let's put it back.
+ XML::Atom::Util::set_ns($ret, { Version => "1.0" });
+ return XML::Feed::Entry::Format::Atom->wrap($ret);
+ }
+ else {
+ return undef;
+ }
+ }
+}
+
1;