public TaskTransfer(Config config, Model model, File fsrc, File ftarget, FileFilter fileFilter) {
   this.model = model;
   this.config = config;
   this.tables = model.getTables();
   this.fsrc = fsrc.getAbsolutePath();
   this.ftarget = ftarget.getAbsolutePath();
   this.packagepath = model.getPackageName().replace(".", File.separatorChar + "");
   this.tasks = new TaskLoader(fsrc, ftarget, fileFilter).loadTask();
   this.putTask(tasks);
 }
  public String doTask() throws IOException, TemplateException {
    Task task = tasks.get(itask++);
    String path = task.getFile().getAbsolutePath();
    path = path.replace(fsrc, ftarget);
    path = path.replace("${packageName}", packagepath);
    File outfile = new File(path);

    StringBuilder log = new StringBuilder(path + "\r\n");
    if (task.getFile().getName().endsWith(".ftl")) {
      Template template = getTemplate(task.getFile());
      for (Table table : tables) {
        String outpath =
            outfile
                .getAbsolutePath()
                .replace(".ftl", "")
                .replace("${className}", table.getClassName());
        log.append("  =>>");
        log.append(outpath);
        log.append("\r\n");
        Writer out = getFileWriter(new File(outpath));
        model.bindTable(table);
        template.process(model, out);
        out.close();
      }
    } else if (FileUtil.isTextFile(task.getFile())) {
      log.append("  =>>");
      log.append(outfile.getAbsolutePath());
      log.append("\r\n");
      Template template = getTemplate(task.getFile());
      Writer out = getFileWriter(outfile);
      template.process(model, out);
      out.close();
    } else {
      log.append("  =>>");
      log.append(outfile.getAbsolutePath());
      log.append("\r\n");
      FileInputStream inputStream = new FileInputStream(task.getFile());
      FileOutputStream outputStream = new FileOutputStream(outfile);
      byte[] bytes = new byte[inputStream.available()];
      inputStream.read(bytes);
      outputStream.write(bytes);
      outputStream.close();
      inputStream.close();
      System.gc();
    }
    return log.toString();
  }