Gestion d'un fichier de configuration Apache
Présentation
Le serveur web Apache conserve ses paramètres de configuration
dans un fichier nommé httpd.conf situé dans le sous-répertoire
conf du répertoire apache. Si l'on veut modifier certains
paramètres, il faut éditer ce fichier et modifier les valeurs
des paramètres. Ce travail peut-être fastidieux et demeure peu
convivial ; aussi nous allons créer une petite application qui doit permettre
de simplifier cette tâche.
1) Cas d'utilisation
Ce logiciel ne comporte qu'un seul cas d'utilisation.
Cas d'utilisation : gestion du fichier de configuration
Acteur : l'administrateur d'apache
Fréquence : si besoin de modifier ou visualiser la configuration
Scénario nominal
1) L'administrateur demande le fichier de configuration
2) Le système fournit le fichier
3) L'administrateur visualise les paramètres et les modifie éventuellement
4) Le système enregistre les modifications. Fin
2) Analyse de l'existant.
Voici un extrait du fichier :
fig 1 extrait du fichier httpd.conf
Commentaires :
3) Eléments de conception
L'application sera découpée en trois parties -couches- bien distinctes :
Cette architecture permet de rendre indépendants le code fonctionnel et la présentation ; ceci permet ainsi de conserver les couches 1 et 3 si l'on change d'interface (par exemple en restant en mode console). Ceci facilite grandement la réutilisation du code.
fig 2 diagramme de classe de conception
A) La classe PersisteConf
Responsabilités.
Travail à faire
Question 1 Dessiner le diagramme de la classe PersisteConf
On vous fournit le code suivant :
StreamReader sr = new StreamReader(nomFichier);
lesLignes = new ArrayList();
string ligne=sr.ReadLine();
while(ligne !=null)
{
lesLignes.Add(ligne);
ligne=sr.ReadLine();
}
sr.Close();
Travail à faire.
Question 2. En utilisant l'aide, commenter chaque ligne du code fourni
Travail à faire.
Question 3. Créer un nouveau projet dans VisualStudio, ajouter une nouvelle classe PersisteConf.
Question 4. Ecrire la méthode chargeLesLignes qui remplit une ArrayList à partir d'un fichier. N'oubliez pas de faire un using de System.Collections pour pouvoir utiliser la classe ArrayList ; ainsi que using System.IO pour la gesion de fichier
Question 5. Ecrire le constructeur qui valorise l'attribut nomFichier et appelle chargeLesLignes.
Question 6. Ecrire l'accesseur GetLesLignes qui retourne l'ArrayList
Pour tester la classe PersisteConf :
Travail à faire : question 7
public class Test
{
public static
void Run()
{
PersisteConf
pc = new PersisteConf("httpdTest.conf");
ArrayList
ar = pc.GetLesLignes();
System.Console.WriteLine((string)ar[15]);
}
}
Vérifier que vous obtenez bien la 16ième ligne du fichier :
fig 3 sortie console
Travail à faire : question 8
B) La classe CtrConf
Cette classe devra assurer le principal des traitements :
fig 4 classe CtrlConf
Commentaires :
Annexe : gestion des expressions régulières.
Il sera nécessaire de parcourir chaque ligne et de vérifier son format et ainsi vérifier si cette ligne contient un début de commentaire ou un paramètre. Nous avons remarqué qu'un commentaire avait le format suivant :
#<nom du paramètre>:
lignes de commentaires
...
<nom du commentaire> <valeur>
Ainsi, nous devons rechercher un format. Pour cela les langages de programmation propose des classes (ou des fonctions) qui permettent de faire des vérification de chaînes en fonction d'un format fourni. Une expression régulière est le format de l'expression recherchée. La définition d'une expression régulière suit une syntaxe particulière mais commune à tous les langages ; ainsi par exemple pour contrôler qu'une chaîne est un code postal, l'expression régulière associée est "[0-9]{5,5}" : un code postal contient exactement 5 chiffres. Pour vérifier qu'un numéro d'immatriculation est valide il faudrait définir l'expression régulière "[1-9]{1,4}[A-Z]{2,2}[0-9]{2,2}" pour un numéro comportant 2 lettres.
En C#, deux classes vont être utilisées : la classe Regex et la classe Match (using System.Text.RegularExpressions;)
Exemple : recherche d'un numéro d'immatriculation dans une chaîne,
string format ="[1-9]{1,4}[A-Z]{2,2}[0-9]{2,2}"; //
format pour un numéro d'immatriculation à deux lettres
Regex rx = new Regex(format); //
création d'un objet à partir du format
Match m= rx.Match("4412453FR3489"); //
un objet Match est retourné
if (m.Success) //
l'objet Match est testé
Console.WriteLine("ok");
else
Console.WriteLine("pas
ok");
La sortie écran affichera "ok"
On peut également demander d'extraire la chaîne valide 2453FR34 grâce à m.Value
Console.WriteLine(m.Value); // affiche 2453FR34
Travail à faire Question 9
Question 9.1 Ajouter une nouvelle classe CtrlConf au projet
Question 9.2 Ecrire le constructeur public CtrlConf(string nomFichier) qui construira une instance de la classe PersisteConf et valorisera l'objet ArrayList.
Question 9.3 Ecrire la méthode suivant qui doit :
Question 9.4 Tester après avoir écrit les accesseurs
nécessaires :
public class Test
{
public
static void Run()
{
CtrlConf
ctr = new CtrlConf("httpdTest.conf");
ctr.suivant();
ctr.suivant();
Console.WriteLine(ctr.GetNomParam());
Console.WriteLine(ctr.GetCommentaire());
Console.WriteLine(ctr.GetValeur());
Ce qui doit produire :
fig 5 sortie console
Question 9.4 Ecrire les deux méthodes sauvegarder et setValeur
ainsi que les accesseur ; tester en ajoutant au code précédent
:
ctr.SetValeur("modif");
ctr.Sauvegarder();
Console.WriteLine("nouvelle valeur
:{0}",ctr.GetValeur());
Ouvrir le fichier et vérifier la mise à jour
C) Gestion de l'interface, la classe IUConf
Le formulaire proposé aura la forme suivante :
fig 6 interface utilisateur de l'aplication
Le code à mettre en oeuvre est minimal, tout a déjà été réalisé, vous utiliserez un composant permettant d'ouvrir une boite de dialogue de sélection d'un fichier, OpenFileDialog (son utilisation est des plus simple). C'est le click sur le bouton "sélectionner un fichier" qui créera une instance du contrôleur, à partir du fichier sélectionné.
Travail à faire Question 10
Réaliser l'interface, tester.