/**
  * prepares the model for template generation
  *
  * @param resources
  */
 protected void preprocess(List<Resource> resources) {
   for (Resource resource : resources) {
     for (Model model : resource.getModels()) {
       //	apply keyword mapping
       for (ModelField modelField : model.getFields()) {
         modelField.setName(reservedWordMapper.translate(modelField.getName()));
       }
     }
   }
 }
  /** Generates model classes. If the class is already generated then ignores the same. */
  private void generateModelClasses(List<Resource> resources, StringTemplateGroup templateGroup) {
    List<String> generatedClassNames = new ArrayList();

    for (Resource resource : resources) {
      for (Model model : resource.getModels()) {
        if (!generatedClassNames.contains(model.getName())
            && !this.getCodeGenRulesProvider().isModelIgnored(model.getName())) {
          List<String> imports = new ArrayList<String>();
          imports.addAll(this.config.getDefaultModelImports());
          for (ModelField param : model.getFields()) {
            for (String importDef :
                param
                    .getFieldDefinition(this.getDataTypeMappingProvider(), config, nameGenerator)
                    .getImportDefinitions()) {
              if (!imports.contains(importDef)) {
                imports.add(importDef);
              }
            }
          }
          StringTemplate template = templateGroup.getInstanceOf(MODEL_OBJECT_TEMPLATE);
          template.setAttribute("model", model);
          template.setAttribute("fields", model.getFields());
          template.setAttribute("imports", imports);
          template.setAttribute("annotationPackageName", languageConfig.getAnnotationPackageName());
          template.setAttribute("extends", config.getDefaultModelBaseClass());
          template.setAttribute("className", model.getGenratedClassName());
          template.setAttribute(PACKAGE_NAME, config.getModelPackageName());
          File aFile =
              new File(
                  languageConfig.getModelClassLocation()
                      + model.getGenratedClassName()
                      + languageConfig.getClassFileExtension());
          writeFile(aFile, template.toString(), "Model class");
          generatedClassNames.add(model.getName());
        }
      }
    }

    generateWrapperClassForTestData(generatedClassNames, templateGroup);
  }