/*
* RandomNumbersJob.java
*
*/
package org.projectapollo.demo.Jobs;
import apollo.Job.*;
import apollo.Template.*;
import apollo.*;
import java.util.*;
import org.projectapollo.demo.Storable.*;

/**
*
* @author kislo
* @version
*/
public class RandomNumbersJob 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 RandomNumbersJob(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=
"Initalizing";
        Vector randomNumbers =
new Vector();
        for (int i=0;i<25;i++) {
            extendedStatus=
"Calculating Random Number "+Integer.toString(i);
            if (i>10 && crash) {
                crash();
            }
            percentage=percentage+
.04;
            randomNumbers.addElement(
new Integer((int)(Math.random()*1000)));
            Thread.sleep(pauseTime);
        }
        jobResult =
new JobResult();
 
        TemplatePage mainPage;
        TemplatePage row;
        if (returnFormat==JobMembership.RETURN_TYPE_MS_WORD) {
            mainPage = MT.getPM().getPage(
"Jobs.RandomNumbers.doc");
            row = MT.getPM().getPage(
"Jobs.RandomNumbers_Row.doc");
            jobResult.setResultTypeID(JobMembership.RETURN_TYPE_MS_WORD);
        }
else if (returnFormat==JobMembership.RETURN_TYPE_MS_EXCEL) {
            row= MT.getPM().getPage(
"Jobs.RandomNumbers_Row.xls");
            mainPage= MT.getPM().getPage(
"Jobs.RandomNumbers.xls");
            jobResult.setResultTypeID(JobMembership.RETURN_TYPE_MS_EXCEL);
        }
else if (returnFormat==JobMembership.RETURN_TYPE_HTML) {
            row=MT.getPM().getPage(
"Jobs.RandomNumbers_Row.html");
            mainPage= MT.getPM().getPage(
"Jobs.RandomNumbers.html");
            jobResult.setResultTypeID(JobMembership.RETURN_TYPE_HTML);
        }
else {
            row=MT.getPM().getPage(
"Jobs.RandomNumbers_Row.txt");
            mainPage=MT.getPM().getPage(
"Jobs.RandomNumbers.txt");
            jobResult.setResultTypeID(JobMembership.RETURN_TYPE_TEXT);
        }
 
        StringBuffer sb =
new StringBuffer();
        Hashtable RT =
new Hashtable();
        int i=0;
        for (Enumeration e = randomNumbers.elements();e.hasMoreElements();) {
            i++;
            RT.put(
"RandomNumber", e.nextElement());
            RT.put(
"Count", new Integer(i));
            sb.append(row.toString(RT,
null));
        }
        RT=
new Hashtable();
        RT.put(
"RandomRows", 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;
    }
}