# NAME
Tree::Navigator - Generic navigation in various kinds of trees
# SYNOPSIS
Create a file `treenav.psgi` like this :
# create a navigator, then mount various kinds of nodes as shown below
use Tree::Navigator;
my $tn = Tree::Navigator->new;
# example 1 : browse through the filesystem
$tn->mount(Files => Filesys
=> {attributes => {label => 'My Web Files'},
mount_point => {root => '/path/to/files'}});
# example 2 : inspect tables and columns in a database
my $dbh = DBI->connect(...);
$tn->mount(MyDB => 'DBI' => {mount_point => {dbh => $dbh}});
# example 3 : browse through the Win32 registry
$tn->mount(HKCU => 'Win32::Registry' => {mount_point => {key => 'HKCU'}});
# example 4 : browse through Perl internals
$tn->mount(Ref => 'Perl::Ref' => {mount_point => {ref => $some_ref}});
$tn->mount(Stack => 'Perl::StackTrace' => {mount_point => {}});
$tn->mount(Symdump => 'Perl::Symdump' => {});
# create the application
my $app = $tn->to_app;
Then run the app
plackup treenav.psgi
or mount the app in Apache
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/treenav.psgi
and use your favorite web browser to navigate through your data.
# DESCRIPTION
## Introduction
This is a set of tools for navigating within various kinds of
_trees_; a tree is just a set of _nodes_, where each node may have a
_content_, may have _attributes_, and may have _children_
nodes. Examples of such structures are filesystems, FTP sites, email
boxes, Web sites, HTML pages, XML documents, etc.
The distribution provides
- an [abstract class for nodes](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode), with a few
concrete classes for some of the examples just mentioned above
- a server application for exposing the tree structure to
web clients
- a [debugging application](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3AApp%3A%3APerlDebug)
that uses the Tree Navigator to navigate into the
memory of a running Perl program.
## Status
This application was built as a proof-of-concept in 2012 and hasn't been much reworked
since. It is functional and actually is being used in production for some minor tasks,
but is not polished into a fully documented product. A minor modernization was performed
in 2024 to remove deprecated features no longer supported by recent versions of perl.
## Implemented nodes
The following kinds of nodes come with the distribution and therefore can readily be mounted
into a tree navigator :
- [Tree::Navigator::Node::DBI](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3ADBI)
Displays the metadata (tables and columns) of a database.
Navigation within the data rows is not implemented yet.
- [Tree::Navigator::Node::DBIDM](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3ADBIDM)
Meant to navigate in a database through a [DBIx::DataModel](https://metacpan.org/pod/DBIx%3A%3ADataModel) schema.
Not fully implemented.
- [Tree::Navigator::Node::Filesys](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3AFilesys)
Navigation in a filesystem, displaying file attributes and providing a download facility.
- [Tree::Navigator::Node::Perl::Ref](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3APerl%3A%3ARef)
Navigation in a perl datastructure.
- [Tree::Navigator::Node::Perl::StackTrace](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3APerl%3A%3AStackTrace)
Navigation in a perl stacktrace.
- [Tree::Navigator::Node::Perl::Symdump](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3APerl%3A%3ASymdump)
Navigation in a perl symbol table.
- [Tree::Navigator::Node::Win32::Registry](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode%3A%3AWin32%3A%3ARegistry)
Navigation in Windows registry.
Other kinds of nodes can be integrated into the framework by subclassing
[Tree::Navigator::Node](https://metacpan.org/pod/Tree%3A%3ANavigator%3A%3ANode) with methods for accessing the node's content, attributes and children.
# METHODS
## call
Main request dispatcher (see ["Component" in Plack](https://metacpan.org/pod/Plack#Component)).
# DEPENDENCIES
This application uses [Plack](https://metacpan.org/pod/Plack) and [Moose](https://metacpan.org/pod/Moose).
# AUTHOR
Laurent Dami, ``
# SEE ALSO
[Tree::Simple](https://metacpan.org/pod/Tree%3A%3ASimple)
# LICENSE AND COPYRIGHT
Copyright 2012, 2024 Laurent Dami.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.