home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Java / JDesignerPro / Jdp3_0.exe / data1.cab / Program_Files / JDPScheduler.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  7.3 KB  |  374 lines

  1. import java.util.Date;
  2. import java.util.Properties;
  3. import java.util.StringTokenizer;
  4. import java.util.Vector;
  5.  
  6. public class JDPScheduler {
  7.    JDPSubsystemMgr manager;
  8.    JDPJob thisJob;
  9.    JDPJagg jaggSQL;
  10.    Vector nextEventList;
  11.    Vector triggeredEvents;
  12.  
  13.    Date getNextRunTimeToday(long var1, long var3, int var5, String var6) {
  14.       Date var7 = new Date();
  15.       long var8 = var7.getTime();
  16.       var7.setHours(0);
  17.       var7.setMinutes(0);
  18.       var7.setSeconds(0);
  19.       var7.setTime(var7.getTime() / 1000L * 1000L);
  20.       var8 -= var7.getTime();
  21.       if (var3 == 0L) {
  22.          if (var8 <= var1) {
  23.             return new Date(var7.getTime() + var1);
  24.          }
  25.       } else {
  26.          long var10 = (long)var5;
  27.          if (var6.equals("M")) {
  28.             var10 *= 60000L;
  29.          } else if (var6.equals("H")) {
  30.             var10 = var10 * 60L * 60000L;
  31.          }
  32.  
  33.          while(var3 > var8 && var1 <= var3 && var1 < var8) {
  34.             var1 += var10;
  35.          }
  36.  
  37.          if (var3 > var8 && var1 <= var3 && var1 > var8) {
  38.             return new Date(var7.getTime() + var1);
  39.          }
  40.       }
  41.  
  42.       return null;
  43.    }
  44.  
  45.    boolean getNextDate(String var1, Date var2, int var3, String var4, int var5, int var6, int var7) {
  46.       Date var8 = new Date();
  47.       var8.setHours(0);
  48.       var8.setMinutes(0);
  49.       var8.setSeconds(0);
  50.       var8.setTime(var8.getTime() / 1000L * 1000L);
  51.       if (var1.equals("D")) {
  52.          long var21 = var8.getTime() - var2.getTime();
  53.          var21 /= 86400000L;
  54.          if (var21 == 0L) {
  55.             return true;
  56.          } else {
  57.             float var11 = (float)var21 / (float)var3;
  58.             return var11 == (float)((int)var11);
  59.          }
  60.       } else if (var1.equals("W")) {
  61.          int var20 = var8.getDay() - 1;
  62.          if (var20 < 0) {
  63.             var20 += 7;
  64.          }
  65.  
  66.          if (var4.substring(var20).equals("N")) {
  67.             return false;
  68.          } else {
  69.             long var23 = (long)(var8.getYear() * 52);
  70.             Date var26 = new Date(var8.getYear(), 0, 1);
  71.             var23 += (var8.getTime() - var26.getTime()) / 604800000L;
  72.             long var13 = (long)(var2.getYear() * 52);
  73.             var26 = new Date(var2.getYear(), 0, 1);
  74.             var13 += (var2.getTime() - var26.getTime()) / 604800000L;
  75.             long var15 = var23 - var13;
  76.             if (var15 == 0L) {
  77.                return true;
  78.             } else {
  79.                float var17 = (float)var15 / (float)var3;
  80.                return var17 == (float)((int)var17);
  81.             }
  82.          }
  83.       } else if (var1.equals("M")) {
  84.          if (var5 > 0) {
  85.             if (var5 != var8.getDate()) {
  86.                return false;
  87.             }
  88.          } else if (var6 > 0) {
  89.             int var9 = var8.getDay() - 1;
  90.             if (var9 < 0) {
  91.                var9 += 7;
  92.             }
  93.  
  94.             if (var7 != var9) {
  95.                return false;
  96.             }
  97.  
  98.             int var10 = var8.getDate() / 7 + 1;
  99.             if (var6 != var10) {
  100.                return false;
  101.             }
  102.          }
  103.  
  104.          long var18 = (long)(var8.getYear() * 12);
  105.          new Date(var8.getYear(), 0, 1);
  106.          var18 += (long)(var8.getMonth() + 1);
  107.          long var12 = (long)(var2.getYear() * 12);
  108.          new Date(var2.getYear(), 0, 1);
  109.          var12 += (long)(var2.getMonth() + 1);
  110.          long var14 = var18 - var12;
  111.          if (var14 == 0L) {
  112.             return true;
  113.          } else {
  114.             float var16 = (float)var14 / (float)var3;
  115.             return var16 == (float)((int)var16);
  116.          }
  117.       } else {
  118.          return false;
  119.       }
  120.    }
  121.  
  122.    boolean submitJobs(Vector var1, boolean var2) {
  123.       boolean var3 = true;
  124.       String var4 = this.jaggSQL.getSEP();
  125.  
  126.       for(int var5 = 0; var5 < var1.size(); ++var5) {
  127.          StringTokenizer var6 = new StringTokenizer((String)var1.elementAt(var5), var4);
  128.          String var7 = var6.nextToken().trim();
  129.          String var8 = var6.nextToken().trim();
  130.          String var9 = var6.nextToken().trim();
  131.          String var10 = var6.nextToken().trim();
  132.          String var11 = var6.nextToken().trim();
  133.          String var12 = var6.nextToken().trim();
  134.          String var13 = var6.nextToken().trim();
  135.          String var14 = var6.nextToken().trim();
  136.          int var15 = Integer.parseInt(var6.nextToken().trim());
  137.          int var16 = Integer.parseInt(var6.nextToken().trim());
  138.          boolean var17 = var6.nextToken().trim().equals("Y");
  139.          int var18 = Integer.parseInt(var6.nextToken().trim());
  140.          String var19 = var6.nextToken().trim();
  141.          String var20 = var6.nextToken().trim();
  142.          String var21 = var6.nextToken().trim();
  143.          JDPJobQueue var22 = this.manager.getJobQueue(var9);
  144.          JDPSubsystem var23 = this.manager.getSubsystem(var22.getSubsystem());
  145.          String var24 = null;
  146.          if (var2 && var23.getJob(var8) != null) {
  147.             this.thisJob.appendJobLog(var8 + " already running in " + var22.getSubsystem() + " and therefore not auto-started.");
  148.          } else {
  149.             var24 = this.manager.submitJob(var9, var7, var8, var10, "JDPScheduler", var11, var12, var13, var14, var17, var15, var16, var18, var19, var20, var21);
  150.             if (var24 == null) {
  151.                this.thisJob.appendJobLog(var8 + " auto-started on " + (new Date()).toString());
  152.             } else {
  153.                this.thisJob.appendJobLog(var24);
  154.             }
  155.          }
  156.  
  157.          if (var24 != null) {
  158.             var3 = false;
  159.          }
  160.       }
  161.  
  162.       return var3;
  163.    }
  164.  
  165.    void setupJaggConnection() {
  166.       if (this.jaggSQL == null) {
  167.          this.jaggSQL = new JDPJagg(this.manager.JDPJaggPath);
  168.          this.jaggSQL.setDSN(this.manager.JDPJaggDSN);
  169.          this.jaggSQL.setCSTR(this.manager.JDPJaggCSTR);
  170.          this.jaggSQL.setJdbcDriver(this.manager.JDPJaggJdbcDriver);
  171.          this.jaggSQL.setJdbcPrefix(this.manager.JDPJaggJdbcPrefix);
  172.          this.jaggSQL.setJdbcSuffix(this.manager.JDPJaggJdbcSuffix);
  173.          this.jaggSQL.setUID(this.manager.JDPJaggJdbcUserid);
  174.          this.jaggSQL.setPWD(this.manager.JDPJaggJdbcPassword);
  175.       }
  176.  
  177.    }
  178.  
  179.    public long getNextEvent() {
  180.       String var1 = this.jaggSQL.getSEP();
  181.       this.nextEventList = new Vector();
  182.       new Properties();
  183.       Date var19 = null;
  184.       Vector var20 = new Vector();
  185.       String var21 = "SELECT JDPSystem, EventName, EventType, Frequency, FreqInt, FreqDays, " + "FreqStDay, FreqWeek, FreqWeekDy, StartDate, StartTime, EndDate, " + "EndTime, RepFreq, RepFreqUOM " + "FROM JDPEvent WHERE Status = 'Y' " + "AND (EventType = 'O' OR EventType = 'R')";
  186.       this.jaggSQL.execSQL(var21, var20);
  187.  
  188.       for(int var22 = 0; var22 < var20.size(); ++var22) {
  189.          StringTokenizer var23 = new StringTokenizer((String)var20.elementAt(var22), var1);
  190.          String var2 = var23.nextToken().trim();
  191.          String var3 = var23.nextToken().trim();
  192.          String var4 = var23.nextToken().trim();
  193.          String var5 = var23.nextToken().trim();
  194.          int var6 = Integer.parseInt(var23.nextToken().trim());
  195.          String var7 = var23.nextToken().trim();
  196.          int var8 = Integer.parseInt(var23.nextToken().trim());
  197.          int var9 = Integer.parseInt(var23.nextToken().trim());
  198.          int var10 = Integer.parseInt(var23.nextToken().trim());
  199.          Date var11 = new Date(Long.valueOf(var23.nextToken().trim()));
  200.          long var12 = Long.valueOf(var23.nextToken().trim());
  201.          Date var14 = new Date(Long.valueOf(var23.nextToken().trim()));
  202.          long var15 = Long.valueOf(var23.nextToken().trim());
  203.          int var17 = Integer.parseInt(var23.nextToken().trim());
  204.          String var18 = var23.nextToken().trim();
  205.          Date var24 = null;
  206.          if (var4.equals("R") && this.checkDateRange(var11, var14) && this.getNextDate(var5, var11, var6, var7, var8, var9, var10)) {
  207.             var24 = this.getNextRunTimeToday(var12, var15, var17, var18);
  208.          }
  209.  
  210.          if (var4.equals("O") && this.checkDateRange((Date)null, new Date(var11.getTime() + var12))) {
  211.             var24 = new Date(var11.getTime() + var12);
  212.             if (!var24.after(new Date())) {
  213.                var24 = null;
  214.             }
  215.          }
  216.  
  217.          if (var24 != null) {
  218.             if (var19 != null && var24.getTime() == var19.getTime() && var24.after(new Date())) {
  219.                Vector var25 = new Vector();
  220.                var25.addElement(var2);
  221.                var25.addElement(var3);
  222.                this.nextEventList.addElement(var25);
  223.             }
  224.  
  225.             if (var19 == null || var24.before(var19) && var24.after(new Date())) {
  226.                Vector var26 = new Vector();
  227.                var26.addElement(var2);
  228.                var26.addElement(var3);
  229.                this.nextEventList = new Vector();
  230.                this.nextEventList.addElement(var26);
  231.                var19 = new Date(var24.getTime());
  232.             }
  233.          }
  234.       }
  235.  
  236.       if (var19 == null) {
  237.          return -1L;
  238.       } else {
  239.          return var19.getTime() - (new Date()).getTime();
  240.       }
  241.    }
  242.  
  243.    void checkTriggeredEvents() {
  244.       int var1 = this.triggeredEvents.size();
  245.  
  246.       for(int var2 = 0; var2 < var1; ++var2) {
  247.          String[] var3 = (String[])this.triggeredEvents.elementAt(var2);
  248.          Vector var4 = new Vector();
  249.          String var5 = "SELECT JDPSystem, EventName, JobQueue, EventType, ObjectType, Object, ObjectCons, ObjectParm, " + "JobPriorty, QuePriorty, JobHeld, NotifyUser, NotifyVia, NotifyOn, " + "LogEvent " + "FROM JDPEvent WHERE JDPSystem = '" + var3[0].trim() + "' " + "AND EventName = '" + var3[1].trim() + "' " + "AND Status = 'Y'";
  250.          int var6 = this.jaggSQL.execSQL(var5, var4);
  251.          if (var6 > 0) {
  252.             this.submitJobs(var4, false);
  253.          }
  254.  
  255.          this.triggeredEvents.removeElementAt(var2);
  256.          --var2;
  257.          --var1;
  258.       }
  259.  
  260.    }
  261.  
  262.    boolean checkDateRange(Date var1, Date var2) {
  263.       Date var3 = new Date();
  264.       Date var4 = new Date(0L);
  265.       var4.setHours(0);
  266.       var4.setMinutes(0);
  267.       var4.setSeconds(0);
  268.       var4.setTime(var4.getTime() / 1000L * 1000L);
  269.       var2.setHours(0);
  270.       var2.setMinutes(0);
  271.       var2.setSeconds(0);
  272.       var2.setTime(var2.getTime() / 1000L * 1000L);
  273.       var3.setHours(0);
  274.       var3.setMinutes(0);
  275.       var3.setSeconds(0);
  276.       var3.setTime(var3.getTime() / 1000L * 1000L);
  277.       return (var1 == null || var1.before(var3)) && (var2.getTime() == var4.getTime() || var2.after(var3) || var2.getTime() == var3.getTime());
  278.    }
  279.  
  280.    public JDPScheduler(JDPSubsystemMgr var1, JDPJob var2) {
  281.       try {
  282.          this.manager = var1;
  283.          this.thisJob = var2;
  284.          var2.setInstance(this);
  285.          this.triggeredEvents = new Vector();
  286.          this.setupJaggConnection();
  287.          var2.appendJobLog("JDPScheduler started on " + (new Date()).toString());
  288.          this.startAutoStartJobs();
  289.  
  290.          while(!var1.shutdownRequested) {
  291.             try {
  292.                this.checkTriggeredEvents();
  293.                long var3 = this.getNextEvent();
  294.                if (var3 > 0L) {
  295.                   Thread.sleep(var3);
  296.                   this.startEvent();
  297.                } else {
  298.                   var3 = this.getSecondsTillMidnight();
  299.                   Thread.sleep(var3);
  300.                }
  301.             } catch (InterruptedException var6) {
  302.             }
  303.          }
  304.  
  305.       } catch (Exception var7) {
  306.          var2.logException(var7);
  307.       }
  308.    }
  309.  
  310.    long getSecondsTillMidnight() {
  311.       Date var1 = new Date();
  312.       long var2 = var1.getTime();
  313.       var1.setHours(0);
  314.       var1.setMinutes(0);
  315.       var1.setSeconds(0);
  316.       var1.setTime(var1.getTime() / 1000L * 1000L);
  317.       var2 -= var1.getTime();
  318.       var2 = 86400000L - var2;
  319.       var2 += 2000L;
  320.       return var2;
  321.    }
  322.  
  323.    void startAutoStartJobs() {
  324.       Vector var1 = new Vector();
  325.       String var2 = "SELECT JDPSystem, EventName, JobQueue, EventType, ObjectType, Object, ObjectCons, ObjectParm, " + "JobPriorty, QuePriorty, JobHeld, NotifyUser, NotifyVia, NotifyOn, " + "LogEvent " + "FROM JDPEvent WHERE EventType = 'A' " + "AND Status = 'Y'";
  326.       this.jaggSQL.execSQL(var2, var1);
  327.       this.submitJobs(var1, true);
  328.    }
  329.  
  330.    boolean triggerEvent(String var1, String var2) {
  331.       String[] var3 = new String[]{var1, var2};
  332.       this.triggeredEvents.addElement(var3);
  333.       this.thisJob.getActiveJob().interrupt();
  334.       return true;
  335.    }
  336.  
  337.    void startEvent() {
  338.       String var1 = this.jaggSQL.getSEP();
  339.  
  340.       for(int var2 = 0; var2 < this.nextEventList.size(); ++var2) {
  341.          Vector var3 = (Vector)this.nextEventList.elementAt(var2);
  342.          String var4 = (String)var3.elementAt(0);
  343.          String var5 = (String)var3.elementAt(1);
  344.          Vector var6 = new Vector();
  345.          String var7 = "SELECT JobQueue, EventType, ObjectType, Object, ObjectCons, ObjectParm, " + "JobPriorty, QuePriorty, JobHeld, NotifyUser, NotifyVia, NotifyOn, " + "LogEvent " + "FROM JDPEvent WHERE JDPSystem = '" + var4 + "' " + "AND EventName = '" + var5 + "'";
  346.          this.jaggSQL.execSQL(var7, var6);
  347.  
  348.          for(int var8 = 0; var8 < var6.size(); ++var8) {
  349.             StringTokenizer var9 = new StringTokenizer((String)var6.elementAt(var8), var1);
  350.             String var10 = var9.nextToken().trim();
  351.             String var11 = var9.nextToken().trim();
  352.             String var12 = var9.nextToken().trim();
  353.             String var13 = var9.nextToken().trim();
  354.             String var14 = var9.nextToken().trim();
  355.             String var15 = var9.nextToken().trim();
  356.             int var16 = Integer.parseInt(var9.nextToken().trim());
  357.             int var17 = Integer.parseInt(var9.nextToken().trim());
  358.             boolean var18 = var9.nextToken().trim().equals("Y");
  359.             int var19 = Integer.parseInt(var9.nextToken().trim());
  360.             String var20 = var9.nextToken().trim();
  361.             String var21 = var9.nextToken().trim();
  362.             String var22 = var9.nextToken().trim();
  363.             String var23 = this.manager.submitJob(var10, var4, var5, var11, "JDPScheduler", var12, var13, var14, var15, var18, var16, var17, var19, var20, var21, var22);
  364.             if (var23 == null) {
  365.                this.thisJob.appendJobLog(var5 + " started on " + (new Date()).toString());
  366.             } else {
  367.                this.thisJob.appendJobLog(var23);
  368.             }
  369.          }
  370.       }
  371.  
  372.    }
  373. }
  374.