[Demonstration 1]

[Buggy Method]
@POST
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public Response createUserProjects(@PathParam("userid") String p_userid, @FormParam("title") String p_title, @FormParam("creator[userid]") String p_creator, @FormParam("advisor[userid]") String p_advisor) throws Exception {
    //每次请求都需要校验token的合法性；
    String token = (String) request.getSession().getAttribute("token");
    if (!validateToken(p_userid, token)) {
        return buildResponse(TOKEN_INVALID, null);
    }
    //check param
    if ((p_userid == null || p_userid.equals("")) || (p_title == null || p_title.equals("")) || (p_creator == null || p_creator.equals("")) || (p_advisor == null || p_advisor.equals(""))) {
        return buildResponse(PARAMETER_INVALID, null);
    }
    //1. create project
    String sql = "insert into " + "	ideaworks.project (" + "		title, " + "		creator, " + "		advisor, " + "		abstract, " + "		security, " + "		logo, " + "		createtime, " + "		modifytime " + "	) values ( ?, ?, ?, ?, ?, ?, ?, ? )";
    PreparedStatement stmt = DBUtil.getInstance().createSqlStatement(sql, p_title, p_creator, p_advisor, "", 510, "default_prj_logo.jpg", new Date(), new Date());
    stmt.execute();
    DBUtil.getInstance().closeStatementResource(stmt);
    //2. 返回最新的project id
    int projectid = 0;
    sql = "select id from ideaworks.project order by id desc limit 1";
    stmt = DBUtil.getInstance().createSqlStatement(sql);
    ResultSet rs_stmt = stmt.executeQuery();
    while (rs_stmt.next()) {
        projectid = rs_stmt.getInt("id");
    }
    DBUtil.getInstance().closeStatementResource(stmt);
    //2. add related members
    sql = "insert into " + "	ideaworks.project_member (" + "		projectid, " + "		userid, " + "		jointime " + "	) values ( ?, ?, ?)";
    stmt = DBUtil.getInstance().createSqlStatement(sql, projectid, p_creator, new Date());
    stmt.execute();
    //若advisor与creator不同，则再插入advisor
    if (!p_advisor.equals(p_creator)) {
        stmt = DBUtil.getInstance().createSqlStatement(sql, projectid, p_advisor, new Date());
        stmt.execute();
    }
    DBUtil.getInstance().closeStatementResource(stmt);
    //3. 返回创建的project
    sql = "select " + "	T2.id, " + "	T2.title, " + "	T2.creator, " + "	T4.nickname as creatorNickname, " + "	T4.logo as creatorLogo, " + "	T2.advisor, " + "	T3.nickname as advisorNickname, " + "	T3.logo as advisorLogo, " + "	T2.abstract, " + "	T2.status, " + "	T2.security, " + "	T2.logo, " + "	T2.createtime, " + "	T2.modifytime " + "from " + "	ideaworks.project_member T1, " + "	ideaworks.project T2, " + "	ideaworks.user T3, " + "	ideaworks.user T4 " + "where " + "	T1.projectid = ? and " + "	T1.projectid = T2.id and " + "	T3.id = T2.advisor and " + "	T4.id = T2.creator and " + "	T2.isDeleted = 0";
    stmt = DBUtil.getInstance().createSqlStatement(sql, projectid);
    rs_stmt = stmt.executeQuery();
    JSONObject project = new JSONObject();
    while (rs_stmt.next()) {
        project.put("projectid", rs_stmt.getInt("id"));
        project.put("title", rs_stmt.getString("title"));
        JSONObject creator = new JSONObject();
        creator.put("userid", rs_stmt.getString("creator"));
        creator.put("nickname", rs_stmt.getString("creatorNickname"));
        creator.put("logo", Config.USER_IMG_BASE_DIR + rs_stmt.getString("creatorLogo"));
        project.put("creator", creator);
        JSONObject advisor = new JSONObject();
        advisor.put("userid", rs_stmt.getString("advisor"));
        advisor.put("nickname", rs_stmt.getString("advisorNickname"));
        advisor.put("logo", Config.USER_IMG_BASE_DIR + rs_stmt.getString("advisorLogo"));
        project.put("advisor", advisor);
        project.put("abstractContent", rs_stmt.getString("abstract"));
        project.put("status", rs_stmt.getInt("status"));
        project.put("security", rs_stmt.getInt("security"));
        project.put("logo", Config.PROJECT_IMG_BASE_DIR + rs_stmt.getString("logo"));
        project.put("createtime", rs_stmt.getTimestamp("createtime").getTime());
        project.put("modifytime", rs_stmt.getTimestamp("modifytime").getTime());
        project.put("isDeleted", 0);
    }
    DBUtil.getInstance().closeStatementResource(stmt);
    //record activity
    String msg = p_title;
    //param: projectid, operator, action, entity, title
    ProjectActivityService.recordActivity(projectid, p_userid, msg, ProjectActivityService.Action.CREATE, ProjectActivityService.Entity.PROJECT);
    return buildResponse(OK, project);
}

[Buggy Hunk]
p_title, p_creator, p_advisor, "", 510, "default_prj_logo.jpg", new Date(), new Date());

[Patch]
p_title, p_creator, p_advisor, "", 510, DEFAULT_PROJECT_LOGO, new Date(), new Date());

[Demonstration 2]

[Buggy Method]
@Transactional(readOnly = true)
public static Result view(Long id) {
    Media media = Media.findById(id);
    if (Secured.viewMedia(media)) {
        if (media == null) {
            return redirect(controllers.routes.Application.index());
        } else {
            Logger.info("File found, filename = " + media.fileName + " filetype = " + media.mimetype + " filepath = " + media.url);
            response().setHeader("Content-disposition", "inline; filename=\"" + media.fileName + "\"");
            return ok(media.file);
        }
    } else {
        flash("error", "Dazu hast du keine Berechtigung!");
        return redirect(controllers.routes.Application.index());
    }
}

[Buggy Hunk]
Logger.info("File found, filename = " + media.fileName + " filetype = " + media.mimetype + " filepath = " + media.url);

[Patch]
Logger.info("File found, filename = " + media.fileName + " filetype = " + media.mimetype + " filepath = " + media.url + " file = " + media.file);

[Demonstration 3]

[Buggy Method]
public Long getTotalSpentTimeForIssueByAllUsers(Long issueId) {
    Long totalSpentTime = new Long(0);
    List<WorkLog> workLogList = findByIssue(getCurrentIssue(issueId));
    for (WorkLog worklogIterator : workLogList) {
        totalSpentTime += worklogIterator.getAmountOfTime();
    }
    return totalSpentTime;
}

[Buggy Hunk]
public Long getTotalSpentTimeForIssueByAllUsers(Long issueId) {

[Patch]
private Long getTotalSpentTimeForIssueByAllUsers(Long issueId) {