/*
* LoggedInJob.java
*
*/
package
org.projectapollo.demo.Jobs;
import apollo.Job.*;
import apollo.Session.*;
import apollo.Template.*;
import apollo.*;
import java.util.*;
import
org.projectapollo.demo.Storable.*;
/**
*
* @author kislo
* @version
*/
public class
LoggedInJob implements
Job {
/** Creates new DemoJob
*/
private
double
percentage;
private
int
jobID;
private
String jobName;
private
String error;
private
JobResult jobResult;
private
int
status;
private
ManagerTracker MT;
private
Date startDate;
private
User user;
private
int
returnFormat;
private
int
pauseTime;
private
String extendedStatus;
private
boolean
foregroundOperation;
private
boolean
crash;
public
LoggedInJob(ManagerTracker MT, String jobName, User user, int
returnFormat, int
pauseTime, boolean
crash) {
this.MT=MT;
this.jobName=jobName;
this.user=user;
this.percentage=0.0;
this.returnFormat=returnFormat;
this.pauseTime=pauseTime;
this.crash=crash;
status=JobManager.JOB_UNINITIALIZED;
}
private
void
crash() throws
UserException{
Vector a = null;
try
{
a.addElement("Uh-oh,
Nullpointer exception!");
} catch
(Exception e) {
throw
new
UserException("Oh my
goodness, we crashed!",e);
}
}
public
JobResult execute() throws
Exception {
//Attach this job to a
UserID for tracking
JobMembership jm = new
JobMembership(user.getUserID(), new
Integer(jobID));
jm.insert(MT);
status=JobManager.JOB_RUNNING;
extendedStatus="Fetching
user list";
jobResult = new
JobResult();
TemplatePage mainPage;
TemplatePage row;
if
(returnFormat==JobMembership.RETURN_TYPE_MS_WORD) {
mainPage = MT.getPM().getPage("Jobs.LoggedInUsers.doc");
row = MT.getPM().getPage("Jobs.LoggedInUsers_Row.doc");
jobResult.setResultTypeID(JobMembership.RETURN_TYPE_MS_WORD);
} else
if
(returnFormat==JobMembership.RETURN_TYPE_MS_EXCEL) {
row= MT.getPM().getPage("Jobs.LoggedInUsers_Row.xls");
mainPage= MT.getPM().getPage("Jobs.LoggedInUsers.xls");
jobResult.setResultTypeID(JobMembership.RETURN_TYPE_MS_EXCEL);
} else
if
(returnFormat==JobMembership.RETURN_TYPE_HTML) {
row=MT.getPM().getPage("Jobs.LoggedInUsers_Row.html");
mainPage= MT.getPM().getPage("Jobs.LoggedInUsers.html");
jobResult.setResultTypeID(JobMembership.RETURN_TYPE_HTML);
} else
{
row=MT.getPM().getPage("Jobs.LoggedInUsers_Row.txt");
mainPage=MT.getPM().getPage("Jobs.LoggedInUsers.txt");
jobResult.setResultTypeID(JobMembership.RETURN_TYPE_TEXT);
}
int
totalNum=0;
for
(Enumeration e = MT.getSM().getSessions(); e.hasMoreElements();) {
WebSession s = (WebSession) e.nextElement();
if
(!s.isExpired()) {
totalNum++;
}
}
StringBuffer sb = new
StringBuffer();
Hashtable RT = new
Hashtable();
int
count=0;
for
(Enumeration e = MT.getSM().getSessions(); e.hasMoreElements();) {
WebSession s = (WebSession) e.nextElement();
if
(s.isExpired()) {
continue;
}
count++;
percentage=count/totalNum;
extendedStatus="Fetching
user number "+count;
if
(percentage>.7
&& crash) {
crash();
}
RT.put("Username",
s.getValue("Username"));
RT.put("Idle",
new
Integer(s.getTimeBetweenTransactions()));
 
sb.append(row.toString(RT,null));
Thread.sleep(pauseTime);
}
RT=new
Hashtable();
RT.put("UserRows",
sb);
jobResult.setResult(mainPage.toString(RT, null));
status=JobManager.JOB_FINISHED;
return
jobResult;
}
public
double
getPercentage() {
return
percentage;
}
public
int
getStatusID() {
return
status;
}
public
void
setStatusID(int
statusID) {
this.status=statusID;
}
public
JobResult getJobResult() {
return
jobResult;
}
public
void
setJobID(int
jobID) {
this.jobID=jobID;
}
public
int
getJobID() {
return
jobID;
}
public
String getJobName() {
return
jobName;
}
public
String getError() {
return
error;
}
public
void
setError(String error) {
this.error=error;
}
public
Date getStartDate() {
return
startDate;
}
public
String getExtendedStatus() {
return
extendedStatus;
}
public
void
setStartDate(Date startDate) {
this.startDate=startDate;
}
}