001package org.vishia.simSelector;
002
003import java.io.File;
004import java.io.PrintStream;
005import java.util.List;
006import java.util.Map;
007import java.util.TreeMap;
008
009import javax.script.ScriptException;
010
011import org.vishia.cmd.JZtxtcmdExecuter;
012import org.vishia.cmd.JZtxtcmdScript;
013import org.vishia.gral.base.GralButton;
014import org.vishia.gral.base.GralGraphicTimeOrder;
015import org.vishia.gral.base.GralMng;
016import org.vishia.gral.base.GralTable;
017import org.vishia.gral.base.GralTextBox;
018import org.vishia.gral.base.GralTextField;
019import org.vishia.gral.base.GralWindow;
020import org.vishia.gral.ifc.GralFactory;
021import org.vishia.gral.ifc.GralUserAction;
022import org.vishia.gral.ifc.GralWidget_ifc;
023import org.vishia.gral.swt.SwtFactory;
024import org.vishia.jztxtcmd.JZtxtcmd;
025import org.vishia.mainCmd.PrintStreamAdapter;
026import org.vishia.msgDispatch.LogMessage;
027import org.vishia.msgDispatch.LogMessageStream;
028import org.vishia.util.DataAccess;
029import org.vishia.util.KeyCode;
030
031/*Test with jzcmd: call jzcmd with this java file with its full path:
032D:/vishia/Java/srcJava_vishiaGui/org/vishia/gral/test/SimSelector.java
033==JZcmd==
034java org.vishia.gral.test.SimSelector.main(null);                 
035==endJZcmd==
036 */
037
038
039public class SimSelector
040{
041  GralMng gralMng;
042  
043  GralWindow window;
044  
045  @SuppressWarnings("unchecked") 
046  GralTable<Map<String, DataAccess.Variable<Object>>>[] wdgTables = new GralTable[6];
047  
048  
049  GralButton btnReadConfig, btnGenSim, btnCleanOut, btnGenTestcase;
050  
051  GralTextField wdgSelects;
052  
053  GralTextBox output;
054  
055  JZtxtcmdExecuter executer = new JZtxtcmdExecuter();
056    
057  boolean isTableInitialized;
058  
059  File fileConfig;
060  
061  PrintStream outOld, errOld, outNew = null, errNew = null;
062  
063  public static void main(String[] args){
064    if(args.length < 1) {
065      System.err.println("parameter 1: path/to/config.jzcmd.bat");
066    }
067    SimSelector main = new SimSelector();
068    main.fileConfig = new File(args[0]);
069    main.openWindow1();
070    main.waitForClosePrimaryWindow();
071  }
072  
073  
074  SimSelector()
075  {
076    for(int iTable = 0; iTable < wdgTables.length; ++iTable) {
077      //String pos = "@PrimaryWindow, 6..40, " + 20 * iTable + ".." + (18 + 20 * iTable);
078      String name = "table" + iTable;
079      int[] columnWidths = new int[3];
080      columnWidths[0] = 8;
081      columnWidths[1] = 8;
082      columnWidths[2] = 0;
083      wdgTables[iTable] = new GralTable<>(name, columnWidths);
084    }
085    btnReadConfig = new GralButton("readConfig", "read config", actionReadConfig);
086    btnGenSim = new GralButton("genSim", "gen stimuli", actionGenSim);
087    btnGenTestcase = new GralButton("genTestCase", "gen testcases.m", actionGenTestcases);
088    btnCleanOut = new GralButton("cleanOut", "clean output", actionCleanOut);
089    output = new GralTextBox("output");
090  }
091  
092  
093  
094  public static void openWindow(){
095    SimSelector main = new SimSelector();
096    main.openWindow1();
097  }
098  
099  
100  public void waitForClosePrimaryWindow()
101  {
102    while(GralMng.get().gralDevice.isRunning()){
103      try{ Thread.sleep(100);} 
104      catch (InterruptedException e)
105      { //dialogZbnfConfigurator.terminate();
106      }
107      if(isTableInitialized) {
108        isTableInitialized = false;
109        readConfig();
110      }
111    }
112    if(outNew !=null) { System.setOut(outOld); outNew.close(); }
113    if(errNew !=null) { System.setErr(errOld); errNew.close(); }
114    
115  }
116  
117  
118  
119  
120  void readConfig()
121  {
122    JZtxtcmdExecuter.ExecuteLevel level = null;
123    try {
124      JZtxtcmd jzcmd = new JZtxtcmd();
125      JZtxtcmdScript script = jzcmd.compile(fileConfig, null);
126      executer.initialize(script, false, null);
127      level = executer.execute_Scriptclass("ToGui"); 
128      
129    } catch( ScriptException exc) {
130      System.err.println(exc.getMessage());
131    }
132    if(level !=null) {
133      for(int iList = 0; iList < wdgTables.length; ++iList ) {
134        //boolean bErr = false;
135        wdgTables[iList].clearTable();;
136        String nameList = "tdata" + (iList +1);
137        DataAccess.Variable<Object> vlist1 = level.localVariables.get(nameList);
138        if(vlist1 !=null && vlist1.value() instanceof List) {
139          List<?> list1 = (List<?>)vlist1.value();
140          for(Object listElement: list1) {
141            if(listElement instanceof Map) {
142              @SuppressWarnings("unchecked") 
143              Map<String, DataAccess.Variable<Object>> set1 = (Map<String, DataAccess.Variable<Object>>) listElement;
144              DataAccess.Variable<Object> descrv = set1.get("descr");
145              DataAccess.Variable<Object> namev = set1.get("name");
146              DataAccess.Variable<Object> selectv = set1.get("select");
147              if(descrv !=null && namev !=null) {
148                String[] lineTexts = new String[3];
149                lineTexts[0] = namev.value().toString();
150                lineTexts[1] = selectv.value().toString();
151                lineTexts[2] = descrv.value().toString();
152                wdgTables[iList].addLine(lineTexts[0], lineTexts, set1);
153              }
154            }
155            System.out.println(listElement.toString());
156          }
157        }
158        wdgTables[iList].repaint();
159      }
160    }
161    
162    
163    /*
164  IndexMultiTable<String, DataAccess.Variable<Object>> args = new IndexMultiTable<>(IndexMultiTable.providerString);
165  DataAccess.Variable<Object> tdata1 = new DataAccess.Variable<Object>('L', "tdata1", new LinkedList<String>()); 
166  args.put(tdata1.name(), tdata1);
167  DataAccess.Variable<Object> tdata2 = new DataAccess.Variable<Object>('L', "tdata2", new LinkedList<String>()); 
168  args.put(tdata2.name(), tdata2);
169  DataAccess.Variable<Object> tdata3 = new DataAccess.Variable<Object>('L', "tdata3", new LinkedList<String>()); 
170  args.put(tdata3.name(), tdata3);
171  DataAccess.Variable<Object> tdata4 = new DataAccess.Variable<Object>('L', "tdata4", new LinkedList<String>()); 
172  args.put(tdata4.name(), tdata4);
173  JZcmd.execSub(fileScript, "toGui", args, executer.scriptLevel());
174     */
175  }
176  
177  
178  
179  
180  void genStimuli()
181  {
182    String[] identifier = new String[wdgTables.length];
183    Map<String, DataAccess.Variable<Object>> idents = new TreeMap<String, DataAccess.Variable<Object>>();
184    for(int iTable = 0; iTable < wdgTables.length; ++iTable) {
185      GralTable<Map<String, DataAccess.Variable<Object>>>.TableLineData line = wdgTables[iTable].getCurrentLine();
186      if(line !=null) {
187        Map<String, DataAccess.Variable<Object>> data = line.getUserData();
188        identifier[iTable] = data.get("name").value().toString();
189        String key = "key" + (iTable+1); 
190        idents.put(key, new DataAccess.Variable<Object>('S', key, identifier[iTable])); 
191    } }
192    try{
193      Appendable out = output;
194      executer.execSub(null, "genStimuli", idents, false, out, null);
195    } catch(ScriptException exc) {
196      System.err.println(exc.getMessage());
197    }
198  }
199  
200  
201  void genTestcases()
202  {
203    //String[] identifier = new String[wdgTables.length];
204    Map<String, DataAccess.Variable<Object>> args = new TreeMap<String, DataAccess.Variable<Object>>();
205    args.put("select", new DataAccess.Variable<Object>('S', "select", wdgSelects.getText())); 
206    try{
207      Appendable out = output;
208      executer.execSub(null, "genTestcases", args, false, out, null);
209    } catch(ScriptException exc) {
210      System.err.println(exc.getMessage());
211    }
212  }
213  
214  
215  
216  
217  GralUserAction actionReadConfig = new GralUserAction("readConfig")
218  { @Override public boolean exec(int actionCode, GralWidget_ifc widgd, Object... params)
219    { if(KeyCode.isControlFunctionMouseUpOrMenu(actionCode)){
220        readConfig();
221      }
222      return true;
223    }
224  };
225  
226  
227  GralUserAction actionGenSim = new GralUserAction("genStimuli")
228  { @Override public boolean exec(int actionCode, GralWidget_ifc widgd, Object... params)
229    { if(KeyCode.isControlFunctionMouseUpOrMenu(actionCode)){
230        genStimuli();
231      }
232      return true;
233    }
234  };
235  
236  
237  GralUserAction actionGenTestcases = new GralUserAction("genTestcases")
238  { @Override public boolean exec(int actionCode, GralWidget_ifc widgd, Object... params)
239    { if(KeyCode.isControlFunctionMouseUpOrMenu(actionCode)){
240        genTestcases();
241      }
242      return true;
243    }
244  };
245  
246  
247  GralUserAction actionCleanOut = new GralUserAction("genStimuli")
248  { @Override public boolean exec(int actionCode, GralWidget_ifc widgd, Object... params)
249    { if(KeyCode.isControlFunctionMouseUpOrMenu(actionCode)){
250        output.setText("");
251      }
252      return true;
253    }
254  };
255  
256  
257  
258  
259  @SuppressWarnings("deprecation")
260  private void openWindow1(){
261    GralFactory gralFactory = new SwtFactory();
262    LogMessage log = new LogMessageStream(System.out);
263    window = gralFactory.createWindow(log, "Select Simulation", 'C', 100, 50, 600, 400);
264    gralMng = window.gralMng();
265    gralMng.gralDevice.addDispatchOrder(initGraphic);
266    //initGraphic.awaitExecution(1, 0);
267    
268  }
269  
270  
271  GralGraphicTimeOrder initGraphic = new GralGraphicTimeOrder("GralArea9Window.initGraphic"){
272    @Override public void executeOrder()
273    { 
274      // gralMng.selectPanel(window);
275      gralMng.setPosition(2, 5, 2, 19, 0, 'r', 2);
276      btnReadConfig.createImplWidget_Gthread();
277      btnCleanOut.createImplWidget_Gthread();
278      btnGenSim.createImplWidget_Gthread();
279      btnGenTestcase.createImplWidget_Gthread();
280      gralMng.setPosition(6, 8, 60, 79, 0, 'd');
281      wdgSelects = gralMng.addTextField("test", true, null, "r");
282      wdgSelects.setText("t");
283      //int last = 1; //tables.length
284      for(int iTable = 0; iTable < wdgTables.length; ++iTable) {
285        int xtable = iTable %3;
286        int ytable = iTable /3;
287        gralMng.setPosition(21*ytable + 10, 21*ytable + 30, xtable * 30, xtable * 30 +30, 0, 'd');
288        
289        wdgTables[iTable].createImplWidget_Gthread();
290        wdgTables[iTable]._wdgImpl.repaintGthread();
291      }
292      gralMng.setPosition(52, 0, 0, 0, 0, 'U');
293      output.createImplWidget_Gthread();
294      
295      outOld = System.out; errOld = System.err;
296      System.setOut(outNew = new PrintStreamAdapter("", output));
297      System.setErr(errNew = new PrintStreamAdapter("", output));
298      isTableInitialized = true;
299      //
300      //GralTextField input = new GralTextField();
301    }
302    
303    
304    
305  };
306}
307