/* * Decompiled with CFR 0.152. * * Could not load the following classes: * oracle.apps.fnd.common.VersionInfo * oracle.apps.fnd.tcf.ServerDispatcher * oracle.apps.jtf.gantt.GanttMessages * oracle.apps.jtf.gantt.QueryInfo * oracle.apps.jtf.gantt.ResourceInfo * oracle.apps.jtf.gantt.TaskInfo * oracle.apps.jtf.gantt.exception.GetShifts24HrApiException * oracle.apps.jtf.gantt.exception.NoResourcesFoundException * oracle.apps.jtf.gantt.ganttUtil.Util * oracle.apps.jtf.gantt.javaui.events.ErrorTokenNVP * oracle.apps.jtf.gantt.javaui.events.ExceptionEvent * oracle.apps.jtf.gantt.javaui.events.WarningEvent * oracle.apps.jtf.gantt.server.DataRetrieval * oracle.apps.jtf.gantt.server.GanttDataServer * oracle.apps.jtf.gantt.server.RelationVar * oracle.apps.jtf.gantt.server.ResourceData * oracle.apps.jtf.gantt.server.ResourceQueue * oracle.apps.jtf.gantt.server.SqlTraceProfile * oracle.apps.jtf.gantt.server.TaskData * oracle.jdbc.OracleConnection * oracle.jdbc.OraclePreparedStatement * oracle.jdbc.OracleResultSet * oracle.sql.DATE * oracle.sql.NUMBER */ package oracle.apps.jtf.gantt.server; import java.sql.SQLException; import java.text.FieldPosition; import java.util.Date; import java.util.Random; import java.util.StringTokenizer; import oracle.apps.fnd.common.VersionInfo; import oracle.apps.fnd.tcf.ServerDispatcher; import oracle.apps.jtf.gantt.GanttMessages; import oracle.apps.jtf.gantt.QueryInfo; import oracle.apps.jtf.gantt.ResourceInfo; import oracle.apps.jtf.gantt.TaskInfo; import oracle.apps.jtf.gantt.exception.GetShifts24HrApiException; import oracle.apps.jtf.gantt.exception.NoResourcesFoundException; import oracle.apps.jtf.gantt.ganttUtil.Util; import oracle.apps.jtf.gantt.javaui.events.ErrorTokenNVP; import oracle.apps.jtf.gantt.javaui.events.ExceptionEvent; import oracle.apps.jtf.gantt.javaui.events.WarningEvent; import oracle.apps.jtf.gantt.server.GanttDataServer; import oracle.apps.jtf.gantt.server.RelationVar; import oracle.apps.jtf.gantt.server.ResourceData; import oracle.apps.jtf.gantt.server.ResourceQueue; import oracle.apps.jtf.gantt.server.SqlTraceProfile; import oracle.apps.jtf.gantt.server.TaskData; import oracle.jdbc.OracleConnection; import oracle.jdbc.OraclePreparedStatement; import oracle.jdbc.OracleResultSet; import oracle.sql.DATE; import oracle.sql.NUMBER; public class DataRetrieval public DataRetrieval(GanttDataServer ganttDataServer) { this.mServer = ganttDataServer; } public void destroy() { this.rsResourceResultSet = null; this.psTaskPstmt = null; this.psResourcePstmt = null; this.mServer = null; if (this.td != null) { this.td.destroy(); this.td = null; } if (this.rd != null) { this.rd.destroy(); this.rd = null; } } public void run() { try { this.mServer.writeLog("Thread is running.", 3); if (!this.mServer.isCancelRequested() && !this.mServer.isDestroyRequested()) { if (!this.mServer.isDataGenIntercepted()) { this.retrieveData(); } else { this.generateData(); } } else { this.mServer.emptyQueue(); } this.mServer.writeLog("Thread is done.", 3); } catch (SQLException sQLException) { ErrorTokenNVP[] errorTokenNVPArray = new ErrorTokenNVP[]{new ErrorTokenNVP(GanttMessages.MSG_ORA_ERROR, sQLException.getMessage())}; ExceptionEvent exceptionEvent = new ExceptionEvent((Object)this, GanttMessages.MSG_DB_ERROR, errorTokenNVPArray, (Exception)sQLException, true, true); this.mServer.setExceptionEvent(exceptionEvent); } catch (NoResourcesFoundException noResourcesFoundException) { Util.out2Log((GanttDataServer)this.mServer, (Exception)((Object)noResourcesFoundException)); WarningEvent warningEvent = new WarningEvent((Object)this, GanttMessages.MSG_NO_RESOURCES_FOUND); this.mServer.setWarningEvent(warningEvent); } catch (Exception exception) { if (this.mServer != null) { this.mServer.writeLog(Util.readStackTrace((Exception)exception), 4); ExceptionEvent exceptionEvent = this.prepareExceptionEvent("REFRESH_GANTT", exception); this.mServer.setExceptionEvent(exceptionEvent); } } finally { this.setRetrieving(false); if (this.rd != null) { this.rd = null; } if (this.td != null) { this.td = null; } this.mServer = null; if (this.psTaskPstmt != null) { try { this.psTaskPstmt.close(); } catch (Exception exception) {} this.psTaskPstmt = null; } if (this.psResourcePstmt != null) { try { this.psResourcePstmt.close(); } catch (Exception exception) {} this.psResourcePstmt = null; } if (this.rsResourceResultSet != null) { try { this.rsResourceResultSet.close(); } catch (Exception exception) {} this.rsResourceResultSet = null; } if (this.mServer != null) { this.mServer.getServerDispatcher().releaseJDBCConnection(); if (this.mServer.getConnection() != null) { this.mServer.setConnection(null); } } } } private void retrieveData() throws SQLException, Exception, NoResourcesFoundException { try { Object object; QueryInfo queryInfo = this.mServer.getQueryInfo(); ResourceQueue resourceQueue = this.mServer.getResourceQueue(); ResourceInfo resourceInfo = null; ResourceInfo resourceInfo2 = null; this.rd.clear(); int n = 0; int n2 = 0; int n3 = 0; if (this.mServer.isLoggingEnabled()) { this.mServer.writeLog("Resource Count from DataRetrieval Thread = " + n, 1); } while (this.rsResourceResultSet.next() && !this.mServer.isCancelRequested() && !this.mServer.isDestroyRequested()) { this.retrieveResourceData(this.rd, this.rsResourceResultSet); if (queryInfo.isQueryStatus(64)) { resourceInfo = new ResourceInfo(this.rd.getResourceId().longValue(), this.rd.getResourceType(), this.rd.getColumnData()); } else { try { resourceInfo = new ResourceInfo(this.rd.getResourceId().longValue(), this.rd.getResourceType(), this.rd.getResourceName() + "\n" + this.rd.getResourceTypeName()); } catch (Exception exception) { this.mServer.writeLog("Exception while creating ResourceInfo.", 1); Util.out2Log((GanttDataServer)this.mServer, (Exception)exception); } } object = this.mServer.getTaskStartTime(); TaskInfo taskInfo = new TaskInfo(0L, ((Date)object).getTime(), ((Date)object).getTime(), false, 0); if (taskInfo != null) { resourceInfo.addTask(taskInfo); } int n4 = this.retrieveTasks(resourceInfo, this.rd, this.mServer.getRelationVar(), this.psTaskPstmt); n2 += n4; if (this.mServer != null) { this.mServer.writeLog("Received " + n4, 1); this.mServer.writeLog("Retrieving Shifts", 1); } if (queryInfo.isShowShifts()) { int n5 = this.mServer.getShifts24Hr(resourceInfo); n3 += n5; } if (resourceInfo2 == null) { resourceInfo2 = resourceInfo; resourceInfo.setPreviousResource(null); } else { resourceInfo2.setNextResource(resourceInfo); resourceInfo.setPreviousResource(resourceInfo2); } ++n; resourceQueue.pushResource((Object)resourceInfo); if (this.mServer != null) { this.mServer.writeLog("No of Resource: " + n, 1); } if (n <= 0 || n % 10 != 0) continue; GanttDataServer ganttDataServer = this.mServer; synchronized (ganttDataServer) { this.mServer.notify(); } } if (this.mServer != null) { this.mServer.writeLog("Total No of Resources: " + n, 1); this.mServer.writeLog("Total No of Tasks: " + n2, 1); this.mServer.writeLog("Total No of Shifts: " + n3, 1); } if (n == 0) { object = new WarningEvent((Object)this, GanttMessages.MSG_NO_RESOURCES_FOUND); this.mServer.setWarningEvent((WarningEvent)object); } } catch (GetShifts24HrApiException getShifts24HrApiException) { this.mServer.writeLog("SQLException occurred while executing the getShift24 api", 4); ErrorTokenNVP[] errorTokenNVPArray = new ErrorTokenNVP[]{new ErrorTokenNVP(GanttMessages.MSG_ORA_ERROR, getShifts24HrApiException.getMessage() + "\n\n" + "jtf_calendar_pub_24hr_w.get_resource_shifts" + "\n\n")}; ExceptionEvent exceptionEvent = new ExceptionEvent((Object)this, GanttMessages.MSG_DB_ERROR, errorTokenNVPArray, (Exception)((Object)getShifts24HrApiException), true, true); this.mServer.setExceptionEvent(exceptionEvent); } catch (SQLException sQLException) { this.mServer.writeLog("SQLException occurred while executing the task-query", 4); ErrorTokenNVP[] errorTokenNVPArray = new ErrorTokenNVP[]{new ErrorTokenNVP(GanttMessages.MSG_ORA_ERROR, sQLException.getMessage() + "\n\n" + this.mServer.getQueryInfo().getTaskQueryString() + "\n\n")}; ExceptionEvent exceptionEvent = new ExceptionEvent((Object)this, GanttMessages.MSG_DB_ERROR, errorTokenNVPArray, (Exception)sQLException, true, true); this.mServer.setExceptionEvent(exceptionEvent); } catch (Exception exception) { Util.out2Log((GanttDataServer)this.mServer, (Exception)exception); ExceptionEvent exceptionEvent = this.prepareExceptionEvent("REFRESH_GANTT", exception); this.mServer.setExceptionEvent(exceptionEvent); throw exception; } finally { this.freeUpResource(); } } private void generateResourceData(ResourceData resourceData, int n) throws SQLException, Exception { QueryInfo queryInfo = this.mServer.getQueryInfo(); String string = "RS_EMPLOYEE"; boolean bl = true; resourceData.clear(); resourceData.setResourceId(new NUMBER(n)); resourceData.setResourceType(string); resourceData.setResourceName(String.valueOf(resourceData.getResourceId())); String[] stringArray = queryInfo.getSelectColDataType(); if (stringArray != null && stringArray.length <= 0) { resourceData.setResourceName(String.valueOf(n)); resourceData.setResourceTypeName(string); } else { String[] stringArray2 = new String[stringArray.length]; resourceData.setColumnData(stringArray2); block5: for (int i = 0; i < stringArray.length; ++i) { switch (stringArray[i].charAt(0)) { case 'C': { stringArray2[i] = "Column Data: " + String.valueOf(i); continue block5; } case 'N': { NUMBER nUMBER = new NUMBER(i); if (nUMBER != null) { stringArray2[i] = nUMBER.stringValue(); continue block5; } stringArray2[i] = " "; continue block5; } case 'D': { StringBuffer stringBuffer; DATE dATE; if (stringArray[i].length() > 1 && stringArray[i].charAt(1) == 'T') { dATE = new DATE(); stringBuffer = new StringBuffer(); if (dATE != null) { stringBuffer.setLength(0); stringBuffer = this.mServer.ganttMessages.getOracleDateFormat(1).format(new Date(this.mServer.adjust2ClientTimezone(dATE).getTime()), stringBuffer, new FieldPosition(0)); stringArray2[i] = stringBuffer.toString(); continue block5; } stringArray2[i] = " "; continue block5; } dATE = new DATE(); stringBuffer = new StringBuffer(); if (dATE != null) { stringBuffer.setLength(0); stringBuffer = this.mServer.ganttMessages.getOracleDateFormat(0).format((Date)dATE.dateValue(), stringBuffer, new FieldPosition(0)); stringArray2[i] = stringBuffer.toString(); continue block5; } stringArray2[i] = " "; continue block5; } default: { this.mServer.writeLog("Invalid datatype " + stringArray2[i] + " was passed in from the client", 1); throw new SQLException("Invalid datatype passed in from the Forms client"); } } } } this.mServer.writeLog("Leaving retrieveResourceData.", 1); } public void processDataGenToken(String string) throws Exception { if (string != null && string.length() > 0) { StringTokenizer stringTokenizer = new StringTokenizer(string, ":"); if (stringTokenizer.hasMoreTokens()) { String string2 = stringTokenizer.nextToken(); this.iNoRes = Integer.parseInt(string2); } if (stringTokenizer.hasMoreTokens()) { String string3 = stringTokenizer.nextToken(); this.iNoShifts = Integer.parseInt(string3); } if (stringTokenizer.hasMoreTokens()) { String string4 = stringTokenizer.nextToken(); this.iNoTasks = Integer.parseInt(string4); } } else { throw new Exception("JTF_GANTT_DATA_GENERATION_TOKEN is not defined"); } } private void generateData() throws Exception { try { QueryInfo queryInfo = this.mServer.getQueryInfo(); ResourceQueue resourceQueue = this.mServer.getResourceQueue(); this.rd.clear(); ResourceInfo resourceInfo = null; for (int i = 0; i < this.iNoRes && !this.mServer.isCancelRequested(); ++i) { this.generateResourceData(this.rd, i); resourceInfo = new ResourceInfo(this.rd.getResourceId().longValue(), this.rd.getResourceType(), this.rd.getResourceName() + "\n" + this.rd.getResourceTypeName()); resourceInfo.addTask(new TaskInfo(0L, this.mServer.getTaskStartTime().getTime(), this.mServer.getTaskStartTime().getTime(), false, 0)); this.generateTasks(resourceInfo); this.generateShifts(resourceInfo); resourceQueue.pushResource((Object)resourceInfo); if (!this.mServer.isCancelRequested() && !this.mServer.isDestroyRequested()) continue; GanttDataServer ganttDataServer = this.mServer; synchronized (ganttDataServer) { this.mServer.notify(); break; } } } catch (Exception exception) { Util.out2Log((GanttDataServer)this.mServer, (Exception)exception); ExceptionEvent exceptionEvent = this.prepareExceptionEvent("REFRESH_GANTT", exception); this.mServer.setExceptionEvent(exceptionEvent); throw exception; } finally { this.freeUpResource(); } } private void freeUpResource() { try { SqlTraceProfile sqlTraceProfile; if (this.rsResourceResultSet != null) { this.rsResourceResultSet.close(); this.rsResourceResultSet = null; } if (this.psResourcePstmt != null) { this.psResourcePstmt.close(); this.psResourcePstmt = null; } if (this.psTaskPstmt != null) { this.psTaskPstmt.close(); this.psTaskPstmt = null; } if (this.mServer != null && (sqlTraceProfile = this.mServer.getSqlTraceProfile()) != null && sqlTraceProfile.isTraceEnableSet()) { this.mServer.enableSqlTrace(false); } this.setRetrieving(false); sqlTraceProfile = this.mServer; synchronized (sqlTraceProfile) { this.mServer.notify(); } } catch (Exception exception) { Util.out2Log((GanttDataServer)this.mServer, (Exception)exception); } } public void executeQuery() throws SQLException, Exception { ServerDispatcher serverDispatcher = this.mServer.getServerDispatcher(); OracleConnection oracleConnection = null; try { oracleConnection = (OracleConnection)serverDispatcher.getJDBCConnection((Object)this); QueryInfo queryInfo = this.mServer.getQueryInfo(); if (oracleConnection == null) { this.mServer.writeLog("Connection is null", 4); throw new Exception("TCF could not create database connection"); } this.mServer.setConnection(oracleConnection); if (this.psResourcePstmt == null) { this.psResourcePstmt = (OraclePreparedStatement)oracleConnection.prepareStatement(queryInfo.getResourceQueryString()); } this.mServer.bindResourceBindVars(this.psResourcePstmt); if (this.psTaskPstmt == null) { this.psTaskPstmt = (OraclePreparedStatement)oracleConnection.prepareStatement(queryInfo.getTaskQueryString()); } this.mServer.bindTaskBindVars(this.psTaskPstmt); this.rsResourceResultSet = null; if (!this.mServer.isCancelRequested()) { this.rsResourceResultSet = (OracleResultSet)this.psResourcePstmt.executeQuery(); } } catch (SQLException sQLException) { this.freeUpResource(); throw sQLException; } catch (Exception exception) { this.freeUpResource(); throw exception; } } public ExceptionEvent prepareExceptionEvent(String string, Exception exception) { String string2 = Util.readStackTrace((Exception)exception); ErrorTokenNVP[] errorTokenNVPArray = new ErrorTokenNVP[]{new ErrorTokenNVP(GanttMessages.MSG_API_COMMAND_NO, string)}; return new ExceptionEvent((Object)this, GanttMessages.MSG_GENERAL_ERROR, errorTokenNVPArray, exception, true, true); } private synchronized void setRetrieving(boolean bl) { this.bIsRetrieving = bl; } public synchronized boolean isRetrieving() { return this.bIsRetrieving; } public synchronized void setServer(GanttDataServer ganttDataServer) { this.mServer = ganttDataServer; } private void retrieveResourceData(ResourceData resourceData, OracleResultSet oracleResultSet) throws SQLException, Exception { this.mServer.writeLog("In retrieveResourceData.", 1); QueryInfo queryInfo = this.mServer.getQueryInfo(); int n = 1; resourceData.clear(); resourceData.setResourceId(oracleResultSet.getNUMBER(n++)); resourceData.setResourceType(oracleResultSet.getString(n++)); String[] stringArray = queryInfo.getSelectColDataType(); if (stringArray != null && stringArray.length <= 0) { resourceData.setResourceName(oracleResultSet.getString(n++)); resourceData.setResourceTypeName(oracleResultSet.getString(n++)); } else { String[] stringArray2 = new String[stringArray.length]; resourceData.setColumnData(stringArray2); block5: for (int i = 0; i < stringArray.length; ++i) { switch (stringArray[i].charAt(0)) { case 'C': { stringArray2[i] = oracleResultSet.getString(n++); continue block5; } case 'N': { NUMBER nUMBER = oracleResultSet.getNUMBER(n++); if (nUMBER != null) { stringArray2[i] = nUMBER.stringValue(); continue block5; } stringArray2[i] = " "; continue block5; } case 'D': { StringBuffer stringBuffer; DATE dATE; if (stringArray[i].length() > 1 && stringArray[i].charAt(1) == 'T') { dATE = oracleResultSet.getDATE(n++); stringBuffer = new StringBuffer(); if (dATE != null) { stringBuffer.setLength(0); stringBuffer = this.mServer.ganttMessages.getOracleDateFormat(1).format(new Date(this.mServer.adjust2ClientTimezone(dATE).getTime()), stringBuffer, new FieldPosition(0)); stringArray2[i] = stringBuffer.toString(); continue block5; } stringArray2[i] = " "; continue block5; } dATE = oracleResultSet.getDATE(n++); stringBuffer = new StringBuffer(); if (dATE != null) { stringBuffer.setLength(0); stringBuffer = this.mServer.ganttMessages.getOracleDateFormat(0).format((Date)dATE.dateValue(), stringBuffer, new FieldPosition(0)); stringArray2[i] = stringBuffer.toString(); continue block5; } stringArray2[i] = " "; continue block5; } default: { this.mServer.writeLog("Invalid datatype " + stringArray2[i] + " was passed in from the client", 1); throw new SQLException("Invalid datatype passed in from the Forms client"); } } } } this.mServer.writeLog("Leaving retrieveResourceData.", 1); } private void retrieveTaskData(TaskData taskData, OracleResultSet oracleResultSet) throws Exception { QueryInfo queryInfo = this.mServer.getQueryInfo(); StringBuffer stringBuffer = new StringBuffer(); int n = 1; taskData.setTaskId(oracleResultSet.getNUMBER(n++)); DATE dATE = oracleResultSet.getDATE(n++); if (dATE != null) { taskData.setStartTime(this.mServer.adjust2ClientTimezone(dATE.timestampValue().getTime())); } if ((dATE = oracleResultSet.getDATE(n++)) != null) { taskData.setEndTime(this.mServer.adjust2ClientTimezone(dATE.timestampValue().getTime())); } taskData.setTravelTime(oracleResultSet.getInt(n++)); if (queryInfo.isQueryStatus(8)) { taskData.setColor(oracleResultSet.getInt(n++)); taskData.setTooltip(oracleResultSet.getString(n++)); taskData.setTaskText(oracleResultSet.getString(n++)); } else { taskData.setEscalationFlag(oracleResultSet.getString(n++)); taskData.setObjectSourceType(oracleResultSet.getString(n++)); taskData.setObjectSourceName(oracleResultSet.getString(n++)); taskData.setTaskNo(oracleResultSet.getString(n++)); taskData.setTaskName(oracleResultSet.getString(n++)); } this.mServer.writeLog("Leaving retrieveTaskData.", 1); } private int retrieveTasks(ResourceInfo resourceInfo, ResourceData resourceData, RelationVar[] relationVarArray, OraclePreparedStatement oraclePreparedStatement) throws SQLException { QueryInfo queryInfo = this.mServer.getQueryInfo(); this.mServer.bindRelationsBindVars(resourceData, relationVarArray, oraclePreparedStatement); OracleResultSet oracleResultSet = (OracleResultSet)oraclePreparedStatement.executeQuery(); this.td.clear(); int n = 0; try { while (oracleResultSet.next() && !this.mServer.isCancelRequested()) { String string = ""; boolean bl = false; try { this.retrieveTaskData(this.td, oracleResultSet); } catch (Exception exception) { this.mServer.writeLog("Exception suppressed during retrieveTaskData, and continuing.", 1); continue; } finally { ++n; continue; } if ((queryInfo.getQueryStatus() & 8) == 8) { if (!this.mServer.getShowTasks() || this.td.getTaskId().longValue() == 0L) continue; long l = this.td.getTaskId().longValue(); if (this.td.getEndTime().getTime() > this.td.getStartTime().getTime()) { resourceInfo.addTask(new TaskInfo(this.td.getTaskId().longValue(), this.td.getStartTime().getTime(), this.td.getEndTime().getTime(), this.td.getTravelTime(), this.td.getColor(), this.td.getTooltip(), this.td.getTaskText())); continue; } this.mServer.writeLog("Task# " + l + " was skipped because the start-time minus the travel-time was the same or later than the end time.", 1); continue; } string = this.td.getObjectSourceType() + "\n" + this.td.getObjectSourceName() + "\n" + this.td.getTaskNo() + "\n" + this.td.getTaskName(); boolean bl2 = bl = this.td.getEscalationFlag() != null && this.td.getEscalationFlag().equals("Y"); if (!this.mServer.getShowTasks() || this.td.getTaskId().longValue() == 0L) continue; resourceInfo.addTask(new TaskInfo(this.td.getTaskId().longValue(), this.td.getStartTime().getTime(), this.td.getEndTime().getTime(), 0L, 0L, bl, this.td.getTravelTime(), string)); } } finally { if (oracleResultSet != null) { oracleResultSet.close(); oracleResultSet = null; } } return n; } private void generateTaskData(TaskData taskData, long l, long l2, long l3) throws Exception { QueryInfo queryInfo = this.mServer.getQueryInfo(); StringBuffer stringBuffer = new StringBuffer(); taskData.setTaskId(new NUMBER(l)); taskData.setStartTime(this.mServer.adjust2ClientTimezone(l2)); taskData.setEndTime(this.mServer.adjust2ClientTimezone(l2 + l3)); taskData.setTravelTime(0); taskData.setColor(new Random(l).nextInt()); taskData.setTooltip("
%name%
2Lunch With LarryOpen%start%%end%%departure%%traveltime%
"); taskData.setTaskText(String.valueOf(l)); } private void generateTasks(ResourceInfo resourceInfo) throws Exception { QueryInfo queryInfo = this.mServer.getQueryInfo(); this.td.clear(); long l = this.mServer.getTaskStartTime().getTime(); long l2 = 3600000L; for (int i = 0; i < this.iNoTasks && !this.mServer.isCancelRequested(); ++i) { String string = ""; boolean bl = false; long l3 = resourceInfo.getResourceId() * (long)this.iNoTasks + (long)i; this.generateTaskData(this.td, l3, l += l2, l2); resourceInfo.addTask(new TaskInfo(this.td.getTaskId().longValue(), this.td.getStartTime().getTime(), this.td.getEndTime().getTime(), this.td.getTravelTime(), this.td.getColor(), this.td.getTooltip(), this.td.getTaskText())); } } private void generateShifts(ResourceInfo resourceInfo) throws Exception { long l = this.mServer.getTaskStartTime().getTime(); long l2 = 21600000L; long l3 = l + l2; for (int i = 0; i < this.iNoShifts && !this.mServer.isCancelRequested(); ++i) { resourceInfo.addShift(l, l3, -1); l = l3 + 64800000L; l2 = 21600000L; l3 = l + l2; } } }