Issue 61: Revue de la sélection d'un Channel RSS
Project Member Reported by th.frits...@gmail.com, May 14, 2012
Le code de sélection d'un channel RSS n'est pas convaincant. Après avoir essayé de relire ton code Tania, je ne parviens pas à comprendre ta logique.

J'ai corrigé maintes erreurs (attributs nuls dans un flux (description), ajout d'exception sur pointeurs nuls, j'en passe et des meilleurs) mais non, rien.


Ce que je veux :

Comme je n'ai rien compris à tes histoires de stockés dans la base, téléchargés, ou je ne sais quoi, ce serait bien de voir apparaître un truc "simple". Je ne tiens pas à m'initier dans ton travail, surtout avec la quantité pharamineuse qu'il y a, mais chaque couche doit avoir ses choses à faire.

J'ai donc crée dans le contrôleur une méthode, getChannelController(String address), qui me permettra de récupérer ce dont j'ai besoin, si tu veux bien. Le top sera qu'il ne soit pas nul, et qu'il contienne les derniers items en date.
May 14, 2012
Project Member #1 th.frits...@gmail.com
PS:
Je profite de ce post "problème" pour te demander : est-ce que, pour changer un titre de flux RSS, un appel à setTitle sur le modèle suffit ?

Je m'y intéresserai prochainement également.
May 15, 2012
Project Member #2 Mathe...@gmail.com
Le code de sélection d'un channel RSS n'est pas convaincant. Après avoir essayé de relire ton code Tania, je ne parviens pas à comprendre ta logique.

Classe ClInit: paramètres nécessaires à l'exécution. A modifier, je n'ai pas encore pu le rendre dynamique (il faudrait voir avec Laetitia qui a fait le code de l'explorateur, pour utiliser les adresses stockée). 

"mais chaque couche doit avoir ses choses à faire." <= ce qu'elles font.
May 15, 2012
Project Member #3 Mathe...@gmail.com
"J'ai corrigé maintes erreurs (attributs nuls dans un flux (description), ajout d'exception sur pointeurs nuls, j'en passe et des meilleurs) mais non, rien." <= vient des données mal initialisées.
May 15, 2012
Project Member #4 Mathe...@gmail.com
Conclusion: j'enlève mon code jusqu'à nouvel ordre.
Point barre.

On aura qu'à intégrer ensemble, comme ça ceux qui connaissent bien la gui et l'explorateur de fichier pourront intervenir. 

Je clos dès que les commit sont faits et que c'est en place. 

ps: Merci d'avoir supprimé le nbproject!!
May 15, 2012
Project Member #5 th.frits...@gmail.com
Au lieu de modifier ton code, tu aurais du nous prévenir des changements à apporter pour faire fonctionner le module. Bon, en même temps, après avoir passé la soirée dans ton code, j'étais un peu blasé hier soir.

Alors voilà ce que j'ai fais pour le moment :
- Créer un fichier src/abos.txt avec un RSS par ligne
- Voir du côté de src/technical/ClInit.java pour modifier le chemin
- Mettre à jour le fichier src/hibernateRSS.cfg.xml

L'endroit où ça bloque actuellement :
- ReaderRssController, méthode readFeed()
Les éléments parcourus sont parfois vides, parfois j'en trouve un, au final, je n'ai pas trop compris le principe. J'ai ajouté un try/catch pour continuer, juste pour éviter l'exception.

Pour résoudre ce problème, je ne pense pas que la vue ait besoin de dire au contrôleur qu'il doit lire. Tout ce que je veux, c'est pouvoir récupérer un flux (en transmettant l'adresse de celui-ci) qui soit fonctionnel et à jour. Au final, j'ai crée cette méthode dans le contrôleur mais elle n'est pas implémentée, et je ne connais pas assez bien ton code pour le faire.

Concernant l'ajout et la suppression. Comme convenu lors de la dernière séance de projet, j'utiliserai les méthodes que nous avons déclaré ensemble :

- addChannelController(String url)
La méthode acceptant l'URL ne serait pas forcément utile pour moi, ce serait plutôt au contrôleur de gérer ces choses là (avec Exception levée ou affichage d'une erreur).

- removeChannelController(), où là, les deux méthodes peuvent être utiles (avec String ou ChannelController) vu que je ne sais pas encore comment je vais procéder.


"(il faudrait voir avec Laetitia qui a fait le code de l'explorateur, pour utiliser les adresses stockée)" --> de quoi parles-tu ?

"ps: Merci d'avoir supprimé le nbproject!!" --> cela était ironique ? J'ai essayé une manip pour qu'il ne vienne plus nous faire ch***... Au pire, récupérable ici : https://code.google.com/p/nemar/source/detail?r=648fc43fb9534e63faa46c40f735f4ce1df41be9

May 15, 2012
Project Member #6 Mathe...@gmail.com
"(il faudrait voir avec Laetitia qui a fait le code de l'explorateur, pour utiliser les adresses stockée)" --> de quoi parles-tu ? 
Du code de l'explorateur que je comptais réutiliser.

"ps: Merci d'avoir supprimé le nbproject!!" --> cela était ironique ?
Oui. Je ne peux plus rien ouvrir.

Au pire, récupérable ici : https://code.google.com/p/nemar/source/detail?r=648fc43fb9534e63faa46c40f735f4ce1df41be9
<= Bof comme solution. TU peux pas annuler tes commit de suppressions? 


May 15, 2012
Project Member #7 Mathe...@gmail.com
D'ailleurs concernant le nbproject, tu aurais pu prévenir par mail... :(
May 15, 2012
Project Member #8 Mathe...@gmail.com
Voilà, j'ai retiré ce qui est service et dao, tant pis.
Je pense que là tu devrais être capable de modifier ce que tu veux.
May 15, 2012
Project Member #9 Mathe...@gmail.com
(No comment was entered for this change.)
Status: Fixed
May 15, 2012
Project Member #10 th.frits...@gmail.com
Push de l'ancien.

"D'ailleurs concernant le nbproject, tu aurais pu prévenir par mail... :("
--> La même pour les RSS, on est quitte maintenant, nous pourrons peut-être avancer.

Peux-tu maintenant, s'il te plait, m'expliquer clairement quelles sont les méthodes à appeler, avec quels arguments, pour chacun des cas suivants :
- Ajout d'une adresse à suivre
- Suppression d'une adresse à ne plus suivre
- Mise à jour des flux suivis
- Sélection d'un contrôleur en fournissant une adresse
En théorie, je sais récupérer un item au clic, si rien n'a été modifié là-dessus.

"Du code de l'explorateur que je comptais réutiliser."
--> Vous verrez ça ensemble alors, je n'ai pas encore regardé ce qui a été fait de son côté.



"Voilà, j'ai retiré ce qui est service et dao, tant pis.
Je pense que là tu devrais être capable de modifier ce que tu veux."
--> Je n'ai nullement demandé de supprimer tes fichiers, je souhaitais simplement parvenir à utiliser ton contrôleur. Mais c'est sûr que sacrifier x heures de travail est plus motivant que de m'expliquer clairement comment parvenir à mes fins. Tu n'as pour l'instant cité aucun nom de méthode à utiliser. Et c'est pourtant tout ce que je demandais. Tant pis.
May 15, 2012
Project Member #11 Mathe...@gmail.com
"--> Je n'ai nullement demandé de supprimer tes fichiers, je souhaitais simplement parvenir à utiliser ton contrôleur. Mais c'est sûr que sacrifier x heures de travail est plus motivant que de m'expliquer clairement comment parvenir à mes fins. Tu n'as pour l'instant cité aucun nom de méthode à utiliser. Et c'est pourtant tout ce que je demandais. Tant pis."

Nan mais largement sous-entendu, ou du moins de grosses modifications.
Et les réponses sont dans les autres issues que tu as posées/modifiées/rouvertes. 
Le controleur se suffit à lui même: RssChannelController correspond à RssCHannelModel. Et les noms de méthodes... comment pourrais-je te les citer si elles sont écrites dans les classes, que je ne sais pas exactement ce que tu veux faire et que les noms ANGLAIS sont explicites?

ReaderRssController <= controleur général
ReaderRssModel <= modele qui va avec

RssChannelController <= les canaux
RssChannelModel <= le modèle qui va avec

RssItemController <= les items d'un canal (cf norme RSS)
RssItemModel <= le modèle qui va avec

Si tu veux, il y a des couches dans les modèles/controleurs, comme ce que j'ai montré plus haut.

Tant qu'on y est, concernant les lacunes de code: il y a différence entre lacunes et erreurs. QUand j'ai commité, j'avais juste fini mes tests. Alors, certes, apparemment vous avez eu des erreurs, mais erreurs != lacunes. Merci, ça fait plaisir. 

"J'ai donc crée dans le contrôleur une méthode, getChannelController(String address), qui me permettra de récupérer ce dont j'ai besoin, si tu veux bien."
Ta méthode est implémentée, enfin d'après ce que j'ai compris que tu veux faire, car ta demande n'est pas claire.

"est-ce que, pour changer un titre de flux RSS, un appel à setTitle sur le modèle suffit ?" 
Oui, si on parle de la même chose.

"Le code de sélection d'un channel RSS n'est pas convaincant. Après avoir essayé de relire ton code Tania, je ne parviens pas à comprendre ta logique."
Plus facile de dire que c'est des lacunes alors, c'est sur, voyons!
Pour la sélection, je suppose que tu parles du clic dans la gui...
Alors, au moment du clic, et au moment du clic seulement, l'appli -dans son état actuel- va lire le flux concerné (connexion au réseau and so on) en utilisant les classes techniques. Mais ça, c'est en place.



May 15, 2012
Project Member #13 Mathe...@gmail.com
- Ajout d'une adresse à suivre
===>ReaderRssController
========> addFeedAb puis màj de l'affichage, je dirais (clear du tree puis relecture)

- Suppression d'une adresse à ne plus suivre
===>ReaderRssController
========>removeChannelController/deleteFeedAb puis commitDeleteChanges

May 15, 2012
Project Member #15 Mathe...@gmail.com
- Sélection d'un contrôleur en fournissant une adresse
===>ReaderRssController
========> getChannelController sous réserve que les adresses soient identiques.
C'est d'ailleurs la méthode que tu as demandé. 
May 15, 2012
Project Member #16 Mathe...@gmail.com
- Mise à jour des flux suivis
===>ReaderRssController
========> relecture du fichier (si tu parles d'une màj de l'affichage): readFeedAb, la même que celle appelée par la vue au démarrage (ou pas longtemps après).
========> même code que ce qui est dans le tree node de la view (il n'y a qu'un événement d'implémenté pour le moment) si tu parles de rafraichissement de flux
May 15, 2012
Project Member #17 Mathe...@gmail.com
Toutes les méthodes sont surchargées, leur paramètre: un String url ou une URL (la classe URL). Pour la lecture de fichier, de tête, il s'agit d'un String avec l'adresse du fichier à lire/un attribut de la classe (cf commentaires de commit concernant les choses à modifier). 
May 15, 2012
Project Member #18 th.frits...@gmail.com
Pourquoi t'attends 10 messages et 50 malentendus pour me donner les réponses que je veux ? Ok, j'admets mes tords (ce qui a déjà été fait rapidement, post n° 5), mon message de hier soir a été écrit à chaud, et après avoir passer plus de 3 heures dans ton code, crois moi que c'est compréhensible. Mais ne me fais pas dire ce que je n'ai pas dis.

Alors, concernant ton plaidoyer de MERDE (moi aussi je sais écrire en majuscule), sache juste que je trouve ça désolant de devoir t'entendre porter le poids du monde sur tes épaules avant d'avoir les réponses à mes questions. Je ne prendrai pas la peine de répondre à ce ramassis d'incompréhension : nous devons travailler ensemble pendant un mois encore, et je ne tiens pas à perdre mon calme ni à devenir vulgaire avant la fin.

Donc maintenant, mes réponses, je les ai, fin de la discussion pour moi. Désormais, je vais mettre en place l'interface du module RSS en suivant tes indications, mais je ne ferai rien de plus. J'appellerai les méthodes que tu m'indiques, bêtement et simplement, et j'ignorerai chaque erreur provoquée par ce qui ne m'appartient pas. Je me contenterai de les remonter, quitte à devoir cesser ma session de travail en avance ou à partir sur d'autres choses.

Sur ce, ce rapport de "bug" étant clos, ma présence n'a donc plus lieu d'être.

Hypocritement,
Thomas.
May 16, 2012
Project Member #19 Mathe...@gmail.com
"Pourquoi t'attends 10 messages et 50 malentendus pour me donner les réponses que je veux?"
Désolée pour hier soir, mes messages ont aussi été écrits à (très) chaud... surtout après avoir vu le commentaire de commit git. 
Tu sais, dans ces cas là, je vais quand même me justifier! Ok, tu ne comprends pas mon code, mais c'est pas pour autant que... enfin bref. Avec le pseudo-schéma plus haut ça devrait aller. Les requêtes de lecture de flux descendent puis remontent les couches pour pouvoir modifier le code à un endroit e (faire des conversions, par exemple).
Comme dit au début, tous les problèmes venaient du ClInit, et ça, je l'ai enlevé! Enfin, plutôt mis en suspens, ça je pense qu'il faudra le modifier en dernier comme ça vous n'aurez pas de soucis de compilation ;).

"J'appellerai les méthodes que tu m'indiques, bêtement et simplement, et j'ignorerai chaque erreur provoquée par ce qui ne m'appartient pas. Je me contenterai de les remonter, quitte à devoir cesser ma session de travail en avance ou à partir sur d'autres choses."
Note pour les exceptions: il y aura au moins une erreur que tu devras remonter et signaler (comme tu as fait avec les try catch): c'est le cas où l'url est n'importe quoi (<=> non lisible). Là tu peux garder le try catch et mettre un message pour l'utilisateur (c'est une exception avec url dans le nom je crois bien, mais Nebtbeans te dira d'entourer la ligne. Après tu gères celle-là comme tu veux! Je n'ai pas géré beaucoup d'exceptions dans le code métier car je pense qu'il est mieux de signaler le problème à l'utilisateur, les erreurs sur url n'étant pas ce qu'il y a de plus "correctible"...). 
Après l'autre truc à signaler à l'utilisateur -s'il y avait encore un doute- c'est que l'appli ne gère pas les flux Atom. Mais je pense que ça fera une erreur *url* citée précédemment et de toute façon faudra le mettre dans la doc "papier".
De plus, tu verras que je l'ai fait un paquet de fois dans le code, mais chaque exception a une méthode printstacktrace (je pense que tu la connais...). Celle là peut nous être très utile : tant pour toi pour sélectionner quelles erreurs remonter à la gui, tant pour moi pour gérer celles d'en dessous. Mais tu as des méthodes qui doivent être appelée dans un certain ordre (cf le dessin des "couches" plus haut) et qui normalement fonctionnent et encapsulent celles d'en dessous (je crois qu'il y a une exception - et les couches dao et service (elles aussi en suspens) "s'encapsulent" aussi et s'imbriquaient là-dedans). Les classes ont été rendues indépendantes des paramètres de ClInit, sauf pour l'adresse du fichier d'abonnement -quoi que, celle là est provisoirement en attribut de la classe de lecture, là où devrais avoir netbeans qui hurle une erreur - : elles ont été bien testées - dès le début, et ça marchait avec un flux, donc il n'y a pas de raison que le même principe ne soit pas applicable au même flux, c'est la lecture au dernier moment (dès le clic) pour chacun d'entre eux (les flux) - (et les classes techniques aussi d'ailleurs, celles du paquet technical qui commencent par Xml* ont été bien testées)! 

Bon ben... voilà. Je pense que maintenant ça devrait aller. 

Il reste un mois à travailler ensemble, je pense qu'on va y arriver!

Bonne révisions (à tous)!

A+
May 18, 2012
Project Member #20 Mathe...@gmail.com
(No comment was entered for this change.)
Status: Verified