com.amazonaws.mturk.cmd.RejectWork.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.mturk.cmd.RejectWork.java

Source

/*
 * 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;

public class RejectWork extends AbstractCmd {

    private final static String DELIM_CHAR = ",";
    private final static String ASSIGNMENT_TO_REJECT_COLUMN = "assignmentIdToReject";
    private final static String ASSIGNMENT_TO_REJECT_COMMENT_COLUMN = "assignmentIdToRejectComment";

    private final String ARG_ASSIGNMENT = "assignment";
    private final String ARG_REJECTFILE = "rejectfile";
    private final String ARG_FORCE = "force";

    private int successCount = 0;
    private int failedCount = 0;
    private int runningCount = 0;

    public RejectWork() {
    }

    public static void main(String[] args) {
        RejectWork jtf = new RejectWork();
        jtf.run(args);
    }

    protected void initOptions() {
        opt.addOption(ARG_ASSIGNMENT, true,
                "The ID of the assignment to reject (separate multiple assignment IDs with a comma)");
        opt.addOption(ARG_REJECTFILE, true,
                "The name of the file that contains the assignment IDs to be rejected (the column must be titled '"
                        + ASSIGNMENT_TO_REJECT_COLUMN + "' and the comment column must be titled '"
                        + ASSIGNMENT_TO_REJECT_COMMENT_COLUMN + "')");
        opt.addOption(ARG_FORCE, false, "(optional) Do not prompt for confirmation (DANGEROUS)");
    }

    protected void printHelp() {
        formatter.printHelp(RejectWork.class.getName() + " -" + ARG_ASSIGNMENT + " | " + " -" + ARG_REJECTFILE
                + " [path to rejection file]}", opt);
    }

    protected void runCommand(CommandLine cmdLine) throws Exception {

        if (!cmdLine.hasOption(ARG_ASSIGNMENT) && !cmdLine.hasOption(ARG_REJECTFILE)) {

            log.error("Missing: you must supply one of -assignment or -rejectfile.");
            System.exit(-1);

        }

        setForce(cmdLine.hasOption(ARG_FORCE));
        if (cmdLine.hasOption(ARG_ASSIGNMENT)) {
            rejectAssignments(cmdLine.getOptionValue("assignment"));
        }

        if (cmdLine.hasOption(ARG_REJECTFILE)) {
            rejectAssignmentsInFile(cmdLine.getOptionValue("rejectfile"));
        }

        if (failedCount > 0) {
            System.exit(-1);
        }
    }

    public void rejectAssignmentsInFile(String fileName) throws IOException {
        if (fileName == null) {
            throw new IllegalArgumentException();
        }

        String[] assignments = super.getFieldValuesFromFile(fileName, ASSIGNMENT_TO_REJECT_COLUMN);

        String[] comments = super.getFieldValuesFromFile(fileName, ASSIGNMENT_TO_REJECT_COMMENT_COLUMN);

        rejectAssignments(assignments, comments);
    }

    public void rejectAssignments(String assignmentIds) {
        if (assignmentIds == null) {
            throw new IllegalArgumentException();
        }

        String[] assignments = assignmentIds.split(DELIM_CHAR);
        rejectAssignments(assignments);
    }

    private void rejectAssignments(String[] assignments) {
        rejectAssignments(assignments, null);
    }

    private void rejectAssignments(String[] assignments, String[] comments) {

        // If we're not given anything, just no-op
        if (assignments == null) {
            return;
        }

        checkIsUserCertain("You are about to reject " + assignments.length + " assignment(s).");
        String comment = null;

        if (comments == null) {
            comment = getComment();
        }

        for (int i = 0; assignments != null && i < assignments.length; i++) {
            runningCount++;
            try {
                if (comments != null)
                    comment = comments[i];

                service.rejectAssignment(assignments[i], comment);
                successCount++;
                log.info("[" + assignments[i] + "] Assignment successfully rejected "
                        + (comment != null ? " with comment (" + comment + ")" : ""));

            } catch (Exception e) {
                failedCount++;
                log.error("Error rejecting assignment " + assignments[i] + " with comment [" + comment + "]: "
                        + e.getLocalizedMessage(), e);
            }
        }
    }

}