createQuery static method
void
createQuery({
- required AFCommandContext context,
- required String querySuffix,
- required String queryType,
- required AFCommandArgumentsParsed args,
- required String usage,
- required String resultType,
- String? overrideParentType,
- AFSourceTemplate? overrideTemplate,
Implementation
static void createQuery({
required AFCommandContext context,
required String querySuffix,
required String queryType,
required AFCommandArgumentsParsed args,
required String usage,
required String resultType,
String? overrideParentType,
AFSourceTemplate? overrideTemplate,
}) {
final rootStateType = args.accessNamed(argRootStateType);
final memberVariables = context.memberVariables(context, args, queryType);
AFSourceTemplate queryTemplate = SimpleQueryT.core();
var queryParentType = "AFAsyncQuery";
final isListener = querySuffix == suffixListenerQuery;
final isDeferred = querySuffix == suffixDeferredQuery;
final isIsolate = querySuffix == suffixIsolateQuery;
if(!isDeferred && resultType.isEmpty) {
AFCommand.throwUsageErrorStatic("Please specify a result model type using --$argResultModelType", usage);
}
if(isListener) {
queryParentType = "AFAsyncListenerQuery";
} else if(isDeferred) {
queryTemplate = DeferredQueryT.core();
} else if(isIsolate) {
queryTemplate = IsolateQueryT.core();
}
AFSourceTemplate additionalMethods = AFSourceTemplate.empty;
if(isListener || isDeferred) {
additionalMethods = SnippetQueryShutdownMethodT();
}
final resultTypeCore = SimpleQueryT.findCoreResultType(resultType);
var queryInsertions = SimpleQueryT.augmentInsertions(
parent: context.coreInsertions,
queryType: queryType,
resultType: resultType,
resultTypeCore: resultTypeCore,
queryParentType: overrideParentType ?? queryParentType,
additionalMethods: additionalMethods,
memberVariables: memberVariables?.declareVariables ?? AFSourceTemplate.empty,
constructorParams: memberVariables?.constructorParamsBare ?? AFSourceTemplate.empty,
memberVariableImports: memberVariables?.extraImports(context) ?? AFSourceTemplate.empty,
);
// create a screen name
final generator = context.generator;
final queryPath = generator.pathQuery(queryType);
final queryFile = generator.createFile(context, queryPath, overrideTemplate ?? queryTemplate, insertions: queryInsertions);
// see if the state file exists
final stateFilePath = generator.pathRootState(rootStateType);
queryFile.importProjectPath(context, stateFilePath);
// if the result exists in the models area
if(resultType != "AFUnused") {
final modelFilePath = generator.pathModel(resultTypeCore);
if(modelFilePath != null) {
queryFile.importProjectPath(context, modelFilePath);
}
}
}