Perl::Dist::WiX::FeatureTree - Tree of <Feature> tag objects.


Perl-Dist-WiX documentation Contained in the Perl-Dist-WiX distribution.

Index


Code Index:

NAME

Top

Perl::Dist::WiX::FeatureTree - Tree of <Feature> tag objects.

VERSION

Top

This document describes Perl::Dist::WiX::FeatureTree version 1.500.

SYNOPSIS

Top

	my $tree = Perl::Dist::WiX::FeatureTree->new(
		parent => $dist,
	);

	my $xml = $tree->as_string();

DESCRIPTION

Top

This module contains the feature tree for a distribution.

Currently, this implements a "feature tree" with one feature. Multiple features will be implemented during the October 2010 release cycle.

INTERFACE

Top

new

	my $tree = Perl::Dist::WiX::FeatureTree->new(
		parent => $dist,
	);

The new method creates a new feature tree object for the Perl::Dist::WiX object passed as its parent parameter.

as_string

	my $xml = $tree->as_string();

The as_string method returns XML representing this feature tree object for use in the main .msi.

as_string_msm

	my $xml = $tree->as_string_msm();

The as_string method returns XML representing this feature tree object for use in merge modules.

add_merge_module

	$self->add_merge_module($mm)

This routine adds a merge module reference to the feature tree.

The $mm parameter is the Perl::Dist::WiX::Tag::MergeModule object to add a reference of.

DIAGNOSTICS

Top

See Perl::Dist::WiX::Diagnostics (Perl::Dist::WiX::Diagnostics) for a list of exceptions that this module can throw.

BUGS AND LIMITATIONS (SUPPORT)

Top

Bugs should be reported via:

1) The CPAN bug tracker at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Perl-Dist-WiX if you have an account there.

2) Email to <bug-Perl-Dist-WiX@rt.cpan.org> if you do not.

For other issues, contact the topmost author.

AUTHORS

Top

Curtis Jewell <csjewell@cpan.org>

Adam Kennedy <adamk@cpan.org>

SEE ALSO

Top

Perl::Dist::WiX, http://ali.as/, http://csjewell.comyr.com/perl/

COPYRIGHT AND LICENSE

Top


Perl-Dist-WiX documentation Contained in the Perl-Dist-WiX distribution.
package Perl::Dist::WiX::FeatureTree;

use 5.010;
use Moose 0.90;
use WiX3::XML::Feature qw();
use namespace::clean -except => 'meta';

our $VERSION = '1.500';
$VERSION =~ s/_//ms;



has parent => (
	is       => 'ro',
	isa      => 'Perl::Dist::WiX',
	weak_ref => 1,
	handles  => {
		'_app_ver_name'   => 'app_ver_name',
		'_feature_tree'   => 'msi_feature_tree',
		'_get_components' => 'get_component_array',
		'_trace_line'     => 'trace_line',
	},
);



has _features => (
	traits   => ['Array'],
	is       => 'ro',
	isa      => 'ArrayRef[WiX3::XML::Feature]',
	default  => sub { [] },
	init_arg => undef,
	handles  => {
		'_push_feature'      => 'push',
		'_count_features'    => 'count',
		'_get_feature'       => 'get',
		'_get_feature_array' => 'elements',
	},
);



sub BUILD {
	my $self = shift;
	my $feat;

	# Start the tree.
	$self->_trace_line( 0, "Creating feature tree...\n" );
	if ( defined $self->_feature_tree() ) {
		PDWiX->throw( 'Complex feature tree not implemented in '
			  . "Perl::Dist::WiX $VERSION." );
	} else {
		$feat = WiX3::XML::Feature->new(
			id          => 'Complete',
			title       => $self->_app_ver_name(),
			description => 'The complete package.',
			level       => 1,
		);
		$feat->add_child_tag( $self->_get_components() );
		$self->_push_feature($feat);
	}

	return;
} ## end sub BUILD





sub as_string {
	my $self = shift;

	# Get the strings for each of our branches.
	my $spaces = q{    };              # Indent 4 spaces.
	my $answer = $spaces;
	foreach my $feature ( $self->_get_feature_array() ) {
		$answer .= $feature->as_string();
	}

	chomp $answer;
#<<<
	$answer =~ s{\n}                   # match a newline 
								{\n$spaces}gxms;       # and add spaces after it.
									   # (i.e. the beginning of the line.)
#>>>

	return $answer;
} ## end sub as_string





sub as_string_msm {
	my $self = shift;

	# Get the strings for each of our branches.
	my $spaces = q{    };              # Indent 4 spaces.
	my $answer = $spaces;
	foreach my $feature ( $self->_get_feature_array() ) {

		# We just want the children for this one, as
		# a merge module does not really use <Feature> tags.
		$answer .= $feature->as_string_children();
	}

	chomp $answer;
#<<<
	$answer =~ s{\n}                   # match a newline 
								{\n$spaces}gxms;       # and add spaces after it.
									   # (i.e. the beginning of the line.)
#>>>

	return $answer;
} ## end sub as_string_msm





sub add_merge_module {
	my $self  = shift;
	my $mm    = shift;
	my $index = shift || 0;

	my $feature = $self->_get_feature($index);
	$feature->add_child_tag( $mm->get_merge_reference() );

	return;
}

no Moose;
__PACKAGE__->meta->make_immutable;

1;

__END__