import java.util.*; class AmSketch { //skeemityybid (pa"iseta == pa"is on tyhi): static final byte SIMPLE = 10; // yhe pa"iseta haruga static final byte LOOP = 11; // yhe pa"iseta haruga static final byte SWITCH = 12; // pa"isega, harudega CASE ja DEFAULT(0 voi enam) static final byte PARALLEL = 13; // harudega // s.h. harutyybid: static final byte BRANCH = 0; // suvaline static final byte CASE = 120; // lylitis static final byte DEFAULT = 121; // lylitis byte type; Vector head; // ainult tyypi AmHead Vector subs; // alamskeemid, mitteharu korral ainult tyypi AmSketch AmRow comment; AmRow headcomment; AmSketch parent; // ylemus-skeem AmView view; // vaade boolean icon; // kas on ikoniseeritud //transient short level; AmSketch (byte t){// konstruktor type = t; head = new Vector(); subs = new Vector(); comment = new AmRow(); headcomment = new AmRow(); parent = null; view = null; icon = false; }// konstruktor boolean nonBranch(){// pole haru? switch(type){ case BRANCH: case CASE: case DEFAULT: return false; default: return true; } }//nonBranch() public AmView newView(){// uus selle skeemi vaade if(view instanceof AmView1) return new AmView1(); else if(view instanceof AmView2) return new AmView2(); else return new AmView3(); //return null; //syntaksi jaoks } public static AmSketch makeSketch(byte t){ // teeb tyhja yhe haruga skeemi tyypi t (t on SIMPLE voi LOOP) AmSketch sketch = new AmSketch(t); AmSketch branch = new AmSketch(AmSketch.BRANCH); sketch.add(branch); return sketch; }//makeSketch() /* public void addMember(AmSketch s){// lisada keha loppu subs.addElement(s); s.parent = this; }//addMember(AmSketch s) */ // skeemi muutmise meetodid; // struktuurinoudeid ei kontrollita // (lihtskeemil ja tsyklil ainult yks haru jne.) public void add(AmHead h){// lisada el-paise loppu head.addElement(h); }//add public void add(AmSketch s){ // lisab skeemi s sellele skeemile loppu subs.addElement(s); s.parent = this; }//add public void add(AmNonSketch s){// lisada keha loppu subs.addElement(s); }//add(AmNonSketch s) public void delete(){ // eemaldab selle skeemi if(this == Am.s){ return; } //leida ylemuses int i = parent.subs.indexOf(this); //eemaldada sealt parent.subs.removeElementAt(i); }//delete public void deleteHead(int i){ // eemaldab selle skeemi el-paise nr. i head.removeElementAt(i); }//delete public void insert(AmSketch ps, int i){ // lisab selle skeemi: ylemusse ps kohale i ps.subs.insertElementAt(this, i); this.parent = ps; }//insert public void insert(AmHead h, int i){ // lisab selle skeemi paisesse kohale i head.insertElementAt(h,i); //this.parent = ps; }//insert // koopia tegemise meetod: public AmSketch makeCopy(){ // teeb sellest skeemist koopia AmSketch sNew = new AmSketch(type); // kopeerida el-paised: for(Enumeration e = head.elements(); e.hasMoreElements();){ sNew.head.addElement(((AmHead)(e.nextElement())).makeCopy()); } // kommentaar ja ikoniseeritus: sNew.comment = comment.makeCopy(); sNew.icon = icon; // liikmed: for(Enumeration e = subs.elements(); e.hasMoreElements();){ Object o = (e.nextElement()); if(o instanceof AmSketch) sNew.add(((AmSketch)o).makeCopy()); else sNew.add(((AmNonSketch)o).makeCopy()); }//for // vaade: if(view instanceof AmView1) sNew.setView1(); else if(view instanceof AmView2) sNew.setView2(); else sNew.setView3(); return sNew; }//makeCopy public void setView1(){ // seada vaade skeemis s: view = new AmView1(); // ja ko~igis alamskeemides: for(Enumeration e = subs.elements(); e.hasMoreElements();){ Object o = e.nextElement(); if (o instanceof AmSketch) ((AmSketch)o).setView1(); } } public void setView2(){ // seada vaade skeemis s: view = new AmView2(); // ja ko~igis alamskeemides: for(Enumeration e = subs.elements(); e.hasMoreElements();){ Object o = e.nextElement(); if (o instanceof AmSketch) ((AmSketch)o).setView2(); } } public void setView3(){ // seada vaade skeemis s: view = new AmView3(); // ja ko~igis alamskeemides: for(Enumeration e = subs.elements(); e.hasMoreElements();){ Object o = e.nextElement(); if (o instanceof AmSketch) ((AmSketch)o).setView3(); } } public void changeView(){ // ko~igis alamskeemides: for(Enumeration e = subs.elements(); e.hasMoreElements();){ Object o = e.nextElement(); if(o instanceof AmSketch) ((AmSketch)o).changeView(); } // muuta vaade selles skeemis: if (view instanceof AmView1) view = new AmView2(); else if (view instanceof AmView2) view = new AmView3(); else view = new AmView1(); } }//class AmSketch