ArgsOptionParser

public class ArgsOptionParser
extends OptionSetter

java.lang.Object
com.android.tradefed.config.OptionSetter
     ↳ com.android.tradefed.config.ArgsOptionParser


ป้อนข้อมูลในช่อง Option จากอาร์กิวเมนต์บรรทัดคำสั่งที่แยกวิเคราะห์แล้ว

ระบบจะแยกวิเคราะห์สตริงใน String[] ที่ส่งเข้ามาจากซ้ายไปขวา สตริงแต่ละรายการจะจัดประเภทเป็นตัวเลือกแบบสั้น (เช่น "-v") ตัวเลือกแบบยาว (เช่น "--verbose") อาร์กิวเมนต์ของตัวเลือก (เช่น "out.txt" ใน "-f out.txt") หรืออาร์กิวเมนต์ตำแหน่งที่ไม่ใช่ตัวเลือก

อาร์กิวเมนต์ตัวเลือกแต่ละรายการต้องจับคู่กับฟิลด์ Option อย่างน้อย 1 ฟิลด์ ตัวเลือกแบบยาวจะแมปกับชื่อ Option และตัวเลือกแบบสั้นจะแมปกับชื่อย่อ Option ชื่อตัวเลือกและชื่อย่อของตัวเลือกแต่ละรายการต้องไม่ซ้ำกันสำหรับช่อง Option อื่นๆ ทั้งหมดภายในออบเจ็กต์เดียวกัน

อาร์กิวเมนต์ตัวเลือกรายการเดียวสามารถแมปกับช่อง Option หลายช่องที่มีชื่อเดียวกันในออบเจ็กต์หลายรายการ อาร์กิวเมนต์ Option อาจใช้เพื่ออ้างอิงช่อง Option แบบไม่ซ้ำภายในออบเจ็กต์เดียวโดยใช้ชื่อเต็มของคลาสหรือค่าชื่อแทน OptionClass ที่คั่นด้วย ':' เช่น

 --classname:optionname optionvalue or
 --optionclassalias:optionname optionvalue.
 

ตัวเลือกสั้นๆ แบบง่ายคือ "-" ตามด้วยอักขระตัวเลือกสั้น หากตัวเลือกต้องใช้อาร์กิวเมนต์ (ซึ่งใช้ได้กับตัวเลือกที่ไม่ใช่บูลีน) ก็สามารถเขียนเป็นพารามิเตอร์แยกต่างหากได้ แต่ไม่จําเป็น กล่าวคือ ทั้ง "-f out.txt" และ "-fout.txt" ใช้ได้

คุณระบุตัวเลือกสั้นๆ หลายรายการต่อจาก "-" เพียงตัวเดียวได้ ตราบใดที่ตัวเลือกทั้งหมด (ยกเว้นตัวเลือกสุดท้าย) ไม่จำเป็นต้องใช้อาร์กิวเมนต์

ตัวเลือกแบบยาวจะขึ้นต้นด้วย "--" ตามด้วยอักขระหลายตัว หากตัวเลือกต้องใช้อาร์กิวเมนต์ คุณสามารถเขียนอาร์กิวเมนต์ต่อจากชื่อตัวเลือกโดยตรงโดยคั่นด้วย "=" หรือเขียนเป็นอาร์กิวเมนต์ถัดไป (เช่น "--file=out.txt" หรือ "--file out.txt")

ตัวเลือกบูลีนแบบยาว "--name" จะมีตัวเลือก "--no-name" ประกอบอยู่ด้วยโดยอัตโนมัติ เมื่อใช้ตัวเลือก "--flag" ตัวเลือก "--flag", "--no-flag", "--flag=true" และ "--flag=false" จะใช้ได้ทั้งหมด แต่ระบบจะไม่อนุญาตให้ใช้ "--flag true" หรือ "--flag false" (เนื่องจาก "--flag" เพียงอย่างเดียวก็เพียงพอแล้ว ระบบจะตีความ "true" หรือ "false" ที่ตามหลังแยกกัน) คุณสามารถใช้ "yes" และ "no" เป็นคำพ้องความหมายสำหรับ "true" และ "false" ได้

สตริงแต่ละรายการที่ไม่ได้ขึ้นต้นด้วย "-" และไม่ใช่อาร์กิวเมนต์ที่จำเป็นของตัวเลือกก่อนหน้าคืออาร์กิวเมนต์ตำแหน่งที่ไม่ใช่ตัวเลือก เช่นเดียวกับสตริงต่อเนื่องทั้งหมด สตริงแต่ละรายการหลัง "--" คืออาร์กิวเมนต์ตำแหน่งที่ไม่ใช่ตัวเลือก

ระบบจะอัปเดตช่องที่เกี่ยวข้องกับตัวเลือกเมื่อมีการประมวลผลตัวเลือก อาร์กิวเมนต์ตำแหน่งที่เหลืออยู่จะแสดงผลเป็น List<String>

ตัวอย่างง่ายๆ มีดังนี้

 // Non-@Option fields will be ignored.
 class Options {
     @Option(name = "quiet", shortName = 'q')
     boolean quiet = false;

     // Here the user can use --no-color.
     @Option(name = "color")
     boolean color = true;

     @Option(name = "mode", shortName = 'm')
     String mode = "standard; // Supply a default just by setting the field.

     @Option(name = "port", shortName = 'p')
     int portNumber = 8888;

     // There's no need to offer a short name for rarely-used options.
     @Option(name = "timeout" )
     double timeout = 1.0;

     @Option(name = "output-file", shortName = 'o' })
     File output;

     // Multiple options are added to the collection.
     // The collection field itself must be non-null.
     @Option(name = "input-file", shortName = 'i')
     List<File> inputs = new ArrayList<File>();

 }

 Options options = new Options();
 List<String> posArgs = new OptionParser(options).parse("--input-file", "/tmp/file1.txt");
 for (File inputFile : options.inputs) {
     if (!options.quiet) {
        ...
     }
     ...

 }

 
ดูข้อมูลเพิ่มเติมได้ที่

  • หน้า man ของ getopt(1)
  • โมดูล "optparse" ของ Python (http://docs.python.org/library/optparse.html)
  • "หลักเกณฑ์ไวยากรณ์ยูทิลิตี" ของ POSIX (http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap12.html#tag_12_02)
  • "มาตรฐานสำหรับอินเทอร์เฟซบรรทัดคำสั่ง" ของ GNU (http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces)

ดูเพิ่มเติม

สรุป

ตัวสร้างแบบสาธารณะ

ArgsOptionParser( optionSources)

สร้าง ArgsOptionParser สำหรับคอลเล็กชันออบเจ็กต์

ArgsOptionParser(Object... optionSources)

สร้าง ArgsOptionParser สําหรับออบเจ็กต์อย่างน้อย 1 รายการ

เมธอดสาธารณะ

getInopOptions()

แสดงชุดตัวเลือกที่ไม่ได้เปลี่ยนแปลงค่าเริ่มต้นใดๆ

static String getOptionHelp(boolean importantOnly, Object optionObject)

เอาต์พุตข้อความช่วยเหลือสำหรับฟิลด์ Option ทั้งหมดใน optionObject

parse(String... args)

แยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง "args" โดยตั้งค่าช่อง @Option ของ "optionSource" ที่ระบุให้กับตัวสร้าง

parse( args)

วิธีการ parse(String) สำรองที่ใช้อาร์กิวเมนต์ ERROR(/List)

parseBestEffort( args)

วิธีการ parseBestEffort(String) สำรองที่ใช้อาร์กิวเมนต์ ERROR(/List)

parseBestEffort( args, boolean forceContinue)

วิธีการ parseBestEffort(String) สำรองที่ใช้อาร์กิวเมนต์ ERROR(/List) และสามารถบังคับให้แยกวิเคราะห์ต่อจนจบได้ แม้ว่าบางอาร์กิวเมนต์จะแยกวิเคราะห์ไม่ได้ก็ตาม

parseBestEffort(String... args)

เวอร์ชัน parse(String) เวอร์ชันพยายามอย่างเต็มที่

void validateMandatoryOptions()

ตรวจสอบว่าได้กรอกข้อมูลในทุกช่องที่ต้องกรอกแล้ว

ช่างก่อสร้างสาธารณะ

ArgsOptionParser

public ArgsOptionParser ( optionSources)

สร้าง ArgsOptionParser สำหรับคอลเล็กชันออบเจ็กต์

พารามิเตอร์
optionSources : ออบเจ็กต์การกำหนดค่า

โยน
ConfigurationException หากออบเจ็กต์การกําหนดค่ากําหนดค่าไม่ถูกต้อง

ArgsOptionParser

public ArgsOptionParser (Object... optionSources)

สร้าง ArgsOptionParser สําหรับออบเจ็กต์อย่างน้อย 1 รายการ

พารามิเตอร์
optionSources Object: ออบเจ็กต์การกำหนดค่า

โยน
ConfigurationException หากออบเจ็กต์การกําหนดค่ากําหนดค่าไม่ถูกต้อง

วิธีการสาธารณะ

getInopOptions

public  getInopOptions ()

แสดงผลชุดตัวเลือกที่ไม่ได้เปลี่ยนค่าเริ่มต้นใดๆ

คิกรีเทิร์น

getOptionHelp

public static String getOptionHelp (boolean importantOnly, 
                Object optionObject)

เอาต์พุตข้อความช่วยเหลือสำหรับฟิลด์ Option ทั้งหมดใน optionObject

ข้อความความช่วยเหลือสําหรับแต่ละตัวเลือกจะอยู่ในรูปแบบต่อไปนี้

   [-option_shortname, --option_name]          [option_description] Default:
   [current option field's value in optionObject]
 
ระบบจะละเว้นข้อความ "ค่าเริ่มต้น..." หากช่องตัวเลือกเป็นค่า Null หรือว่าง

พารามิเตอร์
importantOnly boolean: if true พิมพ์ความช่วยเหลือสำหรับตัวเลือกที่สำคัญเท่านั้น

optionObject Object: ออบเจ็กต์ที่จะพิมพ์ข้อความช่วยเหลือ

คิกรีเทิร์น
String สตริงที่มีข้อความความช่วยเหลือที่ใช้งานง่ายสําหรับช่องตัวเลือกทั้งหมด

parse

public  parse (String... args)

แยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง "args" เพื่อตั้งค่าช่อง @Option ของ "optionSource" ที่ให้กับตัวสร้าง

พารามิเตอร์
args String

คิกรีเทิร์น
ERROR(/List) ของอาร์กิวเมนต์ตำแหน่งที่เหลืออยู่หลังจากประมวลผลตัวเลือกทั้งหมด

โยน
ConfigurationException หากเกิดข้อผิดพลาดขณะแยกวิเคราะห์อาร์กิวเมนต์

parse

public  parse ( args)

เมธอด parse(String) สำรองที่มีอาร์กิวเมนต์ ERROR(/List) รายการ

พารามิเตอร์
args

คิกรีเทิร์น
ERROR(/List) ของอาร์กิวเมนต์ตำแหน่งที่เหลือหลังจากประมวลผลตัวเลือกทั้งหมดแล้ว

การขว้าง
ConfigurationException หากเกิดข้อผิดพลาดขณะแยกวิเคราะห์อาร์กิวเมนต์

แยกวิเคราะห์ BestEffort

public  parseBestEffort ( args)

วิธีการ parseBestEffort(String) สำรองที่ใช้อาร์กิวเมนต์ ERROR(/List)

พารามิเตอร์
args

คิกรีเทิร์น
ERROR(/List) ของอาร์กิวเมนต์ที่เหลือ

parseBestEffort

public  parseBestEffort ( args, 
                boolean forceContinue)

วิธีการ parseBestEffort(String) สำรองที่ใช้อาร์กิวเมนต์ ERROR(/List) และสามารถบังคับให้แยกวิเคราะห์ต่อจนจบได้ แม้ว่าบางอาร์กิวเมนต์จะแยกวิเคราะห์ไม่ได้ก็ตาม

พารามิเตอร์
args : รายการที่จะมีพารามิเตอร์ที่เหลือ

forceContinue boolean: จริงหากควรแยกวิเคราะห์ต่อไปแม้ว่าบางอาร์กิวเมนต์จะแยกวิเคราะห์ไม่ได้

คิกรีเทิร์น
ERROR(/List) ของอาร์กิวเมนต์ที่เหลือ

parseBestEffort

public  parseBestEffort (String... args)

parse(String) เวอร์ชันที่ทำงานได้ดีที่สุด หากมีการส่ง ConfigurationException ระบบจะบันทึกข้อยกเว้นนั้นเป็นการภายในและแสดงผลอาร์กิวเมนต์ที่เหลือ (รวมถึงอาร์กิวเมนต์ที่ทำให้เกิดข้อยกเว้น) วิธีนี้ไม่ส่ง

พารามิเตอร์
args String

คิกรีเทิร์น
ERROR(/List) ของอาร์กิวเมนต์ที่เหลือ

validateMandatoryOptions

public void validateMandatoryOptions ()

ตรวจสอบว่าได้กรอกข้อมูลในทุกช่องที่ต้องกรอกแล้ว

โยน
com.android.tradefed.config.ConfigurationException
ConfigurationException