Skip to content

Commit f7c0d08

Browse files
committed
Version 1.1 (l'utilisable...)
1 parent 1fadc42 commit f7c0d08

33 files changed

+257
-291
lines changed

.idea/workspace.xml

Lines changed: 116 additions & 140 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
-53 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-766 Bytes
Binary file not shown.
1.01 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

src/main/Main.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@ package main
22

33
import main.generator.{Generator, SeqGenerator}
44
import main.log.Log
5-
import main.log.models.LogBuilder
5+
import main.log.examples.SpecialLog
66

77
/**
88
* Objet MAIN !
9+
* Réalise l'affichage d'un certain nombre de logs produit par le
10+
* format donné.
911
*/
1012
object Main {
1113
def main(args: Array[String]): Unit = {
1214
// Mécanisme de génération des log
1315
val generator = new SeqGenerator[Log](new Generator[Log] {
14-
override def getValue = LogBuilder.getMeteoLog
15-
}, 10)
16+
/*
17+
* Modifiez la surchage de cette fonction
18+
* pour indiquer le type de log à utiliser
19+
*/
20+
override def getValue = new SpecialLog()
21+
}, 10) // Modifiez ce nombre pour augmenter/diminuer le nombre produit
1622

17-
// Affichage sur la sortie standard
23+
// Affichage des logs sur la sortie standard
1824
for (log <- generator.getValue) println(log)
19-
}
25+
}s
2026
}

src/main/generator/RandomDoubleGenerator.scala renamed to src/main/generator/examples/RandomDoubleGenerator.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package main.generator
1+
package main.generator.examples
2+
3+
import main.generator.Generator
24

35
/**
46
* Génère un nouveau nombre réel à précision double de manière aléatoire,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main.generator.examples
2+
3+
import main.generator.Generator
4+
5+
/**
6+
* Génère une chaine de manière aléatoire, décrivant une
7+
* heure au format HH:MM:SS
8+
*/
9+
class RandomHourTextGenerator extends Generator[String] {
10+
// ATTRIBUTS
11+
/** Le générateur du nombre de secondes caractéristique de l'heure à générer */
12+
private val generator: Generator[Int] = new RandomIntGenerator(0, 86400)
13+
14+
// COMMANDE
15+
def getValue:String = {
16+
val s = generator.getValue
17+
"%02d:%02d:%02d".format(s/3600, (s % 3600)/60, s%60)
18+
}
19+
}

src/main/generator/RandomIntGenerator.scala renamed to src/main/generator/examples/RandomIntGenerator.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package main.generator
1+
package main.generator.examples
2+
3+
import main.generator.Generator
24

35
/**
46
* Génère un nouveau nombre entier de manière aléatoire, dont

src/main/generator/RandomTextGenerator.scala renamed to src/main/generator/examples/RandomTextGenerator.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
package main.generator
1+
package main.generator.examples
2+
3+
import main.generator.Generator
24

35
/**
46
* Génère un nouveau not aléatoire à partir d'un alphabet
57
*
68
* @construct Construit un nouveau générateur de mots, de longueur comprise entre
79
* minLength et maxLength, et dont les lettres appartiennent
810
* à l'intervalle de lettres [minLetter, maxLetter] spécifié.
9-
*
1011
* @param minLength La longueur minimale des mots pouvant être générés
1112
* @param maxLength La longueur maximale des mots pouvant être générés
1213
* @param minLetter La longueur minimale des mots pouvant être générés

src/main/log/AbstractLog.scala

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/main/log/FixedLog.scala

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/main/log/Log.scala

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
package main.log
22

33
/**
4-
* Modélise un log. Un fichier log se décompose en trois parties
4+
* Modélise un log. Un fichier log se décompose en deux parties
55
* distinctes :
66
* 1) Un indice (nombre réel) désignant la valeur d'un certain label
7-
* 2) Une entête contenant des informations propres au log (date, heure, ... )
8-
* 3) Un contenu, dont la forme et le texte dépend de la nature du log
7+
* 2) Un contenu, dont la forme et le texte dépend de la nature du log
98
*/
109
trait Log {
1110
/**
1211
* Renvoie la valeur du label associé au log
1312
*/
1413
def getLabel : Double
1514

16-
/**
17-
* Renvoie la partie correspondant à l'entête du log
18-
*/
19-
def getHeader : String
20-
2115
/**
2216
* Renvoie la partie correspondant au contenu textuel du log
2317
*/
@@ -26,5 +20,7 @@ trait Log {
2620
/**
2721
* Renvoie la chaîne correspondant à l'intégralité du contenu du log
2822
*/
29-
def toString : String
23+
override def toString : String = new TextBuilder().
24+
add("%01.05f".format(getLabel)).
25+
add(getContent).toString
3026
}

src/main/log/TextBuilder.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class TextBuilder(val separator: String) {
1010
/** Le constructeur de texte utilisé */
1111
private val builder: StringBuilder = new StringBuilder
1212

13+
// ALTERNATIVE
1314
def this() = this(" ")
1415

1516
// REQUETE
@@ -21,12 +22,15 @@ class TextBuilder(val separator: String) {
2122
* à partir de la représentation textuelle d'un objet quelconque
2223
*
2324
* @param obj La sous-proposition à ajouter
25+
*
26+
* @return L'objet lui-même (this)
2427
*/
25-
def add(obj: Any) {
28+
def add(obj: Any) : TextBuilder = {
2629
if (builder.length > 0) {
2730
builder.append(separator)
2831
}
2932
builder.append(obj.toString)
33+
this
3034
}
3135

3236
/**
@@ -35,8 +39,10 @@ class TextBuilder(val separator: String) {
3539
*
3640
* @param collection La collection des objets à ajouter dans le texte
3741
* @param separator La chaine de séparation utilisée pour séparer les objets
42+
*
43+
* @return L'objet lui-même (this)
3844
*/
39-
def add(collection: Seq[Any], separator: String) {
45+
def add(collection: Seq[Any], separator: String) : TextBuilder = {
4046
assert(collection != null)
4147
assert(separator != null)
4248

@@ -45,7 +51,5 @@ class TextBuilder(val separator: String) {
4551

4652
add(cs)
4753
}
48-
def add(collection: Seq[Any]) {
49-
add(collection, " ")
50-
}
54+
def add(collection: Seq[Any]) : TextBuilder = add(collection, " ")
5155
}

src/main/log/WeightedLog.scala

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/main/log/examples/MeteoLog.scala

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package main.log.examples
2+
3+
import main.generator.examples.{RandomDoubleGenerator, RandomHourTextGenerator}
4+
import main.log.{Log, TextBuilder}
5+
6+
/**
7+
* Construit un log décrivant une application fictive
8+
* de gestion des données météo
9+
*/
10+
class MeteoLog extends Log {
11+
// ATTRIBUTS DU LOG
12+
/** La température */
13+
private val temperature: Double = new RandomDoubleGenerator(-10, 40).getValue
14+
15+
/** La vitesse vent */
16+
private val windSpeed: Double = new RandomDoubleGenerator(0, 130).getValue
17+
18+
/** L'heure du relevé */
19+
private val date: String = new RandomHourTextGenerator().getValue
20+
21+
// DEFINITION DU CONTENU DU LOG
22+
/** Le contenu du log */
23+
private val content = new TextBuilder()
24+
.add("Heure : " + date)
25+
.add("Température : %.2f°C".format(temperature))
26+
.add("Vitesse du vent : %.2f km/h".format(windSpeed))
27+
.toString
28+
29+
// REQUETES
30+
override def getLabel: Double = temperature / 10.0 + windSpeed / 100.0
31+
32+
override def getContent : String = content
33+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package main.log.examples
2+
3+
import main.generator.examples.RandomIntGenerator
4+
import main.log.{Log, TextBuilder}
5+
6+
/**
7+
* Construit un log décrivant le danger que représente une personne
8+
* en fonction de ses attributs S.P.E.C.I.A.L et son karma.
9+
*/
10+
class SpecialLog extends Log {
11+
// ATTRIBUTS
12+
/** Le générateur des valeurs de S.P.E.C.I.A.L */
13+
private val attrGen = new RandomIntGenerator(1, 10)
14+
15+
/** La table des caractéristiques */
16+
private val caracs: Map[String, Int] = defineKeys
17+
private def defineKeys = {
18+
var caracs = Map.empty[String,Int]
19+
caracs += ("Strength" -> attrGen.getValue)
20+
caracs += ("Perception" -> attrGen.getValue)
21+
caracs += ("Endurance" -> attrGen.getValue)
22+
caracs += ("Charisma" -> attrGen.getValue)
23+
caracs += ("Intelligence" -> attrGen.getValue)
24+
caracs += ("Agility" -> attrGen.getValue)
25+
caracs += ("Luck" -> attrGen.getValue)
26+
caracs += ("Karma" -> new RandomIntGenerator(-1000, 1000).getValue)
27+
caracs
28+
}
29+
30+
31+
// DEFINITION DU CONTENU DU LOG
32+
/** Le contenu du log */
33+
var builder = new TextBuilder()
34+
for (key <- caracs.keys) builder.add(key + " = " + caracs(key))
35+
private val content = builder.toString
36+
37+
38+
// REQUETES
39+
/**
40+
* Rédéfinition du label qui représente ici le danger potentiel
41+
* de la personne décrite par le log.
42+
*/
43+
override def getLabel: Double = {
44+
// Danger de par son Karma
45+
var label = caracs("Karma") / 500.0
46+
47+
// Danger de par son SPECIAL
48+
var sum = 0
49+
for ((_, v) <- caracs filterKeys (x => !x.equals("Karma"))) sum += v
50+
label += sum / 70.0
51+
label
52+
}
53+
54+
override def getContent : String = content
55+
}

src/main/log/models/LogBuilder.scala

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/main/log/models/MeteoLog.scala

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)