Mit dem Context wird der Marshaller und der Unmarsaller erzeugt. Der Marshaller überführt ein POJO (Plain old Java Object) in eine Attributgruppe (Data). Der Unmarshaller überführt umgekehrt eine Attributgruppe (Data) in ein POJO.
Es können beliebige POJOs, also Klassenobjekte, als Datum einer Attributgruppen verwendet werden. Die Properties der Klasse werden als Attribut der Attributgruppe interpretiert.
Die Attributtypen werden wie folgt auf Typen der Properties abgebildet:
Attributtyp | Java-Typ | Anmerkung |
Zeichenkette | String | |
Ganzzahl | byte short int long double boolean enum |
für Wertebereich 8 Bit für Wertebereich 16 Bit für Wertebereich 32 Bit für Wertebereich 64 Bit für Festkommazahlen für Attributtyp JaNein für Aufzählungstypen (Attributtyp hat nur Zustände) |
Kommazahl | float double |
für Wertebereich 32 Bit für Wertebereich 64 Bit |
Zeitstempel | LocalDateTime Duration Date long |
für absoluten Zeitstempel für relativen Zeitstempel für absoluten Zeitstempel für relativen Zeitstempel |
Objektreferenz | SystemObject | |
Attributliste | Object | POJO analog zur Attributgruppe |
Attributfeld | Collection Feld |
DataModel model = ... Context context = new Context(model); MessQuerschnittAllgemein datum = new MessQuerschnittAllgemein(); datum.setTyp(MessQuerschnittTyp.HauptFahrbahn); datum.setErsatzMessQuerschnitt(model.getObject("mq.a10.0000")); Marshaller marshaller = context.createMarshaller(); Data data = marshaller.marshal(datum);
DataModel model = ... Context context = new Context(model); AttributeGroup atg = model.getAttributeGroup("atg.messQuerschnittAllgemein"); Data data = model.getObject("mq.a10.0000").getConfigurationData(atg); Unmarshaller unmarshaller = context.createUnmarshaller(); MessQuerschnittAllgemein datum = unmarshaller.unmarshal(data, MessQuerschnittAllgemein.class);
Die Schnittstelle Datenverteiler bietet die am häufigsten verwendeten Operationen mit dem Datenverteiler:
Der Empfang von Datensätzen erfolgt über die Klasse Datensatz die ein Datum für ein Objekt als POJO wie oben beschrieben kapselt. Die Klasse DatenverteilerImpl stellt eine Standardimplementierung der Schnittstelle bereit.
Datenverteiler dav = ... Aspect aspekt = dav.getAspekt("asp.messWertErsetzung"); SystemObject umfelddatensensor = dav.getObjekt("ufds.helligkeit"); dav.anmeldenAlsEmpfaenger(this::verarbeiteDatensatz, Collections.singleton(umfelddatensensor), UfdsHelligkeit.class, aspekt, Empfaengeroption.NORMAL);
Mit einer Methode in der selben Klasse:
private void verarbeiteDatensatz(Datensatz<UfdsHelligkeit> datensatz) { // ... }
Datenverteiler dav = ... SystemObject umfelddatensensor = dav.getObjekt("ufds.helligkeit"); dav.anmeldenAufParameter(d -> System.out.println(d), Collections.singleton(umfelddatensensor), UfdsHelligkeitFuzzy.class); // ... oder den Parameter direkt abrufen mit ... Datensatz<UfdsHelligkeitFuzzy> datensatz = dav.getParameter(umfelddatensensor, UfdsHelligkeitFuzzy.class);
Datenverteiler dav = ... SystemObject messquerschnitt = dav.getObjekt("mq.a10.1"); MessQuerschnittAllgemein datum = dav.getKonfiguration(messquerschnitt, MessQuerschnittAllgemein.class);
Datenverteiler dav = ... SystemObject stau = dav.getObjekt("stau.1"); StauVerlauf datum = new StauVerlauf(); datum.setDauer(Duration.ofMinutes(30)); // datum.set... Aspect aspekt = dav.getAspekt("asp.prognoseNormal"); dav.anmeldenAlsQuelle(Collections.singleton(stau), StauVerlauf.class, aspekt); dav.sendeDatensatz(Datensatz.of(stau, datum, aspekt)); // ... oder als Collection ... Set<Datensatz<StauVerlauf>> datensaetze = Collections.singleton(Datensatz.of(stau, datum, aspekt)); dav.sendeDatensaetze(datensaetze);