[Demonstration 1]

[Buggy Method]
@Test
public void testVotes() {
    try {
        // create space, question, relation
        String testSpaceId = createAndFetchTestSpace().getSpaceId();
        String questionId1 = createTestQuestion(testSpaceId);
        String questionId2 = createTestQuestion(testSpaceId);
        String relationId = createTestQuestionRelation(testSpaceId, questionId1, questionId2).get(0).getRelationId();
        // test get votes for all resources
        VoteList question1Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(0, question1Votes.size());
        VoteList question2Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(0, question2Votes.size());
        VoteList relationVotes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(0, relationVotes.size());
        // vote for each with one agent
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier(), basicAuthHeader, 3);
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier(), basicAuthHeader, 3);
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier(), basicAuthHeader, 3);
        // check my votes for each resource
        Vote question1AgentVote = getAgentVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier());
        Assert.assertEquals(3, question1AgentVote.getValue());
        Vote question2AgentVote = getAgentVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier());
        Assert.assertEquals(3, question2AgentVote.getValue());
        Vote relationAgentVote = getAgentVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent.getIdentifier());
        Assert.assertEquals(3, relationAgentVote.getValue());
        // test get votes for all resources
        question1Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(1, question1Votes.size());
        Assert.assertEquals(1, question1Votes.get(0).getValue());
        question2Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(1, question2Votes.size());
        Assert.assertEquals(1, question2Votes.get(0).getValue());
        relationVotes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(1, relationVotes.size());
        Assert.assertEquals(1, relationVotes.get(0).getValue());
        // (down-)vote for each with another agent and check all votes
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent2.getIdentifier(), basicAuthHeader2, -5);
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent2.getIdentifier(), basicAuthHeader2, -5);
        setVote("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME + "/" + testAgent2.getIdentifier(), basicAuthHeader2, -5);
        // test get votes for all resources
        question1Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId1 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(2, question1Votes.size());
        Assert.assertEquals(1, question1Votes.get(0).getValue());
        Assert.assertEquals(-1, question1Votes.get(1).getValue());
        question2Votes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionsResource.RESOURCE_NAME + "/" + questionId2 + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(2, question2Votes.size());
        Assert.assertEquals(1, question2Votes.get(0).getValue());
        Assert.assertEquals(-1, question2Votes.get(1).getValue());
        relationVotes = getVotes("/" + SpacesResource.RESOURCE_NAME + "/" + testSpaceId + "/" + QuestionRelationsResource.RESOURCE_NAME + "/" + relationId + "/" + QuestionVotesResource.RESOURCE_NAME);
        Assert.assertEquals(2, relationVotes.size());
        Assert.assertEquals(1, relationVotes.get(0).getValue());
        Assert.assertEquals(-1, relationVotes.get(1).getValue());
    } catch (Exception e) {
        e.printStackTrace();
        Assert.fail(e.toString());
    }
}

[Buggy Hunk]
String relationId = createTestQuestionRelation(testSpaceId, questionId1, questionId2).get(0)

[Patch]
String relationId = createTestQuestionRelation(testSpaceId, questionId1, questionId2)

[Demonstration 2]

[Buggy Method]
@Override
public Timestamp get(ResultSet resultSet, int columnIndex) throws SQLException {
    Timestamp value = resultSet.getTimestamp(columnIndex, CALENDAR);
    if (resultSet.wasNull()) {
        return null;
    }
    return value;
}

[Buggy Hunk]
Timestamp value = resultSet.getTimestamp(columnIndex, CALENDAR);

[Patch]
Timestamp value = resultSet.getTimestamp(columnIndex);

[Demonstration 3]

[Buggy Method]
public static Entity createWeatherIconTable(Schema schema) {
    //table name
    Entity weather_icon_entity = schema.addEntity("WeatherIconTable");
    //add pk
    //this will be an incrementing row number to give unique row access
    //this is the auto-increment feature seen in other databases.
    weather_icon_entity.addIdProperty().primaryKey().autoincrement().notNull();
    //add non pk fields
    //searching will be done using this property.
    weather_icon_entity.addStringProperty("icon_id").unique().notNull();
    weather_icon_entity.addStringProperty("icon_url").notNull();
    weather_icon_entity.addStringProperty("image_path").notNull();
    //this is kept here in case we want to store the raw image as a blob
    weather_icon_entity.addByteArrayProperty("image_raw");
    return weather_icon_entity;
}

[Buggy Hunk]
weather_icon_entity.addIdProperty().primaryKey().autoincrement().notNull();

[Patch]
weather_icon_entity.addIdProperty().autoincrement().primaryKey();