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 אחד או יותר. אפשרות ארוכה ממופה ל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) {
        ...
     }
     ...

 }

 
מאמרים קשורים:
  • דף ההסבר של 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 Standards for Command Line Interfaces (סטנדרטים של GNU לממשקי שורת פקודה) (http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces)

מידע נוסף:

סיכום

‫constructors ציבוריים

ArgsOptionParser(Object... optionSources)

יוצרת ArgsOptionParser לאובייקט אחד או יותר.

ArgsOptionParser(Collection<Object> optionSources)

יוצרת ArgsOptionParser לאוסף של אובייקטים.

‫methods ציבוריים

Set<String> getInopOptions()

הפונקציה מחזירה את קבוצת האפשרויות שלא שינו ערכי ברירת מחדל.

static String getOptionHelp(boolean importantOnly, Object optionObject)

הצגת טקסט עזרה לכל השדות Option ב-optionObject.

List<String> parse(List<String> args)

שיטה חלופית ERROR(/#parse(String. args)) שמקבלת List של ארגומנטים

List<String> parse(String... args)

מנתח את הארגומנטים בשורת הפקודה 'args', ומגדיר את השדות @Option של 'optionSource' שסופקו לבונה.

List<String> parseBestEffort(List<String> args)

שיטה חלופית ERROR(/#parseBestEffort(String. args)) שמקבלת List של ארגומנטים

List<String> parseBestEffort(List<String> args, boolean forceContinue)

שיטה חלופית ERROR(/#parseBestEffort(String. args)) שמקבלת List של ארגומנטים, ואפשר לכפות עליה להמשיך בניתוח עד הסוף, גם אם חלק מהארגומנטים לא ניתנים לניתוח.

List<String> parseBestEffort(String... args)

גרסה של ERROR(/#parse(String. args)) שנוצרה בהקדם האפשרי.

void validateMandatoryOptions()

הפונקציה בודקת שכל השדות שמסומנים כשדות חובה הוגדרו.

‫constructors ציבוריים

ArgsOptionParser

public ArgsOptionParser (Object... optionSources)

יוצרת ArgsOptionParser לאובייקט אחד או יותר.

פרמטרים
optionSources Object: אובייקטים של הגדרות אישיות.

הקפצת הודעות שגיאה (throw)
ConfigurationException אם אובייקטים של הגדרות אישיות מוגדרים בצורה שגויה.

ArgsOptionParser

public ArgsOptionParser (Collection<Object> optionSources)

יוצרת ArgsOptionParser לאוסף של אובייקטים.

פרמטרים
optionSources Collection: אובייקטים של הגדרות אישיות.

הקפצת הודעות שגיאה (throw)
ConfigurationException אם אובייקטים של הגדרות אישיות מוגדרים בצורה שגויה.

‫methods ציבוריים

getInopOptions

public Set<String> getInopOptions ()

הפונקציה מחזירה את קבוצת האפשרויות שלא שינו ערכי ברירת מחדל.

החזרות
Set<String>

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: אם true, רק העזרה לגבי האפשרויות החשובות להדפסה

optionObject Object: האובייקט שעבורו רוצים להדפיס את טקסט העזרה

החזרות
String מחרוזת שמכילה טקסט עזרה ידידותי למשתמש לכל שדות האפשרויות

parse

public List<String> parse (List<String> args)

שיטה חלופית ERROR(/#parse(String. args)) שמקבלת List של ארגומנטים

פרמטרים
args List

החזרות
List<String> List של הארגומנטים תלויי המיקום שנשארו אחרי עיבוד כל האפשרויות.

הקפצת הודעות שגיאה (throw)
ConfigurationException אם קרתה שגיאה בניתוח הארגומנטים.

parse

public List<String> parse (String... args)

מנתח את הארגומנטים בשורת הפקודה 'args', ומגדיר את השדות @Option של 'optionSource' שסופקו לבונה.

פרמטרים
args String

החזרות
List<String> List של הארגומנטים תלויי המיקום שנשארו אחרי עיבוד כל האפשרויות.

הקפצת הודעות שגיאה (throw)
ConfigurationException אם קרתה שגיאה בניתוח הארגומנטים.

parseBestEffort

public List<String> parseBestEffort (List<String> args)

שיטה חלופית ERROR(/#parseBestEffort(String. args)) שמקבלת List של ארגומנטים

פרמטרים
args List

החזרות
List<String> List של הארגומנטים שנותרו

parseBestEffort

public List<String> parseBestEffort (List<String> args, 
                boolean forceContinue)

שיטה חלופית ERROR(/#parseBestEffort(String. args)) שמקבלת List של ארגומנטים, ואפשר לכפות עליה להמשיך בניתוח עד הסוף, גם אם חלק מהארגומנטים לא ניתנים לניתוח.

פרמטרים
args List: רשימה שתכיל את הארגומנטים שנותרו.

forceContinue boolean: הערך True אם צריך להמשיך בניתוח גם אם חלק מהארגומנטים לא מנותחים.

החזרות
List<String> List של הארגומנטים שנותרו

parseBestEffort

public List<String> parseBestEffort (String... args)

גרסה של ERROR(/#parse(String. args)) שנוצרה בהקדם האפשרי. אם מתבצעת השלכה של ConfigurationException, החריגה הזו נלכדת באופן פנימי, ומוחזרים הארגומנטים שנותרו (כולל הארגומנט שגרם להשלכת החריגה). השיטה הזו לא יוצרת חריגה.

פרמטרים
args String

החזרות
List<String> List של הארגומנטים שנותרו

validateMandatoryOptions

public void validateMandatoryOptions ()

הפונקציה בודקת שכל השדות שמסומנים כשדות חובה הוגדרו.

הקפצת הודעות שגיאה (throw)
com.android.tradefed.config.ConfigurationException
ConfigurationException