LangTweetFilter.java
package tweetoscope.tweetsFilter;
import com.twitter.clientlib.model.Tweet;
/**
* =====================================================
* CLASSE LangTweetFilter - Filtre par langue
* =====================================================
*
* Ce filtre accepte UNIQUEMENT les tweets dans une langue spécifiée.
*
* Objectif :
* Filtrer les tweets pour ne garder que ceux dans une langue particulière.
*
* Exemple d'utilisation :
* - LangTweetFilter("en") accepte UNIQUEMENT les tweets en anglais
* - LangTweetFilter("fr") accepte UNIQUEMENT les tweets en français
* - LangTweetFilter("es") accepte UNIQUEMENT les tweets en espagnol
*
* Logique du filtre :
* - Chaque tweet a un champ "lang" contenant le code langue (ex: "en", "fr", "es")
* - Le filtre compare ce code avec la langue cible
* - Si tweet.lang == langue cible → tweet accepté ✓
* - Si tweet.lang != langue cible → tweet rejeté ✗
*
* Codes langue standards (ISO 639-1) :
* - "en" : Anglais
* - "fr" : Français
* - "es" : Espagnol
* - "de" : Allemand
* - "it" : Italien
* - "pt" : Portugais
* - "ja" : Japonais
* - "zh" : Chinois
* - etc.
*/
public class LangTweetFilter implements TweetFilter.FilterCondition {
/**
* VARIABLE MEMBRE : language
*
* Stocke le code langue cible du filtre.
* Cette langue est celle que nous VOULONS conserver.
*
* Type String :
* - Codes standards ISO 639-1
* - Exemples : "en", "fr", "es", "de", "it", "pt", "ja", "zh"
*
* Exemple :
* language = "en"
* → Accepte les tweets anglais
* → Rejette les tweets français, espagnols, etc.
*
* Utilisation :
* - Initialisée dans le constructeur
* - Ne change jamais après la création du filtre (immutable)
*/
protected String language;
/**
* =====================================================
* CONSTRUCTEUR : Crée un filtre par langue
* =====================================================
*
* Initialise le filtre avec une langue cible.
*
* Processus :
* 1. Stocke la langue fournie dans la variable member 'language'
* 2. Le filtre est maintenant prêt à être utilisé
*
* Exemple :
* LangTweetFilter("en")
* → Crée un filtre qui accepte les tweets anglais
* → Rejette tous les autres tweets
*
* @param language Code langue cible (ex: "en", "fr", "es", "de")
* Ce code sera utilisé pour tester chaque tweet
*/
public LangTweetFilter(String language) {
// Stocke la langue cible fournie en paramètre
this.language = language;
}
/**
* =====================================================
* MÉTHODE match() - Teste si un tweet passe le filtre
* =====================================================
*
* Implémentation de l'interface FilterCondition.
* Vérifie si la langue d'un tweet correspond à la langue cible.
*
* Logique :
* - Récupère le code langue du tweet : tweet.getLang()
* - Compare avec la langue cible : .equals(this.language)
* - equals() retourne true si les strings sont EXACTEMENT identiques
*
* Comparaison SENSIBLE À LA CASSE :
* - "en".equals("en") → true ✓
* - "en".equals("EN") → false ✗ (casse différente)
* - "en".equals("fr") → false ✗ (langue différente)
*
* Risques potentiels :
* - Si tweet.getLang() retourne NULL → NullPointerException ✗
* - Solution : utiliser tweet.getLang() != null && tweet.getLang().equals(language)
*
* Exemples :
* this.language = "en"
* tweet1.getLang() = "en" → equals() = true → ACCEPTÉ ✓
* tweet2.getLang() = "fr" → equals() = false → REJETÉ ✗
* tweet3.getLang() = "EN" → equals() = false → REJETÉ ✗ (différence de casse)
*
* @param tweet Le tweet à tester
* @return true si la langue du tweet == langue cible, false sinon
*/
@Override
public boolean match(Tweet tweet) {
// Compare la langue du tweet avec la langue cible
// .equals() fait une comparaison sensible à la casse
return tweet.getLang().equals(language);
}
}