package XML::Mini::TreeComponent;
use Data::Dumper;

use XML::Mini;

use strict;

use vars qw{
			
			$VERSION
};
			

$VERSION = '1.2.3';



#***************************************************************************************************
#****************************************************************************************************
#*****
#*****					  XML::MiniTreeComponent
#*****
#****************************************************************************************************
#***************************************************************************************************/


=head1 NAME

XML::Mini::TreeComponent - Perl implementation of the XML::Mini TreeComponent API.

=head1 SYNOPSIS

Don't use this class - only presents an interface for other derived classes.

=head1 DESCRIPTION

This class is only to be used as a base class
for others.

It presents the minimal interface we can expect
from any component in the XML hierarchy.

All methods of this base class 
simply return NULL except a little default functionality
included in the parent() method.

Warning: This class is not to be instatiated.
Derive and override.

=cut

sub new {
	my $class = shift;

	my $self = {};
	bless $self, ref $class || $class;

	return $self;
}



sub name {
	my $self = shift;
	my $setTo = shift; # optionally set

	return undef;
}

sub getElement {
	my $self = shift;
	my $name = shift;

return undef;
}

sub getValue {
	my $self = shift;

	return undef;
}

=head2 parent [NEWPARENT]

The parent() method is used to get/set the element's parent.

If the NEWPARENT parameter is passed, sets the parent to NEWPARENT
(NEWPARENT must be an instance of a class derived from XML::MiniTreeComponent)

Returns a reference to the parent XML::MiniTreeComponent if set, NULL otherwise.


=cut

sub parent {
	my $self = shift;
	my $newParent = shift; # optionally set

	if ($newParent)
	{
		my $ownType = ref $self;
		my $type = ref $newParent;
		if ($type && $type =~ /^$ownType/)
		{
			$self->{'_parent'} = $newParent;
		} else {
		return XML::Mini->Error("XML::MiniTreeComponent::parent(): Must pass an instance derived from "
				. "XML::MiniTreeComponent to set.");
		}
	}

	return $self->{'_parent'};
}


=head2 toString [DEPTH]

Return a stringified version of the XML representing
this component and all sub-components

=cut

sub toString {
	my $self = shift;
	my $depth = shift || 0;

	return undef;
}


=head2 dump

Debugging aid, dump returns a nicely formatted dump of the current structure of the
XML::Mini::TreeComponent-derived object.


=cut

sub dump {
	my $self = shift;

	return Dumper($self);
}

sub _spaceStr {
	my $self = shift;
	my $numSpaces = shift;

	my $retStr = '';

	if ($numSpaces)
	{
		$retStr = ' ' x $numSpaces;
	}

	return $retStr;
}



=head1 AUTHOR

LICENSE

    XML::Mini::TreeComponent module, part of the XML::Mini XML parser/generator package.
    Copyright (C) 2002 Patrick Deegan
    All rights reserved
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


Official XML::Mini site: http://minixml.psychogenic.com

Contact page for author available at http://www.psychogenic.com/en/contact.shtml

=head1 SEE ALSO


XML::Mini, XML::Mini::Document, XML::Mini::Element

http://minixml.psychogenic.com

=cut





1;

