package org.projectapollo.demo.Jobs.JobList;

import
apollo.*;
import apollo.Template.*;
import apollo.Storable.*;
import apollo.Job.*;
import org.projectapollo.demo.*;
import org.projectapollo.demo.Storable.*;
import java.util.*;
import org.projectapollo.demo.Jobs.JobList.Error.*;
import org.projectapollo.demo.Jobs.JobList.Result.*;
import java.lang.Thread;
import apollo.Session.*;

public
class JobListBroker extends PageBroker {
    public JobListBroker(ManagerTracker MT,String fquid,PageBroker PB) throws TemplatePageException {
        super(MT,fquid,PB);
        this.registerPageHandler("Result", new ResultBroker (MT, fquid+".Result", this));
        this.registerPageHandler("Error", new ErrorBroker(MT, fquid+".Error", this));
        MT.getPM().registerTemplatePage(FQUID,
new TemplatePage(MT,this));
        MT.getPM().registerTemplatePage(FQUID+
".Job", new TemplatePage(MT,this, "job.html", false
));
    }
 
    public HTTPResponse render(TransactionTracker TT, HTTPRequest req, WebSession thisSession) throws ApolloException {
        User u = (User) thisSession.getValue(
"User");
        WhereStatement wq;
        if (u.getUserID().equals("admin")) {
            wq =
new RawWhereQuery("");
        }
else {
            WhereQuery wqs =
new WhereQuery();
            wqs.insertWhereClause(WhereQuery.AND,
"userID", JobMembership.class, u.getUserID());
            wqs.insertWhereClause(WhereQuery.AND,
"jobID", JobMembership.class, "jobID", JobRecord.class);
            wq = wqs;
        }
        Vector jobs = JobRecord.loadVectorInstance(TT, wq);
        Hashtable RT =
new Hashtable();
        StringBuffer sb =
new StringBuffer();
 
        for (Enumeration e = jobs.elements(); e.hasMoreElements();) {
            JobRecord jr = (JobRecord) e.nextElement();
            Hashtable miniRT =
new Hashtable();
            miniRT.put(
"JobID", new Integer(jr.getJobID()));
            if (jr.getStatusID()==JobManager.JOB_UNINITIALIZED) {
                miniRT.put(
"Status", "Uninitialized");
            }
else if (jr.getStatusID()==JobManager.JOB_RUNNING) {
                miniRT.put(
"Status", "Running");
                miniRT.put(
"ViewStatus", new Boolean(true));
            }
else if (jr.getStatusID()==JobManager.JOB_FAILED) {
                miniRT.put(
"Status", "Failed");
                miniRT.put(
"Errors", new Boolean(true));
            }
else if (jr.getStatusID()==JobManager.JOB_FINISHED) {
                miniRT.put(
"Status", "Finished");
                miniRT.put(
"Results", new Boolean(true));
            }
else {
                miniRT.put(
"Status", "Unknown");
            }
            if (jr.getStartDate()==null) {
                miniRT.put(
"StartDate", " -- ");
            }
else {
                miniRT.put(
"StartDate", jr.getStartDate());
            }

            miniRT.put(
"JobName", jr.getJobName());
            WhereQuery wqj =
new WhereQuery();
            wqj.insertWhereClause(WhereQuery.AND,
"jobID", JobMembership.class, new Integer(jr.getJobID()));
            Vector vecJM = JobMembership.loadVectorInstance(TT, wqj);
 
            JobMembership jm = (JobMembership) vecJM.firstElement();
            miniRT.put(
"UserID", jm.getUserID());
            sb.append(MT.getPM().getPage(FQUID+
".Job").toString(miniRT, thisSession));
        }
        RT.put(
"Jobs", sb.toString());
 
        return MT.getPM().getPage(FQUID).render(RT,thisSession);
    }
}