Records ======= Records transportieren die ID sowie die Nutzdaten einer Message. Letztere werden in einer Liste von Slots transportiert. Folgende Konstruktoren existieren:: CRecord(final IId aId); CRecord(final CRecord aTemplate); Zudem gibt es eine Factory-Methode:: static CRecord createFromStream(final DataInputStream aStream) throws IOException; ID ** Die ID ist vom Typ :ref:`IId ` und kann also aus einem Integer, einem String oder einer UUID bestehen:: IId getId(); void setId(final IId aId); Zugriff auf die Slots ********************* Slots werden im Record in einer Map gehalten. Sie können mit folgenden Methoden gesetzt werden:: // Einzelnen Slot hinzufügen. aKey kann SlotKey oder Bestandteil sein. ISlot addSlot(final Object aKey, final ISlot aSlot); // Übernahme aus einem Template; vorhandene Slots werden vorher gelöscht. void takeSlots(final CRecord aRecord); Das Entfernen von Slots ist auch möglich:: void removeSlot(final ISlotKey aKey); Folgende Zugriffsmethoden existieren:: // aKey kann ein SlotKey sein oder eines seiner Bestandteile ISlot getSlot(final Object aKey); // inkl. Überprüfung des Typs; falscher Typ --> Exception ISlot getSlot(final ISlotKey aKey, final CSlotType aType) throws CException; // alle Slots holen Map getSlots(); // Prüfen, ob Slot existiert boolean exist(final ISlotKey aKey); // Anzahl der Slots int size(); Für den Zugriff auf den Wert eines Slots gibt es eigene Methoden:: Object getValue(final ISlotKey aKey); // inkl. Default Wert Object getValue(final ISlotKey aKey, final Object aDefaultValue); // inkl. Überprüfung des Typs; falscher Typ --> Exception Object getValue(final ISlotKey aKey, final CSlotType aType) throws CException; // inkl. Überprüfung des Typs; falscher Typ --> Exception Object getValue(final ISlotKey aKey, final CSlotType aType, final Object aDefaultValue) throws CException; Hier ist deutlich zu Erkennen, dass ein nicht typisiertes Objekt zurückgegeben wird, was man selber casten muss. Das kann man leicht vermeiden, indem man die statischen Zugriffsklassen des :ref:`Record-Generators ` verwendet. Eine Prüfung des Slot-Typs ist natürlich jederzeit möglich:: CSlotType getSlotType(final ISlotKey aKey); Oder:: ISlot slot = getSlot(aKey); CSlotType type = slot.getType(); Das Setzen des Wertes ist auch direkt möglich:: void setValue(final ISlotKey aKey, final CSlotType aType, final Object aValue) throws CException; // im Fehlerfall wird nur geloggt void setValueSafe(final ISlotKey aKey, final CSlotType aType, final Object aValue); Weitere Methoden **************** Folgende Methoden gibt es noch:: // Die Version ist z.Zt. immer 0 getVersion(); // Das Schreiben in einen Stream void toStream(final DataOutputStream aStream) throws IOException; // setzt ID zurück, entfernt alle Slots void clear(); // Entfernt alle Slots void clearSlots();