Falsch-Positive Filterung in CSV-Dateifilter-Komponente

Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Ok! Dann schaue ich mir das mal an und werde es in die neue Version mit aufnehmen.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Also, wenn ich Dich richtig verstehe, meinst Du sicher, das ich in der Klassse CSVFileFilterComp die Methode

Code: Alles auswählen

public boolean isBrokenCompletely() {
  return mFile == null || !mFile.isFile();
}
bzw.

Code: Alles auswählen

public boolean isBrokenPartially() {
  return mFile != null && (mFile.isFile() && mFile.length() == 0);
}

mplementiere und diese dann z.B. in

Code: Alles auswählen

   @Override
   public void read(ObjectInputStream in, int version) throws IOException, ClassNotFoundException { ....
verwende.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Nein du machst mit den Methoden nichts weiter, du fügst sie nur hinzu. TV-Browser wird sie abrufen um dann fehlerhafte Komponenten/Filter in orange-unterstrichen/rot-durchgestrichen zu markieren.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Ach so! Ich baue sie also einfach nur in die Klasse CSVFileFilterComp ein und TV-Browser ruft sie dann automatisch auf.
Und die Regele für "broken files" kann ich dann jeweils in den Mehtoden definieren.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Ja, genau so wird es gemacht.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Und die Methoden müssen nicht überschrieben werden (@overwrite)?
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Sie müssen nicht nur nicht überschrieben werden, sie dürfen es gar nicht, da das Interface diese Methoden nicht hat. Die Funktion wird per Reflection integriert, da man Interfaces erst ab Java 8 nachträglich ändern kann und noch ist TV-Browser auf Java 6.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Alles klar! Ich kompiliere den TV-Browser halt schon mit Java 8 (JDK).
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Trotz allem nocheinmal der Hinweis, dass das Episode-Feld auch kodiert mehrfache Nummern enthalten kann, dekodieren kann man sie durch Aufruf von

Code: Alles auswählen

IOUtilities.decodeSingleFieldValueToMultipleEpisodeNumers(fieldValue)
Also 1. Schritt prüfen ob nicht -1, dann Aufruf dieser Methode, dann erst die zurückgegebenen Episodennummern prüfen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Ich habe das jetzt so gemacht.

Code: Alles auswählen


         String episodeNr = String.valueOf(program.getIntField(ProgramFieldType.EPISODE_NUMBER_TYPE));
         boolean hasEpisodeNr = false; 
         if (episodeNr.equals("-1")) {
             episodeNr = "0";    <---    Hier fällt mir noch was Besseres ein. Wahrscheinlich nehme ich EMPTY_STRING            	 
         } else {
             episodeNr = prepareForComparison(episodeNr, 0);
             hasEpisodeNr = checkParam(episodeNr);        	 
         } 

Wo möchtest Du jetzt die Decodierung

Code: Alles auswählen


IOUtilities.decodeSingleFieldValueToMultipleEpisodeNumers(fieldValue)

aufrufen? Setze es bitte einfach so rein, wie Du es meinst.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Es ist ja nicht gerade sinnvoll aus dem int-Wert einen String zu machen und diesen dann zu vergleichen, denn int-Werte lassen sich ja sehr viel leichter vergleichen.

Code: Alles auswählen

private boolean hasEpisodeNumber(int toSearchFor, Program program) {
  boolean episodeFound = false;
  
  if(program.getIntField(ProgramFieldType.EPISODE_NUMBER_TYPE) != -1) {
    int[] episodeNumbers = IOUtilities.decodeSingleFieldValueToMultipleEpisodeNumers(program.getIntField(ProgramFieldType.EPISODE_NUMBER_TYPE));
      
    for(int episodeNumber : episodeNumbers) {
      if(toSearchFor == episodeNumber) {
        episodeFound = true;
        break;
      }
    }
  }
    
  return result;
}
Du könntest diese Methode natürlich noch entsprechend erweitern, damit die auch noch in der Beschreibung nach der Episode sucht.

und wenn du dann die Episode prüfen möchtest rufst du einfach nur folgendes auf:

Code: Alles auswählen

String episodeFromCSV = null;

//HIER WIRD DIE NUMMER AUS DER CSV-DATEI AUSGELESEN (wie auch immer das genau passiert)

boolean hasEpisodeNumber = false;

if(episodeFromCSV != null) {
  hasEpisodeNumber = hasEpisodeNumber(Integer.parseInt(episodeFromCSV), program);
}

//HIER WIRD DAS ERGEBNIS DER EPISODEN-SUCHE AUSGEWERTET (wie auch immer das genau passiert)
(Keine Garantie für die Funktion des Quellcodes, den habe ich hier direkt erstellt und nicht getestet, der funktioniert also nur theoretisch.)

Generell würde der Quellcode deiner Filterkomponente wesentlich übersichtlicher, wenn du für jeden Wert, der geprüft werden soll eine eigene Methode erstellst, anstatt mit extrem unübersichtlichen Arrays zu arbeiten. Musst du ja nicht sofort machen, aber du könntest jetzt mit der Episodenummer anfangen, das würde dir in Zukunft bei möglichen Änderungen auch helfen, den Code leichter warten zu können. (Ich bin jedenfalls bei der Komplexität deiner Prüfungen nicht durchgestiegen.)
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Danke, ich schau mir dein Beispiel an und baue es entsprechend ein.

Die Filterkomponente prüft eigentlich keine Werte, sondern Ereignisse.
Die beiden Arrays sind eigentlich Matrizen.
Du mußt zum Verständnis also nicht in Werten sondern in Ereignissen denken.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Es ist ja gut, wenn du das verstehst, aber für einen Außenstehenden ist der Quellcode praktisch nicht verständlich, weil eben zu komplex.

Letztendlich willst du Werte prüfen, wie das implementiert ist spielt dafür keine Rolle. Und zur Prüfung der Werte gibt es weit einfachere Methoden als die Arrays. Angenommen du hast in der CSV-Datei die Möglichkeit fünf Werten anzugeben, dann macht das fünf Prüfmethoden, eine pro Wert und diese rufst du dann, je nach Vorkommen der Werte in der CSV-Datei auf und wertest dann die Ergebnisse aus (d.h. wie die Werte miteinander zum Gesamtergebnis logisch verbunden werden). Soll dann die Prüfung eines Wertes geändert werden, dann musst du auch nur diese eine Methode ändern. Und wenn du weitere Werte in der CSV-Datei erlaubst, dann musst du nur genau so viele Methoden hinzufügen, wie es neue Werte gibt. Bei deiner Lösung musst du sämtliche Array-Prüfungen überarbeiten.

Es ist natürlich letztlich egal, wie man etwas programmiert, die Hauptsache ist, dass es funktioniert. Dem Nutzer ist es auf jeden Fall egal, wie es programmiert ist, wenn es funktioniert, aber du machst dir als Entwickler das Leben schwer, wenn du die kompliziertere Lösung programmiert hast (und davon nehme ich mich selbst auch nicht aus, man findet einfach nicht immer die beste Lösung, da man in eingefahrenen Pfaden denkt oder noch nicht genug Erfahrung mit ähnlichen Problemen gesammelt hat).
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von Sheldon2012 »

Du meinst es ja gut und das weiß ich auch zu schätzen
Natürlich kann man ein Problem nicht nur auf eine Weise lösen.
Aber bislang funktioniert mein Ansatz ja recht gut. Das mußt Du doch zugeben. :)
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Staffel/Episoden Filterung & Anzeige

Beitrag von ds10 »

Ich habe ja auch nicht behauptet, dass es nicht funktioniert, sondern dass der Quellcode für Außenstehende nicht verständlich ist und er eine hohe Komplexität aufweist, was Änderungen nur mit großem Aufwand ermöglicht. Ich habe ja auch schon im letzten Post geschrieben, dass es letztlich egal ist, wie es programmiert ist, wenn es funktioniert.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Antworten