/
GraphvizProcessor.php
65 lines (57 loc) · 1.99 KB
/
GraphvizProcessor.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
/**
* PHP version 7.1
*
* This source file is subject to the license that is bundled with this package in the file LICENSE.
*/
namespace PhUml\Processors;
use PhUml\Code\ClassDefinition;
use PhUml\Code\InterfaceDefinition;
use PhUml\Code\Structure;
use PhUml\Graphviz\Builders\ClassGraphBuilder;
use PhUml\Graphviz\Builders\HtmlLabelStyle;
use PhUml\Graphviz\Builders\InterfaceGraphBuilder;
use PhUml\Graphviz\Builders\NodeLabelBuilder;
use PhUml\Graphviz\Digraph;
use Twig_Environment as TemplateEngine;
use Twig_Loader_Filesystem as Filesystem;
/**
* It creates a digraph from a `Structure` and returns it as a string in DOT format
*/
class GraphvizProcessor extends Processor
{
/** @var ClassGraphBuilder */
private $classBuilder;
/** @var InterfaceGraphBuilder */
private $interfaceBuilder;
public function __construct(
ClassGraphBuilder $classBuilder = null,
InterfaceGraphBuilder $interfaceBuilder = null
) {
$labelBuilder = new NodeLabelBuilder(new TemplateEngine(
new FileSystem(__DIR__ . '/../resources/templates')
), new HtmlLabelStyle());
$this->classBuilder = $classBuilder ?? new ClassGraphBuilder($labelBuilder);
$this->interfaceBuilder = $interfaceBuilder ?? new InterfaceGraphBuilder($labelBuilder);
}
public function createAssociations(): void
{
$this->classBuilder->createAssociations();
}
public function name(): string
{
return 'Graphviz';
}
public function process(Structure $structure): string
{
$digraph = new Digraph();
foreach ($structure->definitions() as $definition) {
if ($definition instanceof ClassDefinition) {
$digraph->add($this->classBuilder->extractFrom($definition, $structure));
} elseif ($definition instanceof InterfaceDefinition) {
$digraph->add($this->interfaceBuilder->extractFrom($definition));
}
}
return $digraph->toDotLanguage();
}
}