mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 05:01:07 +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)
|
||||
{
|
||||
String idField = null;
|
||||
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
||||
{
|
||||
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
|
||||
{
|
||||
String primaryKeyField = QContext.getQInstance().getTable(tableName).getPrimaryKeyField();
|
||||
|
||||
for(List<Serializable> page : CollectionUtils.getPages(values, 1000))
|
||||
{
|
||||
QueryInput queryInput = new QueryInput();
|
||||
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));
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -618,7 +645,7 @@ public class QPossibleValueTranslator
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
for(QRecord record : queryOutput.getRecords())
|
||||
{
|
||||
Serializable pkeyValue = record.getValue(primaryKeyField);
|
||||
Serializable pkeyValue = record.getValue(idField);
|
||||
for(QPossibleValueSource possibleValueSource : possibleValueSources)
|
||||
{
|
||||
QPossibleValue<?> possibleValue = new QPossibleValue<>(pkeyValue, record.getRecordLabel());
|
||||
|
@ -275,8 +275,19 @@ public class SearchPossibleValueSourceAction
|
||||
|
||||
queryInput.setFilter(queryFilter);
|
||||
|
||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||
List<Serializable> ids = queryOutput.getRecords().stream().map(r -> r.getValue(table.getPrimaryKeyField())).toList();
|
||||
QueryOutput queryOutput = new QueryAction().execute(queryInput);
|
||||
|
||||
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);
|
||||
output.setResults(qPossibleValues);
|
||||
|
||||
|
@ -53,6 +53,7 @@ public class QPossibleValueSource implements TopLevelMetaDataInterface
|
||||
// for type = TABLE //
|
||||
//////////////////////
|
||||
private String tableName;
|
||||
private String overrideIdField;
|
||||
private List<String> searchFields;
|
||||
private List<QFilterOrderBy> orderByFields;
|
||||
|
||||
@ -630,4 +631,35 @@ public class QPossibleValueSource implements TopLevelMetaDataInterface
|
||||
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