Package shell
Class Prompt
- java.lang.Object
-
- shell.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íčkushell
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í konstruktorPrompt()
je bez parametrů. Datové atributy si objekt případně nastaví, až když je bude potřebovat. Napříkladscanner
si vyrobí, pokud nebude dříve nastaven explicitně (např. metodousetScanner(Scanner scanner)
), až před prvním požadavkem získání sekvence identifikátorů metodouinput()
(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í metodasetWords(String[] words)
. Identifikátory musí být v řádku oddělené řetězcemdelimiter
. Ze zásobníku pak metodanext()
odebírá jednotlivé identifikátory, dokud nedojdou. Pokud bude při volání metodynext()
zásobník prázdný (index==length), metodouinput()
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 scanneruPrompt(Scanner scanner)
. Scanner je možné kdykoli změnit metodousetScanner(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 metodysetWords(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í metodugetAbsolutePath()
.
-
-
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ýrazboolean
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ě nextint
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 řádkujava.lang.String[]
words
pole slov
-
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í.
-
-
-
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ý atributscanner
-
setScanner
public boolean setScanner(java.lang.String fileName)
Nastaví nebo změní scanner na vstup ze souboru. Použito pro testovací sady příkazů vTest.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
-
-