Evolution #1993
[ApplicationConfig] new method to get sub-config from prefix value
| Status: | Résolu | Start date: | 03/02/2012 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % Done: | 100% | ||
| Category: | nuiton-utils | Estimated time: | 2.00 hours | |
| Target version: | 2.5 | Spent time: | 2.00 hours |
Description
Ce que je verrais est une methode sur AppConfig qui permette d'avoir
une sous config en fonction d'un prefix.
AppConfig conf2 = config.getConfig("monprefix.");
on peut faire le parse() avant ou apres l'appel de getConfig (pour gere
comme dans l'exemple de pouvoir prefixer aussi le fichier de config a
lire.
Lorsqu'on utilise conf2 pour recuperer une option::
conf2.getOption("toto")
En fait il recherche automatiquement "monprefix.toto" s'il ne le trouve
pas il recherche "toto" (pour toujours offrir la possibilite d'avoir
des options par defaut.
si on melange la conf de wao et coser on pourrait avoir un fichier de
la forme:
topia.driver=psql
wao.topia.db=waodb
coser.topia.db=coserdb
Donc
- config.getOption("topia.db") > null config.getConfig("wao.").getOption("topia.db") > waodb config.getConfig("coser.").getOption("topia.db") -> coserdb
Et de la meme facon, si on fait un setOption le prefix est
automatiquement ajouter donc:
config.getConfig("wao.").getOption("topia.driver") -> psql
config.getConfig("wao.").setOption("topia.driver", "h2")
le fichier de config si on le sauve devient:
topia.driver=psql
wao.topia.driver=h2
wao.topia.db=waodb
coser.topia.db=coserdb
Ce mecanisme serait un vrai plus, on en a besoin par exemple dans
wikitty, car on peut avoir plusieurs configurations concurrentes:
- WikittyService standard
- WikittyService fallback
- WikittyService transaction
Et on a besoin des trois dans le meme fichier de config. Lorsqu'on veut
la config pour creer une nouvelle transaction il suffirait alors de
passer comme AppConfig: config.getConfig("Wikitty.tx.")
Qui lirait l'option wikitty.tx.wikkity.WikittyService.components
au lieu de simplement wikkity.WikittyService.components
Par contre pour d'autres options ou la valeur par defaut suffit il suffit
de ne pas la redefinir avec le prefix pour que celle par defaut soit
prise.
Je ne pense pas que ce soit tres compliqué a developper. Il suffit de
faire une sous classe et surcharger le getOption/setOption que tout le
reste utilise (mais je dis ca de memoire :))
ps: je m'interroge s'il faut que l'utilisateur mette le "." a la fin du
prefix ou si on l'ajoute automatiquement ? Je dirais, il faut qu'il le
mette car nous on a pris le parti de mettre des '.' mais d'autre
pourrait vouloir mettre des '_' ou des majuscules (a la java) pour
separer les mots de la cle.
History
#1
Updated by Tony Chemit about 1 year ago
- Target version deleted (
2.4.6)
#2
Updated by Benjamin Poussin about 1 year ago
- Status changed from Nouveau to Résolu
- Assignee set to Benjamin Poussin
- Target version set to 2.5
- % Done changed from 0 to 100