Configuration.php 6.14 KB
Newer Older
1
<?php declare(strict_types=1);
2
/*
Guillaume Perréal's avatar
CS.    
Guillaume Perréal committed
3
4
 * Copyright (C) 2016-2017 IRSTEA
 * All rights reserved.
5
6
7
8
9
10
11
12
 */

namespace Irstea\PlantUmlBundle\DependencyInjection;

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

/**
Guillaume Perréal's avatar
CS.    
Guillaume Perréal committed
13
 * Description of Configuration.
14
15
16
17
18
19
20
21
22
 */
class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();

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

        return $treeBuilder;
    }

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

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

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

        return $node;
    }

129
    protected function buildFilterNode($nodeName, $description)
130
131
132
133
134
135
    {
        $node = (new TreeBuilder())->root($nodeName);

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

        return $node;
    }
}