home *** CD-ROM | disk | FTP | other *** search
- import java.util.Date;
- import java.util.Properties;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class JDPScheduler {
- JDPSubsystemMgr manager;
- JDPJob thisJob;
- JDPJagg jaggSQL;
- Vector nextEventList;
- Vector triggeredEvents;
-
- Date getNextRunTimeToday(long var1, long var3, int var5, String var6) {
- Date var7 = new Date();
- long var8 = var7.getTime();
- var7.setHours(0);
- var7.setMinutes(0);
- var7.setSeconds(0);
- var7.setTime(var7.getTime() / 1000L * 1000L);
- var8 -= var7.getTime();
- if (var3 == 0L) {
- if (var8 <= var1) {
- return new Date(var7.getTime() + var1);
- }
- } else {
- long var10 = (long)var5;
- if (var6.equals("M")) {
- var10 *= 60000L;
- } else if (var6.equals("H")) {
- var10 = var10 * 60L * 60000L;
- }
-
- while(var3 > var8 && var1 <= var3 && var1 < var8) {
- var1 += var10;
- }
-
- if (var3 > var8 && var1 <= var3 && var1 > var8) {
- return new Date(var7.getTime() + var1);
- }
- }
-
- return null;
- }
-
- boolean getNextDate(String var1, Date var2, int var3, String var4, int var5, int var6, int var7) {
- Date var8 = new Date();
- var8.setHours(0);
- var8.setMinutes(0);
- var8.setSeconds(0);
- var8.setTime(var8.getTime() / 1000L * 1000L);
- if (var1.equals("D")) {
- long var21 = var8.getTime() - var2.getTime();
- var21 /= 86400000L;
- if (var21 == 0L) {
- return true;
- } else {
- float var11 = (float)var21 / (float)var3;
- return var11 == (float)((int)var11);
- }
- } else if (var1.equals("W")) {
- int var20 = var8.getDay() - 1;
- if (var20 < 0) {
- var20 += 7;
- }
-
- if (var4.substring(var20).equals("N")) {
- return false;
- } else {
- long var23 = (long)(var8.getYear() * 52);
- Date var26 = new Date(var8.getYear(), 0, 1);
- var23 += (var8.getTime() - var26.getTime()) / 604800000L;
- long var13 = (long)(var2.getYear() * 52);
- var26 = new Date(var2.getYear(), 0, 1);
- var13 += (var2.getTime() - var26.getTime()) / 604800000L;
- long var15 = var23 - var13;
- if (var15 == 0L) {
- return true;
- } else {
- float var17 = (float)var15 / (float)var3;
- return var17 == (float)((int)var17);
- }
- }
- } else if (var1.equals("M")) {
- if (var5 > 0) {
- if (var5 != var8.getDate()) {
- return false;
- }
- } else if (var6 > 0) {
- int var9 = var8.getDay() - 1;
- if (var9 < 0) {
- var9 += 7;
- }
-
- if (var7 != var9) {
- return false;
- }
-
- int var10 = var8.getDate() / 7 + 1;
- if (var6 != var10) {
- return false;
- }
- }
-
- long var18 = (long)(var8.getYear() * 12);
- new Date(var8.getYear(), 0, 1);
- var18 += (long)(var8.getMonth() + 1);
- long var12 = (long)(var2.getYear() * 12);
- new Date(var2.getYear(), 0, 1);
- var12 += (long)(var2.getMonth() + 1);
- long var14 = var18 - var12;
- if (var14 == 0L) {
- return true;
- } else {
- float var16 = (float)var14 / (float)var3;
- return var16 == (float)((int)var16);
- }
- } else {
- return false;
- }
- }
-
- boolean submitJobs(Vector var1, boolean var2) {
- boolean var3 = true;
- String var4 = this.jaggSQL.getSEP();
-
- for(int var5 = 0; var5 < var1.size(); ++var5) {
- StringTokenizer var6 = new StringTokenizer((String)var1.elementAt(var5), var4);
- String var7 = var6.nextToken().trim();
- String var8 = var6.nextToken().trim();
- String var9 = var6.nextToken().trim();
- String var10 = var6.nextToken().trim();
- String var11 = var6.nextToken().trim();
- String var12 = var6.nextToken().trim();
- String var13 = var6.nextToken().trim();
- String var14 = var6.nextToken().trim();
- int var15 = Integer.parseInt(var6.nextToken().trim());
- int var16 = Integer.parseInt(var6.nextToken().trim());
- boolean var17 = var6.nextToken().trim().equals("Y");
- int var18 = Integer.parseInt(var6.nextToken().trim());
- String var19 = var6.nextToken().trim();
- String var20 = var6.nextToken().trim();
- String var21 = var6.nextToken().trim();
- JDPJobQueue var22 = this.manager.getJobQueue(var9);
- JDPSubsystem var23 = this.manager.getSubsystem(var22.getSubsystem());
- String var24 = null;
- if (var2 && var23.getJob(var8) != null) {
- this.thisJob.appendJobLog(var8 + " already running in " + var22.getSubsystem() + " and therefore not auto-started.");
- } else {
- var24 = this.manager.submitJob(var9, var7, var8, var10, "JDPScheduler", var11, var12, var13, var14, var17, var15, var16, var18, var19, var20, var21);
- if (var24 == null) {
- this.thisJob.appendJobLog(var8 + " auto-started on " + (new Date()).toString());
- } else {
- this.thisJob.appendJobLog(var24);
- }
- }
-
- if (var24 != null) {
- var3 = false;
- }
- }
-
- return var3;
- }
-
- void setupJaggConnection() {
- if (this.jaggSQL == null) {
- this.jaggSQL = new JDPJagg(this.manager.JDPJaggPath);
- this.jaggSQL.setDSN(this.manager.JDPJaggDSN);
- this.jaggSQL.setCSTR(this.manager.JDPJaggCSTR);
- this.jaggSQL.setJdbcDriver(this.manager.JDPJaggJdbcDriver);
- this.jaggSQL.setJdbcPrefix(this.manager.JDPJaggJdbcPrefix);
- this.jaggSQL.setJdbcSuffix(this.manager.JDPJaggJdbcSuffix);
- this.jaggSQL.setUID(this.manager.JDPJaggJdbcUserid);
- this.jaggSQL.setPWD(this.manager.JDPJaggJdbcPassword);
- }
-
- }
-
- public long getNextEvent() {
- String var1 = this.jaggSQL.getSEP();
- this.nextEventList = new Vector();
- new Properties();
- Date var19 = null;
- Vector var20 = new Vector();
- 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')";
- this.jaggSQL.execSQL(var21, var20);
-
- for(int var22 = 0; var22 < var20.size(); ++var22) {
- StringTokenizer var23 = new StringTokenizer((String)var20.elementAt(var22), var1);
- String var2 = var23.nextToken().trim();
- String var3 = var23.nextToken().trim();
- String var4 = var23.nextToken().trim();
- String var5 = var23.nextToken().trim();
- int var6 = Integer.parseInt(var23.nextToken().trim());
- String var7 = var23.nextToken().trim();
- int var8 = Integer.parseInt(var23.nextToken().trim());
- int var9 = Integer.parseInt(var23.nextToken().trim());
- int var10 = Integer.parseInt(var23.nextToken().trim());
- Date var11 = new Date(Long.valueOf(var23.nextToken().trim()));
- long var12 = Long.valueOf(var23.nextToken().trim());
- Date var14 = new Date(Long.valueOf(var23.nextToken().trim()));
- long var15 = Long.valueOf(var23.nextToken().trim());
- int var17 = Integer.parseInt(var23.nextToken().trim());
- String var18 = var23.nextToken().trim();
- Date var24 = null;
- if (var4.equals("R") && this.checkDateRange(var11, var14) && this.getNextDate(var5, var11, var6, var7, var8, var9, var10)) {
- var24 = this.getNextRunTimeToday(var12, var15, var17, var18);
- }
-
- if (var4.equals("O") && this.checkDateRange((Date)null, new Date(var11.getTime() + var12))) {
- var24 = new Date(var11.getTime() + var12);
- if (!var24.after(new Date())) {
- var24 = null;
- }
- }
-
- if (var24 != null) {
- if (var19 != null && var24.getTime() == var19.getTime() && var24.after(new Date())) {
- Vector var25 = new Vector();
- var25.addElement(var2);
- var25.addElement(var3);
- this.nextEventList.addElement(var25);
- }
-
- if (var19 == null || var24.before(var19) && var24.after(new Date())) {
- Vector var26 = new Vector();
- var26.addElement(var2);
- var26.addElement(var3);
- this.nextEventList = new Vector();
- this.nextEventList.addElement(var26);
- var19 = new Date(var24.getTime());
- }
- }
- }
-
- if (var19 == null) {
- return -1L;
- } else {
- return var19.getTime() - (new Date()).getTime();
- }
- }
-
- void checkTriggeredEvents() {
- int var1 = this.triggeredEvents.size();
-
- for(int var2 = 0; var2 < var1; ++var2) {
- String[] var3 = (String[])this.triggeredEvents.elementAt(var2);
- Vector var4 = new Vector();
- 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'";
- int var6 = this.jaggSQL.execSQL(var5, var4);
- if (var6 > 0) {
- this.submitJobs(var4, false);
- }
-
- this.triggeredEvents.removeElementAt(var2);
- --var2;
- --var1;
- }
-
- }
-
- boolean checkDateRange(Date var1, Date var2) {
- Date var3 = new Date();
- Date var4 = new Date(0L);
- var4.setHours(0);
- var4.setMinutes(0);
- var4.setSeconds(0);
- var4.setTime(var4.getTime() / 1000L * 1000L);
- var2.setHours(0);
- var2.setMinutes(0);
- var2.setSeconds(0);
- var2.setTime(var2.getTime() / 1000L * 1000L);
- var3.setHours(0);
- var3.setMinutes(0);
- var3.setSeconds(0);
- var3.setTime(var3.getTime() / 1000L * 1000L);
- return (var1 == null || var1.before(var3)) && (var2.getTime() == var4.getTime() || var2.after(var3) || var2.getTime() == var3.getTime());
- }
-
- public JDPScheduler(JDPSubsystemMgr var1, JDPJob var2) {
- try {
- this.manager = var1;
- this.thisJob = var2;
- var2.setInstance(this);
- this.triggeredEvents = new Vector();
- this.setupJaggConnection();
- var2.appendJobLog("JDPScheduler started on " + (new Date()).toString());
- this.startAutoStartJobs();
-
- while(!var1.shutdownRequested) {
- try {
- this.checkTriggeredEvents();
- long var3 = this.getNextEvent();
- if (var3 > 0L) {
- Thread.sleep(var3);
- this.startEvent();
- } else {
- var3 = this.getSecondsTillMidnight();
- Thread.sleep(var3);
- }
- } catch (InterruptedException var6) {
- }
- }
-
- } catch (Exception var7) {
- var2.logException(var7);
- }
- }
-
- long getSecondsTillMidnight() {
- Date var1 = new Date();
- long var2 = var1.getTime();
- var1.setHours(0);
- var1.setMinutes(0);
- var1.setSeconds(0);
- var1.setTime(var1.getTime() / 1000L * 1000L);
- var2 -= var1.getTime();
- var2 = 86400000L - var2;
- var2 += 2000L;
- return var2;
- }
-
- void startAutoStartJobs() {
- Vector var1 = new Vector();
- 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'";
- this.jaggSQL.execSQL(var2, var1);
- this.submitJobs(var1, true);
- }
-
- boolean triggerEvent(String var1, String var2) {
- String[] var3 = new String[]{var1, var2};
- this.triggeredEvents.addElement(var3);
- this.thisJob.getActiveJob().interrupt();
- return true;
- }
-
- void startEvent() {
- String var1 = this.jaggSQL.getSEP();
-
- for(int var2 = 0; var2 < this.nextEventList.size(); ++var2) {
- Vector var3 = (Vector)this.nextEventList.elementAt(var2);
- String var4 = (String)var3.elementAt(0);
- String var5 = (String)var3.elementAt(1);
- Vector var6 = new Vector();
- String var7 = "SELECT JobQueue, EventType, ObjectType, Object, ObjectCons, ObjectParm, " + "JobPriorty, QuePriorty, JobHeld, NotifyUser, NotifyVia, NotifyOn, " + "LogEvent " + "FROM JDPEvent WHERE JDPSystem = '" + var4 + "' " + "AND EventName = '" + var5 + "'";
- this.jaggSQL.execSQL(var7, var6);
-
- for(int var8 = 0; var8 < var6.size(); ++var8) {
- StringTokenizer var9 = new StringTokenizer((String)var6.elementAt(var8), var1);
- String var10 = var9.nextToken().trim();
- String var11 = var9.nextToken().trim();
- String var12 = var9.nextToken().trim();
- String var13 = var9.nextToken().trim();
- String var14 = var9.nextToken().trim();
- String var15 = var9.nextToken().trim();
- int var16 = Integer.parseInt(var9.nextToken().trim());
- int var17 = Integer.parseInt(var9.nextToken().trim());
- boolean var18 = var9.nextToken().trim().equals("Y");
- int var19 = Integer.parseInt(var9.nextToken().trim());
- String var20 = var9.nextToken().trim();
- String var21 = var9.nextToken().trim();
- String var22 = var9.nextToken().trim();
- String var23 = this.manager.submitJob(var10, var4, var5, var11, "JDPScheduler", var12, var13, var14, var15, var18, var16, var17, var19, var20, var21, var22);
- if (var23 == null) {
- this.thisJob.appendJobLog(var5 + " started on " + (new Date()).toString());
- } else {
- this.thisJob.appendJobLog(var23);
- }
- }
- }
-
- }
- }
-