stub et datamanager bien implémenté !

travailModele
Siwa12100 7 months ago
parent ce485f5bec
commit 90bd1b0e5b

@ -1,9 +1,11 @@
package com.example.veraxapplication package com.example.veraxapplication
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@ -48,6 +50,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import coil.compose.rememberImagePainter import coil.compose.rememberImagePainter
import coil.size.Scale import coil.size.Scale
import com.example.veraxapplication.articles.IArticlesDataManager
import com.example.veraxapplication.articles.StubArticles
import com.example.veraxapplication.data.Article import com.example.veraxapplication.data.Article
import com.example.veraxapplication.data.Paragraph import com.example.veraxapplication.data.Paragraph
import com.example.veraxapplication.ui.theme.Salmon import com.example.veraxapplication.ui.theme.Salmon
@ -60,15 +64,41 @@ import com.example.veraxapplication.ui.theme.Salmon
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
// un truc vite fait pour avoir un visi // un truc vite fait pour avoir un visi
var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") // var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat")
var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) // var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph"))))
var dataManager : IArticlesDataManager = StubArticles()
var articles = dataManager.getDerniersArticles(4)
var theme = listOf("Economique","Culture","Politique","Faits divers") var theme = listOf("Economique","Culture","Politique","Faits divers")
var color = Color(0xFF00FF00) var color = Color(0xFF00FF00)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
TopBarVerax(theme = theme, article = articles)
// articles?.forEach({ a -> println(a)})
articles?.forEach({ a ->
Log.println(Log.ASSERT, "debug articles", a.toString())
// if (a != null) {
// a.contenus.forEach({cont ->
//
// Log.println(Log.ASSERT, "contenus de l'article " + a.id, cont.toString())
// })
// }
// })
//TopBarVerax(theme = theme, article = articles)
// allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej
} }

@ -1,5 +1,7 @@
package com.example.veraxapplication.articles package com.example.veraxapplication.articles
import com.example.veraxapplication.modele.articles.Article
interface IArticlesDataManager { interface IArticlesDataManager {
val allArticles: List<Any?>? val allArticles: List<Any?>?

@ -1,7 +1,8 @@
package com.example.veraxapplication.articles package com.example.veraxapplication.modele.articles
class Article( import com.example.veraxapplication.modele.articles.contenus.Contenu
class Article(
val id: Int, val id: Int,
val titre: String, val titre: String,
val description: String, val description: String,
@ -9,19 +10,24 @@ class Article(
val date: String, val date: String,
val auteur: String, val auteur: String,
val imagePrincipale: String val imagePrincipale: String
) { ) {
val note = 1.0 val note = 1.0
private val lContenus: MutableList<Contenu> private val lContenus: MutableList<Contenu> = java.util.ArrayList()
init { init {
lContenus = java.util.ArrayList<Contenu>() // Initialisation des contenus si nécessaire
} }
fun remplirArticle(lContenus: List<Contenu>?) { fun remplirArticle(lContenus: List<Contenu>?) {
this.lContenus.addAll(lContenus!!) if (lContenus != null) {
this.lContenus.addAll(lContenus)
}
} }
val contenus: List<Any> val contenus: List<Any>
get() = lContenus get() = lContenus
override fun toString(): String {
return "Article(id=$id, titre='$titre', description='$description', temps='$temps', date='$date', auteur='$auteur', imagePrincipale='$imagePrincipale', note=$note, contenus=${lContenus.size} contenus)"
}
} }

@ -1,5 +1,15 @@
package com.example.veraxapplication.articles package com.example.veraxapplication.articles
import android.os.Build
import androidx.annotation.RequiresApi
import com.example.veraxapplication.modele.articles.Article
import com.example.veraxapplication.modele.articles.contenus.Contenu
import com.example.veraxapplication.modele.articles.contenus.ContenuMedia
import com.example.veraxapplication.modele.articles.contenus.ContenuParagraphe
import java.time.LocalDate
import kotlin.math.min
class StubArticles() : IArticlesDataManager { class StubArticles() : IArticlesDataManager {
private var lArticles: MutableList<Article>? = null private var lArticles: MutableList<Article>? = null
@ -7,6 +17,7 @@ class StubArticles() : IArticlesDataManager {
chargerArticles() chargerArticles()
} }
private fun chargerArticles() { private fun chargerArticles() {
lArticles = java.util.ArrayList<Article>() lArticles = java.util.ArrayList<Article>()
val contenuMap: Map<String, List<Contenu>> = chargerContenuParagraphe() val contenuMap: Map<String, List<Contenu>> = chargerContenuParagraphe()
@ -17,7 +28,7 @@ class StubArticles() : IArticlesDataManager {
"Thinkerview", "Thinkerview",
"Thinkerview est une chaîne passionnante chaîne youtube d'interview-débat.", "Thinkerview est une chaîne passionnante chaîne youtube d'interview-débat.",
"3", "3",
LocalDate.now().toString(), "date a revoir",
"Siwa", "Siwa",
"https://cdn.discordapp.com/attachments/1150826798549049554/1219554341388816437/stub1.webp?ex=660bb97d&is=65f9447d&hm=3e1e8d3372ae897fa4e2aa1ec730d976d74b35fce96cb8d78d6f9239e2836564&" "https://cdn.discordapp.com/attachments/1150826798549049554/1219554341388816437/stub1.webp?ex=660bb97d&is=65f9447d&hm=3e1e8d3372ae897fa4e2aa1ec730d976d74b35fce96cb8d78d6f9239e2836564&"
) )
@ -30,7 +41,7 @@ class StubArticles() : IArticlesDataManager {
"Le réchauffement climatique : un mythe ?", "Le réchauffement climatique : un mythe ?",
"Revenons sur les différentes controverses à ce sujet.", "Revenons sur les différentes controverses à ce sujet.",
"7", "7",
LocalDate.now().toString(), "date a revoir",
"Siwa", "Siwa",
"https://cdn.discordapp.com/attachments/1150826798549049554/1219555874339815454/stub2.webp?ex=660bbaea&is=65f945ea&hm=80aef945e8410b18395c716fdd19265608f7b1263731192d5c69f807fce9e944&" "https://cdn.discordapp.com/attachments/1150826798549049554/1219555874339815454/stub2.webp?ex=660bbaea&is=65f945ea&hm=80aef945e8410b18395c716fdd19265608f7b1263731192d5c69f807fce9e944&"
) )
@ -43,7 +54,7 @@ class StubArticles() : IArticlesDataManager {
"La terre plate : vraiment ?", "La terre plate : vraiment ?",
"Pour réfuter la fausse croyance que la Terre est plate, il est essentiel de s'appuyer sur des preuves scientifiques et des observations historiques. ", "Pour réfuter la fausse croyance que la Terre est plate, il est essentiel de s'appuyer sur des preuves scientifiques et des observations historiques. ",
"5", "5",
LocalDate.now().toString(), "date a revoir",
"Siwa", "Siwa",
"https://cdn.discordapp.com/attachments/1150826798549049554/1219547864196317225/stub1.webp?ex=660bb374&is=65f93e74&hm=a9e5dd48faa3ae68c358309af8949c46dfd4dea9c4d6e3d845d707784e5341cf&" "https://cdn.discordapp.com/attachments/1150826798549049554/1219547864196317225/stub1.webp?ex=660bb374&is=65f93e74&hm=a9e5dd48faa3ae68c358309af8949c46dfd4dea9c4d6e3d845d707784e5341cf&"
) )
@ -56,7 +67,7 @@ class StubArticles() : IArticlesDataManager {
"L'ia & humanité : quel avenir ? ", "L'ia & humanité : quel avenir ? ",
"Explorons les progrès remarquables dans le domaine de l'IA, les secteurs qu'elle révolutionne, et les implications éthiques majeures qu'elle soulève.", "Explorons les progrès remarquables dans le domaine de l'IA, les secteurs qu'elle révolutionne, et les implications éthiques majeures qu'elle soulève.",
"9", "9",
LocalDate.now().toString(), "date a revoir",
"Luthen", "Luthen",
"https://cdn.discordapp.com/attachments/1150826798549049554/1219560686254817290/stub1.webp?ex=660bbf65&is=65f94a65&hm=021bd8c90c89347f31373468cc7a03ae15f1d3f9988a5b4325149c6df938d7bb&" "https://cdn.discordapp.com/attachments/1150826798549049554/1219560686254817290/stub1.webp?ex=660bbf65&is=65f94a65&hm=021bd8c90c89347f31373468cc7a03ae15f1d3f9988a5b4325149c6df938d7bb&"
) )
@ -403,22 +414,26 @@ class StubArticles() : IArticlesDataManager {
return contenuMap return contenuMap
} }
val allArticles: List<Any>? override val allArticles: List<Article>? // Assurez-vous que lArticles est bien une liste d'Article et non pas une liste de Any?
get() = lArticles get() = lArticles
fun getArticle(id: Int): Article { override fun getArticle(id: Int): Article? {
println("Passage dans getArticle avec comme id : $id") println("Passage dans getArticle avec comme id : $id")
println("Nombre d'articles disponibles : " + lArticles!!.size) lArticles?.let {
val articleARenvoyer: Article = lArticles.stream() println("Nombre d'articles disponibles : ${it.size}")
.filter(java.util.function.Predicate<Article> { article: Article -> article.getId() === id }).findFirst()
.orElse(null)
java.lang.System.out.println(articleARenvoyer)
// Article articleARenvoyer = this.lArticles.get(id); val articleARenvoyer: Article? = it.find { article -> article.id == id }
return articleARenvoyer println(articleARenvoyer)
return articleARenvoyer
}
return null // Retourne null si lArticles est null
} }
fun getDerniersArticles(nbArticles: Int): List<Article> { override fun getDerniersArticles(nbArticles: Int): List<Article>? {
return lArticles!!.subList(0, min(nbArticles, lArticles!!.size)) return lArticles?.let {
it.take(min(nbArticles, it.size))
}
} }
} }

@ -1,4 +1,4 @@
package com.example.veraxapplication.articles.contenus package com.example.veraxapplication.modele.articles.contenus
abstract class Contenu(var id: Int) { abstract class Contenu(var id: Int) {

@ -1,24 +1,30 @@
package com.example.veraxapplication.articles.contenus package com.example.veraxapplication.modele.articles.contenus
class ContenuMedia(id: Int, var titre: String, var lien: String) : Contenu(id) { class ContenuMedia(id: Int, var titre: String, var lien: String) : Contenu(id) {
init { init {
setTypeContenu("image") this.typeContenu = "image"
} }
val contenu: Map<String, String> val contenu: Map<String, String>
get() { get() {
val contenu: MutableMap<String, String> = HashMap<String, String>() val contenu: MutableMap<String, String> = HashMap()
contenu.put("titre", titre) contenu["titre"] = titre
contenu.put("contenu", lien) contenu["contenu"] = lien
return contenu return contenu
} }
companion object { companion object {
fun newVideo(id: Int, titre: String, lien: String): ContenuMedia { fun newVideo(id: Int, titre: String, lien: String): ContenuMedia {
val temp = ContenuMedia(id, titre, lien) val temp = ContenuMedia(id, titre, lien)
temp.setTypeContenu("video")
temp.typeContenu = "video"
return temp return temp
} }
} }
override fun toString(): String {
return "ContenuMedia(id=$id, typeContenu='$typeContenu', titre='$titre', lien='$lien')"
}
} }

@ -1,16 +1,20 @@
package com.example.veraxapplication.articles.contenus package com.example.veraxapplication.modele.articles.contenus
class ContenuParagraphe(id: Int, var titre: String, var texte: String) : Contenu(id) { class ContenuParagraphe(id: Int, var titre: String, var texte: String) : Contenu(id) {
init { init {
setTypeContenu("paragraphe") this.typeContenu = "paragraphe"
} }
val contenu: Map<String, String> val contenu: Map<String, String>
get() { get() {
val contenu: MutableMap<String, String> = HashMap<String, String>() val contenu: MutableMap<String, String> = HashMap()
contenu.put("titre", titre) contenu["titre"] = titre
contenu.put("contenu", texte) contenu["contenu"] = texte
return contenu return contenu
} }
override fun toString(): String {
return "ContenuParagraphe(id=$id, typeContenu='$typeContenu', titre='$titre', texte='$texte')"
}
} }
Loading…
Cancel
Save