readTopology maps the decoded JavaBeans graph to devices, cables and documentation items the way SzenarioVerwaltung.netzwerkLaden does: the kind from the Java class (the palette label is not file data), devices without bounds at 0,0, interface values through Java's setters. All 23 corpus files match Java field by field. Found on the way: - listItems mixed a constructor's elements with added ones; a router's second interface was lost. Lists now replay add/set in order after the elements the constructor made. - The first 0 of a file may be SwingConstants.CENTER; measured like the getter defaults. - IP.ipCheck (javaIp.ts) measured on 46 cases: empty tokens skipped, signs, leading zeros and BMP digits of any script accepted. - The Java oracle took lower-case MACs in a file for random ones (8 interfaces); it now compares case-insensitively and reports the host name flags. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.8 KiB
Java-Orakel
Java-Filius selbst liest den Korpus (corpus/) und schreibt, was es gefunden
hat, nach corpus/corpus.java.json. Java ist der Schiedsrichter für das
Dateiformat — der Swift-Leser verliert in 10 von 23 Dateien Geräte (Plan
§13, M2).
npm run oracle:java # = tools/java-oracle/run.sh
Braucht JDK 17+, Maven und xvfb-run. Filius öffnet beim Laden sein
Hauptfenster (Information.reset → JMainFrame), deshalb läuft es an einem
virtuellen Bildschirm statt „headless".
- Gelesen wird über Filius' eigene, private Lademethode
SzenarioVerwaltung.netzwerkLaden(per Reflection) — Javas Weg, kein Nachbau. - Stand:
gitlab.com/filius1/filius@6640354(2.14.0), wird beim ersten Lauf nach.upstream/geholt und gebaut. - MAC-Adressen, die nicht in der Datei stehen, würfelt Filius beim Anlegen
der Netzwerkkarte. Sie erscheinen als
null; zwei Läufe sind byte-gleich. - Ob eine MAC in der Datei steht, wird ohne Rücksicht auf Groß-/Kleinschreibung
geprüft:
getMac()schreibt groß, acht Korpus-Dateien speichern klein (bis 29.09.2026 erschienen sie fälschlich alsnull). - Bisher ausgelesen: Geräte (Klasse, Name, Beschriftung, Position,
Schnittstellen, bei Rechner/Notebook
useIPAsName/useMACAsName), Kabel (Enden als Gerät/Schnittstelle), Doku-Elemente. Systemsoftware, Dateisysteme und Anwendungen folgen schrittweise.
Getter-Standardwerte
XMLEncoder teilt gleiche Integer/Boolean-Objekte. Ein Wert, der einmal als
Ergebnis eines Getters geschrieben wurde (<void id="Integer0" property="iconTextGap"/>), taucht später nur noch als Verweis auf — etwa als
x-Koordinate eines Geräts. Daran scheitert der Swift-Leser (Plan §13, M2).
GetterDefaults erzeugt die betroffenen Klassen wie XMLDecoder (ohne
Argumente) und ruft den Getter auf; das Ergebnis steht in
packages/fls/src/javaDefaults.json. Gemessen, nicht geraten: Filius' Knopf
setzt verticalTextPosition auf 3 (BOTTOM), nicht auf Swings 0 (CENTER).
Dasselbe gilt für statische Konstanten: Die erste 0 einer Datei kann als
<object class="javax.swing.SwingConstants" field="CENTER"/> stehen, und jede
spätere 0 — etwa die Rot-, Grün- und Blauwerte einer schwarzen Doku-Farbe —
verweist darauf. Schreibweise im Aufruf: klasse::FELD, Ergebnis
"SwingConstants.CENTER": 0.
IP.ipCheck
Java-Filius schickt jede IP-Adresse und Maske beim Laden durch
IP.ipCheck. IpCheckCases ruft es für jede Zeile von
packages/fls/test/ip-check.cases.txt auf (ASCII, Nicht-ASCII als
\uXXXX) und schreibt ip-check.java.json. Gemessen: leere Abschnitte
zählen nicht (10..0.0.1), Vorzeichen und führende Nullen gehen, ebenso
Ziffern jeder Schrift in der BMP (Thai, Devanagari, Vollbreite) — aber kein
Leerzeichen und kein 𝟏 (Ersatzpaar).