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.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import org.apache.commons.cli.CommandLine; import com.amazonaws.mturk.addon.QAPValidator; import com.amazonaws.mturk.requester.QualificationType; import com.amazonaws.mturk.requester.QualificationTypeStatus; import com.amazonaws.mturk.service.exception.ObjectAlreadyExistsException; import com.amazonaws.mturk.service.exception.ParseErrorException; import com.amazonaws.mturk.service.exception.ValidationException; import com.amazonaws.mturk.util.FileUtil; public class CreateQualificationType extends AbstractCmd { private final String ARG_QUESTION = "question"; private final String ARG_PROPERTIES = "properties"; private final String ARG_ANSWER = "answer"; private final String QUALTYPE = "qualtypeid"; private final String ARG_NO_RETRY = "noretry"; public CreateQualificationType() { } public static void main(String[] args) { CreateQualificationType dh = new CreateQualificationType(); dh.run(args); } protected void initOptions() { opt.addOption(ARG_QUESTION, true, "(optional) Path to the file containing the question"); opt.addOption(ARG_PROPERTIES, true, "(required) Path to the file containing the properties for the qualification"); opt.addOption(ARG_ANSWER, true, "(optional) Path to the file containing the answers to the qual test. Omitting this makes it an untested qualification."); opt.addOption(ARG_NO_RETRY, false, "(optional) If you do not want the workers to retry the qualification "); } protected void printHelp() { formatter.printHelp(CreateQualificationType.class.getName() + " -" + ARG_QUESTION + " [path to question file] " + " -" + ARG_PROPERTIES + " [path to properties file] " + "(-" + ARG_ANSWER + " [path to answer file])", opt); } protected void runCommand(CommandLine cmdLine) throws Exception { if (!cmdLine.hasOption(ARG_PROPERTIES)) { log.error("Missing: -" + ARG_PROPERTIES + " [path to properties file]"); System.exit(-1); } boolean success = createQualificationType(cmdLine.getOptionValue(ARG_QUESTION), cmdLine.getOptionValue(ARG_ANSWER), cmdLine.getOptionValue(ARG_PROPERTIES), cmdLine.hasOption(ARG_NO_RETRY)); if (!success) { System.exit(-1); } } public boolean createQualificationType(String qualFile, String answerFile, String propertiesFile, boolean noRetry) { String test = null; String answerKey = null; Properties props = new Properties(); try { if (qualFile != null) { test = new FileUtil(qualFile).getString(); } props = super.loadProperties(propertiesFile); if (answerFile != null) { answerKey = (new FileUtil(answerFile)).getString(); } } catch (FileNotFoundException e) { log.error("Couldn't find one of the necessary files: " + e.getLocalizedMessage(), e); return false; } catch (IOException e) { log.error("Error reading one of the necessary files: " + e.getLocalizedMessage(), e); return false; } String autoGranted = props.getProperty("autogranted"); String autoGrantedValue = props.getProperty("autograntedvalue"); String testDuration = props.getProperty("testdurationinseconds", "10800"); //default to 3 hours Long retryDelay = noRetry ? null : Long.valueOf(props.getProperty("retrydelayinseconds", "259200")); // default to 3 days String qualName = props.getProperty("name"); if (qualName == null || qualName.trim().length() == 0) { log.error( "Cannot create qualification type. The qualification name is not set. Please enter a value in the 'name' field in the properties file (" + propertiesFile + ")"); return false; } try { // merge Velocity templates if any test = getMergedTemplate(qualFile); answerKey = getMergedTemplate(answerFile); QualificationType qualType = service.createQualificationType(qualName, props.getProperty("keywords"), props.getProperty("description"), QualificationTypeStatus.Active, retryDelay, // retryDelayInSeconds test, answerKey, test != null ? Long.valueOf(testDuration) : null, // testDurationInSeconds autoGranted != null ? Boolean.valueOf(autoGranted) : null, // autoGranted autoGrantedValue != null ? Integer.valueOf(autoGrantedValue) : null // autoGrantedValue ); if (qualType != null) { log.info("Created qualification type: " + qualType.getQualificationTypeId()); FileWriter writer = new FileWriter(propertiesFile + ".success"); try { writer.write(QUALTYPE + System.getProperty("line.separator")); writer.write(qualType.getQualificationTypeId() + System.getProperty("line.separator")); } finally { writer.close(); } log.info("You can take the test here: " + service.getWebsiteURL() + "/mturk/requestqualification?qualificationId=" + qualType.getQualificationTypeId()); return true; } } catch (ParseErrorException parseEx) { try { QAPValidator.validate(test); log.error("The qualification question is not valid: " + parseEx.getLocalizedMessage(), parseEx); } catch (ValidationException valEx) { log.error("The qualification question is not valid: " + valEx.getLocalizedMessage(), valEx); } catch (IOException ioEx) { log.error("The qualification question is not valid: " + parseEx.getLocalizedMessage(), ioEx); } } catch (ObjectAlreadyExistsException exitsEx) { log.error("The qualification type for name '" + qualName + "' already exists.\n"); return false; } catch (Exception e) { log.error("Error creating qualification type: " + e.getLocalizedMessage(), e); return false; } return false; } }