Configuration.php 6.05 KB
Newer Older
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
<?php

/*
 * © 2016 IRSTEA
 * Guillaume Perréal <guillaume.perreal@irstea.fr>
 * Tous droits réservés.
 */

namespace Irstea\PlantUmlBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

/**
 * Description of Configuration
 *
 * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
 */
class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();

        $treeBuilder->root('irstea_plant_uml')
            ->children()
27
28
29
30
31
32
33
34
35
36
37
38
39
40
                ->arrayNode('output')
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->scalarNode('directory')
                            ->info("Répertoire dans lequel écrire les fichiers.")
                            ->defaultValue("%kernel.root_dir%/Resources/doc")
                        ->end()
                        ->enumNode('format')
                            ->info("Format de sortie (cf. PlantUML).")
                            ->defaultValue("svg")
                            ->values(['png', 'svg', 'eps', 'pdf', 'vdx', 'html', 'xmi', 'txt', 'utxt'])
                        ->end()
                    ->end()
                ->end()
41
                ->arrayNode('binaries')
42
                    ->info("Chemins vers les fichiers binaires, s'ils en sont pas dans PATH.")
43
44
45
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->scalarNode('java')
46
                            ->info("Commande 'java'")
47
48
49
                            ->defaultValue("java")
                        ->end()
                        ->scalarNode('plamtuml_jar')
50
                            ->info("Archive du logiciel PlantUML")
51
                            ->defaultValue(__DIR__ . '/../vendor/plantuml/plantuml.jar')
52
53
                        ->end()
                        ->scalarNode('dot')
54
                            ->info("Commande 'dot' du package 'graphviz'")
55
56
57
58
59
60
61
62
63
64
65
66
67
68
                            ->defaultValue("dot")
                        ->end()
                    ->end()
                ->end()
                ->append($this->buildGraphNode())
            ->end();

        return $treeBuilder;
    }

    protected function buildGraphNode()
    {
        $node = (new TreeBuilder())->root('graphs');

69
        $decorators = ['inheritance', 'traits', 'interfaces', 'entity', 'associations', 'methods', 'fields', 'attributes'];
70

71
        $node
72
            ->info("Graphes.")
73
74
            ->useAttributeAsKey('name')
            ->prototype('array')
75
                ->info("description d'un graphe à générer.")
76
77
                ->children()
                    ->arrayNode('sources')
78
                        ->info("Sélection des classes à examiner.")
79
80
81
                        ->addDefaultsIfNotSet()
                        ->children()
                            ->enumNode('type')
82
                                ->info("Source de la liste de classes.")
83
84
85
86
                                ->defaultValue('classes')
                                ->values(['classes', 'entities'])
                            ->end()
                            ->scalarNode('entity_manager')
87
                                ->info("Entity Manager à utiliser pour les entités.")
88
89
90
                                ->defaultValue('default')
                            ->end()
                            ->arrayNode('directories')
91
                                ->info("Répertoires contenant les sources.")
92
93
94
                                ->defaultValue(['%kernel.root_dir%/../src'])
                                ->prototype('scalar')->end()
                            ->end()
95
96
                            ->append($this->buildFilterNode('include', 'à inclure'))
                            ->append($this->buildFilterNode('exclude', 'à ignorer'))
97
98
99
                        ->end()
                    ->end()
                    ->arrayNode('layout')
100
                        ->info("Configuration de la disposition et du parcours.")
101
102
103
                        ->addDefaultsIfNotSet()
                        ->children()
                            ->enumNode('namespaces')
104
                                ->info("Types .")
105
106
107
                                ->defaultValue('php')
                                ->values(['bundles', 'php', 'flat', 'entities'])
                            ->end()
108
109
                            ->append($this->buildFilterNode('include', 'à tracer'))
                            ->append($this->buildFilterNode('exclude', 'à ne pas tracer'))
110
111
112
                         ->end()
                    ->end()
                    ->arrayNode('decoration')
113
                        ->info("Informations à afficher sur les classes.")
114
115
116
                        ->addDefaultsIfNotSet()
                        ->children()
                            ->arrayNode('decorators')
117
                                ->info("Liste des décorateurs à utiliser.")
118
                                ->defaultValue($decorators)
119
                                ->prototype('enum')
120
                                    ->values($decorators)
121
122
                                ->end()
                            ->end()
123
124
                            ->append($this->buildFilterNode('include', 'à décorer'))
                            ->append($this->buildFilterNode('exclude', 'à ne pas décorer'))
125
126
127
128
129
130
131
132
                        ->end()
                    ->end()
                ->end()
            ->end();

        return $node;
    }

133
    protected function buildFilterNode($nodeName, $description)
134
135
136
137
138
139
    {
        $node = (new TreeBuilder())->root($nodeName);

        $node
            ->children()
                ->arrayNode('directories')
140
                    ->info("Répertoires $description")
141
142
143
                    ->prototype('scalar')->end()
                ->end()
                ->arrayNode('namespaces')
144
                     ->info("Namespaces $description")
145
146
147
148
149
150
151
152
153
                    ->prototype('scalar')->end()
                ->end()
            ->end();

        return $node;
    }

}