package org.projectapollo.demo.Session.Expiration;

import apollo.*;
import apollo.Log.*;
import apollo.Template.*;
import apollo.Storable.*;
import apollo.Session.*;

import
org.projectapollo.demo.Storable.*;

import
java.util.*;

public
class ExpirationBroker extends PageBroker {

    private Vector AS;
    AcceptClause normalEntry;
    AcceptClause setExpireTime;
    AcceptClause expireNow;

    public ExpirationBroker(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");

        setExpireTime=
new AcceptClause("Set Expire Time");
        setExpireTime.addAcceptClause(AcceptClause.STRING,
"SetExpireTime", AcceptClause.REQUIRED);
        setExpireTime.addAcceptClause(AcceptClause.INT,
"ExpireTime"
, AcceptClause.REQUIRED);

        expireNow=
new AcceptClause("Expire Now");
        expireNow.addAcceptClause(AcceptClause.STRING,
"ExpireNow", AcceptClause.REQUIRED);

        AS.addElement(setExpireTime);
        AS.addElement(expireNow);
        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();

   
     if (EAM.isAccept(expireNow)) {
            thisSession.setExpired(
true);
            RT.put(
"JSMessage", "This session is now expired");
        }

   
     if (EAM.isAccept(setExpireTime)) {
            if (EAM.getInt("ExpireTime")<2000) {
                thisSession.setTimeout(EAM.getInt(
"ExpireTime"));
            }
        }
 
        RT.put(
"CreationDate", thisSession.getCreationDate());
        RT.put(
"TimeBetweenTransactions", new Integer(thisSession.getTimeBetweenTransactions()));
        RT.put(
"Timeout", new Integer(thisSession.getTimeout()));
        RT.put(
"TotalTransactions", new Integer(thisSession.getTransactions()));
        SelectObject soExpireTime =
new SelectObject();
        soExpireTime.addOption(
"1800");
        soExpireTime.addOption(
"180");
        soExpireTime.addOption(
"60");
        soExpireTime.addOption(
"15");
        soExpireTime.addOption(
"5");
        soExpireTime.setChoice(Integer.toString(thisSession.getTimeout()));
        RT.put(
"ExpireTime", soExpireTime);
        return MT.getPM().getPage(FQUID).render(RT,thisSession);
    }
// end render
 
}