ArgsOptionParser

public class ArgsOptionParser
extends OptionSetter

JavaScript.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' מקבלת באופן אוטומטי רכיב נלווה '--ללא שם'. אם נותנים את האפשרות '‎--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‏ (http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces)

מאמרים קשורים:

סיכום

יוצרים ציבוריים

ArgsOptionParser( optionSources)

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

ArgsOptionParser(Object... optionSources)

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

שיטות ציבוריות

getInopOptions()

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

static String getOptionHelp(boolean importantOnly, Object optionObject)

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

parse(String... args)

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

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 : האובייקטים config.

זריקות
ConfigurationException אם אובייקטים של הגדרות אישיות מוגדרים בצורה שגויה.

ArgsOptionParser

public ArgsOptionParser (Object... optionSources)

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

פרמטרים
optionSources Object: האובייקטים config.

זריקות
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, לא יופיע הטקסט 'Default...'.

פרמטרים
importantOnly boolean: אם true מודפסת רק עזרה לגבי האפשרויות החשובות

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

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

לנתח

public  parse (String... args)

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

פרמטרים
args String

החזרות
ERROR(/List) של הארגומנטים תלויי המיקום שנותרו אחרי עיבוד כל האפשרויות.

קליעות
ConfigurationException אם אירעה שגיאה בניתוח הארגומנטים.

לנתח

public  parse ( args)

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

פרמטרים
args

החזרות
ERROR(/List) של הארגומנטים תלויי המיקום שנותרו אחרי עיבוד כל האפשרויות.

קליעות
ConfigurationException אם אירעה שגיאה בניתוח הארגומנטים.

parseBestEffort

public  parseBestEffort ( args)

שיטה חלופית parseBestEffort(String) עם ERROR(/List) של ארגומנטים

פרמטרים
args

החזרות
ERROR(/List) מהארגומנטים הנותרים

parseBestEffort

public  parseBestEffort ( args, 
                boolean forceContinue)

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

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

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

החזרות
ERROR(/List) מהארגומנטים הנותרים

parseBestEffort

public  parseBestEffort (String... args)

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

פרמטרים
args String

החזרות
ERROR(/List) מהארגומנטים השמאליים

validateMandatoryOptions

public void validateMandatoryOptions ()

מאשר שכל השדות שסומנו כשדות חובה הוגדרו.

זריקות
com.android.tradefed.config.ConfigurationException
ConfigurationException