package org.projectapollo.demo.Jobs.JobList.Result;

import apollo.*;
import apollo.Template.*;
import apollo.Storable.*;
import apollo.Job.*;

import org.projectapollo.demo.Storable.*;

import java.util.*;
import java.text.*;

import apollo.Session.*;

public class ResultBroker extends PageBroker {
    Vector AS;
    AcceptClause normalEntry;
 
 
    public ResultBroker(ManagerTracker MT,String fquid,PageBroker PB) throws TemplatePageException {
        super(MT,fquid,PB);
        MT.getPM().registerTemplatePage(FQUID,
new TemplatePage(MT,this));
 
        AS =
new Vector();
        normalEntry=
new AcceptClause("NormalEntry");
        normalEntry.addAcceptClause(AcceptClause.INT,
"JobID", AcceptClause.REQUIRED);
        AS.addElement(normalEntry);
}
 
    public HTTPResponse render(TransactionTracker TT, HTTPRequest req, WebSession thisSession) throws ApolloException {
        EntryAssertionManager EAM =
new EntryAssertionManager(MT, AS);
        EAM.evaluate(req);
        Hashtable RT =
new Hashtable();
        Job j = MT.getJM().getJob(EAM.getInt(
"JobID"));
        if (j==null) {
            RT.put(
"Result", "No such job");
            return MT.getPM().getPage(FQUID).render(RT,thisSession);
        }
        JobResult jr = j.getJobResult();
        if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_HTML) {
            RT.put(
"Result", jr.getResult());
            RT.put(
"JobName", j.getJobName());
            RT.put(
"JobID", new Integer(j.getJobID()));
            return MT.getPM().getPage(FQUID).render(RT,thisSession);
        }
else if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_TEXT) {
            HTTPResponse res =
new HTTPResponse(MT, jr.getResult());
            res.setUseManualHeaders(
true);
            res.setManualHeaders(
"Content-type", "text/plain");
            return res;
        }
else if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_MS_WORD) {
            HTTPResponse res =
new HTTPResponse(MT, jr.getResult());
            res.setUseManualHeaders(
true);
            res.setManualHeaders(
"Content-type", "application.vnd/msword");
            res.setGZIPEncoding(
false);
            return res;
        }
else if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_MS_EXCEL) {
            HTTPResponse res =
new HTTPResponse(MT, jr.getResult());
            res.setUseManualHeaders(
true);
            res.setManualHeaders(
"Content-type", "application.vnd/msexcel");
            res.setGZIPEncoding(
false);
            return res;
        }
else if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_FQUID) {
            String s = jr.getResult();
            if (s==null) {
                s=
"";
            }
            RT.put(
"Result", "Result was an FQUID return to: "+s);
            RT.put(
"JobName", j.getJobName());
            RT.put(
"JobID", new Integer(j.getJobID()));
            return MT.getPM().getPage(FQUID).render(RT,thisSession);
        }
else if (jr.getResultTypeID()==JobMembership.RETURN_TYPE_NONE) {
            RT.put(
"Result", "There was no return value");
            RT.put(
"JobName", j.getJobName());
            RT.put(
"JobID", new Integer(j.getJobID()));
            return MT.getPM().getPage(FQUID).render(RT,thisSession);
        }
else {
            RT.put(
"Result", "Unknown job type!"+Integer.toString(jr.getResultTypeID()));
           
return MT.getPM().getPage(FQUID).render(RT,thisSession);
        }
    }
}