public List<DBObject> getHistory(String id) {
		System.out.println("====READING HISTORY: " + id + "====");
		String urlStr = Const.bugHistoryUrl("" + id);
		String source = null;

		int tryTimes = 3;
		while (tryTimes > 0) {
			try {
				SourceCodeHelper sch = new SourceCodeHelper(urlStr);
				source = sch.getSourceCode(Const.DEFAULT_CHARSET);

				if (source != null && !source.contains("InvalidBugId")) {
					source = source.replace("urlbase", " urlbase").replace(
							"maintainer", " maintainer");

					System.out.print("FILTER SOURCECODE...");
					List<DBObject> history = filterHistory(source);
					System.out.println("OK");

					tryTimes = 0;

					return history;
				} else {
					System.out.println("CAN NOT READ SOURCECODE!");
					System.out.println("TRY AGAIN: " + tryTimes);
					tryTimes--;
				}
			} catch (Exception e) {
				System.out.println("ERROR: " + e.getMessage());
				System.out.println("TRY AGAIN: " + tryTimes);
				tryTimes--;
				continue;
			}
		}
		return null;
	}