Java tutorial
/* * 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 java.io.PrintWriter; import org.apache.commons.cli.CommandLine; public class AssignQualification extends AbstractCmd { private final String ARG_QUALTYPE = "qualtypeid"; private final String ARG_WORKERID = "workerid"; private final String ARG_INPUT_FILE = "input"; private final String ARG_SCORE_FILE = "scorefile"; private final String ARG_SCORE = "score"; private final String ARG_DONOT_NOTIFY = "donotnotify"; public static void main(String[] args) { AssignQualification aq = new AssignQualification(); aq.run(args); } protected void initOptions() { opt.addOption(ARG_QUALTYPE, true, "Id of the Qualification Type to be assigned"); opt.addOption(ARG_INPUT_FILE, true, "File containing the Qualification Type to be assigned"); opt.addOption(ARG_WORKERID, true, "Id of the Worker to receive the Qualification"); opt.addOption(ARG_SCORE_FILE, true, "File containing list of workers to be assigned the Qualification." + " (the columns must be titled " + ARG_WORKERID + " and " + ARG_SCORE + " )"); opt.addOption(ARG_SCORE, true, "(optional) Integer value for the Qualification"); opt.addOption(ARG_DONOT_NOTIFY, false, "(optional) Flag indicating not to send notification to worker."); } protected void printHelp() { log.info(AssignQualification.class.getName() + " -" + ARG_QUALTYPE + " [qual to grant] " + " -" + ARG_WORKERID + " [worker to be granted]" + " -" + ARG_SCORE + " [value to grant]"); log.info("Or"); log.info(AssignQualification.class.getName() + " -" + ARG_INPUT_FILE + " [ input file containing Qualification Type] " + " -" + ARG_SCORE_FILE + " [ score file ] " + " -" + ARG_SCORE + " [value to grant]"); PrintWriter pw = new PrintWriter(System.out); formatter.printOptions(pw, formatter.defaultWidth, opt, formatter.defaultLeftPad, formatter.defaultDescPad); pw.flush(); } protected void runCommand(CommandLine cmdLine) throws Exception { if (!cmdLine.hasOption(ARG_QUALTYPE) && !cmdLine.hasOption(ARG_INPUT_FILE)) { log.error("Either -" + ARG_QUALTYPE + " or -" + ARG_INPUT_FILE + " must be passed"); System.exit(-1); } if (!cmdLine.hasOption(ARG_SCORE_FILE)) { if (!cmdLine.hasOption(ARG_WORKERID)) { log.error("Either -" + ARG_WORKERID + " or -" + ARG_SCORE_FILE + " should be passed"); System.exit(-1); } } String[] qualIds = null; if (cmdLine.hasOption(ARG_QUALTYPE)) { qualIds = new String[1]; qualIds[0] = cmdLine.getOptionValue(ARG_QUALTYPE); } else { qualIds = super.getFieldValuesFromFile(cmdLine.getOptionValue(ARG_INPUT_FILE), ARG_QUALTYPE); if (qualIds.length == 0) { log.error("qualtypeid must be present in the -" + ARG_INPUT_FILE + " file"); System.exit(-1); } } String strValue = cmdLine.hasOption(ARG_SCORE) ? cmdLine.getOptionValue(ARG_SCORE) : null; if (cmdLine.hasOption(ARG_SCORE_FILE)) { assignQualification(qualIds, cmdLine.getOptionValue(ARG_SCORE_FILE), cmdLine.hasOption(ARG_DONOT_NOTIFY), strValue); } else { String workerId = cmdLine.getOptionValue(ARG_WORKERID); Boolean notify = !cmdLine.hasOption(ARG_DONOT_NOTIFY); assignQualification(qualIds, workerId, strValue, notify); } } public void assignQualification(String[] qualIds, String workerFile, Boolean notify, String argScore) throws IOException { String[] workers = super.getFieldValuesFromFile(workerFile, ARG_WORKERID); String[] scores = super.getFieldValuesFromFile(workerFile, ARG_SCORE); for (int i = 0; i < workers.length; i++) { String workerScore = (scores.length < 1) ? argScore : scores[i]; assignQualification(qualIds, workers[i], workerScore, notify); } } public void assignQualification(String[] qualIds, String workerId, String score, Boolean notify) { Integer value = null; if (score != null) { try { // Verify that strValue is an integer and not something else value = Integer.valueOf(score); } catch (NumberFormatException e) { log.error("Invalid format for -" + ARG_SCORE + " : " + score); System.exit(-1); } } for (String qualId : qualIds) { service.assignQualification(qualId, workerId, value, notify); String workerScore = value != null ? " with value " + value.toString() : " with default value"; log.info("Assigned qualification " + qualId + " to " + workerId + workerScore); } } }