Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
CargoTreeFormatTree
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 3
56
0.00% covered (danger)
0.00%
0 / 1
 getNodes
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getNode
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 addNode
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3/**
4 * Class to print query results in a "tree" display, using a field that
5 * defines a "parent" relationship between rows.
6 *
7 * @author Yaron Koren
8 * @ingroup Cargo
9 */
10
11class CargoTreeFormatTree {
12
13    private $mNodes = [];
14
15    public function getNodes() {
16        return $this->mNodes;
17    }
18
19    public function getNode( $nodeName ) {
20        return $this->mNodes[$nodeName];
21    }
22
23    /**
24     * @param string $nodeName
25     * @param string $parentName
26     * @param array $nodeValues
27     * @throws MWException
28     */
29    public function addNode( $nodeName, $parentName, $nodeValues ) {
30        // Add node for child, if it's not already there.
31        if ( array_key_exists( $nodeName, $this->mNodes ) ) {
32            // Make sure it doesn't have more than one parent.
33            $existingParent = $this->mNodes[$nodeName]->getParent();
34            if ( $existingParent != null && $existingParent != $parentName ) {
35                throw new MWException( "The value \"$nodeName\" cannot have more than one parent "
36                . "defined for it" );
37            }
38        } else {
39            $this->mNodes[$nodeName] = new CargoTreeFormatNode();
40        }
41        $this->mNodes[$nodeName]->setParent( $parentName );
42        $this->mNodes[$nodeName]->setValues( $nodeValues );
43
44        // Add node for parent, if it's not already there
45        if ( !array_key_exists( $parentName, $this->mNodes ) ) {
46            $this->mNodes[$parentName] = new CargoTreeFormatNode();
47        }
48        $this->mNodes[$parentName]->addChild( $nodeName );
49    }
50}