Class DataLoader

java.lang.Object
de.bsvrz.dav.daf.accessControl.internal.DataLoader
Direct Known Subclasses:
AccessControlUnit, ExtendedUserInfo, OldUserInfo, Region, Role

public abstract class DataLoader extends Object
Abstrakte Klasse, die allgemeine Funktionen bietet (Parameter-)Daten eines Systemobjekts zu laden, auf dessen Initialisierung zu warten usw.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final de.bsvrz.sys.funclib.debug.Debug
    Debug
    protected final Lock
    Lock, das zum Lesen von Daten benutzt wird.
    protected final Lock
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    DataLoader(ClientDavInterface connection, String attributeGroupPid, String aspectPid, Object lock)
    Erstellt ein neues Objekt, für das Daten aktualisiert werden sollen.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    Wenn es ein Problem mit der Rekursion gibt, wird dieses Objekt hiermit angewiesen den Verweis auf das angegebene (Unter-)Objekt zu deaktivieren.
    protected abstract Collection<DataLoader>
    Gibt die untergeordneten Objekte zurück.
    Gibt den aktuellen Zustand zurück
    long
    Gibt zurück, wie lange keine Daten eingetroffen sind
    Gibt das Systemobjekt zurück
    void
    Wird für Tests usw. gebraucht um dem Objekt zu sagen, dass es nicht initialisiert ist, also bei der nächsten Anfrage darauf warten soll, bis neue Daten eintreffen
    boolean
    Prüft, ob dieses DataLoader-Objekt mit dem Laden der Daten fertig ist
    protected final void
    Startet das Aktualisieren der Daten über das ClientReceiverInterface.
    void
    Beendet das Aktualisieren der Daten über das ClientReceiverInterface
     
    toString(boolean verbose)
    Bietet auf Wunsch eine ausführlichere String-Darstellung des Objekts (Allerdings auf Kosten der Verarbeitungszeit)
    protected abstract void
    update(Data data)
    Wird aufgerufen, wenn neue Daten eingetroffen sind.
    void
    Wartet bis dieses Objekt mit dem Laden fertig ist, aber maximal die in TIMEOUT angegebene Zeit.
    void
    Wartet bis dieses Objekt und alle Kindobjekte mit dem Laden fertig sind, aber pro Objekt maximal die in TIMEOUT angegebene Zeit.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • _debug

      protected final de.bsvrz.sys.funclib.debug.Debug _debug
      Debug
    • _readLock

      protected final Lock _readLock
      Lock, das zum Lesen von Daten benutzt wird. Um Deadlocks zu verhindern und gleichzeitige Abfragen aus Performancegründen zu ermöglichen sollte dieses ReadLock bei allen lesenden Zugriffen verwendet werden. (Durch das Update einer Rolle/Region wird enumerateChildren bei anderen DataLoadern ausgeführt, wenn nebenläufig noch eine Abfrage nach Benutzerrechten läuft und und beide Threads ein exklusives Lock verwenden, gibt es Probleme. Da der Thread, in dem das Update durchgeführt wird, zwingend eine exklusives Lock (ein WriteLock) braucht, müssen alle Abfragen nach Benutzerrechten nicht exklusiv sein (ReadLock). Da immer nur ein Objekt gleichzeitig geupdatet wird, kommt es nicht zu Deadlocks durch mehrere WriteLocks)
    • _writeLock

      protected final Lock _writeLock
  • Constructor Details

    • DataLoader

      public DataLoader(ClientDavInterface connection, String attributeGroupPid, String aspectPid, Object lock)
      Erstellt ein neues Objekt, für das Daten aktualisiert werden sollen.
      Parameters:
      connection - Verbindung zum Datenverteiler
      attributeGroupPid - Attributgruppe
      aspectPid - Aspekt
      lock -
  • Method Details

    • update

      protected abstract void update(Data data)
      Wird aufgerufen, wenn neue Daten eingetroffen sind. Implementierende Klassen sollten hier das Data-Objekt verarbeiten.
      Parameters:
      data - Data-Objekt entsprechend Attributgruppe und Aspekt
    • getChildObjects

      protected abstract Collection<DataLoader> getChildObjects()
      Gibt die untergeordneten Objekte zurück. Z.B. die Rollen und Regionen bei der Berechtigungsklasse oder die Berechtigungsklassen beim Benutzer. Wird gebraucht um Rekursionen zu erkennen und über geänderte Benutzerrechte zu informieren. Achtung: Es werden nur die direkten Kinder zurückzugeben, nicht die "Enkel" usw. - Will man alle "Enkel" usw. haben muss man diese Funktion rekursiv aufrufen.
      Hinweis: Mit deactivateInvalidChild(DataLoader) deaktivierte Kindelemente werden nicht aufgeführt.
      Returns:
      Liste mit untergeordneten Objekten
    • startDataListener

      protected final void startDataListener(SystemObject systemObject)
      Startet das Aktualisieren der Daten über das ClientReceiverInterface. Wartet bis die Daten geladen wurden. Nachdem diese Methode aufgerufen wurde, sollte das Objekt also initialisiert sein. Bei jedem Eintreffen von Daten wird die update(de.bsvrz.dav.daf.main.Data)-Methode aufgerufen (auch nach dem ersten Aufruf der Methode). Um das Laden der Daten anzuhalten ist stopDataListener() aufzurufen.
      Parameters:
      systemObject - Objekt für das die Daten geholt werden sollen
    • stopDataListener

      public void stopDataListener()
      Beendet das Aktualisieren der Daten über das ClientReceiverInterface
    • deactivateInvalidChild

      public abstract void deactivateInvalidChild(DataLoader node)
      Wenn es ein Problem mit der Rekursion gibt, wird dieses Objekt hiermit angewiesen den Verweis auf das angegebene (Unter-)Objekt zu deaktivieren. Beispielsweise könnte eine Rolle angewiesen werden, eine innere Rolle zu deaktivieren, weil sie identisch mit der eigentlichen Rolle ist.
      Parameters:
      node - Das zu entfernende Kindobjekt
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • toString

      public String toString(boolean verbose)
      Bietet auf Wunsch eine ausführlichere String-Darstellung des Objekts (Allerdings auf Kosten der Verarbeitungszeit)
      Parameters:
      verbose - ausführlichere Darstellung wenn true
      Returns:
      mehrzeiliger String
    • isInitialized

      public boolean isInitialized()
      Prüft, ob dieses DataLoader-Objekt mit dem Laden der Daten fertig ist
      Returns:
      true wenn die Daten geladen wurden, d.h. die Update-Methode mindestens einmal aufgerufen wurde.
    • getNoDataTime

      public long getNoDataTime()
      Gibt zurück, wie lange keine Daten eingetroffen sind
      Returns:
      Zeit seit der keine Daten da sind oder -1 falls Daten da sind
    • getDataState

      public DataState getDataState()
      Gibt den aktuellen Zustand zurück
      Returns:
      Zustand (null falls noch keine Meldung von Datenverteiler gekommen ist)
    • getSystemObject

      public SystemObject getSystemObject()
      Gibt das Systemobjekt zurück
      Returns:
      Systemobjekt
    • waitForInitialization

      public void waitForInitialization()
      Wartet bis dieses Objekt mit dem Laden fertig ist, aber maximal die in TIMEOUT angegebene Zeit. Bei Anfragen an dieses Objekt, sollte zu erst diese Funktion aufgerufen werden um sicherzustellen, das das Objekt bereits Daten erhalten hat.
    • waitForInitializationTree

      public void waitForInitializationTree()
      Wartet bis dieses Objekt und alle Kindobjekte mit dem Laden fertig sind, aber pro Objekt maximal die in TIMEOUT angegebene Zeit.
    • invalidate

      public void invalidate()
      Wird für Tests usw. gebraucht um dem Objekt zu sagen, dass es nicht initialisiert ist, also bei der nächsten Anfrage darauf warten soll, bis neue Daten eintreffen