turk/src/com/amazonaws/mturk/cmd/ReviewResults.java
/*
* Copyright 2012 Amazon Technologies, Inc.
*
* Licensed under the Amazon Software License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://aws.amazon.com/asl
*
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and
* limitations under the License.
*/
package com.amazonaws.mturk.cmd;
import java.io.IOException;
import org.apache.commons.cli.CommandLine;
import com.amazonaws.mturk.addon.HITProperties;
import com.amazonaws.mturk.addon.HITResults;
public class ReviewResults extends AbstractCmd {
private final static String ASSIGNMENT_COLUMN =
HITProperties.AssignmentField.AssignmentId.getFieldName();
private final static String REJECT_COLUMN =
HITProperties.AssignmentField.RejectFlag.getFieldName();
private final static String DEFAULT_COMMENT = HITResults.EMPTY;
private final String ARG_RESULTS = "resultsfile";
private int approvedCount = 0;
private int rejectedCount = 0;
private int errorCount = 0;
private int runningCount = 0;
public ReviewResults () {}
public static void main(String[] args) {
ReviewResults jtf = new ReviewResults();
jtf.run(args);
}
protected void initOptions() {
opt.addOption(ARG_RESULTS, true,
"The name of the results file that contains the row entries for the "
+ REJECT_COLUMN + " column");
}
protected void printHelp() {
formatter.printHelp(ReviewResults.class.getName()
+ " -" + ARG_RESULTS + " [path to rejection file]}", opt);
}
protected void runCommand(CommandLine cmdLine) throws Exception {
if (!cmdLine.hasOption(ARG_RESULTS)) {
log.error("Missing: you must supply -" + ARG_RESULTS);
System.exit(-1);
}
if (cmdLine.hasOption(ARG_RESULTS)) {
reviewAssignments(cmdLine.getOptionValue(ARG_RESULTS));
}
if (errorCount > 0 ) {
System.exit(-1);
}
}
public void reviewAssignments(String fileName) throws IOException {
if (fileName == null) {
throw new IllegalArgumentException("File name is null.");
}
// all assignment IDs
String[] assignmentIds = super.getFieldValuesFromFile(fileName, ASSIGNMENT_COLUMN);
// all reject flags
String[] rejectFlags = super.getFieldValuesFromFile(fileName, REJECT_COLUMN);
boolean approveAll = false;
if (assignmentIds == null) {
throw new IllegalArgumentException("Could not find any assignmentIds. Does "
+ ASSIGNMENT_COLUMN + " column exist?");
} else if (rejectFlags == null) {
// If the reject column doesn't exist,
// approve all assignments upon confirmation
checkIsUserCertain("You are about to approve ALL assignments.");
approveAll = true;
} else if (rejectFlags.length != assignmentIds.length) {
throw new IllegalArgumentException();
}
for (int i=0; i<assignmentIds.length; i++) {
String assignmentId = assignmentIds[i];
if (assignmentId.equals(""))
continue; // no submitted assignment
try {
String opStr;
String rejectFlag = rejectFlags != null ? rejectFlags[i] : HITResults.EMPTY;
if (approveAll || rejectFlag.equals(HITResults.EMPTY)) {
// For each assignment that doesn't have the reject column marked,
// the system will approve the assignment.
service.approveAssignment(assignmentId, DEFAULT_COMMENT);
approvedCount++;
opStr = "approved";
} else {
// For each assignment that has the reject column marked,
// the system will reject the assignment.
service.rejectAssignment(assignmentId, DEFAULT_COMMENT);
rejectedCount++;
opStr = "rejected";
}
log.info("[" + assignmentId + "] Assignment successfully " + opStr);
} catch (Exception e) {
errorCount++;
log.error("Could not process assignment [" + assignmentId + "], "
+ e.getLocalizedMessage(), e);
}
runningCount++;
}
log.info("");
log.info(String.format("Assignments approved: %d/%d (%d%%)", approvedCount, runningCount, approvedCount*100/runningCount));
log.info(String.format("Assignments rejected: %d/%d (%d%%)", rejectedCount, runningCount, rejectedCount*100/runningCount));
log.info(String.format("Errors occurred: %d", errorCount));
}
}