diff --git a/CHANGES.md b/CHANGES.md index 2eea86c..15488f8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -36,10 +36,10 @@ Swift-Pfade relativ zu `filius-ipad/ios/FiliusPad/TopologyEditor/` (Stand | --- | --- | --- | | `src/zip.ts` | `Persistence/TopologyFLSArchive.swift` (Fehler, Grenzen, Pfadregeln, ZIP-Leser/-Schreiber, CRC-32) | übertragen; DEFLATE über `fflate`, mit Apples Abschneide-Verhalten nachgebildet; Pfadfaltung (NFC, Breite, volles Case-Folding) an 41 Paaren gegen das Swift-Orakel gemessen | | `src/archive.ts` | ebenda, Archiv-Teil von Import und Export | übertragen, ohne die XML-Ebene | -| `src/javabeans.ts`, `src/javaDefaults.json` | — | neu: XMLEncoder-Leser nach den Regeln von `java.beans.XMLDecoder` (Swift liest elementweise und verliert geteilte Werte); Getter-Standardwerte und statische Konstanten mit `tools/java-oracle` gemessen | +| `src/javabeans.ts`, `src/javaDefaults.json` | — | neu: XMLEncoder-Leser nach den Regeln von `java.beans.XMLDecoder` (Swift liest elementweise und verliert geteilte Werte); Getter-Standardwerte und statische Konstanten mit `tools/java-oracle` gemessen; merkt sich den Java-Typ jedes Primitivs an Settern, Konstruktor- und Aufrufargumenten und welche Eigenschaften ein eigener Getter angelegt hat (für `beanCapture.ts`) | | `src/importProject.ts` | `Persistence/TopologyProjectStore.swift` (Knoten, Ports, Kabel, IP-Konfiguration, Switch/WLAN, Routen, RIP, Firewall, DHCP, Portweiterleitung, Modem, Dateisysteme, Programme, Doku-Elemente des Imports) | übertragen, Eingabe ist Javas Sicht: Name und Port-Anzahl wie Java, abgelehnte Adresse → Swift-Standard, Router-Standardgateway wie Java (Swift verliert es), jede Router-Firewall eingetragen, Konfigurationstexte wie in Swift getrimmt (`swiftTrim`), Rechner ohne Dateisystem leer wie in Java (Swift: Demo-Dateien), alle Programme bleiben (Swift verwirft sechs), Webserver-Dateien bleiben in `/webserver` (Swift: `/www`), keine versteckten Zustandsdateien im Dateisystem, DNS-Einträge so, wie Javas Server sie aus `/dns/hosts` beantwortet, WLAN eines Rechners eingeschaltet nach Javas Funk-Merkmal der Karte (auch ohne SSID; Swift: jede SSID); der Webserver behält Javas Schalter für virtuelle Hosts (Swift: aus); gegen Swifts importiertes Modell auf 13 Dateien geprüft | | `test/importProject.test.ts` | — | neu: Swifts importiertes Modell (13 Dateien, begründete Abweichungen; im Dateisystem ausgenommen nur Swifts versteckte Zustandsdateien), Vollständigkeit aller 23, Pings im Kern (über einen Router; über drei Router mit manuellen Routen und Router-Gateways) | -| `src/systemSoftware.ts` | Java `SwitchFirmware`, `Betriebssystem`, `VermittlungsrechnerBetriebssystem`, `GatewayFirmware`, `Weiterleitungstabelle`, `Firewall`, `FirewallRule`, `DHCPServer`, `ModemFirmware`, `Dateisystem`, `Datei` | neu nach Java: SSID, Lernzeit, RIP, manuelle Routen, Router-Firewall (an allen Stellen, an denen die Datei sie erreicht), DHCP (ein kaputter statischer Eintrag fällt allein weg, Java verliert alle folgenden), statische NAT, Modem, Dateisystem (bei Router und Heimrouter das, was die Datei zu den Vorlagen des Konstruktors hinzufügt, oder eine eigene Wurzel, die sie ersetzt), installierte Programme von Rechner und Notebook; `Character.isWhitespace` am JDK gemessen; gegen Java geprüft | +| `src/systemSoftware.ts` | Java `SwitchFirmware`, `Betriebssystem`, `VermittlungsrechnerBetriebssystem`, `GatewayFirmware`, `Weiterleitungstabelle`, `Firewall`, `FirewallRule`, `DHCPServer`, `ModemFirmware`, `Dateisystem`, `Datei` | neu nach Java: SSID, Lernzeit, RIP, manuelle Routen, Router-Firewall (an allen Stellen, an denen die Datei sie erreicht), DHCP (ein kaputter statischer Eintrag fällt allein weg, Java verliert alle folgenden), statische NAT, Modem, Dateisystem (bei Router und Heimrouter das, was die Datei zu den Vorlagen des Konstruktors hinzufügt, oder eine eigene Wurzel, die sie ersetzt), installierte Programme von Rechner und Notebook (eigene Anwendungen eines Projekts als erfasste Bean, `beanCapture.ts`); `Character.isWhitespace` am JDK gemessen; gegen Java geprüft | | `src/javaIp.ts` | Java `IP.inetAton`/`ipCheck` | neu nach Java; an 46 Fällen mit Java gemessen | | `src/dnsHosts.ts` | Java `DNSServer.leseRecordListe`, `ResourceRecord`, `Dateisystem.holeDatei`; Swift `State/TopologyDNSResolver.swift` (`TopologyDNSHostsFileCodec`) als Vergleich | neu nach Java: Felder nur an einzelnen Leerzeichen, keine Kommentare, ungültige TTL → 3600, Doppelte bleiben; ins Modell kommt nur, was Java beantwortet (Typ A/MX/NS, Name nicht leer); Javas Fehler nicht übernommen: Label mit Ziffer vorn erlaubt, kein Backslash, letztes Label nicht rein numerisch (RFC 1123/3696), Typ in jeder Schreibung (RFC 4343), negative TTL ungültig (RFC 2181); an 76 Fällen mit Java und Swift gemessen | | `src/topology.ts` | Java `SzenarioVerwaltung.netzwerkLaden`, Konstruktoren und Setter der Geräte; Swift `Persistence/TopologyProjectStore.swift` (Parser) als Vergleich | neu nach Java statt Übertragung: Geräteart aus der Klasse statt aus der Beschriftung, Geräte ohne Koordinaten bei 0,0 statt verworfen, Werte durch Javas Setter, die Zeichen-Enden eines Kabels, die Funk-Eigenschaft einer Netzwerkkarte (`wireless`, bis 30.09.2026 übersehen) | @@ -47,9 +47,10 @@ Swift-Pfade relativ zu `filius-ipad/ios/FiliusPad/TopologyEditor/` (Stand | `test/topology.test.ts` | — | neu: alle 23 Korpus-Dateien Feld für Feld wie Java (Geräte, Schnittstellen, Kabel, Doku-Elemente), dazu die Regeln, die der Korpus nicht berührt; Java lädt seit M8 über den vollständigen Ladeweg, eigene Anwendungen (`test/ownApplications.ts`) sind bis B2 ausgenommen | | `test/javaIp.test.ts`, `test/ip-check.*` | — | neu: `IP.ipCheck`-Fälle, Ergebnis aus Java | | `src/javaEmail.ts` | Java `EmailServer` (Konten-Bean, `kontenLaden`/`stringZuListeBenutzerkonten`), `EmailAnwendung` (Ordner, Adressbuch, `laden`), `EmailKonto`, `Email`, `AddressEntry`, `EmailUtils` | neu nach Java: E-Mail-Beans über ihre Setter, `/mailserver/konten.txt` und `/konten.txt` im Format von Javas Lesern, ohne ihre Fehler (leere Felder zählen, eine kurze Zeile fällt allein weg, Nachrichten mit leerem Text oder Betreff bleiben, `;` im Betreff bleibt, CRLF, beim Client die letzte vollständige Zeile); Empfänger älterer Dateien als Zeichenketten; gegen Java auf dem Korpus und an 43 Fällen geprüft (13 benannte Java-Fehler) | +| `src/beanCapture.ts` | — | neu: eine decodierte Bean zurück in die Form des Schreibers, mit Javas Zahlentypen; der Verweis auf das Betriebssystem des Knotens als Marke; was das Format nicht sagen kann (Unaufgelöstes, `Field`, Fabrikmethode, ein anderswo per Getter erreichtes Objekt), wird abgelehnt, nicht geraten; Rundlauf-Tests in `test/beanCapture.test.ts` | | `src/javaBeansWriter.ts` | — | neu: Schreiber für das `XMLDecoder`-Format, Gegenstück zu `javabeans.ts`; ausdrücklich typisierte Eingabe, geteilte Objekte über `id`/`idref`, was XML nicht fassen kann (und CR) als ``; von Java selbst geprüft (`BeansDump`) | | `test/javaBeansWriter.test.ts`, `test/beans/` | — | neu: 11 Dateien des Schreibers, von Javas `XMLDecoder` gelesen und beschrieben; Erwartungen von Hand | -| `src/topologyWriter.ts` | Java `SzenarioVerwaltung.netzwerkSpeichern`, Konstruktoren von `NetzwerkInterface`, `Port`, `GUIKabelItem` und der Systemsoftware | neu nach Java: `konfiguration.xml` aus Javas Sicht — Geräte, Schnittstellen (vom Konstruktor angelegte über Getter, weitere per `add`), Ports über Getter-Verweise, Kabel samt Zeichen-Enden (`kabelpanel`), Doku-Elemente; Systemsoftware über ihre Setter: SSID, Lernzeit, RIP, manuelle Routen, DHCP-Client und -Server, statische NAT, Modem, Router-Firewall (über das `konfig`-Plug-in des Webservers, wie XMLEncoder sie erreicht); Dateisysteme (an die Wurzel des Konstruktors angehängt wie bei XMLEncoder, beim Router hinter dessen Vorlagen); installierte Programme nach den Dateien (Webserver, Tauschbörse und E-Mail-Server legen ihre Ordner nur an, wo sie fehlen; der DNS-Server liest `/dns/hosts` beim Installieren), je unter ihrem Schlüssel mit der Systemsoftware wie `installApp`, samt Einstellungen und persönlicher Firewall; E-Mail: Domain und Bean-Konten des Servers samt Postfächern, Ordner und Adressbuch des Clients (sein Konto steht in `/konten.txt`, einer Datei); Javas Fehler nicht übernommen: ein Empfänger, den eine ältere Datei als Zeichenkette hält, wird als der `AddressEntry` geschrieben, den Javas `AddressEntry(String)` daraus macht (Java legt die Zeichenkette ungeprüft in die typisierte Liste, sein E-Mail-Fenster scheitert daran), ein `null`-Empfänger fällt weg; Kopf „Filius version: 2.14.0 (mdg-filius)“ | +| `src/topologyWriter.ts` | Java `SzenarioVerwaltung.netzwerkSpeichern`, Konstruktoren von `NetzwerkInterface`, `Port`, `GUIKabelItem` und der Systemsoftware | neu nach Java: `konfiguration.xml` aus Javas Sicht — Geräte, Schnittstellen (vom Konstruktor angelegte über Getter, weitere per `add`), Ports über Getter-Verweise, Kabel samt Zeichen-Enden (`kabelpanel`), Doku-Elemente; Systemsoftware über ihre Setter: SSID, Lernzeit, RIP, manuelle Routen, DHCP-Client und -Server, statische NAT, Modem, Router-Firewall (über das `konfig`-Plug-in des Webservers, wie XMLEncoder sie erreicht); eigene Anwendungen eines Projekts, wie die Datei sie hatte; Dateisysteme (an die Wurzel des Konstruktors angehängt wie bei XMLEncoder, beim Router hinter dessen Vorlagen); installierte Programme nach den Dateien (Webserver, Tauschbörse und E-Mail-Server legen ihre Ordner nur an, wo sie fehlen; der DNS-Server liest `/dns/hosts` beim Installieren), je unter ihrem Schlüssel mit der Systemsoftware wie `installApp`, samt Einstellungen und persönlicher Firewall; E-Mail: Domain und Bean-Konten des Servers samt Postfächern, Ordner und Adressbuch des Clients (sein Konto steht in `/konten.txt`, einer Datei); Javas Fehler nicht übernommen: ein Empfänger, den eine ältere Datei als Zeichenkette hält, wird als der `AddressEntry` geschrieben, den Javas `AddressEntry(String)` daraus macht (Java legt die Zeichenkette ungeprüft in die typisierte Liste, sein E-Mail-Fenster scheitert daran), ein `null`-Empfänger fällt weg; Kopf „Filius version: 2.14.0 (mdg-filius)“ | | `test/topologyWriter.test.ts`, `test/written.java.json` | — | neu: alle 23 Korpus-Dateien gelesen und neu geschrieben, von Java geladen — Topologie, Systemsoftware, Dateisysteme und Programme samt E-Mail wie beim Original (bis auf die benannte Abweichung bei Empfängern als Zeichenkette, nur in `man-in-the-middle.fls`) (Java gegen Java); dazu eine künstliche Topologie mit dem, was der Korpus nicht hat (u. a. eingeschaltete Router-Firewall mit Regeln jedes Protokolls, alle Firewall-Schalter abseits der Vorgabe, Modem mit eigenem Port und Ziel, verschachtelter Dateibaum mit umbenannter Wurzel, namenlosem Ordner, Datei ohne Typ und Inhalt mit CR/CRLF und Zeichen jenseits der BMP, Heimrouter mit eigener Wurzel, jedes Filius-Programm mit Einstellungen abseits der Vorgabe samt persönlicher Firewall, von Java angelegte Ordner `/peer2peer` und `/mailserver`, E-Mail-Server und -Client mit Konto, Postfach, drei Ordnern, Adressbuch und Empfängern aller Formen) | | `src/exportProject.ts` | Gegenstück zu `importProject.ts`; `saveProjectArchive` schreibt eine ganze `.fls` samt der übrigen Archiveinträge (Gegenstück: `openProjectArchive` in `importProject.ts`, das sie in `archiveEntries` des Modells legt); Java `JHostKonfiguration.updateWifiConnection`, `InternetKnotenBetriebssystem.getStandardGateway`/`setStandardGateway` | neu: Editor-Modell → Javas Sicht für den Schreiber, Schritt X1 Topologie — Geräte, Schnittstellen (MAC wie in der Simulation: aus der Datei oder aus der Port-ID abgeleitet), Kabel samt Funk (Karte drahtlos und Switch, wie Java verbindet), Gateway und DNS an allen Schnittstellen wie Javas eigene Setter, Doku-Elemente; X2 Systemsoftware — SSIDs, Lernzeit, Routen, RIP, DHCP-Client und -Server, Portweiterleitung, Firewall (Namen des Kerns als Javas Zahlen), Modems aus den Paaren des Modells (Port aus dem Paarnamen, der erste eines Paars dient, Ziel `localhost`); X3 Dateien von Rechner und Notebook — Typ aus der Inhaltsart (Text nach Endung, sonst `text`; Bild und Binärdaten nach Medientyp), Bilder und Binärdaten in Base64 wie Filius' `Base64.encodeBytes` (Umbruch nach 76 Zeichen, an 19 Längen mit Java gemessen); X4a Programme — je Programm die Filius-Klasse unter ihrem Namen als Schlüssel, eingeschaltete Server, Ports, virtuelle Hosts, DNS-Rekursion, Ziel des Clients (leer als `null` wie Javas Konstruktor), Teilnehmerzahl, persönliche Firewall; X4b E-Mail — Beans des Servers (Domain, Konten, Postfächer) und des Clients (drei Ordner, Adressbuch), `/konten.txt` und `/mailserver/konten.txt` aus den Konten des Modells neu geschrieben im Format von Filius 2.14 (`EmailKonto.toString`, `listeBenutzerkontenZuString`), ohne Javas Fehler (leere Felder statt "null"); ein Zeichen, das ein Feld im Format nicht tragen kann, wird dort zum Leerzeichen, mit Warnung | | `test/exportProject.test.ts`, `test/exported.java.json` | — | neu: alle 23 Korpus-Dateien importiert, exportiert, geschrieben und von Java geladen — Topologie wie beim Original bis auf benannte Abweichungen (abgeleiteter MAC und abgeleitete Switch-SSID statt gewürfelter, Modem-Rollen nach Reihenfolge im Paar, Doku in Zeichenreihenfolge mit Text, Schrift und Mindestgröße des Modells, Dateien in der Ordnung und mit dem Typ des Modells, keine eigenen Dateien von Routern, Empfänger als Zeichenkette gelesen, Nachrichten des Gesendet-Ordners versendet, Konto-Dateien neu geschrieben wie Filius 2.14); die übrigen Archiveinträge (eigene Anwendungen unter `projekt/anwendungen`) kommen byte-gleich zurück; dazu ein künstliches Modell, das Java ebenfalls lädt | diff --git a/corpus/corpus.java.json b/corpus/corpus.java.json index b22525f..f861605 100644 --- a/corpus/corpus.java.json +++ b/corpus/corpus.java.json @@ -34,11 +34,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -264,6 +266,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -327,6 +330,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -376,11 +380,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -878,6 +884,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -952,6 +959,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1001,7 +1009,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1062,6 +1071,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1166,6 +1176,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1229,6 +1240,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1532,17 +1544,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1592,7 +1607,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1671,11 +1687,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1914,6 +1932,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -1933,11 +1952,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2034,6 +2055,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -2053,11 +2075,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2663,17 +2687,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -2740,15 +2767,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -2812,6 +2842,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.com", "beanAccounts": [ @@ -2926,6 +2957,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.com", "beanAccounts": [ @@ -3035,21 +3067,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -3186,6 +3222,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3205,11 +3242,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3265,6 +3304,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3284,11 +3324,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3419,11 +3461,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3723,7 +3767,8 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -4545,6 +4590,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4625,11 +4671,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -4726,6 +4774,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4806,11 +4855,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -5409,17 +5460,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -5486,15 +5540,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5558,6 +5615,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.de", "beanAccounts": [ @@ -5672,6 +5730,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.de", "beanAccounts": [ @@ -5781,21 +5840,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5932,6 +5995,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -5951,11 +6015,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -6011,6 +6077,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -6030,11 +6097,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -6165,11 +6234,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7235,11 +7306,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7465,6 +7538,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -7528,6 +7602,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -7577,11 +7652,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -8025,6 +8102,7 @@ { "key": "filius.software.clientserver.Accumulator", "class": "filius.software.clientserver.Accumulator", + "onItsSystem": true, "aktiv": true, "port": 55555 } @@ -8074,6 +8152,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8164,6 +8243,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8745,6 +8825,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -8819,6 +8900,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -8868,7 +8950,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -8929,6 +9012,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9033,6 +9117,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9096,6 +9181,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9272,7 +9358,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -9504,29 +9591,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10083,6 +10176,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10141,6 +10235,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10160,7 +10255,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10216,6 +10312,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10235,7 +10332,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10291,6 +10389,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10310,7 +10409,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10366,6 +10466,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10385,7 +10486,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10487,6 +10589,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -10550,6 +10653,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -10664,6 +10768,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -11291,6 +11396,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -11340,11 +11446,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -11411,11 +11519,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11527,11 +11637,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11944,6 +12056,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12169,11 +12282,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12253,6 +12368,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12260,6 +12376,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "eve.de", "beanAccounts": [], @@ -12267,7 +12384,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12323,6 +12441,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12436,11 +12555,13 @@ }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12542,6 +12663,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12605,6 +12727,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -12777,6 +12900,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -13048,16 +13172,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13108,16 +13235,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": null, "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -13249,12 +13379,14 @@ { "key": "filius.software.clientserver.Broadcast", "class": "filius.software.clientserver.Broadcast", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 } @@ -13316,17 +13448,20 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 4 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -13374,6 +13509,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 } @@ -13617,15 +13753,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13675,11 +13814,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14168,13 +14309,15 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -14222,16 +14365,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "www.jupiter.de", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14298,11 +14444,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14373,20 +14521,24 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14457,16 +14609,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14558,12 +14713,14 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -15273,11 +15430,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15344,11 +15503,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15547,6 +15708,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -15554,6 +15716,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15877,11 +16040,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15948,11 +16113,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -16148,17 +16315,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16311,11 +16481,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -16379,6 +16551,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -16905,19 +17078,23 @@ "applications": [ { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16975,11 +17152,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17236,17 +17415,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17296,7 +17478,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17375,11 +17558,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17609,7 +17794,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17841,29 +18027,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false diff --git a/packages/fls/src/beanCapture.ts b/packages/fls/src/beanCapture.ts new file mode 100644 index 0000000..bfe779a --- /dev/null +++ b/packages/fls/src/beanCapture.ts @@ -0,0 +1,142 @@ +// A decoded JavaBean (javabeans.ts) turned back into what javaBeansWriter.ts +// writes, so that a bean this package does not understand — a project's own +// application — is written again as the file had it. Java's primitive types +// come from the decoder (propertyKinds, argKinds, a call's kinds); a number +// without one was an Integer or a Double. The node's system software, which +// the bean refers to, is marked (SYSTEM_SOFTWARE_CLASS) and put back by the +// writer as the system software of the node it writes. +// +// What the writer's format cannot say is refused, never guessed: a value the +// decoder left unresolved, a Field, an object a static factory made, and an +// object the bean reached by a getter elsewhere in the file (another part of +// the node, whose identity a copy would lose). Objects the bean shares with +// itself stay shared. + +import { isJavaObject, isUnresolved, type JavaArray, type JavaObject, type JavaValue, type PrimitiveKind } from './javabeans.js'; +import type { BeanObject, BeanStatement, BeanValue } from './javaBeansWriter.js'; + +/** The class name of the mark where a captured bean refers to its node's system software. */ +export const SYSTEM_SOFTWARE_CLASS = '#systemSoftware'; + +export type CaptureResult = { readonly bean: BeanObject } | { readonly failure: string }; + +class CaptureFailure extends Error {} + +/** + * The bean `object` as the writer writes it; `systemSoftware` is the node's + * system software as the decoder has it. + */ +export function captureBean(object: JavaObject, systemSoftware: JavaValue | undefined): CaptureResult { + const captured = new Map(); + + const value = (item: JavaValue, kind: PrimitiveKind | undefined): BeanValue => { + if (item === null || typeof item === 'boolean') return item; + if (typeof item === 'string') return kind === 'char' ? { kind: 'char', value: item } : item; + if (typeof item === 'number' || typeof item === 'bigint') return number(item, kind); + if (isJavaObject(item)) { + if (item === systemSoftware) return { kind: 'object', className: SYSTEM_SOFTWARE_CLASS }; + if (item.fromGetter) throw new CaptureFailure(`it refers to ${item.className}, which a getter reaches elsewhere in the file`); + return bean(item); + } + if (isUnresolved(item)) throw new CaptureFailure(`a value is unresolved (${item.reason})`); + switch (item.kind) { + case 'array': + return { kind: 'array', componentClass: item.componentClass, items: (item as JavaArray).items.map((each) => value(each, undefined)) }; + case 'class': + return { kind: 'class', name: item.name }; + default: + throw new CaptureFailure(`it holds a Field (${item.className}.${item.name})`); + } + }; + + const bean = (item: JavaObject): BeanObject => { + const known = captured.get(item); + if (known !== undefined) return known; + if (item.factoryMethod !== undefined) throw new CaptureFailure(`${item.className}.${item.factoryMethod} makes an object this writer cannot`); + const statements: BeanStatement[] = []; + const result: BeanObject = + item.staticField === undefined + ? { kind: 'object', className: item.className, args: item.args.map((arg, index) => value(arg, item.argKinds[index])), statements } + : { kind: 'object', className: item.className, staticField: item.staticField, statements }; + captured.set(item, result); + statements.push(...statementsOf(item)); + return result; + }; + + /** Setters and getters with what follows on their results; the constructor's elements; the calls but reads. */ + const statementsOf = (item: JavaObject): BeanStatement[] => { + const statements: BeanStatement[] = []; + for (const [property, each] of item.properties) { + if (item.propertiesFromGetters.has(property) && isJavaObject(each)) { + statements.push({ get: property, statements: statementsOf(each) }); + } else { + statements.push({ set: property, value: value(each, item.propertyKinds.get(property)) }); + } + } + for (const [index, element] of item.presetElements) { + statements.push({ getIndex: index, statements: isJavaObject(element) ? statementsOf(element) : [] }); + } + for (const [key, entry] of item.presetEntries) { + statements.push({ call: 'get', args: [key], statements: isJavaObject(entry) ? statementsOf(entry) : [] }); + } + for (const call of item.calls) { + // A read (get(i), get(key)) is the preset element or entry above, or a value set before. + if (call.method === 'get' && call.args.length === 1) continue; + statements.push({ call: call.method, args: call.args.map((arg, index) => value(arg, call.kinds?.[index])) }); + } + return statements; + }; + + try { + return { bean: bean(object) }; + } catch (error) { + if (error instanceof CaptureFailure) return { failure: error.message }; + throw error; + } +} + +function number(item: number | bigint, kind: PrimitiveKind | undefined): BeanValue { + switch (kind) { + case 'byte': + case 'short': + case 'int': + return { kind, value: Number(item) }; + case 'long': + return { kind: 'long', value: item }; + case 'float': + case 'double': + return { kind, value: Number(item) }; + case 'char': + return { kind: 'char', value: String.fromCharCode(Number(item)) }; + default: + // An Integer, or a Double where the number has a fraction. + return typeof item === 'number' && !Number.isInteger(item) ? { kind: 'double', value: item } : { kind: 'int', value: Number(item) }; + } +} + +/** The bean with each mark of the system software replaced by `systemSoftware`. */ +export function withSystemSoftware(value: BeanValue, systemSoftware: BeanValue): BeanValue { + const seen = new Map(); + const replace = (item: BeanValue): BeanValue => { + if (item === null || typeof item !== 'object') return item; + if (item.kind === 'array') return { ...item, items: item.items.map(replace) }; + if (item.kind !== 'object') return item; + if (item.className === SYSTEM_SOFTWARE_CLASS) return systemSoftware; + return object(item); + }; + const statement = (each: BeanStatement): BeanStatement => { + if ('set' in each || 'setIndex' in each) return { ...each, value: replace(each.value) }; + if ('call' in each) return { ...each, args: each.args.map(replace), ...(each.statements === undefined ? {} : { statements: each.statements.map(statement) }) }; + return { ...each, statements: each.statements.map(statement) }; + }; + const object = (item: BeanObject): BeanObject => { + const known = seen.get(item); + if (known !== undefined) return known; + const statements: BeanStatement[] = []; + const result: BeanObject = { ...item, ...(item.args === undefined ? {} : { args: item.args.map(replace) }), statements }; + seen.set(item, result); + statements.push(...(item.statements ?? []).map(statement)); + return result; + }; + return replace(value); +} diff --git a/packages/fls/src/javabeans.ts b/packages/fls/src/javabeans.ts index f517831..662e9dd 100644 --- a/packages/fls/src/javabeans.ts +++ b/packages/fls/src/javabeans.ts @@ -45,8 +45,18 @@ export interface JavaObject { readonly factoryMethod: string | undefined; /** Set through setters, `Field.set` or created lazily by a getter. */ readonly properties: Map; - /** Method calls in order (`add`, `put`, …), with their arguments. */ - readonly calls: { method: string; args: JavaValue[] }[]; + /** The Java type of each property set to a primitive (`int`, `long`, …): numbers alone do not say. */ + readonly propertyKinds: Map; + /** + * The properties whose value this object's own getter made (a placeholder + * the file's statements then changed) — not set to an object from + * elsewhere. + */ + readonly propertiesFromGetters: Set; + /** The Java types of the constructor's arguments, where they are primitives. */ + readonly argKinds: (PrimitiveKind | undefined)[]; + /** Method calls in order (`add`, `put`, …), with their arguments and those arguments' primitive types. */ + readonly calls: { method: string; args: JavaValue[]; kinds?: (PrimitiveKind | undefined)[] }[]; /** * Elements the object already held before the file's statements — a list * its constructor filled, reached by `` on a getter's @@ -62,6 +72,23 @@ export interface JavaObject { readonly fromGetter: boolean; } +/** The primitive types XMLEncoder writes as elements of their own. */ +export type PrimitiveKind = 'boolean' | 'byte' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double'; + +const PRIMITIVE_TAGS = new Set(['boolean', 'byte', 'char', 'short', 'int', 'long', 'float', 'double']); + +/** A wrapper's id prefix, as XMLEncoder names a shared value (Integer0), and its primitive. */ +const KIND_OF_ID_PREFIX: Readonly> = { + Boolean: 'boolean', + Byte: 'byte', + Character: 'char', + Short: 'short', + Integer: 'int', + Long: 'long', + Float: 'float', + Double: 'double', +}; + export interface JavaArray { readonly kind: 'array'; readonly componentClass: string; @@ -262,6 +289,9 @@ function newObject(fields: Partial & { className: string }): JavaObj staticField: fields.staticField, factoryMethod: fields.factoryMethod, properties: new Map(), + propertyKinds: new Map(), + propertiesFromGetters: new Set(), + argKinds: [], calls: [], presetElements: new Map(), presetEntries: new Map(), @@ -271,6 +301,15 @@ function newObject(fields: Partial & { className: string }): JavaObj class Decoder { private readonly ids = new Map(); + /** The primitive type of each id that names a primitive value. */ + private readonly idKinds = new Map(); + + /** The primitive type an argument element stands for, if any. */ + private kindOf(element: Element): PrimitiveKind | undefined { + if (PRIMITIVE_TAGS.has(element.name)) return element.name as PrimitiveKind; + const idref = element.attributes.idref; + return idref === undefined ? undefined : this.idKinds.get(idref); + } topLevel(java: Element): JavaValue[] { return java.children.map((child) => this.expression(child)); @@ -332,6 +371,10 @@ class Decoder { private primitive(element: Element, value: JavaValue): JavaValue { this.store(element.attributes.id, value); + const id = element.attributes.id; + // An element of its own (), or a constant named by its wrapper (Integer0). + const kind = PRIMITIVE_TAGS.has(element.name) ? (element.name as PrimitiveKind) : KIND_OF_ID_PREFIX[id?.replace(/\d+$/, '') ?? '']; + if (id !== undefined && kind !== undefined) this.idKinds.set(id, kind); return value; } @@ -382,7 +425,10 @@ class Decoder { factoryMethod: attributes.method, }); this.store(attributes.id, object); - for (const arg of args) object.args.push(this.expression(arg)); + for (const arg of args) { + object.args.push(this.expression(arg)); + object.argKinds.push(this.kindOf(arg)); + } this.applyStatements( element.children.filter((child) => child.name === 'void'), object, @@ -400,12 +446,14 @@ class Decoder { private statement(element: Element, target: JavaValue | undefined): JavaValue { const attributes = element.attributes; const args: JavaValue[] = []; + const kinds: (PrimitiveKind | undefined)[] = []; const nested: Element[] = []; for (const child of element.children) { if (child.name === 'void') { nested.push(child); } else { args.push(this.expression(child)); + kinds.push(this.kindOf(child)); } } @@ -416,17 +464,23 @@ class Decoder { value = args.length === 0 ? this.getProperty(target, attributes.property, attributes.id) - : this.setProperty(target, attributes.property, args[0]!); + : this.setProperty(target, attributes.property, args[0]!, kinds[0]); } else if (attributes.index !== undefined) { const index = Number.parseInt(attributes.index, 10); value = args.length === 0 ? this.getIndex(target, index, attributes.id) : this.setIndex(target, index, args[0]!); } else if (attributes.method !== undefined) { - value = this.call(target, attributes.method, args, attributes.id); + value = this.call(target, attributes.method, args, attributes.id, kinds); } else if (attributes.idref !== undefined) { value = this.ids.get(attributes.idref) ?? null; } this.store(attributes.id, value); + // A getter's primitive result, shared by id: its wrapper names the type. + const prefix = attributes.id?.replace(/\d+$/, ''); + const kind = prefix === undefined ? undefined : KIND_OF_ID_PREFIX[prefix]; + if (kind !== undefined && (typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean')) { + this.idKinds.set(attributes.id!, kind); + } this.applyStatements(nested, value); return value; } @@ -439,10 +493,16 @@ class Decoder { return newObject({ className, id, args, factoryMethod: method }); } - private call(target: JavaValue | undefined, method: string, args: JavaValue[], id: string | undefined): JavaValue { + private call( + target: JavaValue | undefined, + method: string, + args: JavaValue[], + id: string | undefined, + kinds: (PrimitiveKind | undefined)[] = [], + ): JavaValue { if (typeof target === 'object' && target !== null && (target as JavaField).kind === 'field') { const field = target as JavaField; - if (method === 'set' && args.length === 2) return this.setProperty(args[0]!, field.name, args[1]!); + if (method === 'set' && args.length === 2) return this.setProperty(args[0]!, field.name, args[1]!, kinds[1]); if (method === 'get' && args.length === 1) return this.getProperty(args[0]!, field.name, id); } if (args.length === 0) { @@ -450,15 +510,20 @@ class Decoder { if (property !== undefined) return this.getProperty(target, property, id); } if (isJavaObject(target)) { - target.calls.push({ method, args }); + target.calls.push(kinds.some((kind) => kind !== undefined) ? { method, args, kinds } : { method, args }); if (method === 'get' && args.length === 1 && typeof args[0] === 'number') return this.getIndex(target, args[0], id); if (method === 'get' && args.length === 1 && typeof args[0] === 'string') return this.getEntry(target, args[0], id); } return null; } - private setProperty(target: JavaValue | undefined, property: string, value: JavaValue): JavaValue { - if (isJavaObject(target)) target.properties.set(property, value); + private setProperty(target: JavaValue | undefined, property: string, value: JavaValue, kind?: PrimitiveKind): JavaValue { + if (isJavaObject(target)) { + target.properties.set(property, value); + target.propertiesFromGetters.delete(property); + if (kind === undefined) target.propertyKinds.delete(property); + else target.propertyKinds.set(property, kind); + } return null; } @@ -482,6 +547,7 @@ class Decoder { } const placeholder = newObject({ className: prefix ?? 'unknown', id, fromGetter: true }); target.properties.set(property, placeholder); + target.propertiesFromGetters.add(property); return placeholder; } diff --git a/packages/fls/src/systemSoftware.ts b/packages/fls/src/systemSoftware.ts index 4b4f1d4..f6516dc 100644 --- a/packages/fls/src/systemSoftware.ts +++ b/packages/fls/src/systemSoftware.ts @@ -28,7 +28,9 @@ // not know Java's constructors and sees a placeholder per path; they are // merged here. +import { captureBean } from './beanCapture.js'; import { isDomainName } from './dnsHosts.js'; +import type { BeanObject } from './javaBeansWriter.js'; import { EMAIL_CLIENT_FILE, EMAIL_SERVER_FILE, @@ -130,6 +132,13 @@ const SERVER_APPLICATIONS = new Set([ 'filius.software.www.WebServer', ]); +/** An application of the project's own: its key, class and bean, which refers to its node's system software by a mark. */ +export interface FlsOwnApplication { + key: string | null; + javaClass: string; + bean: BeanObject; +} + /** An installed application with the settings the model reads. */ export interface FlsApplication { /** The key in installierteAnwendungen — the class name in every corpus file. */ @@ -199,6 +208,12 @@ export interface FlsSystemSoftware { modem?: FlsModem; /** Rechner, Notebook: the installed applications, in the file's order. */ applications?: FlsApplication[]; + /** + * Rechner, Notebook: the installed applications FILIUS does not ship — a + * project's own, compiled into projekt/anwendungen — kept as their beans, + * to be written again as the file had them. + */ + ownApplications?: FlsOwnApplication[]; /** * Every node with an IP stack: the root directory (named "root" by Java's * constructor) as the file has it. A router's or home router's holds only @@ -232,7 +247,7 @@ export function readSystemSoftware(device: JavaObject, javaClass: FlsNodeClass, case 'Notebook': result.ssid = optionalString(value('ssid'), 'ssid', warn) ?? null; result.fileSystem = fileSystem(value('dateisystem'), warn); - result.applications = applications(value('installierteAnwendungen'), result.fileSystem, warn); + [result.applications, result.ownApplications] = applications(value('installierteAnwendungen'), result.fileSystem, software, warn); break; case 'Vermittlungsrechner': result.ripEnabled = boolean(value('ripEnabled'), false, 'ripEnabled', warn); @@ -279,11 +294,18 @@ function modemAddress(value: string | null | undefined): string | null { /** * installierteAnwendungen: key → application. A class FILIUS does not ship — - * a project's own application, compiled into projekt/anwendungen — is left - * out: this reader cannot run Java classes. + * a project's own application, compiled into projekt/anwendungen — cannot + * run here; it is kept as its bean (beanCapture.ts), or left out with a + * warning where the bean cannot be written again. */ -function applications(map: JavaValue | undefined, root: FlsFileTree, warn: Warn): FlsApplication[] { +function applications( + map: JavaValue | undefined, + root: FlsFileTree, + software: JavaObject | undefined, + warn: Warn, +): [FlsApplication[], FlsOwnApplication[]] { const result: FlsApplication[] = []; + const own: FlsOwnApplication[] = []; for (const [key, application] of mapEntries(map)) { if (!isJavaObject(application)) { warn(`application ${describe(key)} is ${describe(application)}, left out`); @@ -291,7 +313,9 @@ function applications(map: JavaValue | undefined, root: FlsFileTree, warn: Warn) } const javaClass = application.className; if (!(FILIUS_APPLICATION_CLASSES as readonly string[]).includes(javaClass)) { - warn(`application ${javaClass} is not part of FILIUS (a project's own application), left out`); + const captured = captureBean(application, software); + if ('bean' in captured) own.push({ key: typeof key === 'string' ? key : null, javaClass, bean: captured.bean }); + else warn(`application ${javaClass}, a project's own, cannot be written again: ${captured.failure}; left out`); continue; } const simple = simpleClassName(javaClass); @@ -348,7 +372,7 @@ function applications(map: JavaValue | undefined, root: FlsFileTree, warn: Warn) } result.push(entry); } - return result; + return [result, own]; } /** diff --git a/packages/fls/src/topologyWriter.ts b/packages/fls/src/topologyWriter.ts index 978679c..e1d6e05 100644 --- a/packages/fls/src/topologyWriter.ts +++ b/packages/fls/src/topologyWriter.ts @@ -19,7 +19,8 @@ // the web server, the peer-to-peer application and the e-mail server make // their directories only where the files lack them, and the DNS server reads // /dns/hosts when it is installed. Each is put under its key and given the -// system software, as installApp does. +// system software, as installApp does. A project's own application is +// written as the file had it (beanCapture.ts). // // E-mail: the server's domain and bean accounts with their mailboxes, the // client's three folders and address book. The client's account is no bean @@ -33,6 +34,7 @@ // FILIUS to the same topology and system software (topologyWriter.test.ts, // tools/java-oracle). +import { withSystemSoftware } from './beanCapture.js'; import { encodeJavaBeans, int, @@ -165,7 +167,8 @@ function device(node: NodeToWrite, ports: BeanValue[]): BeanObject { ); } // Named for the applications, which are given it. - const system = (node.system.applications?.length ?? 0) > 0 ? reference('SystemSoftware') : undefined; + const applicationCount = (node.system.applications?.length ?? 0) + (node.system.ownApplications?.length ?? 0); + const system = applicationCount > 0 ? reference('SystemSoftware') : undefined; const systemStatementList = systemStatements(node.system, node.javaClass, system); statements.push( system === undefined @@ -198,13 +201,20 @@ function systemStatements(system: SystemToWrite, javaClass: FlsNodeClass, self: }); } if (system.fileSystem !== undefined) statements.push(fileSystemStatement(system.fileSystem, system.templateFiles !== false)); - if (self !== undefined && system.applications !== undefined) { + if (self !== undefined) { statements.push({ get: 'installierteAnwendungen', - statements: system.applications.map((application) => ({ - call: 'put', - args: [application.key, object(application.javaClass, applicationStatements(application, self))], - })), + statements: [ + ...(system.applications ?? []).map((application): BeanStatement => ({ + call: 'put', + args: [application.key, object(application.javaClass, applicationStatements(application, self))], + })), + // A project's own: its bean as the file had it, on this node's system software. + ...(system.ownApplications ?? []).map((application): BeanStatement => ({ + call: 'put', + args: [application.key, withSystemSoftware(application.bean, self)], + })), + ], }); } if (system.dhcpServer !== undefined) { diff --git a/packages/fls/test/beanCapture.test.ts b/packages/fls/test/beanCapture.test.ts new file mode 100644 index 0000000..58473d4 --- /dev/null +++ b/packages/fls/test/beanCapture.test.ts @@ -0,0 +1,118 @@ +// A decoded bean written again (beanCapture.ts): decoded, captured, written +// and decoded once more, it holds the same values with the same Java types — +// so XMLDecoder calls the same setters with the same arguments. Java's own +// check is in topologyWriter.test.ts and exportProject.test.ts: the corpus's +// own applications, loaded by FILIUS from the files written again. + +import { describe, expect, it } from 'vitest'; +import { captureBean, SYSTEM_SOFTWARE_CLASS, withSystemSoftware } from '../src/beanCapture.js'; +import { decodeJavaBeans, isJavaObject, type JavaObject, type JavaValue } from '../src/javabeans.js'; +import { encodeJavaBeans, object, reference, type BeanObject } from '../src/javaBeansWriter.js'; + +function doc(body: string): string { + return `\n\n${body}\n\n`; +} + +function bean(value: JavaValue | undefined): JavaObject { + if (!isJavaObject(value)) throw new Error(`not an object: ${JSON.stringify(value)}`); + return value; +} + +/** What the decoder keeps of an object, by value: class, arguments, properties and calls with their types. */ +function shape(value: JavaValue, seen = new Set()): unknown { + if (!isJavaObject(value)) return typeof value === 'bigint' ? `${value}n` : value; + if (seen.has(value)) return { shared: value.className }; + seen.add(value); + return { + className: value.className, + staticField: value.staticField, + fromGetter: value.fromGetter, + args: value.args.map((arg) => shape(arg, seen)), + argKinds: value.argKinds, + properties: [...value.properties].map(([name, each]) => [name, shape(each, seen), value.propertyKinds.get(name)]), + presetElements: [...value.presetElements].map(([index, each]) => [index, shape(each, seen)]), + presetEntries: [...value.presetEntries].map(([key, each]) => [key, shape(each, seen)]), + calls: value.calls.filter((call) => call.method !== 'get').map((call) => [call.method, call.args.map((arg) => shape(arg, seen)), call.kinds]), + }; +} + +/** The application of a file: the second value, the first being the system software it refers to. */ +const APPLICATION = doc(` + + 3x + + true + 9007199254740993 + -2 + 0.5 + 0.1 + y + 55555 + Thread-7 + + java.lang.String + ab + 1 + + + 4 + constructed + k5 + `); + +describe('captureBean', () => { + it('writes a bean again with the same values and Java types', () => { + const [system, application] = decodeJavaBeans(APPLICATION); + const captured = captureBean(bean(application), system); + if (!('bean' in captured)) throw new Error(captured.failure); + const written = withSystemSoftware(captured.bean, object('filius.software.system.Betriebssystem', [], [])); + const [again] = decodeJavaBeans(encodeJavaBeans([written])); + + const { properties: _original, ...rest } = shape(application!) as { properties: [string, unknown, unknown][] }; + const { properties: _again, ...restAgain } = shape(again!) as { properties: [string, unknown, unknown][] }; + expect(restAgain).toEqual(rest); + // The system software is another object now, the one it was given. A + // static constant the decoder answers with its measured value comes back + // as that value, SwingConstants.CENTER as the int it is. + const withoutSystem = (properties: [string, unknown, unknown][]) => properties.filter(([name]) => name !== 'systemSoftware'); + const expected = withoutSystem((shape(application!) as { properties: [string, unknown, unknown][] }).properties).map( + ([name, value, kind]) => (name === 'alignment' ? [name, value, 'int'] : [name, value, kind]), + ); + expect(withoutSystem((shape(again!) as { properties: [string, unknown, unknown][] }).properties)).toEqual(expected); + expect(bean(bean(again).properties.get('systemSoftware')).className).toBe('filius.software.system.Betriebssystem'); + // Shared within the bean stays shared. + expect(bean(again).properties.get('first')).toBe(bean(again).properties.get('second')); + }); + + it("marks the node's system software and puts the given one in its place", () => { + const [system, application] = decodeJavaBeans(APPLICATION); + const captured = captureBean(bean(application), system) as { bean: BeanObject }; + const mark = captured.bean.statements!.find((statement) => 'set' in statement && statement.set === 'systemSoftware'); + expect(mark).toEqual({ set: 'systemSoftware', value: { kind: 'object', className: SYSTEM_SOFTWARE_CLASS } }); + + const self = reference('SystemSoftware'); + const replaced = withSystemSoftware(captured.bean, self) as BeanObject; + expect(replaced.statements!.find((statement) => 'set' in statement && statement.set === 'systemSoftware')).toEqual({ set: 'systemSoftware', value: self }); + // The captured bean itself is left as it was. + expect(captured.bean.statements!).toContainEqual(mark); + }); + + it('refuses what it cannot write again, and says why', () => { + /** The last value of the file captured, the first being the system software. */ + const failure = (body: string) => { + const values = decodeJavaBeans(doc(`${body}`)); + return captureBean(bean(values.at(-1)), values[0]); + }; + expect(failure(``)).toEqual({ + failure: 'a value is unresolved (idref Missing0 is not defined)', + }); + expect( + failure(``), + ).toEqual({ failure: 'example.Factory.create makes an object this writer cannot' }); + // A folder of the file system, reached elsewhere by a getter: a copy would not be that folder. + expect( + failure(`1 + `), + ).toEqual({ failure: 'it refers to DefaultMutableTreeNode, which a getter reaches elsewhere in the file' }); + }); +}); diff --git a/packages/fls/test/expectedWarnings.ts b/packages/fls/test/expectedWarnings.ts index 1a5d9e4..c196c9c 100644 --- a/packages/fls/test/expectedWarnings.ts +++ b/packages/fls/test/expectedWarnings.ts @@ -1,16 +1,8 @@ // Warnings the corpus is expected to produce, shared by the corpus tests. /** - * Two examples install an application of their own, compiled into the - * archive (projekt/anwendungen). Java loads it from there; this reader - * cannot run it — and the Java oracle, reading only konfiguration.xml, does - * not see it either. + * None since the reader keeps a project's own applications as their beans + * (beanCapture.ts); until then the two examples that install one warned + * that it was left out. */ -export const EXPECTED_WARNINGS: Record = { - 'java-examples/anwendung_komplett.fls': [ - "node 1: application filius.software.clientserver.Accumulator is not part of FILIUS (a project's own application), left out", - ], - 'java-examples/multicast_server.fls': [ - "node 1: application filius.software.clientserver.Broadcast is not part of FILIUS (a project's own application), left out", - ], -}; +export const EXPECTED_WARNINGS: Record = {}; diff --git a/packages/fls/test/exportProject.test.ts b/packages/fls/test/exportProject.test.ts index 6a7aa75..694b5dd 100644 --- a/packages/fls/test/exportProject.test.ts +++ b/packages/fls/test/exportProject.test.ts @@ -765,13 +765,13 @@ describe('a model beyond the corpus, as Java loads it', () => { }), // In the order of Java's key. applications: [ - { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', zielIPAdresse: '10.0.0.9', zielPort: 7777 }, - { key: 'filius.software.clientserver.ServerBaustein', class: 'filius.software.clientserver.ServerBaustein', aktiv: true, port: 7777 }, - { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', maxTeilnehmerZahl: 7 }, - { key: 'filius.software.dns.DNSServer', class: 'filius.software.dns.DNSServer', aktiv: true, port: 53, recursiveResolutionEnabled: true }, + { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', onItsSystem: true, zielIPAdresse: '10.0.0.9', zielPort: 7777 }, + { key: 'filius.software.clientserver.ServerBaustein', class: 'filius.software.clientserver.ServerBaustein', onItsSystem: true, aktiv: true, port: 7777 }, + { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', onItsSystem: true, maxTeilnehmerZahl: 7 }, + { key: 'filius.software.dns.DNSServer', class: 'filius.software.dns.DNSServer', onItsSystem: true, aktiv: true, port: 53, recursiveResolutionEnabled: true }, { key: 'filius.software.email.EmailAnwendung', - class: 'filius.software.email.EmailAnwendung', + class: 'filius.software.email.EmailAnwendung', onItsSystem: true, received: [javaMail()], sent: [javaMail({ versendet: true })], drafts: [javaMail({ betreff: '', text: '', empfaenger: [] })], @@ -792,7 +792,7 @@ describe('a model beyond the corpus, as Java loads it', () => { }, { key: 'filius.software.email.EmailServer', - class: 'filius.software.email.EmailServer', + class: 'filius.software.email.EmailServer', onItsSystem: true, aktiv: true, mailDomain: 'schule.de', beanAccounts: [serverAccount([javaMail()])], @@ -801,7 +801,7 @@ describe('a model beyond the corpus, as Java loads it', () => { }, { key: 'filius.software.firewall.Firewall', - class: 'filius.software.firewall.Firewall', + class: 'filius.software.firewall.Firewall', onItsSystem: true, activated: false, defaultPolicy: 1, dropICMP: false, @@ -809,12 +809,12 @@ describe('a model beyond the corpus, as Java loads it', () => { filterUdp: true, rules: [['10.0.0.0', '255.0.0.0', '', '', 22, 6, 1]], }, - { key: 'filius.software.lokal.FileExplorer', class: 'filius.software.lokal.FileExplorer' }, - { key: 'filius.software.lokal.ImageViewer', class: 'filius.software.lokal.ImageViewer' }, - { key: 'filius.software.lokal.Terminal', class: 'filius.software.lokal.Terminal' }, - { key: 'filius.software.lokal.TextEditor', class: 'filius.software.lokal.TextEditor' }, - { key: 'filius.software.www.WebBrowser', class: 'filius.software.www.WebBrowser' }, - { key: 'filius.software.www.WebServer', class: 'filius.software.www.WebServer', aktiv: true, port: 8080, useVHost: true }, + { key: 'filius.software.lokal.FileExplorer', class: 'filius.software.lokal.FileExplorer', onItsSystem: true }, + { key: 'filius.software.lokal.ImageViewer', class: 'filius.software.lokal.ImageViewer', onItsSystem: true }, + { key: 'filius.software.lokal.Terminal', class: 'filius.software.lokal.Terminal', onItsSystem: true }, + { key: 'filius.software.lokal.TextEditor', class: 'filius.software.lokal.TextEditor', onItsSystem: true }, + { key: 'filius.software.www.WebBrowser', class: 'filius.software.www.WebBrowser', onItsSystem: true }, + { key: 'filius.software.www.WebServer', class: 'filius.software.www.WebServer', onItsSystem: true, aktiv: true, port: 8080, useVHost: true }, ], }, }, @@ -843,11 +843,11 @@ describe('a model beyond the corpus, as Java loads it', () => { fileSystem: { directory: 'root', children: [{ directory: 'peer2peer', children: [] }] }, applications: [ // Without a setting: no target (null), the model's 3 peers, Java's personal firewall. - { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', zielIPAdresse: null, zielPort: 55_555 }, - { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', maxTeilnehmerZahl: 3 }, + { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', onItsSystem: true, zielIPAdresse: null, zielPort: 55_555 }, + { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', onItsSystem: true, maxTeilnehmerZahl: 3 }, { key: 'filius.software.firewall.Firewall', - class: 'filius.software.firewall.Firewall', + class: 'filius.software.firewall.Firewall', onItsSystem: true, activated: true, defaultPolicy: 0, dropICMP: false, diff --git a/packages/fls/test/exported.java.json b/packages/fls/test/exported.java.json index 139d67a..f001322 100644 --- a/packages/fls/test/exported.java.json +++ b/packages/fls/test/exported.java.json @@ -34,11 +34,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -264,6 +266,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -327,6 +330,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -376,11 +380,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -887,6 +893,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -961,6 +968,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1010,7 +1018,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1071,6 +1080,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1175,6 +1185,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1238,6 +1249,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1542,17 +1554,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1602,7 +1617,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1681,11 +1697,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1913,6 +1931,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -1932,11 +1951,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2033,6 +2054,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -2052,11 +2074,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2638,17 +2662,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -2715,15 +2742,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -2787,6 +2817,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.com", "beanAccounts": [ @@ -2901,6 +2932,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.com", "beanAccounts": [ @@ -3010,21 +3042,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -3161,6 +3197,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3180,11 +3217,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3240,6 +3279,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3259,11 +3299,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3394,11 +3436,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3698,7 +3742,8 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -4541,6 +4586,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4621,11 +4667,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -4722,6 +4770,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4802,11 +4851,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -5381,17 +5432,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -5458,15 +5512,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5530,6 +5587,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.de", "beanAccounts": [ @@ -5644,6 +5702,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.de", "beanAccounts": [ @@ -5753,21 +5812,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5904,6 +5967,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -5923,11 +5987,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -5983,6 +6049,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -6002,11 +6069,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -6137,11 +6206,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7228,11 +7299,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7458,6 +7531,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -7521,6 +7595,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -7570,11 +7645,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -8069,6 +8146,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8159,6 +8237,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8742,6 +8821,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -8816,6 +8896,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -8865,7 +8946,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -8926,6 +9008,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9030,6 +9113,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9093,6 +9177,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9270,7 +9355,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -9502,29 +9588,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10082,6 +10174,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10140,6 +10233,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10159,7 +10253,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10215,6 +10310,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10234,7 +10330,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10290,6 +10387,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10309,7 +10407,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10365,6 +10464,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10384,7 +10484,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10486,6 +10587,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -10549,6 +10651,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -10663,6 +10766,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -11291,6 +11395,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -11340,11 +11445,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -11411,11 +11518,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11527,11 +11636,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11945,6 +12056,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12146,11 +12258,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12230,6 +12344,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12237,6 +12352,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "eve.de", "beanAccounts": [], @@ -12244,7 +12360,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12300,6 +12417,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12401,11 +12519,13 @@ }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12507,6 +12627,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12570,6 +12691,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -12742,6 +12864,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -13018,16 +13141,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13078,16 +13204,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": null, "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -13220,6 +13349,7 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 } @@ -13281,17 +13411,20 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 4 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -13339,6 +13472,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 } @@ -13583,15 +13717,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13641,11 +13778,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14135,13 +14274,15 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -14189,16 +14330,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "www.jupiter.de", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14265,11 +14409,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14340,20 +14486,24 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14424,16 +14574,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14525,12 +14678,14 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -15253,11 +15408,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15324,11 +15481,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15527,6 +15686,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -15534,6 +15694,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15866,11 +16027,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15937,11 +16100,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -16137,17 +16302,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16300,11 +16468,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -16368,6 +16538,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -16911,19 +17082,23 @@ "applications": [ { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16981,11 +17156,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17243,17 +17420,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17303,7 +17483,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17382,11 +17563,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17605,7 +17788,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17837,29 +18021,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -18506,23 +18696,27 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "10.0.0.9", "zielPort": 7777 }, { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 7777 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 7 }, { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -18530,6 +18724,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -18642,6 +18837,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "schule.de", "beanAccounts": [ @@ -18736,6 +18932,7 @@ { "key": "filius.software.firewall.Firewall", "class": "filius.software.firewall.Firewall", + "onItsSystem": true, "activated": false, "defaultPolicy": 1, "dropICMP": false, @@ -18755,27 +18952,33 @@ }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 8080, "useVHost": true @@ -18853,17 +19056,20 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": null, "zielPort": 55555 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 3 }, { "key": "filius.software.firewall.Firewall", "class": "filius.software.firewall.Firewall", + "onItsSystem": true, "activated": true, "defaultPolicy": 0, "dropICMP": false, diff --git a/packages/fls/test/importProject.test.ts b/packages/fls/test/importProject.test.ts index 2299233..a36271e 100644 --- a/packages/fls/test/importProject.test.ts +++ b/packages/fls/test/importProject.test.ts @@ -525,7 +525,7 @@ function flsNode(javaClass: FlsNode['javaClass'], fields: Partial = {}) portCount: 0, system: {}, source: { kind: 'object', className: javaClass, id: undefined, args: [], staticField: undefined, - factoryMethod: undefined, properties: new Map(), calls: [], presetElements: new Map(), presetEntries: new Map(), fromGetter: false }, + factoryMethod: undefined, properties: new Map(), propertyKinds: new Map(), propertiesFromGetters: new Set(), argKinds: [], calls: [], presetElements: new Map(), presetEntries: new Map(), fromGetter: false }, ...fields, }; } diff --git a/packages/fls/test/javabeans.test.ts b/packages/fls/test/javabeans.test.ts index b933173..5bf5508 100644 --- a/packages/fls/test/javabeans.test.ts +++ b/packages/fls/test/javabeans.test.ts @@ -92,6 +92,28 @@ describe('XMLDecoder rules', () => { expect(object(rectangle).properties.get('y')).toBe(true); }); + it('keeps the Java type of each primitive a setter, a constructor or a call gets', () => { + // A shared getter result, as in the corpus: a button's measured icon text gap. + const [, bean] = decodeJavaBeans( + doc(` + 3x + 7 + 0.5 + + 2 + + 7 + 1 + no longer a number + key1.0 + `), + ); + + expect(object(bean).argKinds).toEqual(['short', 'char']); + expect(Object.fromEntries(object(bean).propertyKinds)).toEqual({ count: 'long', ratio: 'float', gap: 'int', shared: 'byte', again: 'byte' }); + expect(object(bean).calls).toEqual([{ method: 'put', args: ['key', 1], kinds: [undefined, 'double'] }]); + }); + it('says "unresolved" for a shared getter value it has no measurement for', () => { const [, holder] = decodeJavaBeans( doc(` diff --git a/packages/fls/test/ownApplications.ts b/packages/fls/test/ownApplications.ts index e80fa2e..16b3eff 100644 --- a/packages/fls/test/ownApplications.ts +++ b/packages/fls/test/ownApplications.ts @@ -1,7 +1,7 @@ // A project's own applications (classes under projekt/anwendungen): Java -// installs them when it loads the whole archive (tools/java-oracle, laden); -// this package reads, writes and exports them in a later step (B2). Until -// then the tests compare Java's views without them. +// installs them when it loads the whole archive (tools/java-oracle, laden). +// The reader keeps them as beans, without knowing what Java makes of them; +// its test compares them by key and class. import { FILIUS_APPLICATION_CLASSES } from '../src/index.js'; @@ -32,6 +32,30 @@ export function withoutOwnApplications(view: T): T { }; } +/** Java's view with each own application as its key, class and whether it runs on its node's system software. */ +export function withOwnApplicationsByClass(view: T): T { + const { nodes } = view as View; + if (nodes === undefined) return view; + return { + ...view, + nodes: nodes.map((node) => + node.system.applications === undefined + ? node + : { + ...node, + system: { + ...node.system, + applications: (node.system.applications as { key: string; class: string }[]).map((application) => + (FILIUS_APPLICATION_CLASSES as readonly string[]).includes(application.class) + ? application + : { key: application.key, class: application.class, onItsSystem: (application as { onItsSystem?: boolean }).onItsSystem }, + ), + }, + }, + ), + }; +} + /** Whether Java's view has an own application installed. */ export function hasOwnApplications(view: unknown): boolean { return JSON.stringify(withoutOwnApplications(view)) !== JSON.stringify(view); diff --git a/packages/fls/test/topology.test.ts b/packages/fls/test/topology.test.ts index d37c12a..afe8e83 100644 --- a/packages/fls/test/topology.test.ts +++ b/packages/fls/test/topology.test.ts @@ -21,7 +21,9 @@ import { type JavaEmailAccount, } from '../src/index.js'; import { EXPECTED_WARNINGS } from './expectedWarnings.js'; -import { hasOwnApplications, OWN_APPLICATION_FILES, withoutOwnApplications } from './ownApplications.js'; +import { SYSTEM_SOFTWARE_CLASS } from '../src/beanCapture.js'; +import type { BeanValue } from '../src/javaBeansWriter.js'; +import { hasOwnApplications, OWN_APPLICATION_FILES, withOwnApplicationsByClass } from './ownApplications.js'; import { javaEmail, javaEmailAccount } from './javaEmailNames.js'; const corpusRoot = join(dirname(fileURLToPath(import.meta.url)), '../../../corpus'); @@ -69,12 +71,18 @@ function javaFileTree(tree: FlsFileTree): unknown { } /** FlsOracle.applications' shape: Java's property names, sorted by key. */ +function isSystemSoftwareMark(value: BeanValue): boolean { + return value !== null && typeof value === 'object' && value.kind === 'object' && value.className === SYSTEM_SOFTWARE_CLASS; +} + function javaApplications(applications: FlsApplication[]): unknown[] { return [...applications] .sort((lhs, rhs) => ((lhs.key ?? '') < (rhs.key ?? '') ? -1 : 1)) .map((application) => ({ key: application.key, class: application.javaClass, + // The reader's applications are its node's: each file gives them its system software. + onItsSystem: true, ...(application.isActive === undefined ? {} : { aktiv: application.isActive, port: application.port }), ...(application.targetPort === undefined ? {} @@ -178,7 +186,21 @@ function asJavaView(topology: FlsTopology, javaBounds: (number[] | null)[]) { ...(node.system.modem === undefined ? {} : { modem: javaModem(node.system.modem) }), ...(node.system.fileSystem === undefined ? {} : { fileSystem: javaFileTree(node.system.fileSystem) }), ...('templateFiles' in node.system ? { templateFiles: undefined } : {}), - ...(node.system.applications === undefined ? {} : { applications: javaApplications(node.system.applications) }), + ...(node.system.applications === undefined + ? {} + : { + applications: [ + ...(javaApplications(node.system.applications) as { key: string | null }[]), + ...(node.system.ownApplications ?? []).map((application) => ({ + key: application.key, + class: application.javaClass, + onItsSystem: application.bean.statements?.some( + (statement) => 'set' in statement && statement.set === 'systemSoftware' && isSystemSoftwareMark(statement.value), + ), + })), + ].sort((lhs, rhs) => ((lhs.key ?? '') < (rhs.key ?? '') ? -1 : 1)), + }), + ...('ownApplications' in node.system ? { ownApplications: undefined } : {}), ...(node.system.firewall === undefined ? {} : { @@ -252,7 +274,7 @@ describe('corpus: the topology as Java loads it', () => { const expected = javaView[name] as { nodes: { bounds: number[] | null }[] }; expect(asJavaView(topology, expected.nodes.map((node) => node.bounds))).toEqual( - withoutTemplateFiles(withoutOwnApplications(expected), topology), + withoutTemplateFiles(withOwnApplicationsByClass(expected), topology), ); expect(topology.warnings).toEqual(EXPECTED_WARNINGS[name] ?? []); }); diff --git a/packages/fls/test/topologyWriter.test.ts b/packages/fls/test/topologyWriter.test.ts index 9c119a5..ce0f3f8 100644 --- a/packages/fls/test/topologyWriter.test.ts +++ b/packages/fls/test/topologyWriter.test.ts @@ -18,7 +18,6 @@ import { describe, expect, it } from 'vitest'; import { decodeJavaBeans, readFlsArchive, readTopology, writeFlsArchive } from '../src/index.js'; import type { JavaEmail } from '../src/javaEmail.js'; import { writeTopologyXml, type TopologyToWrite } from '../src/topologyWriter.js'; -import { withoutOwnApplications } from './ownApplications.js'; const here = dirname(fileURLToPath(import.meta.url)); const corpusRoot = join(here, '../../../corpus'); @@ -94,8 +93,10 @@ describe('the topology written again, as Java loads it', () => { for (const file of flsFiles(corpusRoot)) { const name = relative(corpusRoot, file); it(name, () => { - const topology = readTopology(decodeJavaBeans(readFlsArchive(new Uint8Array(readFileSync(file))).configurationXml)); - const archive = writeFlsArchive(new TextEncoder().encode(writeTopologyXml(topology))); + const contents = readFlsArchive(new Uint8Array(readFileSync(file))); + const topology = readTopology(decodeJavaBeans(contents.configurationXml)); + // With the archive's other entries: the classes of the project's own applications. + const archive = writeFlsArchive(new TextEncoder().encode(writeTopologyXml(topology)), contents.supplementalEntries); if (process.env.UPDATE_WRITTEN === '1') { mkdirSync(dirname(join(writtenRoot, name)), { recursive: true }); writeFileSync(join(writtenRoot, name), archive); @@ -104,8 +105,7 @@ describe('the topology written again, as Java loads it', () => { expect(java?.sha256, 'written.java.json is not about this output: UPDATE_WRITTEN=1, then npm run oracle:java').toBe( createHash('sha256').update(archive).digest('hex'), ); - // The written file has no archive entries: Java installs no own application (B2). - expect(topologyOf(java!)).toEqual(topologyOf(withRecipientsRead(withoutOwnApplications(original[name]!)) as JavaFile)); + expect(topologyOf(java!)).toEqual(topologyOf(withRecipientsRead(original[name]!) as JavaFile)); }); } @@ -448,13 +448,13 @@ describe('a topology beyond the corpus, as Java loads it', () => { }, // In the order of Java's key. applications: [ - { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', zielIPAdresse: '10.0.0.9', zielPort: 7777 }, - { key: 'filius.software.clientserver.ServerBaustein', class: 'filius.software.clientserver.ServerBaustein', aktiv: true, port: 7777 }, - { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', maxTeilnehmerZahl: 7 }, - { key: 'filius.software.dns.DNSServer', class: 'filius.software.dns.DNSServer', aktiv: true, port: 5353, recursiveResolutionEnabled: true }, + { key: 'filius.software.clientserver.ClientBaustein', class: 'filius.software.clientserver.ClientBaustein', onItsSystem: true, zielIPAdresse: '10.0.0.9', zielPort: 7777 }, + { key: 'filius.software.clientserver.ServerBaustein', class: 'filius.software.clientserver.ServerBaustein', onItsSystem: true, aktiv: true, port: 7777 }, + { key: 'filius.software.dateiaustausch.PeerToPeerAnwendung', class: 'filius.software.dateiaustausch.PeerToPeerAnwendung', onItsSystem: true, maxTeilnehmerZahl: 7 }, + { key: 'filius.software.dns.DNSServer', class: 'filius.software.dns.DNSServer', onItsSystem: true, aktiv: true, port: 5353, recursiveResolutionEnabled: true }, { key: 'filius.software.email.EmailAnwendung', - class: 'filius.software.email.EmailAnwendung', + class: 'filius.software.email.EmailAnwendung', onItsSystem: true, received: [javaMail()], sent: [javaMail({ versendet: true, neu: false })], drafts: [javaMail({ betreff: null, text: null, dateReceived: null, empfaenger: [] })], @@ -464,7 +464,7 @@ describe('a topology beyond the corpus, as Java loads it', () => { }, { key: 'filius.software.email.EmailServer', - class: 'filius.software.email.EmailServer', + class: 'filius.software.email.EmailServer', onItsSystem: true, aktiv: true, mailDomain: 'schule.de', beanAccounts: [ @@ -486,7 +486,7 @@ describe('a topology beyond the corpus, as Java loads it', () => { }, { key: 'filius.software.firewall.Firewall', - class: 'filius.software.firewall.Firewall', + class: 'filius.software.firewall.Firewall', onItsSystem: true, activated: false, defaultPolicy: 1, dropICMP: true, @@ -494,12 +494,12 @@ describe('a topology beyond the corpus, as Java loads it', () => { filterUdp: false, rules: [['10.0.0.0', '255.0.0.0', '', '', 22, 6, 1]], }, - { key: 'filius.software.lokal.FileExplorer', class: 'filius.software.lokal.FileExplorer' }, - { key: 'filius.software.lokal.ImageViewer', class: 'filius.software.lokal.ImageViewer' }, - { key: 'filius.software.lokal.Terminal', class: 'filius.software.lokal.Terminal' }, - { key: 'filius.software.lokal.TextEditor', class: 'filius.software.lokal.TextEditor' }, - { key: 'filius.software.www.WebBrowser', class: 'filius.software.www.WebBrowser' }, - { key: 'filius.software.www.WebServer', class: 'filius.software.www.WebServer', aktiv: true, port: 8080, useVHost: true }, + { key: 'filius.software.lokal.FileExplorer', class: 'filius.software.lokal.FileExplorer', onItsSystem: true }, + { key: 'filius.software.lokal.ImageViewer', class: 'filius.software.lokal.ImageViewer', onItsSystem: true }, + { key: 'filius.software.lokal.Terminal', class: 'filius.software.lokal.Terminal', onItsSystem: true }, + { key: 'filius.software.lokal.TextEditor', class: 'filius.software.lokal.TextEditor', onItsSystem: true }, + { key: 'filius.software.www.WebBrowser', class: 'filius.software.www.WebBrowser', onItsSystem: true }, + { key: 'filius.software.www.WebServer', class: 'filius.software.www.WebServer', onItsSystem: true, aktiv: true, port: 8080, useVHost: true }, ], }, }, diff --git a/packages/fls/test/written.java.json b/packages/fls/test/written.java.json index a15b1e7..c6ce297 100644 --- a/packages/fls/test/written.java.json +++ b/packages/fls/test/written.java.json @@ -34,11 +34,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -264,6 +266,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -327,6 +330,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -376,11 +380,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -879,6 +885,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -953,6 +960,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1002,7 +1010,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1063,6 +1072,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1167,6 +1177,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1230,6 +1241,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -1534,17 +1546,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1594,7 +1609,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -1673,11 +1689,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -1917,6 +1935,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -1936,11 +1955,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2037,6 +2058,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -2056,11 +2078,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -2666,17 +2690,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -2743,15 +2770,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -2815,6 +2845,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.com", "beanAccounts": [ @@ -2929,6 +2960,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.com", "beanAccounts": [ @@ -3038,21 +3070,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -3189,6 +3225,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3208,11 +3245,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3268,6 +3307,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -3287,11 +3327,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3422,11 +3464,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -3726,7 +3770,8 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -4549,6 +4594,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4629,11 +4675,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -4730,6 +4778,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [ { @@ -4810,11 +4859,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -5413,17 +5464,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true } ], "dhcpClient": false, @@ -5490,15 +5544,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5562,6 +5619,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "gmx.de", "beanAccounts": [ @@ -5676,6 +5734,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "webmail.de", "beanAccounts": [ @@ -5785,21 +5844,25 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -5936,6 +5999,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -5955,11 +6019,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -6015,6 +6081,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -6034,11 +6101,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -6169,11 +6238,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7240,11 +7311,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -7470,6 +7543,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -7533,6 +7607,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -7582,11 +7657,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -8027,7 +8104,15 @@ "directory": "root", "children": [] }, - "applications": [], + "applications": [ + { + "key": "filius.software.clientserver.Accumulator", + "class": "filius.software.clientserver.Accumulator", + "onItsSystem": true, + "aktiv": true, + "port": 55555 + } + ], "dhcpClient": false, "dhcpServer": { "aktiv": false, @@ -8073,6 +8158,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8163,6 +8249,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 } @@ -8234,7 +8321,7 @@ } ], "documentation": [], - "sha256": "7ac91a67ba0e3afbc20409a40ff59928dcdcb0bc5ebaebfaf60c15df12306c83" + "sha256": "a085eb0701d2010f58540bf752e58ed2c3bbbcfacc1567dce885f1bfc4029bbe" }, "java-examples/dhcp_test_scenario.fls": { "success": true, @@ -8654,7 +8741,7 @@ } ], "documentation": [], - "sha256": "5b6c8f0ef9ff86ac3c2646ad17c451ef8dfc801420d8fe550ac0f33dd2a94169" + "sha256": "d2cbf454f609cc6cf16d876a4942d5b0e8861433dd9acaca91af492d8980c3ef" }, "java-examples/dns_server.fls": { "success": true, @@ -8746,6 +8833,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true @@ -8820,6 +8908,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -8869,7 +8958,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -8930,6 +9020,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9034,6 +9125,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9097,6 +9189,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -9274,7 +9367,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -9506,29 +9600,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10028,7 +10128,7 @@ } ], "documentation": [], - "sha256": "28f265035f07ec5a81e5cb9f0fefbb408fc62f1b95844a26f21481555a236847" + "sha256": "80ffb5d1f51e79d9ed6a5a7e5a327b927be5f64c68f009fee8c5f9124578d553" }, "java-examples/email_komplett.fls": { "success": true, @@ -10086,6 +10186,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -10144,6 +10245,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10163,7 +10265,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10219,6 +10322,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10238,7 +10342,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10294,6 +10399,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10313,7 +10419,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10369,6 +10476,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [], "sent": [], "drafts": [], @@ -10388,7 +10496,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -10490,6 +10599,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -10553,6 +10663,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -10667,6 +10778,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -11295,6 +11407,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -11344,11 +11457,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -11415,11 +11530,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11531,11 +11648,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -11949,6 +12068,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12150,11 +12270,13 @@ }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12234,6 +12356,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12241,6 +12364,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "eve.de", "beanAccounts": [], @@ -12248,7 +12372,8 @@ }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12304,6 +12429,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -12405,11 +12531,13 @@ }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -12511,6 +12639,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -12574,6 +12703,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "filius.de", "beanAccounts": [ @@ -12746,6 +12876,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "senior.de", "beanAccounts": [ @@ -13018,16 +13149,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13078,16 +13212,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": null, "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -13217,9 +13354,17 @@ "children": [] }, "applications": [ + { + "key": "filius.software.clientserver.Broadcast", + "class": "filius.software.clientserver.Broadcast", + "onItsSystem": true, + "aktiv": true, + "port": 55555 + }, { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": false, "port": 55555 } @@ -13281,17 +13426,20 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 4 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -13339,6 +13487,7 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.1", "zielPort": 55555 } @@ -13451,7 +13600,7 @@ } ], "documentation": [], - "sha256": "35e84042bc6b04062cb943127a85900ebbc947d5148e9fbf4978bb128a013ff3" + "sha256": "4f1a87256f67f1d09a25db7eb2f964663b4728b43592731952a0a30e562cf702" }, "java-examples/nat.fls": { "success": true, @@ -13583,15 +13732,18 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -13641,11 +13793,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14135,13 +14289,15 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -14189,16 +14345,19 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "www.jupiter.de", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -14265,11 +14424,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14340,20 +14501,24 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14424,16 +14589,19 @@ { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 55555 }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -14525,12 +14693,14 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "192.168.0.10", "zielPort": 55555 }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true } ], "dhcpClient": false, @@ -15241,11 +15411,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15312,11 +15484,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15515,6 +15689,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -15522,6 +15697,7 @@ { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -15846,11 +16022,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -15917,11 +16095,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": true, @@ -16117,17 +16297,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16280,11 +16463,13 @@ "applications": [ { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": true @@ -16348,6 +16533,7 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false @@ -16875,19 +17061,23 @@ "applications": [ { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -16945,11 +17135,13 @@ "applications": [ { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17043,7 +17235,7 @@ } ], "documentation": [], - "sha256": "477fabe62a6cc47f6dc6ce258aca7232f793302586decb185116df37cd70d890" + "sha256": "fdd3c73d0c69680032ab22240e636c3ee8faff6c53ad20c0bbf5a65763ac48aa" }, "java-examples/zwei_rechnernetze_komplett.fls": { "success": true, @@ -17207,17 +17399,20 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17267,7 +17462,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17346,11 +17542,13 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -17581,7 +17779,8 @@ "applications": [ { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true } ], "dhcpClient": false, @@ -17813,29 +18012,35 @@ { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 53, "recursiveResolutionEnabled": false }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 80, "useVHost": false @@ -18335,14 +18540,14 @@ } ], "documentation": [], - "sha256": "28f265035f07ec5a81e5cb9f0fefbb408fc62f1b95844a26f21481555a236847" + "sha256": "80ffb5d1f51e79d9ed6a5a7e5a327b927be5f64c68f009fee8c5f9124578d553" }, "java-tests/empty.fls": { "success": true, "nodes": [], "cables": [], "documentation": [], - "sha256": "49855a61d8576af64e50c211807e658d69daa924a411ced654a3452070b1722c" + "sha256": "aec202d78dc3a05cd83471744050a102cb2cf448b273b053df6b4c640f1ac6e9" }, "synthetic/synthetic.fls": { "success": true, @@ -18443,23 +18648,27 @@ { "key": "filius.software.clientserver.ClientBaustein", "class": "filius.software.clientserver.ClientBaustein", + "onItsSystem": true, "zielIPAdresse": "10.0.0.9", "zielPort": 7777 }, { "key": "filius.software.clientserver.ServerBaustein", "class": "filius.software.clientserver.ServerBaustein", + "onItsSystem": true, "aktiv": true, "port": 7777 }, { "key": "filius.software.dateiaustausch.PeerToPeerAnwendung", "class": "filius.software.dateiaustausch.PeerToPeerAnwendung", + "onItsSystem": true, "maxTeilnehmerZahl": 7 }, { "key": "filius.software.dns.DNSServer", "class": "filius.software.dns.DNSServer", + "onItsSystem": true, "aktiv": true, "port": 5353, "recursiveResolutionEnabled": true @@ -18467,6 +18676,7 @@ { "key": "filius.software.email.EmailAnwendung", "class": "filius.software.email.EmailAnwendung", + "onItsSystem": true, "received": [ { "absender": [ @@ -18583,6 +18793,7 @@ { "key": "filius.software.email.EmailServer", "class": "filius.software.email.EmailServer", + "onItsSystem": true, "aktiv": true, "mailDomain": "schule.de", "beanAccounts": [ @@ -18639,6 +18850,7 @@ { "key": "filius.software.firewall.Firewall", "class": "filius.software.firewall.Firewall", + "onItsSystem": true, "activated": false, "defaultPolicy": 1, "dropICMP": true, @@ -18658,27 +18870,33 @@ }, { "key": "filius.software.lokal.FileExplorer", - "class": "filius.software.lokal.FileExplorer" + "class": "filius.software.lokal.FileExplorer", + "onItsSystem": true }, { "key": "filius.software.lokal.ImageViewer", - "class": "filius.software.lokal.ImageViewer" + "class": "filius.software.lokal.ImageViewer", + "onItsSystem": true }, { "key": "filius.software.lokal.Terminal", - "class": "filius.software.lokal.Terminal" + "class": "filius.software.lokal.Terminal", + "onItsSystem": true }, { "key": "filius.software.lokal.TextEditor", - "class": "filius.software.lokal.TextEditor" + "class": "filius.software.lokal.TextEditor", + "onItsSystem": true }, { "key": "filius.software.www.WebBrowser", - "class": "filius.software.www.WebBrowser" + "class": "filius.software.www.WebBrowser", + "onItsSystem": true }, { "key": "filius.software.www.WebServer", "class": "filius.software.www.WebServer", + "onItsSystem": true, "aktiv": true, "port": 8080, "useVHost": true diff --git a/tools/java-oracle/README.md b/tools/java-oracle/README.md index f09f3da..da8e387 100644 --- a/tools/java-oracle/README.md +++ b/tools/java-oracle/README.md @@ -48,7 +48,8 @@ virtuellen Bildschirm statt „headless". bleibt; bei Router und Heimrouter stehen vorn die Dateien, die Javas Konstruktor aus eigenen Vorlagen erzeugt, dahinter die aus der Datei) und die installierten Programme eines Rechners mit ihren Einstellungen (die - persönliche Firewall samt Regeln) (Klassen, die Filius + persönliche Firewall samt Regeln; je Programm `onItsSystem`: ob es am + Betriebssystem seines Knotens hängt) (Klassen, die Filius nicht mitbringt — eigene Anwendungen im Archiv unter `projekt/anwendungen` — fehlen, weil das Werkzeug nur `konfiguration.xml` lädt); E-Mail: Konten des Servers aus der Bean-Liste und aus `/mailserver/konten.txt` (`kontenLaden`), Ordner und Adressbuch des Clients und sein Konto aus `/konten.txt` (`laden`); ein Empfänger, den eine ältere Datei als Zeichenkette hält, samt dem, was Javas `AddressEntry(String)` daraus macht; Kabel (Enden als Gerät/Schnittstelle), Doku-Elemente. diff --git a/tools/java-oracle/src/FlsOracle.java b/tools/java-oracle/src/FlsOracle.java index 673923a..d8cc2e0 100644 --- a/tools/java-oracle/src/FlsOracle.java +++ b/tools/java-oracle/src/FlsOracle.java @@ -360,6 +360,8 @@ public class FlsOracle { Map json = new LinkedHashMap<>(); json.put("key", entry.getKey()); json.put("class", application == null ? null : application.getClass().getName()); + // Whether it runs on the system software of its own node. + json.put("onItsSystem", application != null && application.getSystemSoftware() == system); if (application instanceof ServerAnwendung server) { json.put("aktiv", server.isAktiv()); json.put("port", server.getPort());