@Override
	public void editar(Usuario usuario) throws PSTException {

		StringBuilder sqlUpdatePessoa = new StringBuilder();
		sqlUpdatePessoa.append("UPDATE PESSOA ");
		sqlUpdatePessoa
				.append("SET NOME = UPPER(?), CNPJ_CPF = ?, FLG_PESSOA = UPPER(?)");
		sqlUpdatePessoa.append("WHERE NRO = ? ");

		StringBuilder sqlUpdateUsuario = new StringBuilder();
		sqlUpdateUsuario.append("UPDATE S_USUARIO ");
		sqlUpdateUsuario
				.append("SET USUARIO = UPPER(?), SENHA = ?, OBS = ?, FLG_ADM = ?, FLG_ATIVO = ?, DATA_BAIXA = ?");
		sqlUpdateUsuario.append("WHERE NRO = ? ");

		Connection conexao = null;
		PreparedStatement comandoUpdatePessoa = null;
		PreparedStatement comandoUpdateUsuario = null;

		try {
			conexao = ConnectionFactory.getConnection();
			conexao.setAutoCommit(false);

			comandoUpdatePessoa = conexao.prepareStatement(sqlUpdatePessoa
					.toString());
			comandoUpdatePessoa.setString(1, usuario.getPessoa().getNome());
			comandoUpdatePessoa.setString(2,
					new Helper().aplicarMascara(usuario.getPessoa().getCpf()));
			comandoUpdatePessoa
					.setString(3, usuario.getPessoa().getFlgPessoa());
			comandoUpdatePessoa.setLong(4, usuario.getPessoa().getNro());

			comandoUpdatePessoa.executeUpdate();

			comandoUpdateUsuario = conexao.prepareStatement(sqlUpdateUsuario
					.toString());
			comandoUpdateUsuario.setString(1, usuario.getUsuario());
			comandoUpdateUsuario.setString(2, usuario.getSenha());
			comandoUpdateUsuario.setString(3, usuario.getObs());

			if (usuario.getFlgAdm()) {
				Usuario adm = buscaADM();
				if (adm == null) {
					comandoUpdateUsuario.setString(4, "S");
				} else {
					if (adm.getNro().equals(usuario.getNro())) {
						comandoUpdateUsuario.setString(4,
								usuario.getFlgAdm() ? "S" : "N");
					} else {
						throw new PSTException(
								"O sistema já possui um administrador, contate: "
										+ adm.getPessoa().getNome());
					}
				}
			} else {
				comandoUpdateUsuario.setString(4, "N");
			}

			comandoUpdateUsuario
					.setString(5, usuario.getFlgAtivo() ? "S" : "N");
			if (usuario.getDataBaixa() != null) {
				comandoUpdateUsuario.setDate(6, new java.sql.Date(
						((java.util.Date) usuario.getDataBaixa()).getTime()));
			} else {
				comandoUpdateUsuario.setDate(6, null);
			}

			comandoUpdateUsuario.setLong(7, usuario.getNro());

			comandoUpdateUsuario.executeUpdate();

			conexao.commit();

			logger.info("Usuário editado com sucesso");
		} catch (SQLException ex) {
			throw new PSTException(
					"Ocorreu um erro ao tentar editar um usuário "
							+ ex.getCause(), ex);
		} finally {
			PSTUtil.fechar(comandoUpdatePessoa);
			PSTUtil.fechar(comandoUpdateUsuario);
			PSTUtil.fechar(conexao);
		}

	}