Package shell

Class Prompt


  • public class Prompt
    extends java.lang.Object
    "Příkazová řádka" jako sekvence slovních identifikátorů. Může být použita jako cesta identifikující objekt/parametr. Při aplikaci balíčku shell slouží jako zdroj slovních identifikátorů, ze kterého si je oblekty/uzly aplikace čerpají a podle nich něco ovládají. Výchozí konstruktor Prompt() je bez parametrů. Datové atributy si objekt případně nastaví, až když je bude potřebovat. Například scanner si vyrobí, pokud nebude dříve nastaven explicitně (např. metodou setScanner(Scanner scanner)), až před prvním požadavkem získání sekvence identifikátorů metodou input() (jako výchozí scanner standardního vstupu z klávesnice). Řádek vstupu, standardně ukončený "\n" (doplní standardní vstup po stisku klávesy Enter), je pak potřeba rozstříhat na jednotlivé identifikátory a ty uložit do zásobníku, což provádí metoda setWords(String[] words). Identifikátory musí být v řádku oddělené řetězcem delimiter. Ze zásobníku pak metoda next() odebírá jednotlivé identifikátory, dokud nedojdou. Pokud bude při volání metody next() zásobník prázdný (index==length), metodou input() opět získá řadek další. V případě, že zdrojem dat má být vstup jiný, než standardní (z klávesnice), je nutné použít konstruktor s parametrem scanneru Prompt(Scanner scanner). Scanner je možné kdykoli změnit metodou setScanner(Scanner scanner), která přijímá buď parametr Scanner nebo Stirng, který má být názvem souboru, jako alternativní vstup. Textový vstup ze souboru je dobře použitelný jako náhrada výchozího scanu standardního vstupu (terminálu příkazového řádku). V textovém vstupu ze souboru může být celá sada řádků, včetně komentářů, keré pak mohou být zpracovány automaticky, bez nutnosti je vkládat v terminálu. Tím je možné jednoduše aplikaci testovat. Zásobník identifikátorů je možné také vkládat přímo použitím metody setWords(String[] words), bez nutnosti vůbec scanner používat. Třída Prompt má poskytovat přístup k systémovým vstupním operacím (viz. import java.io.*; na začátku tohoto souboru), proto implementuje i vlastní metodu getAbsolutePath().
    • Field Summary

      Fields 
      Modifier and Type Field Description
      Command command
      objekt třídy Command, terý se má vykonat (command.action()) při vyjímce NoSuchElementException (po vyčerpání všech řádek ze souboru); tato metodika je zavedena pro možnost aplikaci ukončit (nebo jinak obsloužit) po kompletním zpracování vstupu ze souboru; příkaz je po provedení zrušen (prevence smyčky)
      java.lang.String delimiter
      oddělovač slov; může být i reg. výraz
      boolean echo
      příznak echování - vstupní řádek se má vypisovat na výstup; System.in to dělá při psaní z klávesnice; jiné zdroje ne, pro úplnost se tento parametr zapíná při změně scanner-u na "souborový"
      int index
      aktuální číslo slova; posouvá se po každé metodě next
      int length
      počet slov v cestě (kopíruje se z words.length při každém nastavení words)
      java.util.Scanner scanner
      textový zdroj příkazového řádku
      java.lang.String[] words
      pole slov
    • Constructor Summary

      Constructors 
      Constructor Description
      Prompt()
      Konstruktor bez parametrů.
      Prompt​(java.lang.String[] words)  
      Prompt​(java.lang.String[] words, Command command)  
      Prompt​(java.util.Scanner scanner)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String getAbsolutePath()
      Třída Prompt má poskytovat přístup k systémovým vstupním operacím (viz. import java.io.*; na začátku tohoto souboru), proto implementuje i vlastní metodu getAbsolutePath pro její použití v aplikaci.
      boolean hasNext()
      Metodou je nutné otestovat, zda je co čerpat, ještě před voláním next, protože pokud nebude, bude se v metodě next čekat, dokud něco nepřijde.
      boolean input()
      Přečte další řádku ze scanneru, rozdělí ji na jednotlivá slova do pole Stringů a metodou setWords pole vloží jako pracovní zásobník do parametru words.
      java.lang.String next()
      Poskytne další slovo z příkazové řádky.
      boolean setScanner​(java.lang.String fileName)
      Nastaví nebo změní scanner na vstup ze souboru.
      void setScanner​(java.util.Scanner scanner)
      Nastaví nebo změní scanner.
      void setScannerSystemIn()
      Vytvoří standardní scanner jako systémový standardní vstup.
      void setWords​(java.lang.String[] words)
      Nastaví nebo změní zásobník slov, který si objekt třídy Prompt standardně vyrábí sám z příkazové řádky ze "scanneru" a poté touto metodou nastaví.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • scanner

        public java.util.Scanner scanner
        textový zdroj příkazového řádku
      • delimiter

        public java.lang.String delimiter
        oddělovač slov; může být i reg. výraz
      • words

        public java.lang.String[] words
        pole slov
      • length

        public int length
        počet slov v cestě (kopíruje se z words.length při každém nastavení words)
      • index

        public int index
        aktuální číslo slova; posouvá se po každé metodě next
      • echo

        public boolean echo
        příznak echování - vstupní řádek se má vypisovat na výstup; System.in to dělá při psaní z klávesnice; jiné zdroje ne, pro úplnost se tento parametr zapíná při změně scanner-u na "souborový"
      • command

        public Command command
        objekt třídy Command, terý se má vykonat (command.action()) při vyjímce NoSuchElementException (po vyčerpání všech řádek ze souboru); tato metodika je zavedena pro možnost aplikaci ukončit (nebo jinak obsloužit) po kompletním zpracování vstupu ze souboru; příkaz je po provedení zrušen (prevence smyčky)
    • Constructor Detail

      • Prompt

        public Prompt()
        Konstruktor bez parametrů. Asi nejpraktičtější přístup je, že metody v této třídě si donastaví vše potřebné standardním způsobem až když budou poprvé použity (scanner System.in).
      • Prompt

        public Prompt​(java.util.Scanner scanner)
      • Prompt

        public Prompt​(java.lang.String[] words)
      • Prompt

        public Prompt​(java.lang.String[] words,
                      Command command)
    • Method Detail

      • setWords

        public void setWords​(java.lang.String[] words)
        Nastaví nebo změní zásobník slov, který si objekt třídy Prompt standardně vyrábí sám z příkazové řádky ze "scanneru" a poté touto metodou nastaví. Metodu je možné použít i z aplikace, pokud bude z nějakého důvodu potřeba obejít použití scanneru.
        Parameters:
        words - zásobník slov
      • setScanner

        public void setScanner​(java.util.Scanner scanner)
        Nastaví nebo změní scanner.
        Parameters:
        scanner - pro datový atribut scanner
      • setScanner

        public boolean setScanner​(java.lang.String fileName)
        Nastaví nebo změní scanner na vstup ze souboru. Použito pro testovací sady příkazů v Test.condition().
        Parameters:
        fileName - kompletní jméno souboru (včetně cesty), který má obsahovat sadu příkazů (řádků) k otestování v aplikaci jako náhradu standardního vstupu.
        Returns:
        příznak úspěchu
      • hasNext

        public boolean hasNext()
        Metodou je nutné otestovat, zda je co čerpat, ještě před voláním next, protože pokud nebude, bude se v metodě next čekat, dokud něco nepřijde.
        Returns:
        v zásobníku je další slovo
      • next

        public java.lang.String next()
        Poskytne další slovo z příkazové řádky. Index ukazuje na další slovo. Pokud není v zásobníku žádné další slovo, pokouší se načíst další řádku metodou input tak dlouho, dokud ji nedostane. Proto je doporučené užití objektu Prompt - nejprve použít metodu hasNext a pokud vrátí true, teprve metodou next slovo načerpat.
        Returns:
        další slovo ze zásobníku
      • setScannerSystemIn

        public void setScannerSystemIn()
        Vytvoří standardní scanner jako systémový standardní vstup.
      • input

        public boolean input()
        Přečte další řádku ze scanneru, rozdělí ji na jednotlivá slova do pole Stringů a metodou setWords pole vloží jako pracovní zásobník do parametru words. Pokud není nastaven scanner, vyrobí si jej se standardním vstupem. To je proto, aby nebylo nutné scanner inicializovat už v konstruktoru, ale aby bylo možné se rozhodnout, jaký scanner bude použit až při běhu aplikace. V případě změny scanneru se vstupem ze souboru, bude metoda fungovat zcela totožně jako při vstupu z klávesnice, ale v App se hlavní smyčka vykoná pro každý řadek (Enter z klávesnice nahrazuje "\n" v souboru), ale protože v případě scanování ze souboru řádky jednou dojdou (pokud jimi nebude hra ukončena) a dojde k java.util.NoSuchElementException, což je v pořádku, protože jde o výjmečné použití; tuto vyjímku odchytnu, a objekt prompt vrátím zpět ke standardnímu stavu, kdy se čte z klávesnice.
        Returns:
        příznak, že další řádek (zásobník slov) je připraven
      • getAbsolutePath

        public static java.lang.String getAbsolutePath()
        Třída Prompt má poskytovat přístup k systémovým vstupním operacím (viz. import java.io.*; na začátku tohoto souboru), proto implementuje i vlastní metodu getAbsolutePath pro její použití v aplikaci.
        Returns:
        absolutní cestu aktuální systémé pracovní složky