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

Java tutorial

Introduction

Here is the source code for com.amazonaws.mturk.cmd.ExtendHITs.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 org.apache.commons.cli.CommandLine;

import com.amazonaws.mturk.addon.BatchItemCallback;
import com.amazonaws.mturk.addon.HITProperties;

public class ExtendHITs extends AbstractCmd implements BatchItemCallback {

    private static final String ARG_SUCCESSFILE = "successfile";
    private static final String ARG_ASSIGNMENTS = "assignments";
    private static final String ARG_HOURS = "hours";

    String[] hitsToExtend = null;
    private int successCount = 0;
    private int failedCount = 0;
    private int runningCount = 0;

    public ExtendHITs() {
    }

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

    protected void initOptions() {
        opt.addOption(ARG_SUCCESSFILE, true,
                "(required) A path to the success file returned by the call to LoadHITs");
        opt.addOption(ARG_ASSIGNMENTS, true, "(optional) The number of assignments to add to the HITs");
        opt.addOption(ARG_HOURS, true,
                "(optional) The amount of time to extend the expiration date of the HITs, in hours");
    }

    protected void printHelp() {
        formatter.printHelp(ExtendHITs.class.getName() + " -" + ARG_SUCCESSFILE + " [path to success file]" + " -"
                + ARG_ASSIGNMENTS + " [assignments to add]" + " -" + ARG_HOURS
                + " [time in hours to extend the expiration date]", opt);
    }

    private Integer parseInt(CommandLine cmdLine, String option) {
        Integer ret = null;
        if (cmdLine.hasOption(option)) {
            try {
                int num = Integer.parseInt(cmdLine.getOptionValue(option));

                if (num <= 0) {
                    log.fatal("Invalid value for option -" + option + ": Please specify a value greater than 0.");
                    System.exit(-1);
                }
                ret = new Integer(num);
            } catch (NumberFormatException e) {
                log.fatal("Invalid value for option -" + option + ": Please specify a valid number value.");
                System.exit(-1);
            }
        }

        return ret;
    }

    protected void runCommand(CommandLine cmdLine) throws Exception {
        if (!cmdLine.hasOption(ARG_SUCCESSFILE)) {
            log.error("Missing: -" + ARG_SUCCESSFILE + " [path to success file]");
            System.exit(-1);
        }

        if (!cmdLine.hasOption(ARG_ASSIGNMENTS) && !cmdLine.hasOption(ARG_HOURS)) {
            log.error("Missing parameters: Please specify an option for either -" + ARG_ASSIGNMENTS + " or -"
                    + ARG_HOURS);
            System.exit(-1);
        }

        Integer assignments = parseInt(cmdLine, ARG_ASSIGNMENTS);
        Integer hours = parseInt(cmdLine, ARG_HOURS);

        Long seconds = null;
        if (hours != null) {
            seconds = hours.longValue() * 3600;
        }

        log.info("--- Starting to extend HITs ---");

        extendHITs(cmdLine.getOptionValue(ARG_SUCCESSFILE), assignments, seconds);

        // print summary
        log.info("--- Finished to extend HITs ---");
        log.info(String.format("  %d HITs have been extended (added %d assignment(s), %d hour(s))", successCount,
                (assignments == null) ? 0 : assignments, (hours == null) ? 0 : hours));
        log.info(String.format("  %d HITs failed to be extended.", failedCount));
    }

    public void extendHITs(String successFile, Integer assignments, Long seconds) throws Exception {

        hitsToExtend = super.getFieldValuesFromFile(successFile, HITProperties.HITField.HitId.getFieldName());

        if (hitsToExtend != null) {
            service.extendHITs(hitsToExtend, assignments, seconds, this);
        }
    }

    public void processItemResult(Object itemId, boolean succeeded, Object result, Exception itemException) {
        runningCount++;
        if (succeeded) {
            successCount++;
            log.info(String.format("[%s] Successfully extended HIT (%d/%d)", itemId, runningCount,
                    hitsToExtend.length));
        } else {
            failedCount++;
            log.error(String.format("[%s] Failed to extend HIT: %s (%d/%d)", itemId,
                    itemException.getLocalizedMessage(), runningCount, hitsToExtend.length), itemException);
        }
    }
}