Suche
TextureSync
Version
Datum	10.04.2019
Autor	Robin Willmann
Projektmitglieder	Hendrik Schutter, Lukas Fürderer, Robin Willmann, Jannik Seiler

Einleitung
Dieses Dokument befasst sich mit dem Syntax und der Semantik der Suchfunktion.
Die Suchfunktion kann nach folgenden Kriterien filtern:
Vorhandensein Tags
Vollständige Namen
Mindest-Auflösung (inklusive)
Einstelldatum liegt vor einem Datum (inklusive)
Die Negation eines der Oberen.
Es können mehrere der obigen Kriterien als „logisches Und“ kombiniert werden. Ein „logisches Oder“ ist nicht möglich. Diese Entscheidung wurde getroffen, da durch verschalte logische Operatoren der Syntax zu kompliziert würde.
Die kursiven Kriterien werden unten als Spezialfilter benannt.

Eingabe

Syntaktische Elemente
Er Syntax sei folgendermaßen definiert:
Suche := Filter " " ( Suche | ε )
Filter := Negation | Filter1
Filter1 := Spezialfilter | Tagfilter
Negation := "!" Filter1
Spezialfilter := Spezialfiltername ":" Spezialfilterargument
Tagfilter := Tagname
Name	Definition
Spezialfiltername	Siehe unten für mögliche Spezialfilternamen. Groß- und Kleinschreibung bleibt unbeachtet.
Spezialfilterargument	Ist abhängig vom Spezialfiltername, siehe unten.
Tagname	Zeichenkette aus Buchstaben, Zahlen, Bindestrichen und Unterstrichen. Die Groß- und Kleinschreibung wird hierbei nicht berücksichtigt.

Spezialfilter

Vollständiger Name
Dieser Filter trifft zu, falls der angegebene Name Teil des Namens einer Textur ist. Groß- und Kleinschreibung bleibt unbeachtet.
Spezialfiltername:
„n“ oder „Name“
Spezialfilterargument:
Zeichenkette aus Buchstaben, Zahlen, Bindestrichen und Unterstrichen.
Beispiele:
n:Holz
!name:Papier
!nAmE:Papier

Mindest-Auflösung
Dieser Filter trifft zu, falls Minimum(Breite in Pixeln, Höhe in Pixeln) der Textur größer oder gleich dem als Argument angegebenen Pixel-Anzahl ist.
Die Entscheidung nicht nach Breite und Höhe separat zu filtern wurde getroffen, weil Texturen in der Regel Quadratisch sind.
Hinweis: Nach einer Maximal-Auflösung kann gesucht werden, indem dieser Filter negiert wird.
Spezialfiltername:
„r“ oder „Res“ oder „Resolution“
Spezialfilterargument:
Wird durch folgende Regex beschrieben: [0-9]+k?
Befindet sich ein „k“ am Ende wird die vorausgehende Zahl mit 1024 multipliziert.
Beispiele:
r:4k
!res:8k
resolution:1337
!res:25600

Einstell-Datum (vorher)
Dieser Filter trifft zu, falls das Einstelldatum der Textur kleiner oder gleich dem als Argument angegebenen Datum ist.
Hinweis: Um nach einem Datum nach dem eingeben Datum zu suchen, kann dieser filter negiert werden.
Spezialfiltername:
„b“ oder „Bef“ oder „Before“
Spezialfilterargument:
Wird durch folgende Regex beschrieben: [0-9]{1,4}\-[0-1]?[1-9]\-[0-3]?[1-9]
Dies stellt das Format "yyyy-MM-dd" dar, siehe Javadoc unter
java.text.SimpleDateFormat für mehr Informationen.
Beispiele:
b:2018-09-05
!before:2019-1-3
bef:2020-9-03

Ausgabe
Die anzeigten Elemente bei der Suche werden folgendermaßen bestimmt:
Zunächst werden alle Textur-Metadaten sequenziell durchgegangen.
Zutreffende Filter werden gezählt.
Ist die Anzahl größer als oder gleich die Hälfte (abgerundet) der angeben Filter, dann wird diese ausgegeben.
Die Ausgabe findet mit größter Anzahl zutreffender Filter zuerst statt. Bei gleicher Anzahl wird Alphabetisch nach Namen sortiert.

Client-Server-Interaktion
Die Suche selbst nimmt der Server vor. Dieser schickt dem Client das Ergebnis (Siehe Netzwerkprotokoll). Für das Validieren der Suchanfrage ist der Client zuständig. Sollten dennoch ungültige Eingaben den Server erreichen:
Werden diese Leise ignoriert:
wenn nicht zugelassene Zeichen in der Suche anfrage auftauchen.
Wirft der Server einen Fehler: (siehe Netzwerkprotokoll, Fehlerhandhabung)
bei Invalidem UTF-8 Encoding.
Bei Unbekannten Spezialfiltern.

Changelog
Version	Änderung
0.1.0	-
TextureSync Suche ⸬ Version Seite 6/6