man Tree::Simple::VisitorFactory () - A factory object for dispensing Visitor objects

NAME

Tree::Simple::VisitorFactory - A factory object for dispensing Visitor objects

SYNOPSIS

  use Tree::Simple::VisitorFactory;

  my $tf = Tree::Simple::VisitorFactory->new();

  my $visitor = $tf->get("PathToRoot");

  # or call it as a class method
  my $visitor = Tree::Simple::VisitorFactory->getVisitor("PathToRoot");

DESCRIPTION

This object is really just a factory for dispensing Tree::Simple::Visitor::* objects. It is not required to use this package in order to use all the Visitors, it is just a somewhat convienient way to avoid having to type thier long class names.

I considered making this a Singleton, but I did not because I thought that some people might not want that. I know that I am very picky about using Singletons, especially in multiprocess environments like mod_perl, so I implemented the smallest instance I knew how to, and made sure all other methods could be called as class methods too.

METHODS

new
Returns an minimal instance of this object, basically just a reference back to the package (literally, see the source if you care).
get ($visitor_type)
Attempts to load the CW$visitor_type and returns an instance of it if successfull. If no CW$visitor_type is specified an exception is thrown, if CW$visitor_type fails to load, and exception is thrown.
getVisitor ($visitor_type)
This is an alias of CWget.

AVAILABLE VISITORS

This distibution provides a number of Visitor objects which can be loaded just by giving their name. Below is a description of the available Visitors and a sort description of what they do. I have attempted to classify the Visitors into groups which are related to their use.

This factory will load any module contained inside the Tree::Simple::Visitor::* namespace. Given a name, it will attempt to CWrequire the module Tree::Simple::Visitor::<BIName>.pm. This allows others to create Visitors which can be accessed with this factory, without needed to include them in this distrobution.

Search/Path Related Visitors

PathToRoot
Given a Tree::Simple object, this Visitor will find the path back to the tree's root node.
FindByPath
Given a path and Tree::Simple hierarchy, this Visitor will attempt to find the node specified by the path.
FindByUID
Given a UID and Tree::Simple hierarchy, this Visitor will attempt to find the node with the same UID.
FindByNodeValue
Given a node value and Tree::Simple hierarchy, this Visitor will attempt to find the node with the same node value.

Traversal Visitors

BreadthFirstTraversal
This implements a breadth-first traversal of a Tree::Simple hierarchy.
PostOrderTraversal
Post-order traversal is a variation of the depth-first traversal in which the sub-tree's are processed before the parent.
PreOrderTraversal
Pre-order traversal is a depth-first traversal method in which the sub-tree's are processed after the parent.

FileSystem Visitors

LoadDirectoryTree
This visitor can be used to load a directory tree into a Tree::Simple hierarchy.
CreateDirectoryTree
This visitor can be used to create a set of directories and files from a Tree::Simple object hierarchy.

Conversion Visitors

FromNestedArray
Given a tree constructed from nested arrays, this Visitor will create the equivalent Tree::Simple heirarchy.
ToNestedArray
Given a Tree::Simple heirarchy, this Visitor will create the equivalent tree constructed from nested arrays.
FromNestedHash
Given a tree constructed from nested hashs, this Visitor will create the equivalent Tree::Simple heirarchy.
ToNestedHash
Given a Tree::Simple heirarchy, this Visitor will create the equivalent tree constructed from nested hashes.

Reflective Visitors

LoadClassHierarchy
Given a class name or instance, this Visitor will create a Tree::Simple hierarchy which models the classes inheritance heirarchy.

Misc. Visitors

GetAllDescendents
Given a Tree::Simple instance this Visitor will return all the descendents recursively on down the hierarchy.
Sort
This implements a multi-level sort of a Tree::Simple heirarchy.

BUGS

None that I am aware of. Of course, if you find a bug, let me know, and I will be sure to fix it.

CODE COVERAGE

I use Devel::Cover to test the code coverage of my tests, below is the Devel::Cover report on this module test suite.

 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 File                                           stmt branch   cond    sub    pod   time  total
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 Tree/Simple/VisitorFactory.pm                 100.0  100.0    n/a  100.0  100.0    0.4  100.0
 Tree/Simple/Visitor/FindByNodeValue.pm        100.0   69.2   76.2  100.0  100.0   12.7   88.9
 Tree/Simple/Visitor/FindByPath.pm             100.0   87.5   77.8  100.0  100.0    2.1   95.8
 Tree/Simple/Visitor/FindByUID.pm              100.0   69.2   76.2  100.0  100.0    2.4   88.9
 Tree/Simple/Visitor/PathToRoot.pm             100.0   50.0   81.8  100.0  100.0    7.4   90.0
 Tree/Simple/Visitor/GetAllDescendents.pm      100.0  100.0   86.7  100.0  100.0    4.7   97.2
 Tree/Simple/Visitor/Sort.pm                   100.0   66.7   83.3  100.0  100.0    3.3   94.2
 Tree/Simple/Visitor/LoadClassHierarchy.pm     100.0   61.5   33.3  100.0  100.0    1.5   84.9
 Tree/Simple/Visitor/LoadDirectoryTree.pm      100.0   82.1   80.0  100.0  100.0   43.2   91.7
 Tree/Simple/Visitor/CreateDirectoryTree.pm    100.0   71.4   72.2  100.0  100.0    4.7   90.4
 Tree/Simple/Visitor/BreadthFirstTraversal.pm  100.0   66.7   77.8  100.0  100.0    3.0   92.5
 Tree/Simple/Visitor/PostOrderTraversal.pm     100.0   66.7   58.3  100.0  100.0    1.7   86.8
 Tree/Simple/Visitor/PreOrderTraversal.pm      100.0    n/a   33.3  100.0  100.0    0.1   90.5
 Tree/Simple/Visitor/FromNestedArray.pm        100.0   94.4   80.0  100.0  100.0    7.5   95.4
 Tree/Simple/Visitor/FromNestedHash.pm         100.0   91.7   83.3  100.0  100.0    2.5   95.9
 Tree/Simple/Visitor/ToNestedArray.pm          100.0   40.0   77.8  100.0  100.0    1.3   85.7
 Tree/Simple/Visitor/ToNestedHash.pm           100.0   40.0   77.8  100.0  100.0    1.4   85.7
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------
 Total                                         100.0   72.6   74.8  100.0  100.0  100.0   91.1
 -------------------------------------------- ------ ------ ------ ------ ------ ------ ------

SEE ALSO

These Visitor classes are meant to work with Tree::Simple hierarchies, you should refer to that module for more information.

AUTHOR

stevan little, <stevan@iinteractive.com>

COPYRIGHT AND LICENSE

Copyright 2004 by Infinity Interactive, Inc.

<http://www.iinteractive.com>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.