createQuery static method

void createQuery({
  1. required AFCommandContext context,
  2. required String querySuffix,
  3. required String queryType,
  4. required AFCommandArgumentsParsed args,
  5. required String usage,
  6. required String resultType,
  7. String? overrideParentType,
  8. 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);
    }
  }
}