#!/usr/bin/perl # -*- Mode: perl -*- #====================================================================== # FILE: Component.pm # CREATOR: eric 16 August 1999 # # DESCRIPTION: # # # $Id: Component.pm,v 1.8 2000/05/24 04:41:32 eric Exp $ # $Locker: $ # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. ( Either the Artistic License or the # GPL. ) # # The Original Code is Component.pm. The Initial Developer of the Original # Code is Eric Busboom # #====================================================================== package Net::ICal::Component; use Net::ICal; use Carp; sub new { my $package = shift; my $string_r = shift; my $self = {}; # HACK. Oddly, this will fail if you use "undef $\; $in =<>" to # slurp up a whole file into a string. I suspect that it interferes # with the flex lexer, but I don't really know. my $c = Net::ICal::icalparser_parse_string($$string_r); return Net::ICal::Component::new_from_ref($c); } sub new_from_ref{ my $comp_ref = shift; my $self = {}; #Net::ICal::icalproperty_as_ical_string($comp_ref); return undef if !$comp_ref; my $value_type = Net::ICal::icalcomponent_isa($comp_ref); my $type_name = Net::ICal::icalenum_component_kind_to_string($value_type); confess "Unknown component type: \"$type_name\" " if !$type_name; my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$type_name)); my $package = "Net::ICal::Component::".$ucf; $self->{'impl'} = $comp_ref; bless $self, $package; return $self; } sub _impl{ my $self = shift; return $self->{'impl'}; } sub clone { my $self = shift; my $impl = $self->_impl(); my $c = Net::ICal::icalcomponent_new_clone($impl); return Net::ICal::Component::new_from_ref($c); } sub type { my $self = shift; my $impl = $self->_impl(); my $type = Net::ICal::icalcomponent_isa($impl); return Net::ICal::icalenum_component_kind_to_string($type); } sub is_valid { my $self = shift; my $impl = $self->_impl(); } sub _add_elements{ my $self = shift; my $arrayref = shift; my $e; while( $e = shift @{$arrayref}) { $self->add($e); } } sub remove { die "Not Implemented"; } sub add { my $self = shift; my $impl = $self->_impl(); my $part; while($part = shift){ next if $part eq undef; if ((ref $part) ne undef and Net::ICal::icalcomponent_isa_component($part->_impl())) { $part->{'nofree'}++; Net::ICal::icalcomponent_add_component($impl,$part->_impl()); } elsif ((ref $part) ne undef and Net::ICal::icalproperty_isa_property($part->_impl)) { $part->{'nofree'}++; Net::ICal::icalcomponent_add_property($impl,$part->_impl()); } } } sub as_ical_string { my $self = shift; return Net::ICal::icalcomponent_as_ical_string($self->_impl()); } sub properties{ my $self = shift; my $type = shift; my @array; my $p; if ($type){ $prop_kind = Net::ICal::icalenum_string_to_property_kind($type); } else { $prop_kind = $Net::ICal::ICAL_ANY_PROPERTY; } for($p = Net::ICal::icalcomponent_get_first_property($self->_impl(),$prop_kind); $p != undef; $p = Net::ICal::icalcomponent_get_next_property($self->_impl(),$prop_kind) ) { my $prop = Net::ICal::Property::new_from_ref($p); push (@array, $prop); } return @array; } sub components{ my $self = shift; my $type = shift; my @array; my $c; my $comp_kind; if ($type){ $comp_kind = Net::ICal::icalenum_string_to_component_kind($type); } else { $comp_kind = $Net::ICal::ICAL_ANY_COMPONENT; } for($c = Net::ICal::icalcomponent_get_first_component($self->_impl(),$comp_kind); $c != undef; $c = Net::ICal::icalcomponent_get_next_component($self->_impl(),$comp_kind) ) { my $comp = Net::ICal::Component::new_from_ref($c); push (@array, $comp); } return @array; } sub convert_errors { my $self = shift; return Net::ICal::icalcomponent_convert_errors($self->_impl()); } sub strip_errors { my $self = shift; return Net::ICal::icalcomponent_strip_errors($self->_impl()); } sub count_errors { my $self = shift; return Net::ICal::icalcomponent_count_errors($self->_impl()); } sub check_restrictions { my $self = shift; return Net::ICal::icalrestriction_check($self->_impl()); } sub DESTROY { my $self = shift; return if !$self; return if !$self->impl(); return if Net::ICal::icalcomponent_get_parent($self->_impl()); print "Free: ".$self->_impl()."\n"; Net::ICal::icalcomponent_free($self->_impl()); } # Everything below this line is machine generated. Do not edit. # VCALENDAR package Net::ICal::Component::Vcalendar; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VCALENDAR_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VEVENT package Net::ICal::Component::Vevent; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VEVENT_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VTODO package Net::ICal::Component::Vtodo; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VTODO_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VJOURNAL package Net::ICal::Component::Vjournal; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VJOURNAL_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VFREEBUSY package Net::ICal::Component::Vfreebusy; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VFREEBUSY_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VTIMEZONE package Net::ICal::Component::Vtimezone; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VTIMEZONE_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XSTANDARDTIME package Net::ICal::Component::Xstandardtime; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XSTANDARDTIME_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XDAYLIGHTSAVINGSTIME package Net::ICal::Component::Xdaylightsavingstime; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XDAYLIGHTSAVINGSTIME_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VALARM package Net::ICal::Component::Valarm; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VALARM_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XAUDIOALARM package Net::ICal::Component::Xaudioalarm; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XAUDIOALARM_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XDISPLAYALARM package Net::ICal::Component::Xdisplayalarm; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XDISPLAYALARM_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XEMAILALARM package Net::ICal::Component::Xemailalarm; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XEMAILALARM_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XPROCEDUREALARM package Net::ICal::Component::Xprocedurealarm; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XPROCEDUREALARM_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # X package Net::ICal::Component::X; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_X_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VSCHEDULE package Net::ICal::Component::Vschedule; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VSCHEDULE_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VQUERY package Net::ICal::Component::Vquery; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VQUERY_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VCAR package Net::ICal::Component::Vcar; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VCAR_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # VCOMMAND package Net::ICal::Component::Vcommand; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_VCOMMAND_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # XLICINVALID package Net::ICal::Component::Xlicinvalid; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_XLICINVALID_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; } # ANY package Net::ICal::Component::Any; @ISA=qw(Net::ICal::Component); sub new { my $package = shift; my $c = Net::ICal::icalcomponent_new($Net::ICal::ICAL_ANY_COMPONENT); my $self = Net::ICal::Component::new_from_ref($c); Net::ICal::Component::_add_elements($self,\@_); # Self is blessed in new_from_ref return $self; }