Package shell

Class Branch

  • All Implemented Interfaces:
    Condition
    Direct Known Subclasses:
    All, Any, App, Contains, Detail, GroupMin, Max, Min, Mover, Place, Placer

    public class Branch
    extends Command
    Nadtřída všech ovladačů uzlů. Rozvětvení nadřazeného uzlu na více podřízených. Zavádí obecný kontejner vnořených uzlů nodes, které bude ovládat. Rozšiřuje metodu procházení go() o práci s tímto kontejnerem. Překládá "lidskou" slovní identifikaci (slovo z příkazové řádky) vnořeného uzlu na identifikaci strojovou (odkaz na objekt/uzel node). Podporuje ovládání vnořeného uzlu node podle módu aktivity metodou nodeCover(), která v případě neaktivity jen předává zpracování metodě nodeGo(), která se stará o údržbu aktuální úrovně Node.level. Vyhodnocení módu aktivity řeší už metoda Command.active() předka Command, která jej z Node.level odvozuje. Metoda nodeGo() vstupuje do vnořeného uzlu (předává mu řízení voláním jeho metody Node.go()). Metody go() všech objektů tvoří základní rozhraní procházení stromovou strukturou uzlů. V aktivním módu (Command.active()) je otestováno metodou nodeCondition(), zda jsou splněny podmínky pro vykonání akce nebo ne. Pokud ano, je zpracování předáno metodě nodeAction() a poté metodě outDone(), která informuje o úspěšném provedení. Pokud ne, metoda outError() informuje o chybě. Metody nodeCondition() a nodeAction() jsou určeny k vlastím implementacím v potomcích. Ve výchozí implementaci nodeCondition() jen vrací true (žádné podmínky) a nodeAction() provádí jen nodeGo(). Tak je zajištěno, že je nutné v potomcích implemetovat jen to skutečně potřebné, nebo před implementací vlastních akcí nejprve ladit splnění podmínek ve vlastní metodě nodeCondition() a až poté implementovat vlastní nodeAction(). Protože výchozí nodeAction() je implementována jako přesměrování na nodeGo(), bude se objekt i v nodeAction() chovat stejně jako v módu nodeGo(), dokud nebude v potomcích implementována nodeAction() vlastní. Třída podporuje dvě možnosti zpracování vnořených uzlů. Nejprve se pokusí vzít slovo ze vstupu (Prompt.hasNext()) jako "lidský" identifikátor uzlu. Pokud slovo ve vstupu je, odebere jej metodou Prompt.next() a pokusí se jej přeložit na strojovou identifikaci (hledá podle slova odkaz na node v kontejneru nodes metodou findFirst(java.lang.String)). Pokud je uzel nalezen, zpracuje jej. Pokud ne, tiskne se chyba metodou outErrorPath(). Pokud slovo chybí úplně, standardně se mají zpracovat vnořené uzly nodes všechny. Povinnost identifikovat jeden konkrétní uzel z nodes je možné zapnout parametrem levelNodePath. Pak se v řípadě chybějící identifikace v Prompt tiskne chyba metodou outErrorWord(). levelNodePath je potřeba nastavit například u ovladače všech příkazů App, aby jeho metoda go() nezpracovala všechny najednou, nebo u konkrétních příkazů: (Placer - aby šlo jít jen do jednoho východu, "pick" - aby šlo jedním příkazem sebrat jen jeden předmět, atd.). Naopak, výchozí hodnota parametru levelNodePath poskytuje možnost procházení celým stromem uzlů, nebo jen určitým podstromem, pokud je v Prompt zadána alespoň část "cesty". Command.levelActive i levelNodePath jsou "úrovňové" atributy, které říkají, na jaké úrovni se má chování změnit. "Úrovňové" chování Branch objektů je tedy možné jednoduše ovlivnit nastavováním těchto atributů. Veškeré textové podklady pro komponování výstupních textů, jsou standardizovány parametry masterDelimiter, nodesBegin, nodesEmpty, nodesDelimiter, nodesEnd a recurse. Metody nodeCover(), nodeCondition() a nodeAction() odpovídají stejné koncepci, jakou mají metody Command.cover(), Command.condition() a Command.action() v třídě předka Command.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      boolean dNode
      vypisovat za hláškou úspěchu název uzlu a tečku
      boolean eNode
      vypisovat za chybovou hláškou název uzlu a tečku
      java.lang.String errorPath
      odpověď v případě chyby při nesplnění povinnosti identifikovat jeden konkrétní uzel z nodes podle levelNodePath
      java.lang.String errorPathDelimiter
      oddělovač zprávy od uzlu
      java.lang.String errorWord
      odpověď v případě chyby nenalezeného identifikátoru ze vstupu načerpaného metodou Prompt.next(); hledá se v nodes metodou findFirst(java.lang.String)
      boolean extName
      vypisovat za hláškou úspěchu rozšířený název uzlu (Node.outExtName() namísto Node.outName())
      int levelNodePath
      úroveň zanoření, na které platí povinnost uvést slovo/cestu; pokud není tímto parametrem zapnuta a uživatel slovo neuvede, zpracují se všechny nodes v kontejneru
      java.lang.String masterDelimiter
      oddělovač uzlu od svého kontejneru, není-li noPrint
      Node node
      pracovní ukazatel na uzel, který se má zpracovat
      Nodes nodes
      kontejner vnořených uzlů třídy Nodes; hodnota null přepíná chování objektu na chování předka; je to výchozí stav
      java.lang.String nodesBegin
      uvaděč kontejneru vnořených uzlů
      java.lang.String nodesDelimiter
      oddělovač uzlů v kontejneru, je-li jich zpracováváno více než jeden
      java.lang.String nodesEmpty
      nahrazovač výpisu kontejneru vnořených uzlů, je-li kontejner prázdný
      java.lang.String nodesEnd
      ukončovač kontejneru vnořených uzlů
      boolean noGoEmpty
      do rozvětvení (s tiskem uzlu) se v případě prázdného kontejneru nemá vůbec vstupovat; standardně se vstoupí do rozvětvení i v případě prázdného kontejneru a namísto kontejneru se tiskne nodesEmpty
      boolean noPathNoAll
      pokud není uvedena cesta, která je povinná a není tímto příznakem zakázano, přepne se procházení na výpisy všech uzlů - jen se mód aktivity zablokuje, aby se namísto provedení vypsal seznam všech možností
      boolean noPrint
      před rozvětvením uzlu se uzel nemá tisknout
      static java.util.ArrayList<Node> passed
      pole aktuální cesty uzlů při stromovém zpracování; plní ho metoda nodeGo() a je primárně použito v metodě go() k prevenci zacyklení.
      static Prompt prompt
      vstupní příkazová řádka - dávkovač slov (uzlů cesty), ze kterého čerpají instance kmenu Branch a instance Test, která čerpá vlastní "nestromový" parametr - název souboru
      java.lang.String recurse
      nahrazovač rekurzívní smyčky; pokud má hierarchie smyčku, nevstupuje se do kontejneru nodes, ale vypíše se náhrada, aby to bylo zřejmé
    • Constructor Summary

      Constructors 
      Constructor Description
      Branch​(java.lang.String name, java.lang.String comment)  
      Branch​(java.lang.String name, java.lang.String comment, int levelActive, java.lang.String done, boolean extName, boolean dNode, java.lang.String error, boolean eNode, Nodes nodes, int levelNodePath)  
      Branch​(java.lang.String name, java.lang.String comment, int levelActive, java.lang.String done, java.lang.String error)  
      Branch​(java.lang.String name, java.lang.String comment, java.lang.String done, boolean extName, boolean dNode, java.lang.String error, boolean eNode, Nodes nodes)  
      Branch​(java.lang.String name, java.lang.String comment, java.lang.String done, java.lang.String error)  
      Branch​(java.lang.String name, java.lang.String comment, Nodes nodes)  
      Branch​(java.lang.String name, java.lang.String comment, Nodes nodes, boolean noPrint)  
      Branch​(java.lang.String name, java.lang.String comment, Nodes nodes, boolean noPrint, int levelNodePath)  
      Branch​(java.lang.String name, java.lang.String comment, Nodes nodes, java.lang.String nodesBegin, java.lang.String nodesDelimiter)  
    • Field Detail

      • passed

        public static final java.util.ArrayList<Node> passed
        pole aktuální cesty uzlů při stromovém zpracování; plní ho metoda nodeGo() a je primárně použito v metodě go() k prevenci zacyklení.
      • prompt

        public static Prompt prompt
        vstupní příkazová řádka - dávkovač slov (uzlů cesty), ze kterého čerpají instance kmenu Branch a instance Test, která čerpá vlastní "nestromový" parametr - název souboru
      • nodes

        public Nodes nodes
        kontejner vnořených uzlů třídy Nodes; hodnota null přepíná chování objektu na chování předka; je to výchozí stav
      • noGoEmpty

        public boolean noGoEmpty
        do rozvětvení (s tiskem uzlu) se v případě prázdného kontejneru nemá vůbec vstupovat; standardně se vstoupí do rozvětvení i v případě prázdného kontejneru a namísto kontejneru se tiskne nodesEmpty
      • noPrint

        public boolean noPrint
        před rozvětvením uzlu se uzel nemá tisknout
      • masterDelimiter

        public java.lang.String masterDelimiter
        oddělovač uzlu od svého kontejneru, není-li noPrint
      • errorPathDelimiter

        public java.lang.String errorPathDelimiter
        oddělovač zprávy od uzlu
      • nodesBegin

        public java.lang.String nodesBegin
        uvaděč kontejneru vnořených uzlů
      • nodesEmpty

        public java.lang.String nodesEmpty
        nahrazovač výpisu kontejneru vnořených uzlů, je-li kontejner prázdný
      • nodesDelimiter

        public java.lang.String nodesDelimiter
        oddělovač uzlů v kontejneru, je-li jich zpracováváno více než jeden
      • nodesEnd

        public java.lang.String nodesEnd
        ukončovač kontejneru vnořených uzlů
      • recurse

        public java.lang.String recurse
        nahrazovač rekurzívní smyčky; pokud má hierarchie smyčku, nevstupuje se do kontejneru nodes, ale vypíše se náhrada, aby to bylo zřejmé
      • levelNodePath

        public int levelNodePath
        úroveň zanoření, na které platí povinnost uvést slovo/cestu; pokud není tímto parametrem zapnuta a uživatel slovo neuvede, zpracují se všechny nodes v kontejneru
      • errorPath

        public java.lang.String errorPath
        odpověď v případě chyby při nesplnění povinnosti identifikovat jeden konkrétní uzel z nodes podle levelNodePath
      • noPathNoAll

        public boolean noPathNoAll
        pokud není uvedena cesta, která je povinná a není tímto příznakem zakázano, přepne se procházení na výpisy všech uzlů - jen se mód aktivity zablokuje, aby se namísto provedení vypsal seznam všech možností
      • node

        public Node node
        pracovní ukazatel na uzel, který se má zpracovat
      • dNode

        public boolean dNode
        vypisovat za hláškou úspěchu název uzlu a tečku
      • eNode

        public boolean eNode
        vypisovat za chybovou hláškou název uzlu a tečku
    • Constructor Detail

      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      Nodes nodes)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      Nodes nodes,
                      boolean noPrint)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      Nodes nodes,
                      boolean noPrint,
                      int levelNodePath)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      Nodes nodes,
                      java.lang.String nodesBegin,
                      java.lang.String nodesDelimiter)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      int levelActive,
                      java.lang.String done,
                      java.lang.String error)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      java.lang.String done,
                      java.lang.String error)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      int levelActive,
                      java.lang.String done,
                      boolean extName,
                      boolean dNode,
                      java.lang.String error,
                      boolean eNode,
                      Nodes nodes,
                      int levelNodePath)
      • Branch

        public Branch​(java.lang.String name,
                      java.lang.String comment,
                      java.lang.String done,
                      boolean extName,
                      boolean dNode,
                      java.lang.String error,
                      boolean eNode,
                      Nodes nodes)
    • Method Detail

      • plural

        public static java.lang.String plural​(int i)
      • defPrompt

        public void defPrompt()
        Standardní nastavení poskytovatele cest z příkazových řádkek z klávesnice
      • setNodes

        public void setNodes​(Nodes nodes)
        Změní/nastaví odkaz nodes na jiný/nový kontejner.
      • setNoPrint

        public void setNoPrint​(boolean noPrint)
        Změní příznak výpisu noPrint.
      • outErrorPath

        public void outErrorPath()
        Vytiskne text, když ve vstupu chybí povinná slovní identifikace.
      • outErrorWord

        public void outErrorWord()
        Vytiskne text při špatně zadané slovní identifikaci.
      • nodeCondition

        public boolean nodeCondition()
        Je určená k otestování podmínek, zda se může vykonat nodeAction. Výchozí výsledek testu je true, ale v případě, že objekt potřebuje nějak podmínit vykonání nodeAction(), je potřeba implementovat potomka s vlastní metodou nodeCondition. Například při umisťování míčků do batohu se kontroluje, zda je ještě místo, nebo jde-li míček sebrat apod.
      • nodeGo

        public void nodeGo()
        Vrstvička zanoření při průchodu do nižší úrovně. Stará se o nastavení aktuální úrovně, podle které metoda out odsadí výstup.
        See Also:
        Node.level, node, Node.go()
      • nodeAction

        public void nodeAction()
        Je určená ke zpracování node v Command.active() módu. Provede se jen pokud je tato Branch aktivní a nodeCondition vrátí true. Výchozí chování je vstup do uzlu (procházení stromem uzlů), ale například potomek této třídy Mover, namísto vstupu do uzlu, uzel přesouvá z nodes do Mover.targetNodes. Tato i rozšířené metody potomků mají tvořit veškerou funkci ovladačů vnořených uzlů. Metodu volá metoda nodeCover(). Tato výchozí nodeAction() volá metodu nodeGo()
      • nodePath

        public boolean nodePath()
        Povinnost volby uzlu node z nodes je standardně řízena urovní zanoření Node.level. Ve výchozím stavu levelNodePath==-1 nebude platit povinnost zvolit uzel na žádné urovni.
        Returns:
        příznak, zda je volba uzlu na aktuální úrovni zanoření povinná.