Class RdcUtilities

java.lang.Object
org.tentackle.fx.rdc.RdcUtilities
Direct Known Subclasses:
RdcUtilitiesWithBackgroundPool

@Service(RdcUtilities.class) public class RdcUtilities extends Object
RDC-related utility methods.
Author:
harald
  • Constructor Details

    • RdcUtilities

      public RdcUtilities()
      Creates the RDC utilities.
  • Method Details

    • getInstance

      public static RdcUtilities getInstance()
      The singleton.
      Returns:
      the singleton
    • invalidateCaches

      public void invalidateCaches()
      Invalidates the caches for search- and crud dialogs.
    • displayCrudStage

      public <T extends PersistentDomainObject<T>> void displayCrudStage(T pdo, javafx.collections.ObservableList<T> pdoList, boolean editable, javafx.stage.Modality modality, javafx.stage.Window owner, Consumer<T> updatedPdo, Consumer<PdoCrud<T>> configurator)
      CRUD of a PDO in a separate window.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo
      pdoList - the optional list of PDOs to navigate in the list
      editable - true if the user may edit the pdo, false if to view only
      modality - the modality
      owner - the owner window, null if none
      updatedPdo - the consumer for the possibly changed pdo if modal, null if no consumer
      configurator - optional crud configurator
    • getCrud

      public <T extends PersistentDomainObject<T>> PdoCrud<T> getCrud(T pdo, javafx.collections.ObservableList<T> pdoList, boolean editable, javafx.stage.Modality modality, javafx.stage.Window owner)
      Gets a CRUD for a PDO.
      If the PDO is already being edited, the corresponding stage will be brought to the front and null is returned.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo
      pdoList - the optional list of PDOs to navigate in the list
      editable - true if the user may edit the pdo, false if to view only
      modality - the modality
      owner - the owner window, null if none
      Returns:
      the CRUD, null if there is already a CRUD editing this PDO.
    • getCrudInUse

      public <T extends PersistentDomainObject<T>> PdoCrud<T> getCrudInUse(T pdo, Boolean editable)
      Gets a CRUD that is being used for the PDO.
      Type Parameters:
      T - the PDO type
      Parameters:
      pdo - the PDO
      editable - true if the pdo is being edited, false for viewed only, null for don't care
      Returns:
      the PdoCrud, null if not being shown or edited
    • getCrudStage

      public <T extends PersistentDomainObject<T>> javafx.stage.Stage getCrudStage(T pdo, boolean editable)
      Gets a CRUD stage for a PDO.
      Useful to check whether a PDO is being edited or shown currently.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo
      editable - true if the user may edit the pdo, false if to view only
      Returns:
      the CRUD showing stage, null if there is no such stage
    • displaySearchStage

      public <T extends PersistentDomainObject<T>> void displaySearchStage(T pdo, javafx.stage.Modality modality, javafx.stage.Window owner, boolean createPdoAllowed, Consumer<javafx.collections.ObservableList<T>> selectedItems)
      Searches for PDOs in a separate window.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo as a template
      modality - the modality
      owner - the owner window, null if none
      createPdoAllowed - true if allow creating a new PDO from within the search dialog
      selectedItems - the consumer for the selected PDOs if modal, null if not modal
    • displaySearchStage

      public <T extends PersistentDomainObject<T>> void displaySearchStage(T pdo, javafx.stage.Modality modality, javafx.stage.Window owner, boolean createPdoAllowed, Consumer<javafx.collections.ObservableList<T>> selectedItems, Consumer<PdoSearch<T>> configurator)
      Searches for PDOs in a separate window.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo as a template
      modality - the modality
      owner - the owner window, null if none
      createPdoAllowed - true if allow creating a new PDO from within the search dialog
      selectedItems - the consumer for the selected PDOs if modal, null if not modal
      configurator - the optional configurator for the PdoSearch
    • getSearch

      public <T extends PersistentDomainObject<T>> PdoSearch<T> getSearch(T pdo, javafx.stage.Modality modality, javafx.stage.Window owner)
      Gets a search controller for a PDO.
      Type Parameters:
      T - the pdo type
      Parameters:
      pdo - the pdo
      modality - the modality
      owner - the owner, null if none
      Returns:
      the search controller, never null
    • showSaveDiscardCancelDialog

      public void showSaveDiscardCancelDialog(Object owner, Consumer<Boolean> doIt)
      Shows a question dialog whether to save, discard, or cancel editing of a PDO.
      Parameters:
      owner - the owner window or node
      doIt - consumer invoked with true to save, false to discard changes, null to cancel, and do nothing
    • showTree

      public <T extends PersistentDomainObject<T>> void showTree(Object owner, T pdo)
      Shows the tree of a PDO in a modal scene.
      Type Parameters:
      T - the PDO type
      Parameters:
      owner - the owner window or node
      pdo - the PDO
    • runInBackground

      public <V> void runInBackground(javafx.scene.Node node, Supplier<V> runner, Consumer<V> updateUI, Consumer<RuntimeException> failedUI)
      Runs some code in another thread and optionally updates the UI.
      The method is provided to hide the concrete implementation and make it replaceable.
      Use this method whenever some lengthy operation (database I/O, for example) would otherwise block the event queue.

      The optional node will get the wait cursor set, while the task is executed in the background.

      The default implementation creates a AbstractSessionTask and runs it on behalf of the ModificationTracker. If the runner itself is a SessionDependable it gets the session set as well before it is invoked. The result is then passed to updateUI and executed via Platform.runLater(Runnable).

      Type Parameters:
      V - the type returned by the runner
      Parameters:
      node - optional node this background task is related to, null if none
      runner - the code running in another thread in parallel to the FX thread
      updateUI - optional UI updater invoked from within the FX event queue, null if none
      failedUI - optional UI updater invoked if execution failed, null if log only as error
    • createDragboard

      public javafx.scene.input.Dragboard createDragboard(javafx.scene.Node node, PersistentDomainObject<?>... pdos)
      Creates the dragboard for a node and PDOs.
      Parameters:
      node - the drag source
      pdos - the PDOs
      Returns:
      the dragboard, null if PDOs are not transferable
    • getPdoKeysFromDragboard

      public List<IdentifiableKey<PersistentDomainObject<?>>> getPdoKeysFromDragboard(javafx.scene.input.Dragboard dragboard)
      Gets all PDO keys from the dragboard.
      Parameters:
      dragboard - the dragboard
      Returns:
      the keys, empty list if the dragboard's string is null or empty
    • getPdoKeyFromDragboard

      public IdentifiableKey<PersistentDomainObject<?>> getPdoKeyFromDragboard(javafx.scene.input.Dragboard dragboard)
      Gets the PDO key from the dragboard.
      If the dragboard contains more than one key, the first will be returned.
      Parameters:
      dragboard - the dragboard
      Returns:
      the key, null if the dragboard's string is null or empty
    • getPdosFromDragboard

      public List<PersistentDomainObject<?>> getPdosFromDragboard(javafx.scene.input.Dragboard dragboard, DomainContext context)
      Gets all PDOs from a dragboard.
      Parameters:
      dragboard - the dragboard
      context - the domain context
      Returns:
      the PDOs, empty list if the dragboard doesn't contain a PDO key or no such PDOs
    • getPdoFromDragboard

      public PersistentDomainObject<?> getPdoFromDragboard(javafx.scene.input.Dragboard dragboard, DomainContext context)
      Gets the PDO from a dragboard.
      If the dragboard contains more than one key, the first PDO will be returned.
      Parameters:
      dragboard - the dragboard
      context - the domain context
      Returns:
      the PDO, null if the dragboard doesn't contain a PDO key or no such PDO
    • selectFile

      public File selectFile(String prefName, String prefKey, String fileExtension, String fileType, javafx.stage.Stage owner)
      Selects a file via the file chooser dialog and remembers the decision in the user preferences.
      Parameters:
      prefName - the preferences name
      prefKey - the preferences key
      fileExtension - the filename extension (including the leading dot)
      fileType - the localized name of the file type
      owner - the dialog owner for the selection dialog, null if none
      Returns:
      the selected file, null if aborted
    • getMainStage

      public javafx.stage.Stage getMainStage()
      Gets the main stage of the current application.
      Returns:
      the main stage
    • isSearchCachingEnabled

      protected <T extends PersistentDomainObject<T>> boolean isSearchCachingEnabled(T pdo)
      Determines whether the search controller is cached.
      Type Parameters:
      T - the PDO type
      Parameters:
      pdo - the PDO
      Returns:
      true if cached
    • isCrudCachingEnabled

      protected <T extends PersistentDomainObject<T>> boolean isCrudCachingEnabled(T pdo)
      Determines whether the crud controller is cached.
      Type Parameters:
      T - the PDO type
      Parameters:
      pdo - the PDO
      Returns:
      true if cached
    • detectThemeChanged

      protected void detectThemeChanged()
      Detects when the theme has changed and invalidates the caches.