mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Start adding overrideIdField to QPossibleValueSource
This commit is contained in:
@ -560,20 +560,47 @@ public class QPossibleValueTranslator
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
private void primePvsCache(String tableName, List<QPossibleValueSource> possibleValueSources, Collection<Serializable> values)
|
private void primePvsCache(String tableName, List<QPossibleValueSource> possibleValueSources, Collection<Serializable> values)
|
||||||
{
|
{
|
||||||
|
String idField = null;
|
||||||
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
||||||
{
|
{
|
||||||
possibleValueCache.putIfAbsent(possibleValueSource.getName(), new HashMap<>());
|
possibleValueCache.putIfAbsent(possibleValueSource.getName(), new HashMap<>());
|
||||||
|
String thisPvsIdField;
|
||||||
|
if(StringUtils.hasContent(possibleValueSource.getOverrideIdField()))
|
||||||
|
{
|
||||||
|
thisPvsIdField = possibleValueSource.getOverrideIdField();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
thisPvsIdField = QContext.getQInstance().getTable(tableName).getPrimaryKeyField();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(idField == null)
|
||||||
|
{
|
||||||
|
idField = thisPvsIdField;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// does this ever happen? maybe not... because, like, the list of values probably wouldn't make sense for //
|
||||||
|
// more than one field in the table... //
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
if(!idField.equals(thisPvsIdField))
|
||||||
|
{
|
||||||
|
for(QPossibleValueSource valueSource : possibleValueSources)
|
||||||
|
{
|
||||||
|
primePvsCache(tableName, List.of(valueSource), values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String primaryKeyField = QContext.getQInstance().getTable(tableName).getPrimaryKeyField();
|
|
||||||
|
|
||||||
for(List<Serializable> page : CollectionUtils.getPages(values, 1000))
|
for(List<Serializable> page : CollectionUtils.getPages(values, 1000))
|
||||||
{
|
{
|
||||||
QueryInput queryInput = new QueryInput();
|
QueryInput queryInput = new QueryInput();
|
||||||
queryInput.setTableName(tableName);
|
queryInput.setTableName(tableName);
|
||||||
queryInput.setFilter(new QQueryFilter().withCriteria(new QFilterCriteria(primaryKeyField, QCriteriaOperator.IN, page)));
|
queryInput.setFilter(new QQueryFilter().withCriteria(new QFilterCriteria(idField, QCriteriaOperator.IN, page)));
|
||||||
queryInput.setTransaction(getTransaction(tableName));
|
queryInput.setTransaction(getTransaction(tableName));
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -618,7 +645,7 @@ public class QPossibleValueTranslator
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
for(QRecord record : queryOutput.getRecords())
|
for(QRecord record : queryOutput.getRecords())
|
||||||
{
|
{
|
||||||
Serializable pkeyValue = record.getValue(primaryKeyField);
|
Serializable pkeyValue = record.getValue(idField);
|
||||||
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
||||||
{
|
{
|
||||||
QPossibleValue<?> possibleValue = new QPossibleValue<>(pkeyValue, record.getRecordLabel());
|
QPossibleValue<?> possibleValue = new QPossibleValue<>(pkeyValue, record.getRecordLabel());
|
||||||
|
@ -276,7 +276,18 @@ public class SearchPossibleValueSourceAction
|
|||||||
queryInput.setFilter(queryFilter);
|
queryInput.setFilter(queryFilter);
|
||||||
|
|
||||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||||
List<Serializable> ids = queryOutput.getRecords().stream().map(r -> r.getValue(table.getPrimaryKeyField())).toList();
|
|
||||||
|
String fieldName;
|
||||||
|
if(StringUtils.hasContent(possibleValueSource.getOverrideIdField()))
|
||||||
|
{
|
||||||
|
fieldName = possibleValueSource.getOverrideIdField();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fieldName = table.getPrimaryKeyField();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Serializable> ids = queryOutput.getRecords().stream().map(r -> r.getValue(fieldName)).toList();
|
||||||
List<QPossibleValue<?>> qPossibleValues = possibleValueTranslator.buildTranslatedPossibleValueList(possibleValueSource, ids);
|
List<QPossibleValue<?>> qPossibleValues = possibleValueTranslator.buildTranslatedPossibleValueList(possibleValueSource, ids);
|
||||||
output.setResults(qPossibleValues);
|
output.setResults(qPossibleValues);
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ public class QPossibleValueSource implements TopLevelMetaDataInterface
|
|||||||
// for type = TABLE //
|
// for type = TABLE //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
private String tableName;
|
private String tableName;
|
||||||
|
private String overrideIdField;
|
||||||
private List<String> searchFields;
|
private List<String> searchFields;
|
||||||
private List<QFilterOrderBy> orderByFields;
|
private List<QFilterOrderBy> orderByFields;
|
||||||
|
|
||||||
@ -630,4 +631,35 @@ public class QPossibleValueSource implements TopLevelMetaDataInterface
|
|||||||
qInstance.addPossibleValueSource(this);
|
qInstance.addPossibleValueSource(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Getter for overrideIdField
|
||||||
|
*******************************************************************************/
|
||||||
|
public String getOverrideIdField()
|
||||||
|
{
|
||||||
|
return (this.overrideIdField);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Setter for overrideIdField
|
||||||
|
*******************************************************************************/
|
||||||
|
public void setOverrideIdField(String overrideIdField)
|
||||||
|
{
|
||||||
|
this.overrideIdField = overrideIdField;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Fluent setter for overrideIdField
|
||||||
|
*******************************************************************************/
|
||||||
|
public QPossibleValueSource withOverrideIdField(String overrideIdField)
|
||||||
|
{
|
||||||
|
this.overrideIdField = overrideIdField;
|
||||||
|
return (this);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user