    001package org.vishia.gral.widget;
    002
    003import java.text.SimpleDateFormat;
    004import java.util.IllegalFormatConversionException;
    005import java.util.IllegalFormatPrecisionException;
    006import java.util.Locale;
    007import java.util.MissingFormatArgumentException;
    008import java.util.TimeZone;
    009
    010import org.vishia.bridgeC.OS_TimeStamp;
    011import org.vishia.bridgeC.Va_list;
    012import org.vishia.gral.base.GralTable;
    013import org.vishia.gral.base.GralWidget;
    014import org.vishia.gral.ifc.GralMng_ifc;
    015import org.vishia.gral.ifc.GralTableLine_ifc;
    016import org.vishia.gral.ifc.GralTable_ifc;
    017import org.vishia.msgDispatch.LogMessage;
    018import org.vishia.util.Assert;
    019
    020/**This class supports output of messages in a GralTable to view and scroll.
    021 * The table contains only a defined maximum of messages, older messages will be removed if the capacity is used.
    022 * It is recommended to write messages in a persistent medium additionally
    023 * (usual a {@link org.vishia.msgDispatch.LogMessageFile}).
    024 *
    025 * @author Hartmut Schorrig
    026 *
    027 */
    028public class GralMsgOutputList  implements LogMessage
    029{
    030
    031  /**Version, history and license.
    032   * <ul>
    033   * <li>2013-01-26 Hartmut:fine tuning while adapt message system in component javaSrc_vishiaRun.
    034   * <li>2011-04-05 Hartmut creation
    035   * </ul>
    036   * <br><br>
    037   * <b>Copyright/Copyleft</b>:
    038   * For this source the LGPL Lesser General Public License,
    039   * published by the Free Software Foundation is valid.
    040   * It means:
    041   * <ol>
    042   * <li> You can use this source without any restriction for any desired purpose.
    043   * <li> You can redistribute copies of this source to everybody.
    044   * <li> Every user of this source, also the user of redistribute copies
    045   *    with or without payment, must accept this license for further using.
    046   * <li> But the LPGL ist not appropriate for a whole software product,
    047   *    if this source is only a part of them. It means, the user
    048   *    must publish this part of source,
    049   *    but don't need to publish the whole source of the own product.
    050   * <li> You can study and modify (improve) this source
    051   *    for own using or for redistribution, but you have to license the
    052   *    modified sources likewise under this LGPL Lesser General Public License.
    053   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
    054   * </ol>
    055   * If you are intent to use this sources without publishing its usage, you can get
    056   * a second license subscribing a special contract with the author.
    057   *
    058   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
    059   *
    060   */
    061  public static final int version = 20130126;
    062
    063  /**The access to the gui, to change data to show. */
    064  private final GralMng_ifc guiAccess;
    065
    066  private final SimpleDateFormat dateFormat;
    067
    068  private final Locale localization;
    069
    070
    071  public GralMsgOutputList(GralMng_ifc guiAccess, String sTimeZoneShow, String sTimeFormat){
    072    this.localization = Locale.ROOT;
    073    this.guiAccess = guiAccess;
    074    this.dateFormat = new SimpleDateFormat(sTimeFormat, localization);
    075    this.dateFormat.setTimeZone(TimeZone.getTimeZone(sTimeZoneShow));
    076
    077
    078  }
    079
    080  @Override public void close() {
    081  }
    082
    083  @Override public void flush() {
    084  }
    085
    086  @Override public boolean isOnline() {
    087    return true;
    088  }
    089
    090  @Override public boolean sendMsg(int identNumber, String text, Object... args) {
    091    // TODO Auto-generated method stub
    092    return false;
    093  }
    094
    095  @Override public boolean sendMsgTime(int identNumber, OS_TimeStamp creationTime,
    096      String text, Object... args) {
    097    // TODO Auto-generated method stub
    098    return false;
    099  }
    100
    101  /**This is the only one method, which is called from the message dispatcher. Only this is implemented.
    102   * @see org.vishia.msgDispatch.LogMessage#sendMsgVaList(int, org.vishia.bridgeC.OS_TimeStamp, java.lang.String, org.vishia.bridgeC.Va_list)
    103   */
    104  @Override public boolean sendMsgVaList(int identNumber, OS_TimeStamp creationTime,
    105
    106    String text, Va_list args) {
    107    String sTime = dateFormat.format(creationTime);
    108    String state = identNumber <0 ? "-" : "+'";  //going/coming
    109    int identNumber1 = identNumber < 0 ? -identNumber :identNumber;
    110    //The configuration for this msg ident.
    111    String sText;
    112    try{ sText = String.format(localization, text,args.get());
    113    }catch(IllegalFormatPrecisionException exc){
    114      sText = "error-precision in text format: " + text;
    115    } catch(IllegalFormatConversionException exc){
    116      sText = "error in text format: " + text;
    117    } catch(MissingFormatArgumentException exc){
    118      sText = "missing value: "+ text;
    119    }
    120    //String sInfoLine = sTime + '\t' + identNumber + '\t' + state + '\t' + sText;
    121    String[] sInfoLine = {sTime, "" + identNumber1, state, "" + sText};
    122
    123    GralWidget oTable = guiAccess.getWidget("msgOfDay");
    124    if(oTable == null){
    125      Assert.consoleErr("GuiMainDialog:insertInfo: unknown widget; %s; message:%d;%s;\n", "msgOfDay", new Integer(identNumber), sText);
    126    } else {
    127      @SuppressWarnings("unchecked")
    128      GralTable_ifc<Object> table = (GralTable<Object>)oTable;
    129      GralTableLine_ifc<Object> line = table.addLine(null, sInfoLine, null);
    130      table.setCurrentLine(line, -1, 0);
    131    }
    132    //guiAccess.insertInfo("msgOfDay", Integer.MAX_VALUE, sInfoLine);
    133    return true;
    134  }
    135
    136}
    137