@Override
  public Object run(ExtratoAnalyseSwitches switches) throws ExtratoAnalyseException {
    checkParamValid(switches);

    manualRefList = makeManualRefList(switches);

    banco = getConta(switches.getNomeBanco());

    List<Lancamento> lancamentoSemExtratoList = getLancamentoSemExtratoList();

    List<ExtratoLancamento> extratoLancamentoOrfao = getExtratoLancamentoOrfao(banco);

    if (extratoLancamentoOrfao.size() == 0) {
      System.out.println();
      System.out.println(
          "Nenhum item de extrato órfão encontrado para o banco \"" + banco.getNome() + "\".");

      return null;
    }

    TextGrid grid = createGrid();
    List<ExtratoLineAnalyseResult> statuses;

    try {
      statuses = makeSync(lancamentoSemExtratoList, extratoLancamentoOrfao, switches);
    } catch (ExtratoLineParserException e) {
      throw new ExtratoAnalyseException(e);
    }

    grid.setValues(statuses);

    try {
      grid.show();
    } catch (TextGridException e) {
      throw new ExtratoAnalyseException(e);
    }

    System.out.println();
    System.out.println("Legenda:");
    System.out.println("  - : Não se aplica.");
    System.out.println("  U : Update.");
    System.out.println("  * : Insert.");
    System.out.println("  X : Delete.");
    System.out.println("  ! : Conta não encontrada.");

    return null;
  }
 private void checkParamValid(ExtratoAnalyseSwitches switches) throws ExtratoAnalyseException {
   if (switches.getNomeBanco() == null) {
     throw new ExtratoAnalyseException("Nome do banco deve ser informado.");
   }
 }