Class ReportDetailView

java.lang.Object
com.vaadin.flow.component.Component
com.vaadin.flow.component.Composite<ViewLayout>
All Implemented Interfaces:
com.vaadin.flow.component.AttachNotifier, com.vaadin.flow.component.DetachNotifier, com.vaadin.flow.component.HasElement, com.vaadin.flow.component.HasStyle, com.vaadin.flow.router.AfterNavigationObserver, com.vaadin.flow.router.BeforeEnterObserver, com.vaadin.flow.router.BeforeLeaveObserver, com.vaadin.flow.router.HasDynamicTitle, com.vaadin.flow.router.internal.AfterNavigationHandler, com.vaadin.flow.router.internal.BeforeEnterHandler, com.vaadin.flow.router.internal.BeforeLeaveHandler, FacetOwner, FragmentOwner, ChangeTracker, DetailView<Report>, HasEditedEntity<Report>, ReadOnlyAwareView, ReadOnlyTracker, SupportEntityLock<Report>, Serializable

@RouteAlias(value="reports/:id", layout=DefaultMainViewParent.class) @Route(value="report/reports/:id", layout=DefaultMainViewParent.class) @ViewController("report_Report.detail") @ViewDescriptor("report-detail-view.xml") public class ReportDetailView extends StandardDetailView<Report>
See Also:
  • Field Details

  • Constructor Details

    • ReportDetailView

      public ReportDetailView()
  • Method Details

    • onInit

      @Subscribe public void onInit(View.InitEvent event)
    • initTemplatesOutputTypeColumn

      protected void initTemplatesOutputTypeColumn()
    • createTemplateOutputTypeBadge

      protected com.vaadin.flow.component.orderedlayout.HorizontalLayout createTemplateOutputTypeBadge(ReportTemplate template)
    • templatesDataGridAlterableRenderer

      @Supply(to="templatesDataGrid.alterable", subject="renderer") protected com.vaadin.flow.data.renderer.Renderer<ReportTemplate> templatesDataGridAlterableRenderer()
    • templatesDataGridDefaultRenderer

      @Supply(to="templatesDataGrid.default", subject="renderer") protected com.vaadin.flow.data.renderer.Renderer<ReportTemplate> templatesDataGridDefaultRenderer()
    • inputParametersDataGridRequiredRenderer

      @Supply(to="inputParametersDataGrid.required", subject="renderer") protected com.vaadin.flow.data.renderer.Renderer<ReportInputParameter> inputParametersDataGridRequiredRenderer()
    • inputParametersDataGridValidationOnRenderer

      @Supply(to="inputParametersDataGrid.validationOn", subject="renderer") protected com.vaadin.flow.data.renderer.Renderer<ReportInputParameter> inputParametersDataGridValidationOnRenderer()
    • createCheckbox

      protected com.vaadin.flow.component.checkbox.Checkbox createCheckbox(Boolean value)
    • onInitEntity

      @Subscribe protected void onInitEntity(StandardDetailView.InitEntityEvent<Report> event)
    • onReady

      @Subscribe protected void onReady(View.ReadyEvent event)
    • onBandsTreeDataGridCreate

      @Subscribe("bandsTreeDataGrid.create") protected void onBandsTreeDataGridCreate(ActionPerformedEvent event)
    • bandsTreeDataGridCreateEnabledRule

      @Install(to="bandsTreeDataGrid.create", subject="enabledRule") protected boolean bandsTreeDataGridCreateEnabledRule()
    • onBandsTreeDataGridRemove

      @Subscribe("bandsTreeDataGrid.remove") protected void onBandsTreeDataGridRemove(ActionPerformedEvent event)
    • bandsTreeDataGridRemoveEnabledRule

      @Install(to="bandsTreeDataGrid.remove", subject="enabledRule") protected boolean bandsTreeDataGridRemoveEnabledRule()
    • onBandsTreeDataGridUpBand

      @Subscribe("bandsTreeDataGrid.upBand") protected void onBandsTreeDataGridUpBand(ActionPerformedEvent event)
    • bandsTreeDataGridUpBandEnabledRule

      @Install(to="bandsTreeDataGrid.upBand", subject="enabledRule") protected boolean bandsTreeDataGridUpBandEnabledRule()
    • onBandsTreeDataGridDownBand

      @Subscribe("bandsTreeDataGrid.downBand") protected void onBandsTreeDataGridDownBand(ActionPerformedEvent event)
    • bandsTreeDataGridDownBandEnabledRule

      @Install(to="bandsTreeDataGrid.downBand", subject="enabledRule") protected boolean bandsTreeDataGridDownBandEnabledRule()
    • onDataSetsDataGridCreate

      @Subscribe("dataSetsDataGrid.create") protected void onDataSetsDataGridCreate(ActionPerformedEvent event)
    • dataSetsDataGridCreateEnabledRule

      @Install(to="dataSetsDataGrid.create", subject="enabledRule") protected boolean dataSetsDataGridCreateEnabledRule()
    • dataSetsDataGridRemoveEnabledRule

      @Install(to="dataSetsDataGrid.remove", subject="enabledRule") protected boolean dataSetsDataGridRemoveEnabledRule()
    • onBandsDcItemChange

      @Subscribe(id="bandsDc", target=DATA_CONTAINER) protected void onBandsDcItemChange(InstanceContainer.ItemChangeEvent<BandDefinition> event)
    • onBandsDcItemPropertyChange

      @Subscribe(id="bandsDc", target=DATA_CONTAINER) protected void onBandsDcItemPropertyChange(InstanceContainer.ItemPropertyChangeEvent<BandDefinition> event)
    • onBandsDcCollectionChange

      @Subscribe(id="bandsDc", target=DATA_CONTAINER) protected void onBandsDcCollectionChange(CollectionContainer.CollectionChangeEvent<BandDefinition> event)
    • onDataSetsDcItemChange

      @Subscribe(id="dataSetsDc", target=DATA_CONTAINER) protected void onDataSetsDcItemChange(InstanceContainer.ItemChangeEvent<DataSet> event)
    • onDataSetsDcItemPropertyChange

      @Subscribe(id="dataSetsDc", target=DATA_CONTAINER) protected void onDataSetsDcItemPropertyChange(InstanceContainer.ItemPropertyChangeEvent<DataSet> event)
    • onDataSetsDcCollectionChange

      @Subscribe(id="dataSetsDc", target=DATA_CONTAINER) protected void onDataSetsDcCollectionChange(CollectionContainer.CollectionChangeEvent<DataSet> event)
    • forgetDataSetsOutsideTheReport

      protected void forgetDataSetsOutsideTheReport()
      Drops what is remembered about data sets the report no longer holds. Removing a data set, removing the band that owned it and switching to another band all reach the view differently, so the maps are pruned against the report itself rather than against one collection event.
    • onLlmQueryColumnsDcItemPropertyChange

      @Subscribe(id="llmQueryColumnsDc", target=DATA_CONTAINER) public void onLlmQueryColumnsDcItemPropertyChange(InstanceContainer.ItemPropertyChangeEvent<LlmQueryColumn> event)
    • onLlmQueryColumnsDcCollectionChange

      @Subscribe(id="llmQueryColumnsDc", target=DATA_CONTAINER) public void onLlmQueryColumnsDcCollectionChange(CollectionContainer.CollectionChangeEvent<LlmQueryColumn> event)
    • onTemplatesDcCollectionChange

      @Subscribe(id="templatesDc", target=DATA_CONTAINER) protected void onTemplatesDcCollectionChange(CollectionContainer.CollectionChangeEvent<ReportTemplate> event)
    • onParametersDcCollectionChange

      @Subscribe(id="parametersDc", target=DATA_CONTAINER) protected void onParametersDcCollectionChange(CollectionContainer.CollectionChangeEvent<ReportInputParameter> event)
    • onValidation

      @Subscribe protected void onValidation(StandardDetailView.ValidationEvent event)
    • markFieldAndPreventSave

      protected void markFieldAndPreventSave(TypedTextField<?> field, String messageBundleKey, StandardDetailView.BeforeSaveEvent event)
    • showNotificationIfAnotherTab

      protected void showNotificationIfAnotherTab(com.vaadin.flow.component.tabs.Tab tab, ValidationErrors errors, com.vaadin.flow.component.Component component, String messageBundleKey)
    • checkReportCode

      protected void checkReportCode(StandardDetailView.BeforeSaveEvent event)
    • onBeforeSave

      @Subscribe protected void onBeforeSave(StandardDetailView.BeforeSaveEvent event)
    • onMultiDataSetFieldComponentValueChange

      @Subscribe("multiDataSetField") protected void onMultiDataSetFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<com.vaadin.flow.component.checkbox.Checkbox,Boolean> event)
    • onStreamingFieldComponentValueChange

      @Subscribe("streamingField") protected void onStreamingFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<com.vaadin.flow.component.checkbox.Checkbox,Boolean> event)
    • updateStreamingRelatedFields

      protected void updateStreamingRelatedFields()
      The streaming flag and multiple datasets are mutually exclusive, and streaming applies only to first-level bands. This method owns the enablement of both checkboxes so that toggling either one recomputes the full state. Detailed structural rules are checked on save in validateBand.
    • isStreamingCapableDataSet

      protected boolean isStreamingCapableDataSet()
      Streaming reads rows from a database cursor, so it applies only to a single SQL or JPQL dataset. A band with no dataset, several datasets, or a groovy/json/entity dataset cannot stream.
    • onOrientationFieldComponentValueChange

      @Subscribe("orientationField") protected void onOrientationFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<JmixSelect<Orientation>,Orientation> event)
    • onFetchPlanNameFieldComponentValueChange

      protected void onFetchPlanNameFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<JmixComboBox<String>,String> event)
    • onEntityParamFieldComponentValueChange

      protected void onEntityParamFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<JmixComboBox<String>,String> event)
    • onEntitiesParamFieldComponentValueChange

      protected void onEntitiesParamFieldComponentValueChange(com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent<JmixComboBox<String>,String> event)
    • onFetchPlanEditButtonClick

      @Subscribe("fetchPlanEditButton") protected void onFetchPlanEditButtonClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • findMetaClassByAlias

      protected @Nullable MetaClass findMetaClassByAlias(DataSet dataSet)
    • findMetaClassByDataSetEntityAlias

      public @Nullable MetaClass findMetaClassByDataSetEntityAlias(String alias, DataSetType dataSetType, List<ReportInputParameter> reportInputParameters)
    • suitableByDataSetType

      protected boolean suitableByDataSetType(DataSetType dataSetType, boolean isCollectionAlias, ParameterType type)
    • dataSetToReportRegion

      protected @Nullable ReportRegion dataSetToReportRegion(DataSet dataSet, EntityTree entityTree)
    • reportRegionToFetchPlan

      protected FetchPlan reportRegionToFetchPlan(EntityTree entityTree, ReportRegion reportRegion)
    • findSubFetchPlanByCollectionPropertyName

      public @Nullable FetchPlan findSubFetchPlanByCollectionPropertyName(@Nullable FetchPlan fetchPlan, String propertyName)
    • getNameForEntityParameter

      protected @Nullable String getNameForEntityParameter(DataSet dataSet)
    • setupReportXml

      protected void setupReportXml()
    • saveDelegate

      @Install(target=DATA_CONTEXT) protected Set<Object> saveDelegate(SaveContext saveContext)
    • onRunAction

      @Subscribe("runAction") protected void onRunAction(ActionPerformedEvent event)
    • validateTemplate

      protected void validateTemplate(ValidationErrors validationErrors)
    • validateBands

      protected void validateBands(ValidationErrors validationErrors)
    • streamingViolationMessage

      protected String streamingViolationMessage(StreamingReportValidator.Violation violation)
    • checkForNameDuplication

      protected void checkForNameDuplication(ValidationErrors errors, com.google.common.collect.Multimap<String,BandDefinition> names)
    • validateLlmDataSet

      protected void validateLlmDataSet(ValidationErrors errors, DataSet dataSet)
      Refuses an LLM data set a run could not use: one without a prompt, and one without a usable query. The query is required because a run executes that very query and generates nothing — like the script of a JPQL data set, which the designer requires for the same reason. The prompt is required because it is what the query can be generated from again.
    • validateLlmStoredQuery

      protected void validateLlmStoredQuery(ValidationErrors errors, DataSet dataSet)
      Refuses a query the data set could not run: a missing one, one whose document is unreadable, and one left without columns — the band rows are keyed by those, so a query that names none returns nothing a template could print.
    • hasDuplicates

      protected boolean hasDuplicates(List<String> names)
    • validateBand

      protected void validateBand(ValidationErrors errors, BandDefinition band, com.google.common.collect.Multimap<String,BandDefinition> names)
    • validateInputOutputFormats

      protected boolean validateInputOutputFormats()
    • createRootBandDefinition

      protected BandDefinition createRootBandDefinition(Report report)
    • getDefaultDataSetName

      protected String getDefaultDataSetName(BandDefinition band)
    • isUpdatePermitted

      protected boolean isUpdatePermitted()
    • orderBandDefinitions

      protected void orderBandDefinitions(BandDefinition parent)
    • sortBandDefinitionsByPosition

      public void sortBandDefinitionsByPosition()
    • isUpBandButtonEnabled

      protected boolean isUpBandButtonEnabled()
    • isDownBandButtonEnabled

      protected boolean isDownBandButtonEnabled()
    • refreshBandActionStates

      protected void refreshBandActionStates()
    • refreshDataSetsActionStates

      protected void refreshDataSetsActionStates()
    • updateBandFieldRequiredIndicators

      protected void updateBandFieldRequiredIndicators(@Nullable BandDefinition item)
    • updateBandFieldsAvailability

      protected void updateBandFieldsAvailability(@Nullable BandDefinition item)
    • selectFirstDataSet

      protected void selectFirstDataSet()
    • initDataSetsDataGrid

      protected void initDataSetsDataGrid()
    • initBandsTreeDataGrid

      protected void initBandsTreeDataGrid()
    • dataSetTypeColumnValueProvider

      protected com.vaadin.flow.component.Component dataSetTypeColumnValueProvider(DataSet item)
    • getDataSetTypeOptions

      protected List<DataSetType> getDataSetTypeOptions()
      Returns the data set types the designer offers. The list is fixed for the lifetime of the view: replacing or refreshing the items of a bound Select clears its value, and that null would be written back to the data set.
    • buildDataSetTypeOptions

      protected List<DataSetType> buildDataSetTypeOptions()
    • updateDataSetsLayout

      protected void updateDataSetsLayout(boolean isMultiDataSet)
    • isChildOrEqual

      protected boolean isChildOrEqual(BandDefinition definition, @Nullable BandDefinition child)
    • applyVisibilityRules

      protected void applyVisibilityRules(DataSet item)
    • applyVisibilityRulesForType

      protected void applyVisibilityRulesForType(DataSet dataSet)
    • updateFetchPlanNameFieldItems

      protected void updateFetchPlanNameFieldItems(@Nullable ReportInputParameter reportInputParameter)
    • findParameterByAlias

      protected @Nullable ReportInputParameter findParameterByAlias(String alias)
    • hideAllDataSetEditComponents

      protected void hideAllDataSetEditComponents()
    • initLlmDataSetComponents

      protected void initLlmDataSetComponents()
    • createLlmColumnNameField

      protected com.vaadin.flow.component.Component createLlmColumnNameField(LlmQueryColumn column)
    • llmColumnNameColumn

      protected @Nullable com.vaadin.flow.component.grid.Grid.Column<LlmQueryColumn> llmColumnNameColumn()
      Returns the column the names of an LLM data set's query columns are shown in, or null when the grid has none. FlowUI removes a column whose attribute the current user may not read, and LlmQueryColumn is an entity like any other: a role written by hand, without a policy for it, leaves this grid without its only column. The panel is then read-only for the columns rather than broken — a missing policy must not take the report designer down with it.
    • createLlmColumnNameRenderer

      protected com.vaadin.flow.data.renderer.Renderer<LlmQueryColumn> createLlmColumnNameRenderer()
      Renders a column name as a field that survives its own edit. A name typed into it renames the column, which refreshes the row it is in; a renderer that can only create would answer that refresh with a new field, and the one being typed into would leave the grid, taking the focus and the caret with it.

      Keeping the field as it is shows the current name all the same: while the panel is unlocked, that field is the only thing that renames its column, and every other change to the list — filling it, dropping the nameless rows, locking the panel again — replaces the items or the renderer and re-renders the grid.

    • setLlmQueryEditing

      protected void setLlmQueryEditing(boolean editing)
    • updateLlmQueryEditingControls

      protected void updateLlmQueryEditingControls()
    • isLlmQueryEditorEditable

      protected boolean isLlmQueryEditorEditable()
    • assembleEditedQuery

      protected void assembleEditedQuery()
    • touchLlmQueryDraft

      protected void touchLlmQueryDraft(@Nullable DataSet dataSet)
    • getLlmQueryDraftRevision

      protected long getLlmQueryDraftRevision(DataSet dataSet)
    • editedLlmQueryColumns

      protected List<String> editedLlmQueryColumns()
    • finishLlmQueryEditing

      protected void finishLlmQueryEditing()
      Ends the editing of the query the panel was unlocked for, whichever way it ends: the check button, moving to another data set, or successfully saving the report. Only here do the rows left without a name go away and a query left blank clear the stored document.
    • showGeneratedQueryProblems

      protected void showGeneratedQueryProblems(@Nullable LlmDataQuery query)
      Says what would make a freshly generated query fail a report run. Generation already gave it one chance to be corrected, so what is left is what the model could not fix and the author now can.
    • showEditedQueryProblems

      protected void showEditedQueryProblems(@Nullable LlmDataQuery query)
      Says what would make a hand-edited query fail a report run. Nothing corrects such a query — it is the author's — so this is only ever a report of what is wrong with it.
    • showLlmQueryProblems

      protected void showLlmQueryProblems(@Nullable LlmDataQuery query, String messageKey)
      Says what would make the stored query fail a report run, right after it is stored. A query is checked without running it and without asking the model anything, so an author learns of a broken query while the panel that produced it is still open, instead of on the next run of the report.
    • warnAboutUnguardedOptionalParametersInReport

      protected void warnAboutUnguardedOptionalParametersInReport()
      Says which optional report parameters the stored queries of this report compare without a guard — the one way this data set type prints wrong data instead of failing.

      A run binds an empty optional parameter as null, and an unguarded comparison against null matches nothing: the band comes out empty with no error anywhere. Generation is told to write (:name is null or …), but a model can ignore the rule, a hand edit can miss it, and — the case nothing else would catch — making a parameter optional turns a comparison written for a required one into exactly this. Every query is therefore read on save, which is where the whole report is in its stored form.

    • updateLlmStaleQueryNotice

      protected void updateLlmStaleQueryNotice(DataSet dataSet)
      Says whether the stored query of the data set on screen answers a prompt that has since been edited.

      Only that data set: the container reports a property change of every data set of the band, while the notice belongs to the panel, so a prompt edited elsewhere must leave it as it is — the same reason the type branch refreshes the panel only for the data set it shows.

    • clearLlmPropertiesIfNotLlm

      protected void clearLlmPropertiesIfNotLlm(DataSet dataSet)
      Drops what only an LLM data set is described by when the data set becomes one of another type. Kept otherwise, a stored query would be saved and exported with a data set nothing reads it for, and would come back as the current query if the type were switched back.
    • fillLlmQueryColumns

      protected void fillLlmQueryColumns(@Nullable LlmDataQuery storedQuery)
    • refreshLlmPanelIfShown

      protected void refreshLlmPanelIfShown(DataSet dataSet)
    • initLlmDataSetOptions

      protected void initLlmDataSetOptions(DataSet dataSet)
    • updateLlmPanelAvailability

      protected void updateLlmPanelAvailability()
      Keeps the panel read-only when either the application cannot serve the type or the report itself was opened without editing rights.
    • isLlmPanelEditable

      protected boolean isLlmPanelEditable()
    • onReadOnlyChangeEvent

      @Subscribe public void onReadOnlyChangeEvent(ReadOnlyTracker.ReadOnlyChangeEvent event)
    • showLlmColumnsChangedNotice

      protected void showLlmColumnsChangedNotice(List<String> previousColumns, List<String> generatedColumns)
    • createLlmQueryColumn

      protected LlmQueryColumn createLlmQueryColumn(String name)
    • applyVisibilityRulesForEntityType

      protected void applyVisibilityRulesForEntityType(DataSet item)
    • initJsonDataSetOptions

      protected void initJsonDataSetOptions(DataSet dataSet)
    • setJsonDataSetFieldsVisibility

      protected void setJsonDataSetFieldsVisibility(boolean visible)
    • initDataStoreField

      protected void initDataStoreField()
    • initEntitiesParamField

      protected void initEntitiesParamField()
    • onEntitiesParamFieldHelperButtonClick

      @Subscribe("entitiesParamFieldHelperButton") protected void onEntitiesParamFieldHelperButtonClick(com.vaadin.flow.component.ClickEvent<JmixButton> event)
    • initEntityParamField

      protected void initEntityParamField()
    • onEntityParamFieldHelperButtonClick

      @Subscribe("entityParamFieldHelperButton") protected void onEntityParamFieldHelperButtonClick(com.vaadin.flow.component.ClickEvent<JmixButton> event)
    • initFetchPlanNameField

      protected void initFetchPlanNameField()
    • onDataSetScriptFullScreenBtnClick

      @Subscribe("dataSetScriptFullScreenBtn") protected void onDataSetScriptFullScreenBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onLlmAddColumnBtnClick

      @Subscribe("llmAddColumnBtn") public void onLlmAddColumnBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onLlmRemoveColumnBtnClick

      @Subscribe("llmRemoveColumnBtn") public void onLlmRemoveColumnBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onLlmGeneratedQueryHelpBtnClick

      @Subscribe("llmGeneratedQueryHelpBtn") public void onLlmGeneratedQueryHelpBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onLlmGenerateBtnClick

      @Subscribe("llmGenerateBtn") public void onLlmGenerateBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • createLlmGenerationTask

      protected BackgroundTask<Integer,LlmDataQuery> createLlmGenerationTask(LlmQueryGenerationRequest request, DataSet dataSet)
      Creates the task that generates a query for the data set, and issues the token that makes it the current attempt for that data set: a task created later supersedes whatever was created before it.
    • showLlmGenerationTimeout

      protected void showLlmGenerationTimeout()
      Says that generation ran out of the time it was given. Left unhandled it would be said to no one, as a failure would.
    • showLlmGenerationFailure

      protected void showLlmGenerationFailure(Exception exception)
      Says that generation failed, and why. Nothing in the platform reports an unhandled failure of a background task to the person who started it, so without this a failed generation would leave the author with a closed dialog and no query.
    • describeLlmGenerationFailure

      protected String describeLlmGenerationFailure(Exception exception)
      Describes a failed generation in the words of what actually went wrong. The innermost cause carries that: the layers above it say no more than the notice already does. Overly long text — a model's answer quoted back in a parsing failure, say — is cut, and the log keeps all of it.
    • applyLlmGeneratedQuery

      protected void applyLlmGeneratedQuery(ReportDetailView.LlmGenerationAttempt attempt, LlmDataQuery generatedQuery)
      Stores the query a finished generation produced and brings the panel up to date with it. An attempt the data set has moved on from is discarded instead.
    • isLlmGenerationAttemptCurrent

      protected boolean isLlmGenerationAttemptCurrent(ReportDetailView.LlmGenerationAttempt attempt)
    • forgetLlmGenerationAttempt

      protected void forgetLlmGenerationAttempt(ReportDetailView.LlmGenerationAttempt attempt)
    • discardLlmGenerationAttempt

      protected void discardLlmGenerationAttempt(ReportDetailView.LlmGenerationAttempt attempt)
      Ends an attempt whose result cannot be applied any more and says why nothing changed, so that a finished generation is never dropped silently. An attempt whose data set has since been generated again stays silent: the author is already waiting for, or already has, that newer result.
    • onLlmEditQueryBtnClick

      @Subscribe("llmEditQueryBtn") public void onLlmEditQueryBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • removeBlankLlmQueryColumns

      protected void removeBlankLlmQueryColumns()
      Drops the rows left without a name when the author finishes editing — a row added and never filled in. A nameless column is of no use to a template and would only take a position in the list the add-on names the selected values by.

      Only on finishing, not on every change: while editing, an empty row is a row about to be typed into.

    • onDataSetScriptCodeEditorHelpBtnClick

      @Subscribe("dataSetScriptCodeEditorHelpBtn") protected void onDataSetScriptCodeEditorHelpBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onJsonGroovyCodeEditorHelpBtnClick

      @Subscribe("jsonGroovyCodeEditorHelpBtn") protected void onJsonGroovyCodeEditorHelpBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onDataSetScriptFieldExpandIconClick

      protected void onDataSetScriptFieldExpandIconClick()
    • initJsonPathQueryTextAreaField

      protected void initJsonPathQueryTextAreaField()
    • onJsonPathQueryTextAreaFieldHelpIconClick

      protected void onJsonPathQueryTextAreaFieldHelpIconClick(com.vaadin.flow.component.ClickEvent<?> event)
    • onJsonGroovyCodeEditorFullScreenBtnClick

      @Subscribe("jsonGroovyCodeEditorFullScreenBtn") public void onJsonGroovyCodeEditorFullScreenBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • getScriptEditorDialogCaption

      protected String getScriptEditorDialogCaption()
    • onJsonGroovyCodeEditorHelpIconClick

      protected void onJsonGroovyCodeEditorHelpIconClick()
    • setCommonEntityGridVisibility

      protected void setCommonEntityGridVisibility(boolean visibleEntityGrid, boolean visibleEntitiesGrid)
    • inputParametersDataGridUpEnabledRule

      @Install(to="inputParametersDataGrid.up", subject="enabledRule") protected boolean inputParametersDataGridUpEnabledRule()
    • oninputParametersDataGridUp

      @Subscribe("inputParametersDataGrid.up") protected void oninputParametersDataGridUp(ActionPerformedEvent event)
    • inputParametersDataGridDownEnabledRule

      @Install(to="inputParametersDataGrid.down", subject="enabledRule") protected boolean inputParametersDataGridDownEnabledRule()
    • oninputParametersDataGridDown

      @Subscribe("inputParametersDataGrid.down") protected void oninputParametersDataGridDown(ActionPerformedEvent event)
    • inputParametersDataGridCreateInitializer

      @Install(to="inputParametersDataGrid.createParameter", subject="initializer") protected void inputParametersDataGridCreateInitializer(ReportInputParameter reportInputParameter)
    • orderParameters

      protected void orderParameters()
    • replaceParameters

      protected void replaceParameters(boolean up)
    • valuesFormatsDataGridCreateInitializer

      @Install(to="valuesFormatsDataGrid.createValueFormat", subject="initializer") protected void valuesFormatsDataGridCreateInitializer(ReportValueFormat reportValueFormat)
    • initLocaleDetailReportTextField

      protected void initLocaleDetailReportTextField()
    • onLocaleHelpIconClick

      protected void onLocaleHelpIconClick(com.vaadin.flow.component.ClickEvent<?> event)
    • onValidationScriptFullScreenBtnClick

      @Subscribe("validationScriptFullScreenBtn") public void onValidationScriptFullScreenBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onValidationScriptCodeEditorHelpBtnClick

      @Subscribe("validationScriptCodeEditorHelpBtn") protected void onValidationScriptCodeEditorHelpBtnClick(com.vaadin.flow.component.ClickEvent<com.vaadin.flow.component.button.Button> event)
    • onValidationScriptCodeEditorHelpBtnClick

      protected void onValidationScriptCodeEditorHelpBtnClick()
    • initScreenIdField

      protected void initScreenIdField()
    • initRoleField

      protected void initRoleField()
    • initSingleDataSetTypeField

      protected void initSingleDataSetTypeField()
    • initJsonSourceTypeField

      protected void initJsonSourceTypeField()
    • isReportsGroovyEnabled

      protected boolean isReportsGroovyEnabled()
    • updateGroovyEditorsState

      protected void updateGroovyEditorsState(@Nullable DataSet dataSet)
    • isGroovyDataSetLocked

      protected boolean isGroovyDataSetLocked(@Nullable DataSet dataSet)
    • isJsonGroovyEditorLocked

      protected boolean isJsonGroovyEditorLocked(@Nullable DataSet dataSet)
    • rolesDataGridExcludeEnabledRule

      @Install(to="rolesDataGrid.exclude", subject="enabledRule") protected boolean rolesDataGridExcludeEnabledRule()
    • rolesDataGridAddEnabledRule

      @Install(to="rolesDataGrid.add", subject="enabledRule") protected boolean rolesDataGridAddEnabledRule()
    • onrolesDataGridAdd

      @Subscribe("rolesDataGrid.add") public void onrolesDataGridAdd(ActionPerformedEvent event)
    • onscreenDataGridAdd

      @Subscribe("screenDataGrid.add") public void onscreenDataGridAdd(ActionPerformedEvent event)
    • ontemplatesDataGridCreate

      @Subscribe("templatesDataGrid.create") protected void ontemplatesDataGridCreate(ActionPerformedEvent event)
    • templatesDataGridCreateAfterSaveHandler

      protected void templatesDataGridCreateAfterSaveHandler(DialogWindow.AfterCloseEvent<ReportTemplateDetailView> event)
    • onTemplatesDataGridEdit

      @Subscribe("templatesDataGrid.edit") protected void onTemplatesDataGridEdit(ActionPerformedEvent event)
    • templatesDataGridCopyEnabledRule

      @Install(to="templatesDataGrid.copy", subject="enabledRule") protected boolean templatesDataGridCopyEnabledRule()
    • ontemplatesDataGridCopy

      @Subscribe("templatesDataGrid.copy") protected void ontemplatesDataGridCopy(ActionPerformedEvent event)
    • templatesDataGridDefaultEnabledRule

      @Install(to="templatesDataGrid.defaultAction", subject="enabledRule") protected boolean templatesDataGridDefaultEnabledRule()
    • ontemplatesDataGridDefault

      @Subscribe("templatesDataGrid.defaultAction") protected void ontemplatesDataGridDefault(ActionPerformedEvent event)
    • getCodeEditorMode

      protected CodeEditorMode getCodeEditorMode(DataSet dataSet)
    • setupEntityParamFieldValue

      protected void setupEntityParamFieldValue(DataSet dataSet)
    • setupEntitiesParamFieldValue

      protected void setupEntitiesParamFieldValue(DataSet dataSet)