root('irstea_plant_uml') ->children() ->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() ->arrayNode('binaries') ->info("Chemins vers les fichiers binaires, s'ils en sont pas dans PATH.") ->addDefaultsIfNotSet() ->children() ->scalarNode('java') ->info("Commande 'java'") ->defaultValue('java') ->end() ->scalarNode('plamtuml_jar') ->info('Archive du logiciel PlantUML') ->defaultValue(__DIR__ . '/../vendor/plantuml/plantuml.jar') ->end() ->scalarNode('dot') ->info("Commande 'dot' du package 'graphviz'") ->defaultValue('dot') ->end() ->end() ->end() ->append($this->buildGraphNode()) ->end(); return $treeBuilder; } protected function buildGraphNode() { $node = (new TreeBuilder())->root('graphs'); $decorators = ['inheritance', 'traits', 'interfaces', 'entity', 'associations', 'methods', 'fields', 'attributes']; $node ->info('Graphes.') ->useAttributeAsKey('name') ->prototype('array') ->info("description d'un graphe à générer.") ->children() ->arrayNode('sources') ->info('Sélection des classes à examiner.') ->addDefaultsIfNotSet() ->children() ->enumNode('type') ->info('Source de la liste de classes.') ->defaultValue('classes') ->values(['classes', 'entities']) ->end() ->scalarNode('entity_manager') ->info('Entity Manager à utiliser pour les entités.') ->defaultValue('default') ->end() ->arrayNode('directories') ->info('Répertoires contenant les sources.') ->defaultValue(['%kernel.root_dir%/../src']) ->prototype('scalar')->end() ->end() ->append($this->buildFilterNode('include', 'à inclure')) ->append($this->buildFilterNode('exclude', 'à ignorer')) ->end() ->end() ->arrayNode('layout') ->info('Configuration de la disposition et du parcours.') ->addDefaultsIfNotSet() ->children() ->enumNode('namespaces') ->info('Types .') ->defaultValue('php') ->values(['bundles', 'php', 'flat', 'entities']) ->end() ->append($this->buildFilterNode('include', 'à tracer')) ->append($this->buildFilterNode('exclude', 'à ne pas tracer')) ->end() ->end() ->arrayNode('decoration') ->info('Informations à afficher sur les classes.') ->addDefaultsIfNotSet() ->children() ->arrayNode('decorators') ->info('Liste des décorateurs à utiliser.') ->defaultValue($decorators) ->prototype('enum') ->values($decorators) ->end() ->end() ->append($this->buildFilterNode('include', 'à décorer')) ->append($this->buildFilterNode('exclude', 'à ne pas décorer')) ->end() ->end() ->end() ->end(); return $node; } protected function buildFilterNode($nodeName, $description) { $node = (new TreeBuilder())->root($nodeName); $node ->children() ->arrayNode('directories') ->info("Répertoires $description") ->prototype('scalar')->end() ->end() ->arrayNode('namespaces') ->info("Namespaces $description") ->prototype('scalar')->end() ->end() ->arrayNode('classes') ->info("Classes $description") ->prototype('scalar')->end() ->end() ->end(); return $node; } }