public void updateUserProblem(Submission submission) {
		long userId = submission.getUserId();
		long problemId = submission.getProblemId();
        if (userId == 0 || problemId==0){
            throw new IllegalArgumentException("user_id=["+userId+"], problem_id=["+problemId+"]. They cannot be 0.");
        }
		int userProblemStatus = submission.isEvaluationCorrect() ? UserProblem.STATUS_CORRECT
				: UserProblem.STATUS_TRIED;

		if (logger.isDebugEnabled()) {
			logger.debug("Atualizando user_problem. userId["+userId+"], problemId["+problemId+"], submissionStatus["+userProblemStatus+"].");
		}

		// Verifica se o problema já existe
		UserProblem userProblem = getByUserAndProblemId(userId, problemId);
		if (userProblem == null) {
			createUserProblem(userId, problemId, userProblemStatus);
		} else {
            if (logger.isDebugEnabled()){
                logger.debug("Já existe um user problem");
            }
			// Só precisa atualizar se até aquele momento o usuário não acertou
			// o problema
			// e se a submissão atual está correta.
			if (userProblem.getStatus() == UserProblem.STATUS_TRIED
					&& userProblemStatus == UserProblem.STATUS_CORRECT) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Saiu de TENTADO para correto.");
                }
				setStatusAsCorrect(userProblem);
			}
		}

	}