feat(fls): topology of a .fls file as Java loads it

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>
This commit is contained in:
2026-09-29 20:33:02 +00:00
co-authored by Claude Opus 5.5
parent a02b78b4cb
commit a02bb62413
18 changed files with 1446 additions and 34 deletions
+21 -1
View File
@@ -19,8 +19,12 @@ virtuellen Bildschirm statt „headless".
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 als `null`).
* Bisher ausgelesen: Geräte (Klasse, Name, Beschriftung, Position,
Schnittstellen), Kabel (Enden als Gerät/Schnittstelle), Doku-Elemente.
Schnittstellen, bei Rechner/Notebook `useIPAsName`/`useMACAsName`), Kabel
(Enden als Gerät/Schnittstelle), Doku-Elemente.
Systemsoftware, Dateisysteme und Anwendungen folgen schrittweise.
## Getter-Standardwerte
@@ -34,3 +38,19 @@ x-Koordinate eines Geräts. Daran scheitert der Swift-Leser (Plan §13, M2).
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).