001package org.vishia.guiInspc;
002
003import java.io.File;
004import java.util.LinkedList;
005import java.util.List;
006
007import org.vishia.gral.base.GralTextField;
008import org.vishia.mainCmd.MainCmd;
009import org.vishia.mainCmd.MainCmdLogging_ifc;
010import org.vishia.mainCmd.ReportWrapperLog;
011import org.vishia.msgDispatch.LogMessage;
012import org.vishia.util.FileSystem;
013import org.vishia.zbnf.ZbnfJavaOutput;
014
015/**This classes contains a configuration of some variables.
016 * They are filled from a file which contains the paths.
017 * They can be saved in a file.
018 * The variables can be used to show in a curve view, to show in an extra window etc.
019 * The advantage: It is flexible which variables are present.
020 * @author Hartmut Schorrig
021 *
022 */
023public class InspcGuiFieldsFromFile
024{
025  /**Version, history and license. 
026   * <ul>
027   * <li>2014-04-29 Hartmut cleanup, now really used in a professional application. 
028   * <li>2013-03-17 Hartmut creating 
029   * </ul>
030   * <br><br> 
031   * 
032   * <b>Copyright/Copyleft</b>:
033   * For this source the LGPL Lesser General Public License,
034   * published by the Free Software Foundation is valid.
035   * It means:
036   * <ol>
037   * <li> You can use this source without any restriction for any desired purpose.
038   * <li> You can redistribute copies of this source to everybody.
039   * <li> Every user of this source, also the user of redistribute copies
040   *    with or without payment, must accept this license for further using.
041   * <li> But the LPGL is not appropriate for a whole software product,
042   *    if this source is only a part of them. It means, the user
043   *    must publish this part of source,
044   *    but don't need to publish the whole source of the own product.
045   * <li> You can study and modify (improve) this source
046   *    for own using or for redistribution, but you have to license the
047   *    modified sources likewise under this LGPL Lesser General Public License.
048   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
049   * </ol>
050   * If you are intent to use this sources without publishing its usage, you can get
051   * a second license subscribing a special contract with the author. 
052   * 
053   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
054   */
055  //@SuppressWarnings("hiding")
056  public final static String sVersion = "2014-04-30";
057
058  
059  /**ZBNF result:
060   */
061  public static class MappingItem
062  { public String path;
063    public String comment;
064    public float scaleFloat = 0.0f;
065    public int nrofBits = -1;
066    public BitSignal bitSignal = null;
067  }
068  
069  
070  /**ZBNF result:
071   */
072  public static class BitSignal
073  { public int mask;
074    public float hi = 0.0f;
075    public float lo = 0.0f;
076  }
077  
078  
079  
080  
081  
082  /**ZBNF result: one line.
083   */
084  public static class Channel
085  {
086    public int chn;
087    public List<MappingItem> mappingItem = new LinkedList<MappingItem>();
088  }
089  
090  
091  /**ZBNF result: the whole file
092   */
093  public static class ZbnfResultFile {
094    /**ZBNF result:  */
095    public List<Channel> channel = new LinkedList<Channel>();
096  }; 
097
098  
099  
100  final ZbnfResultFile cfgFileInputData = new ZbnfResultFile();
101
102  LogMessage log;
103  
104  MainCmdLogging_ifc report;
105  
106  public final String syntaxMappingFile = "main::={ <Channel> } \\e. "
107    + "Channel::=@K<#?chn> : { <MappingItem> }. "
108    + "MappingItem::=<* =?path> = [float <#f?scaleFloat>| intBits <#?nrofBits> | bit <bitSignal>] ; [// <*\\n?comment> ]."
109    + "bitSignal::= <#x?mask> \\? <#f?hi> [ : <#f?lo>].";
110  
111
112  public InspcGuiFieldsFromFile(){
113    report = MainCmd.getLogging_ifc();
114    assert(report !=null);  //it is null if the application does not use MainCmd.
115    log = report;
116  }
117  
118  public InspcGuiFieldsFromFile(LogMessage log){
119    this.log = log;
120    this.report = new ReportWrapperLog(log);
121  }
122  
123  
124  
125  
126  /**Parses the config file for HSI and fill data.
127   * @param fileCfg
128   * @param data Proper data instance for parse result, the fields should be match to the semantic.
129   * @return true if ok. false then a log message was sent.
130   * @throws IllegalArgumentException
131   */
132  public boolean parse(File fileCfg, ZbnfResultFile data) throws IllegalArgumentException
133  {
134    boolean bOk = true;
135    if(!fileCfg.exists()){
136      bOk = false;
137      log.sendMsg(0, "HsiMapping - File not found: %s;", fileCfg.getAbsoluteFile());
138      throw new IllegalArgumentException();
139    }
140    ZbnfJavaOutput parser = new ZbnfJavaOutput(report);
141    String sError = parser.parseFileAndFillJavaObject(data.getClass(), data, fileCfg, syntaxMappingFile);
142    if(sError != null)
143    { log.sendMsg(0, sError);
144      bOk = false;
145    }
146    return bOk;    
147  }
148  
149
150  
151}