@Override
  public BaseEntity restore(final BaseEntity model) throws ServiceException, LogicException {
    CatalogoServicoDTO catalogoServicoDto = null;
    final CatalogoServicoDao dao = this.getDao();
    try {
      catalogoServicoDto = (CatalogoServicoDTO) dao.restore(model);
      final ServContratoCatalogoServDTO servContratoCatalogoServDTO =
          new ServContratoCatalogoServDTO();
      // SERVCONTRATOCATALOGOSERVICO
      servContratoCatalogoServDTO.setIdCatalogoServico(catalogoServicoDto.getIdCatalogoServico());
      catalogoServicoDto.setColServicoContrato(
          new ArrayList(
              this.getServContratoCatalogoServDao().findByIdCatalogo(servContratoCatalogoServDTO)));

      final InfoCatalogoServicoDTO infoCatalogoServicoDTO = new InfoCatalogoServicoDTO();
      infoCatalogoServicoDTO.setIdCatalogoServico(catalogoServicoDto.getIdCatalogoServico());
      catalogoServicoDto.setColInfoCatalogoServico(
          new ArrayList(
              this.getInfoCatalogoServicoDao().findByIdInfoCatalogo(infoCatalogoServicoDTO)));
    } catch (final Exception e) {
      e.printStackTrace();
      throw new ServiceException(e);
    }
    return catalogoServicoDto;
  }
  @Override
  public BaseEntity create(final BaseEntity model) throws ServiceException, LogicException {
    CatalogoServicoDTO catalogoServicoDto = (CatalogoServicoDTO) model;
    final CatalogoServicoDao catalogoServicodao = this.getDao();

    final ServContratoCatalogoServDao servContratoCatalogoServDao =
        new ServContratoCatalogoServDao();
    final InfoCatalogoServicoDao infoCatalogoServicoDao = new InfoCatalogoServicoDao();

    final TransactionControler tc = new TransactionControlerImpl(catalogoServicodao.getAliasDB());

    try {
      this.validaCreate(model);
      catalogoServicodao.setTransactionControler(tc);
      infoCatalogoServicoDao.setTransactionControler(tc);
      servContratoCatalogoServDao.setTransactionControler(tc);

      tc.start();

      catalogoServicoDto = (CatalogoServicoDTO) catalogoServicodao.create(model);

      if (catalogoServicoDto.getColServicoContrato() != null
          && !catalogoServicoDto.getColServicoContrato().isEmpty()) {
        ServContratoCatalogoServDTO item = null;
        // varre a lista de serviços
        for (int i = 0; i < catalogoServicoDto.getColServicoContrato().size(); i++) {
          item = catalogoServicoDto.getColServicoContrato().get(i);
          item.setIdCatalogoServico(catalogoServicoDto.getIdCatalogoServico());

          // grava cada item da lista
          servContratoCatalogoServDao.create(item);
        }
      }

      if (catalogoServicoDto.getColInfoCatalogoServico() != null
          && !catalogoServicoDto.getColInfoCatalogoServico().isEmpty()) {
        InfoCatalogoServicoDTO item = null;
        // varre a lista de serviços
        for (int i = 0; i < catalogoServicoDto.getColInfoCatalogoServico().size(); i++) {
          item = catalogoServicoDto.getColInfoCatalogoServico().get(i);
          if (catalogoServicoDto.getIdCatalogoServico() != null) {
            item.setIdCatalogoServico(catalogoServicoDto.getIdCatalogoServico());
          }
          if (catalogoServicoDto.getNomeInfoCatalogoServico() != null) {
            item.setNomeInfoCatalogoServico(catalogoServicoDto.getNomeInfoCatalogoServico());
          }
          if (catalogoServicoDto.getDescInfoCatalogoServico() != null) {
            item.setDescInfoCatalogoServico(catalogoServicoDto.getDescInfoCatalogoServico());
          }
          // grava cada item da lista
          if (item.getIdInfoCatalogoServico() == null) {
            infoCatalogoServicoDao.create(item);
          } else {
            infoCatalogoServicoDao.update(item);
          }
        }
      }

      tc.commit();
    } catch (final Exception e) {
      e.printStackTrace();
      this.rollbackTransaction(tc, e);
    } finally {
      try {
        tc.close();
      } catch (final Exception e) {
        e.printStackTrace();
      }
    }

    return catalogoServicoDto;
  }