mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +00:00
Promote FieldAndJoinTable up out of GenerateReportAction into top-level class, with factory method
This commit is contained in:
@ -71,6 +71,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin;
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAndJoinTable;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.reporting.QReportDataSource;
|
import com.kingsrook.qqq.backend.core.model.metadata.reporting.QReportDataSource;
|
||||||
@ -567,7 +568,7 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
// all pivotFields that are possible value sources are implicitly translated //
|
// all pivotFields that are possible value sources are implicitly translated //
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
QTableMetaData mainTable = QContext.getQInstance().getTable(dataSource.getSourceTable());
|
QTableMetaData mainTable = QContext.getQInstance().getTable(dataSource.getSourceTable());
|
||||||
FieldAndJoinTable fieldAndJoinTable = getFieldAndJoinTable(mainTable, summaryFieldName);
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(mainTable, summaryFieldName);
|
||||||
if(fieldAndJoinTable.field().getPossibleValueSourceName() != null)
|
if(fieldAndJoinTable.field().getPossibleValueSourceName() != null)
|
||||||
{
|
{
|
||||||
fieldsToTranslatePossibleValues.add(summaryFieldName);
|
fieldsToTranslatePossibleValues.add(summaryFieldName);
|
||||||
@ -580,32 +581,6 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public static FieldAndJoinTable getFieldAndJoinTable(QTableMetaData mainTable, String fieldName) throws QException
|
|
||||||
{
|
|
||||||
if(fieldName.indexOf('.') > -1)
|
|
||||||
{
|
|
||||||
String joinTableName = fieldName.replaceAll("\\..*", "");
|
|
||||||
String joinFieldName = fieldName.replaceAll(".*\\.", "");
|
|
||||||
|
|
||||||
QTableMetaData joinTable = QContext.getQInstance().getTable(joinTableName);
|
|
||||||
if(joinTable == null)
|
|
||||||
{
|
|
||||||
throw (new QException("Unrecognized join table name: " + joinTableName));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new FieldAndJoinTable(joinTable.getField(joinFieldName), joinTable);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new FieldAndJoinTable(mainTable.getField(fieldName), mainTable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -756,7 +731,7 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
SummaryKey key = new SummaryKey();
|
SummaryKey key = new SummaryKey();
|
||||||
for(String summaryFieldName : view.getSummaryFields())
|
for(String summaryFieldName : view.getSummaryFields())
|
||||||
{
|
{
|
||||||
FieldAndJoinTable fieldAndJoinTable = getFieldAndJoinTable(table, summaryFieldName);
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(table, summaryFieldName);
|
||||||
Serializable summaryValue = record.getValue(summaryFieldName);
|
Serializable summaryValue = record.getValue(summaryFieldName);
|
||||||
if(fieldAndJoinTable.field().getPossibleValueSourceName() != null)
|
if(fieldAndJoinTable.field().getPossibleValueSourceName() != null)
|
||||||
{
|
{
|
||||||
@ -811,7 +786,7 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
// todo - memoize this, if we ever need to optimize //
|
// todo - memoize this, if we ever need to optimize //
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
FieldAndJoinTable fieldAndJoinTable = getFieldAndJoinTable(table, fieldName);
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(table, fieldName);
|
||||||
field = fieldAndJoinTable.field();
|
field = fieldAndJoinTable.field();
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
@ -956,7 +931,7 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
List<QFieldMetaData> fields = new ArrayList<>();
|
List<QFieldMetaData> fields = new ArrayList<>();
|
||||||
for(String summaryFieldName : view.getSummaryFields())
|
for(String summaryFieldName : view.getSummaryFields())
|
||||||
{
|
{
|
||||||
FieldAndJoinTable fieldAndJoinTable = getFieldAndJoinTable(table, summaryFieldName);
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(table, summaryFieldName);
|
||||||
fields.add(new QFieldMetaData(summaryFieldName, fieldAndJoinTable.field().getType()).withLabel(fieldAndJoinTable.field().getLabel())); // todo do we need the type? if so need table as input here
|
fields.add(new QFieldMetaData(summaryFieldName, fieldAndJoinTable.field().getType()).withLabel(fieldAndJoinTable.field().getLabel())); // todo do we need the type? if so need table as input here
|
||||||
}
|
}
|
||||||
for(QReportField column : view.getColumns())
|
for(QReportField column : view.getColumns())
|
||||||
@ -1208,27 +1183,4 @@ public class GenerateReportAction extends AbstractQActionFunction<ReportInput, R
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public record FieldAndJoinTable(QFieldMetaData field, QTableMetaData joinTable)
|
|
||||||
{
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
public String getLabel(QTableMetaData mainTable)
|
|
||||||
{
|
|
||||||
if(mainTable.getName().equals(joinTable.getName()))
|
|
||||||
{
|
|
||||||
return (field.getLabel());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return (joinTable.getLabel() + ": " + field.getLabel());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* QQQ - Low-code Application Framework for Engineers.
|
||||||
|
* Copyright (C) 2021-2025. Kingsrook, LLC
|
||||||
|
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
|
||||||
|
* contact@kingsrook.com
|
||||||
|
* https://github.com/Kingsrook/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.kingsrook.qqq.backend.core.model.metadata.fields;
|
||||||
|
|
||||||
|
|
||||||
|
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||||
|
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Wrapper (record) that holds a QFieldMetaData and a QTableMetaData -
|
||||||
|
**
|
||||||
|
** With a factory method (`get()`) to go from the use-case of, a String that's
|
||||||
|
** "joinTable.fieldName" or "fieldName" to the pair.
|
||||||
|
**
|
||||||
|
** Note that the "joinTable" member here - could be the "mainTable" passed in
|
||||||
|
** to that `get()` method.
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public record FieldAndJoinTable(QFieldMetaData field, QTableMetaData joinTable)
|
||||||
|
{
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
** given a table, and a field-name string (which should either be the name
|
||||||
|
** of a field on that table, or another tableName + "." + fieldName (from
|
||||||
|
** that table) - get back the pair of table & field metaData that the
|
||||||
|
** input string is talking about.
|
||||||
|
***************************************************************************/
|
||||||
|
public static FieldAndJoinTable get(QTableMetaData mainTable, String fieldName) throws QException
|
||||||
|
{
|
||||||
|
if(fieldName.indexOf('.') > -1)
|
||||||
|
{
|
||||||
|
String joinTableName = fieldName.replaceAll("\\..*", "");
|
||||||
|
String joinFieldName = fieldName.replaceAll(".*\\.", "");
|
||||||
|
|
||||||
|
QTableMetaData joinTable = QContext.getQInstance().getTable(joinTableName);
|
||||||
|
if(joinTable == null)
|
||||||
|
{
|
||||||
|
throw (new QException("Unrecognized join table name: " + joinTableName));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FieldAndJoinTable(joinTable.getField(joinFieldName), joinTable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new FieldAndJoinTable(mainTable.getField(fieldName), mainTable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getLabel(QTableMetaData mainTable)
|
||||||
|
{
|
||||||
|
if(mainTable.getName().equals(joinTable.getName()))
|
||||||
|
{
|
||||||
|
return (field.getLabel());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (joinTable.getLabel() + ": " + field.getLabel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,6 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer;
|
import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer;
|
||||||
import com.kingsrook.qqq.backend.core.actions.reporting.GenerateReportAction;
|
|
||||||
import com.kingsrook.qqq.backend.core.actions.tables.GetAction;
|
import com.kingsrook.qqq.backend.core.actions.tables.GetAction;
|
||||||
import com.kingsrook.qqq.backend.core.actions.values.QPossibleValueTranslator;
|
import com.kingsrook.qqq.backend.core.actions.values.QPossibleValueTranslator;
|
||||||
import com.kingsrook.qqq.backend.core.context.QContext;
|
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||||
@ -43,6 +42,7 @@ import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput;
|
import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput;
|
||||||
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.DynamicFormWidgetData;
|
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.DynamicFormWidgetData;
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAndJoinTable;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.processes.implementations.savedreports.SavedReportToReportMetaDataAdapter;
|
import com.kingsrook.qqq.backend.core.processes.implementations.savedreports.SavedReportToReportMetaDataAdapter;
|
||||||
@ -127,7 +127,7 @@ public class ReportValuesDynamicFormWidgetRenderer extends AbstractWidgetRendere
|
|||||||
{
|
{
|
||||||
if(criteriaValue instanceof FilterVariableExpression filterVariableExpression)
|
if(criteriaValue instanceof FilterVariableExpression filterVariableExpression)
|
||||||
{
|
{
|
||||||
GenerateReportAction.FieldAndJoinTable fieldAndJoinTable = GenerateReportAction.getFieldAndJoinTable(table, criteria.getFieldName());
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(table, criteria.getFieldName());
|
||||||
QFieldMetaData fieldMetaData = fieldAndJoinTable.field().clone();
|
QFieldMetaData fieldMetaData = fieldAndJoinTable.field().clone();
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
|
@ -28,7 +28,6 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizerInterface;
|
import com.kingsrook.qqq.backend.core.actions.customizers.TableCustomizerInterface;
|
||||||
import com.kingsrook.qqq.backend.core.actions.reporting.GenerateReportAction;
|
|
||||||
import com.kingsrook.qqq.backend.core.context.QContext;
|
import com.kingsrook.qqq.backend.core.context.QContext;
|
||||||
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
import com.kingsrook.qqq.backend.core.exceptions.QException;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.reporting.pivottable.PivotTableDefinition;
|
import com.kingsrook.qqq.backend.core.model.actions.reporting.pivottable.PivotTableDefinition;
|
||||||
@ -39,6 +38,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
|
|||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
|
||||||
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
|
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
|
||||||
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
import com.kingsrook.qqq.backend.core.model.data.QRecord;
|
||||||
|
import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAndJoinTable;
|
||||||
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
|
||||||
import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage;
|
import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage;
|
||||||
import com.kingsrook.qqq.backend.core.model.statusmessages.PermissionDeniedMessage;
|
import com.kingsrook.qqq.backend.core.model.statusmessages.PermissionDeniedMessage;
|
||||||
@ -311,7 +311,7 @@ public class SavedReportTableCustomizer implements TableCustomizerInterface
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GenerateReportAction.FieldAndJoinTable fieldAndJoinTable = GenerateReportAction.getFieldAndJoinTable(table, fieldName);
|
FieldAndJoinTable fieldAndJoinTable = FieldAndJoinTable.get(table, fieldName);
|
||||||
return (fieldAndJoinTable.getLabel(table));
|
return (fieldAndJoinTable.getLabel(table));
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
|
Reference in New Issue
Block a user