diff -r dca795714caa -r 3901909be1ab common/tools/brag/toBrag.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/brag/toBrag.pm Mon Nov 16 14:47:25 2009 +0000 @@ -0,0 +1,160 @@ +#!perl -w +# +# Copyright (c) 2009 Symbian Foundation Ltd +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Symbian Foundation Ltd - initial contribution. +# +# Contributors: +# +# Description: +# Functionality common to BRAG file generation + +use strict; + +package ToBrag; + +# A useful constant +our $xmlNewline = bless { Text => "\n" }, "Characters"; + +sub createDocumentAndRoot +{ + my $rootTag = shift; + + my $root = bless + { + Kids => + [ $ToBrag::xmlNewline ] + }, $rootTag; + + return [$root], $root; +} + +sub createBuildStatus +{ + return [ + bless + { + Kids => + [ $ToBrag::xmlNewline ] + }, "buildStatus" + ]; +} + +sub ensurePhase +{ + my $buildStatus = shift; + my $phaseName = shift; + + my ($phase) = grep { ref $_ eq "phase" && $_->{name} eq $phaseName } @{$buildStatus->[-1]->{Kids}}; + unless ($phase) + { + $phase = bless + { + name => $phaseName, + Kids => [ $ToBrag::xmlNewline ] + }, "phase"; + push @{$buildStatus->[-1]->{Kids}}, $phase, $ToBrag::xmlNewline; + } + return $phase; +} + +sub ensureStep +{ + my $phase = shift; + my $stepName = shift; + + return ensureChild($phase, "step", "name", $stepName); +} + +sub ensureFailureSet +{ + my $step = shift; + my $level = shift; + + return ensureChild($step, "failures", "level", $level); +} + +sub ensureChild +{ + my $parent = shift; + my $childName = shift; + my $childAttr = shift; + my $childAttrValue = shift; + + my ($child) = grep { ref $_ eq $childName && $_->{$childAttr} eq $childAttrValue } @{$parent->{Kids}}; + unless ($child) + { + $child = bless + { + $childAttr => $childAttrValue, + Kids => [ $ToBrag::xmlNewline ] + }, $childName; + push @{$parent->{Kids}}, $child, $ToBrag::xmlNewline; + } + return $child; +} + +# Prints out the XML tree to STDOUT +sub printTree +{ + my $tree = shift or die; + die unless ref $tree; + + my $tagName = ref $tree; + $tagName =~ s{^main::}{}; + if ($tagName eq "Characters") + { + if ($tree->{Text} =~ m{[<>&]}) + { + print "{Text}]]>"; + } + else + { + print $tree->{Text}; + } + return; + } + + print "<$tagName"; + + foreach my $attr ( + sort { + my $order = "name level start stop href package effect"; + my $ixA = index $order, $a; + my $ixB = index $order, $b; + die "$a $b" if $ixA + $ixB == -2; + $ixA - $ixB; + } + grep { + ! ref $tree->{$_} + } + keys %$tree) + { + print " $attr=\"$tree->{$attr}\""; + } + + my $children = $tree->{Kids} || []; + if (scalar @$children) + { + print ">"; + foreach my $child (@$children) + { + printTree($child); + } + print ""; +} + +1; +