    001package org.vishia.guiViewCfg;
    002
    003import java.io.File;
    004
    005
    006import org.vishia.communication.InterProcessCommFactorySocket;
    007import org.vishia.gral.area9.GralArea9MainCmd;
    008import org.vishia.gral.area9.GuiCallingArgs;
    009import org.vishia.gral.area9.GuiCfg;
    010import org.vishia.gral.base.GralWidget;
    011//import org.vishia.gral.gui.GuiDispatchCallbackWorker;
    012import org.vishia.gral.ifc.GralUserAction;
    013import org.vishia.util.Assert;
    014
    015/**Class contains main, it is able to use for a GUI without any programming in Java.*/
    016public class ViewCfg extends GuiCfg
    017{
    018
    019  /**Version and history
    020   * <ul>
    021   * <li>2012-20-22 Hartmut chg now works yet.
    022   * <li>2010-06-00 Hartmut created
    023   * </ul>
    024   */
    025  public static final int version = 0x20120222;
    026
    027  private final OamShowValues oamShowValues;
    028
    029  /**Composition of a class, that reads the oam output values from the target
    030   * and writes into variables, which are displayed.
    031   */
    032  //private final OamOutFileReader oamOutValues;
    033
    034  private final boolean showValuesOk;
    035
    036  private final OamRcvValue oamRcvUdpValue;
    037
    038  /**Composition of a class, that reads the oam messages from the target
    039   * and writes into the dayly list and into files.
    040   */
    041  //private final MsgReceiver msgReceiver;
    042
    043
    044  /**The command-line-arguments may be stored in an extra class, which can arranged in any other class too.
    045   * The separation of command line argument helps to invoke the functionality with different calls,
    046   * for example calling in a GUI, calling in a command-line-batch-process or calling from ANT
    047   */
    048  static class CallingArguments extends GuiCallingArgs
    049  {
    050    /**Name of the config-file for the Gui-appearance. */
    051    String sFileGui;
    052
    053    /**Directory where sFileCfg is placed, with / on end. The current dir if sFileCfg is given without path. */
    054    String sParamBin;
    055
    056    String sFileCtrlValues;
    057
    058    /**File with the values from the S7 to show. */
    059    String sFileOamValues;
    060
    061    /**File with the values from the S7 to show. */
    062    String sFileOamUcell;
    063
    064    String sFileCfg;
    065
    066  } //class CallingArguments
    067
    068
    069
    070  final CallingArguments callingArguments;
    071
    072
    073
    074
    075  /**This instance helps to create the Dialog Widget as part of the whole window. It is used only in the constructor.
    076   * Therewith it may be defined stack-locally. But it is better to show and explain if it is access-able at class level. */
    077  //GuiDialogZbnfControlled dialogZbnfConfigurator;
    078
    079
    080
    081
    082
    083
    084
    085
    086
    087  private final GralUserAction actionKeyboard = new GralUserAction()
    088  { @Override
    089  public boolean userActionGui(String sCmd, GralWidget widgetInfos, Object... values)
    090    {
    091                if(sCmd != null){
    092                        //String sCmd1 = "TouchInputPc.exe";
    093                        mainCmd.executeCmdLine(widgetInfos.sCmd, 0, null, null);
    094        return true;
    095                } else return false;
    096    }
    097  };
    098
    099
    100
    101
    102  /**Organisation class for the GUI.
    103   */
    104  private static class CmdLineAndGui extends GralArea9MainCmd
    105  {
    106
    107
    108    /**Aggregation to given instance for the command-line-argument. The instance can be arranged anywhere else.
    109     * It is given as ctor-parameter.
    110     */
    111    final CallingArguments cargs;
    112
    113    /**ctor called in static main.
    114     * @param cargs aggregation to command-line-argument data, it will be filled here.
    115     * @param args The command-line-calling arguments from static main
    116     */
    117    public CmdLineAndGui(CallingArguments cargs, String[] args)
    118    {
    119      super(cargs, args);
    120      super.addAboutInfo("ViewCfg");
    121      super.addAboutInfo("made by HSchorrig, 2010-06-07, 2011-09-03");
    122      //super.addStandardHelpInfo();
    123      this.cargs = cargs;
    124    }
    125
    126
    127
    128    /*---------------------------------------------------------------------------------------------*/
    129    /** Tests one argument. This method is invoked from parseArgument. It is abstract in the superclass MainCmd
    130        and must be overwritten from the user.
    131        :TODO: user, test and evaluate the content of the argument string
    132        or test the number of the argument and evaluate the content in dependence of the number.
    133
    134        @param argc String of the actual parsed argument from cmd line
    135        @param nArg number of the argument in order of the command line, the first argument is number 1.
    136        @return true is okay,
    137                false if the argument doesn't match. The parseArgument method in MainCmd throws an exception,
    138                the application should be aborted.
    139    */
    140    @Override protected boolean testArgument(String arg, int nArg)
    141    { boolean bOk = true;  //set to false if the argc is not passed
    142      try {
    143        if(arg.startsWith("-parambin="))
    144              { cargs.sParamBin = getArgument(10);   //an example for default output
    145              }
    146              else if(arg.startsWith("-ctrlbin="))
    147              { cargs.sFileCtrlValues = getArgument(9);   //an example for default output
    148              }
    149              else if(arg.startsWith("-oambin="))
    150              { cargs.sFileOamValues = getArgument(8);   //an example for default output
    151              }
    152              else { bOk = super.testArgument(arg, nArg); }
    153      } catch(Exception exc){
    154      }
    155      return bOk;
    156    }
    157
    158
    159
    160  } //class CmdLineAndGui
    161
    162
    163
    164  /**ctor for the main class of the application.
    165   * The main class can be created in some other kinds as done in static main too.
    166   * But it needs the {@link MainCmdWin}.
    167   * <br><br>
    168   * The ctor checks whether a gUI-configuration file is given. If not then the default configuratin is used.
    169   * It is especially for the Sample.
    170   * <br><br>
    171   * The the GUI will be completed with the content of the GUI-configuration file.
    172   *
    173   * @param cargs The given calling arguments.
    174   * @param gui The GUI-organization.
    175   */
    176  ViewCfg(CallingArguments cargs, GralArea9MainCmd cmdgui)
    177  { super(cargs, cmdgui, null, null, null);
    178    this.callingArguments = cargs;
    179
    180    oamShowValues = new OamShowValues(cmdgui, guiAccess);
    181    showValuesOk = oamShowValues.readVariableCfg();
    182
    183    //oamOutValues = new OamOutFileReader(cargs.sFileOamValues, cargs.sFileOamUcell, gui, oamShowValues);
    184
    185    oamRcvUdpValue = new OamRcvValue(oamShowValues, cmdgui);
    186
    187    //msgReceiver = new MsgReceiver(console, dlgAccess, cargs.sTimeZone);
    188
    189          oamShowValues.setFieldsToShow(panelBuildIfc.getShowFields());
    190
    191    //msgReceiver.test(); //use it after initGuiDialog!
    192
    193  }
    194
    195
    196  @Override protected void initMain()
    197  {
    198    super.initMain();  //starts initializing of graphic. Do it after reading some configurations.
    199    //msgReceiver.start();
    200    oamRcvUdpValue.start();
    201
    202  }
    203
    204
    205  @Override protected void stepMain()
    206  {
    207    try{
    208        //oamOutValues.checkData();
    209      //msgReceiver.testAndReceive();
    210      oamRcvUdpValue.sendRequest();
    211    } catch(Exception exc){
    212      //tread-Problem: console.writeError("unexpected Exception", exc);
    213      System.out.println(Assert.exceptionInfo("ViewCfg - unexpected Exception; ", exc, 0, 7));
    214      exc.printStackTrace();
    215    }
    216
    217  }
    218
    219
    220
    221
    222  /**The command-line-invocation (primary command-line-call.
    223   * @param args Some calling arguments are taken. This is the GUI-configuration especially.
    224   */
    225  public static void main(String[] args)
    226  { boolean bOk = true;
    227    CallingArguments cargs = new CallingArguments();
    228    //Initializes the GUI till a output window to show informations:
    229    CmdLineAndGui cmdgui = new CmdLineAndGui(cargs, args);  //implements MainCmd, parses calling arguments
    230    //Initializes the graphic window and parse the parameter of args (command line parameter).
    231    //Parameter errors will be output in the graphic window in its given output area.
    232    bOk = cmdgui.parseArgumentsAndInitGraphic("ViewCfg", "3A3C");
    233
    234    if(bOk){
    235      //String ipcFactory = "org.vishia.communication.InterProcessComm_Socket";
    236        //try{ ClassLoader.getSystemClassLoader().loadClass(ipcFactory, true);
    237        //}catch(ClassNotFoundException exc){
    238        //      System.out.println("class not found: " + "org.vishia.communication.InterProcessComm_Socket");
    239        //}
    240      //Loads the named class, and its base class InterProcessCommFactory.
    241      //In that kind the calling of factory methods are regarded to socket.
    242        new InterProcessCommFactorySocket();
    243
    244      ViewCfg main = new ViewCfg(cargs, cmdgui);
    245
    246      main.execute();
    247
    248      main.oamRcvUdpValue.stopThread();
    249    }
    250    cmdgui.exit();
    251  }
    252
    253  void stop(){} //debug helper
    254
    255}