    001package org.vishia.guiBzr;
    002
    003import java.text.DateFormat;
    004import java.text.SimpleDateFormat;
    005import java.util.Date;
    006import java.util.concurrent.ConcurrentLinkedQueue;
    007
    008import org.vishia.cmd.CmdExecuter;
    009import org.vishia.gral.area9.GralArea9_ifc;
    010import org.vishia.gral.base.GralTextBox;
    011import org.vishia.gral.base.GralTextField;
    012import org.vishia.gral.ifc.GralMngBuild_ifc;
    013import org.vishia.gral.ifc.GralMng_ifc;
    014import org.vishia.gral.ifc.GralTableLine_ifc;
    015import org.vishia.gral.ifc.GralWindow_ifc;
    016import org.vishia.mainCmd.MainCmd_ifc;
    017
    018public class MainData
    019{
    020
    021  final MainCmd_ifc mainCmdifc;
    022
    023  final CmdExecuter cmdExec = new CmdExecuter();
    024
    025  /**Access to all panels of this application. */
    026  final BzrGui panels;
    027
    028  MainAction mainAction;
    029
    030  GralMng_ifc panelAccess;
    031
    032  GralArea9_ifc guifc;
    033
    034  final DataConfig cfg = new DataConfig();
    035
    036  /**The current selected software project. */
    037  DataProject currPrj;
    038
    039  /**The current selected component. */
    040  DataCmpn currCmpn;
    041
    042
    043  /**The current selected line. */
    044  GralTableLine_ifc currTableline;
    045
    046
    047  final BzrGetStatus getterStatus;
    048
    049  final DateFormat dateFormatShowingFull =      new SimpleDateFormat("yy-MM-dd  HH:mm");
    050  final DateFormat dateFormatShowingHour =     new SimpleDateFormat("HH:mm");
    051
    052  /**Only one command invocation should be active in one time. */
    053  //final ProcessBuilder cmdMng = new ProcessBuilder("");
    054
    055  private final ConcurrentLinkedQueue<Runnable> ordersBackground =new ConcurrentLinkedQueue<Runnable>();
    056
    057  /**Data of the currently selected component.
    058   *
    059   */
    060  DataCmpn selectedCmpn;
    061
    062
    063  GralWindow_ifc infoWindow;
    064
    065  GralTextBox infoBox;
    066
    067  GralTextField infoLine;
    068
    069
    070
    071  MainData(MainCmd_ifc mainCmd, BzrGui panels)
    072  {
    073    this.mainCmdifc = mainCmd;
    074    this.panels = panels;
    075    getterStatus = new BzrGetStatus(mainCmd, this);
    076
    077  }
    078
    079
    080  void addOrderBackground(Runnable order)
    081  {
    082    ordersBackground.add(order);
    083    synchronized(ordersBackground){
    084      ordersBackground.notify();
    085    }
    086  }
    087
    088
    089  /**Gets a order. Waits a defined time, then returns also if no order is given.
    090   * @return
    091   */
    092  Runnable awaitOrderBackground(int timeout)
    093  {
    094    Runnable order;
    095    if(ordersBackground.isEmpty()){
    096      try{
    097        synchronized(ordersBackground)
    098        { ordersBackground.wait(timeout); }
    099      }
    100      catch (InterruptedException e){}
    101    }
    102    if(!ordersBackground.isEmpty()){
    103      order = ordersBackground.poll();
    104    } else {
    105      order = null;
    106    }
    107    return order;
    108  }
    109
    110
    111  /**Formats the given date into a String using 'yesterday' and 'today' if possible
    112   * @param date
    113   * @return
    114   */
    115  String formatTimestampYesterday(long date)
    116  { String ret;
    117    Date date1 = new Date(date);
    118    long millisecPerday = 24*3600*1000;
    119    long dateToday = System.currentTimeMillis() / millisecPerday * millisecPerday;
    120    if(date >= dateToday && date < dateToday + millisecPerday){
    121      ret = "   today  " + dateFormatShowingHour.format(date1);
    122    } else if(date >= dateToday - millisecPerday && date < dateToday){
    123      ret = "yesterday " + dateFormatShowingHour.format(date1);
    124    } else {
    125      ret = dateFormatShowingFull.format(date1);
    126    }
    127    return ret;
    128  }
    129
    130
    131}