mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Let pre-insert customizers specify when-to-run during pre-insert validation. e.g., if they need to adjust values before UK lookups are done.
This commit is contained in:
@ -55,6 +55,21 @@ public abstract class AbstractPreInsertCustomizer
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// allow the customizer to specify when it should be executed as part of the //
|
||||||
|
// insert action. default (per method in this class) is AFTER_ALL_VALIDATIONS //
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
public enum WhenToRun
|
||||||
|
{
|
||||||
|
BEFORE_ALL_VALIDATIONS,
|
||||||
|
BEFORE_UNIQUE_KEY_CHECKS,
|
||||||
|
BEFORE_REQUIRED_FIELD_CHECKS,
|
||||||
|
BEFORE_SECURITY_CHECKS,
|
||||||
|
AFTER_ALL_VALIDATIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -62,6 +77,16 @@ public abstract class AbstractPreInsertCustomizer
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
public WhenToRun getWhenToRun()
|
||||||
|
{
|
||||||
|
return (WhenToRun.AFTER_ALL_VALIDATIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
** Getter for insertInput
|
** Getter for insertInput
|
||||||
**
|
**
|
||||||
|
@ -193,25 +193,48 @@ public class InsertAction extends AbstractQActionFunction<InsertInput, InsertOut
|
|||||||
{
|
{
|
||||||
QTableMetaData table = insertInput.getTable();
|
QTableMetaData table = insertInput.getTable();
|
||||||
|
|
||||||
ValueBehaviorApplier.applyFieldBehaviors(insertInput.getInstance(), table, insertInput.getRecords());
|
///////////////////////////////////////////////////////////////////
|
||||||
setErrorsIfUniqueKeyErrors(insertInput, table);
|
// load the pre-insert customizer and set it up, if there is one //
|
||||||
|
// then we'll run it based on its WhenToRun value //
|
||||||
if(insertInput.getInputSource().shouldValidateRequiredFields())
|
///////////////////////////////////////////////////////////////////
|
||||||
{
|
|
||||||
validateRequiredFields(insertInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
ValidateRecordSecurityLockHelper.validateSecurityFields(insertInput.getTable(), insertInput.getRecords(), ValidateRecordSecurityLockHelper.Action.INSERT);
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// after all validations, run the pre-insert customizer, if there is one //
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
Optional<AbstractPreInsertCustomizer> preInsertCustomizer = QCodeLoader.getTableCustomizer(AbstractPreInsertCustomizer.class, table, TableCustomizers.PRE_INSERT_RECORD.getRole());
|
Optional<AbstractPreInsertCustomizer> preInsertCustomizer = QCodeLoader.getTableCustomizer(AbstractPreInsertCustomizer.class, table, TableCustomizers.PRE_INSERT_RECORD.getRole());
|
||||||
if(preInsertCustomizer.isPresent())
|
if(preInsertCustomizer.isPresent())
|
||||||
{
|
{
|
||||||
preInsertCustomizer.get().setInsertInput(insertInput);
|
preInsertCustomizer.get().setInsertInput(insertInput);
|
||||||
preInsertCustomizer.get().setIsPreview(isPreview);
|
preInsertCustomizer.get().setIsPreview(isPreview);
|
||||||
insertInput.setRecords(preInsertCustomizer.get().apply(insertInput.getRecords()));
|
runPreInsertCustomizerIfItIsTime(insertInput, preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun.BEFORE_ALL_VALIDATIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
ValueBehaviorApplier.applyFieldBehaviors(insertInput.getInstance(), table, insertInput.getRecords());
|
||||||
|
|
||||||
|
runPreInsertCustomizerIfItIsTime(insertInput, preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun.BEFORE_UNIQUE_KEY_CHECKS);
|
||||||
|
setErrorsIfUniqueKeyErrors(insertInput, table);
|
||||||
|
|
||||||
|
runPreInsertCustomizerIfItIsTime(insertInput, preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun.BEFORE_REQUIRED_FIELD_CHECKS);
|
||||||
|
if(insertInput.getInputSource().shouldValidateRequiredFields())
|
||||||
|
{
|
||||||
|
validateRequiredFields(insertInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
runPreInsertCustomizerIfItIsTime(insertInput, preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun.BEFORE_SECURITY_CHECKS);
|
||||||
|
ValidateRecordSecurityLockHelper.validateSecurityFields(insertInput.getTable(), insertInput.getRecords(), ValidateRecordSecurityLockHelper.Action.INSERT);
|
||||||
|
|
||||||
|
runPreInsertCustomizerIfItIsTime(insertInput, preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun.AFTER_ALL_VALIDATIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
**
|
||||||
|
*******************************************************************************/
|
||||||
|
private void runPreInsertCustomizerIfItIsTime(InsertInput insertInput, Optional<AbstractPreInsertCustomizer> preInsertCustomizer, AbstractPreInsertCustomizer.WhenToRun whenToRun) throws QException
|
||||||
|
{
|
||||||
|
if(preInsertCustomizer.isPresent())
|
||||||
|
{
|
||||||
|
if(whenToRun.equals(preInsertCustomizer.get().getWhenToRun()))
|
||||||
|
{
|
||||||
|
insertInput.setRecords(preInsertCustomizer.get().apply(insertInput.getRecords()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user