@Execute(validator = false, urlPattern = "{password}")
	public String index() throws Exception {

		if (DigestUtils.md5Hex("admin" + ConditionDto.SALT).substring(0, 4).equals(adminForm.password) == false) {
			return "/error.jsp";
		}

		Map<String, UserForResult> resultMap = new HashMap<String, UserForResult>();
		for (String key : conditionDto.userMap.keySet()) {
			UserForResult user = new UserForResult();
			user.id = key;
			user.name = conditionDto.userMap.get(key);
			resultMap.put(key, user);
		}

		// すべての回答を集計する
		for (Question q : conditionDto.questions) {
			for (String s : q.answers.keySet()) {
				Answer a = q.answers.get(s);
				UserForResult user = resultMap.get(a.userId);
				if (user == null) continue;
				user.score += a.score;
				user.elapsedTime.add(a.elapsedTime);
			}
		}
		// 平均時間を計算して、Map を List に詰め直す。
		result = new ArrayList<UserForResult>();
		for (UserForResult user : resultMap.values()) {
			long allTime = 0;
			for (Long t : user.elapsedTime) {
				allTime += t;
			}
			if (user.elapsedTime.size() == 0) {
				// 全く無回答のユーザは、平均時間を9999秒とする。
				user.avgTime = 9999;
			} else {
				user.avgTime = allTime / user.elapsedTime.size();
			}
			result.add(user);
		}
		// ソート
		Collections.sort(result);
		return "/admin_result.jsp";
	}