/*
* GSALogoffActionImpl
*
* 06/06/2003
*
* Copyright:
* Licensed Materials - Property of IBM
* "Restricted Materials of IBM"
* 5724-AEF
* (C) Copyright IBM Corp. 2003.
*
* %W% %E%
*/
package com.ibm.retail.AEF.action;
import com.ibm.retail.AEF.automation.*;
import com.ibm.retail.AEF.util.*;
import com.ibm.retail.si.util.*;
import com.ibm.retail.si.Copyright;
import com.ibm.retail.AEF.thread.*;
import com.ibm.retail.AEF.data.*;
import java.util.*;
import java.rmi.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* GSALogoffActionImpl is a class which the POSAutomationProvider uses to accomplish
* a logoff from the GSA application.
*
*/
public class GSALogoffActionImpl extends GSAActionImpl
{
static String copyright()
{ return com.ibm.retail.si.Copyright.IBM_COPYRIGHT_SHORT;}
private static Log log = LogFactory.getLog(GSALogoffActionImpl.class);
private static AEFPerfTrace perfTrace = AEFPerfTrace.getInstance();
/**
* Constructor
*
* @param request The ActionRequest which contains a HashMap of arguments.
* @exception com.ibm.retail.AEF.util.AEFException
* Among the possible AEFException error codes are:
*
AEFConst.CONFIG_ERROR, AEFConst.FACTORY_ERROR
*
Common Errors
*/
public GSALogoffActionImpl(ActionRequest request) throws AEFException
{
super(request);
if (log.isTraceEnabled())
{
tempAEFMessage.setMessage("+Enter GSALogoffActionImpl.GSALogoffActionImpl().");
log.trace(tempAEFMessage);
}
if (log.isTraceEnabled())
{
tempAEFMessage.setMessage("-Exit GSALogoffActionImpl.GSALogoffActionImpl().");
log.trace(tempAEFMessage);
}
}
/**
* Perform the action represented by the ActionRequest and return an ActionResult.
*
*
* @param request The ActionRequest which contains the classname and arguments.
* @return Object The Operator instance.
* @exception AEFException
* Among the possible error codes are:
*
AEFConst.PROCEDURE_NOT_ALLOWED, AEFConst.TRANSACTION_IN_PROGRESS
*
Common Errors
*/
public Object performAction() throws AEFException
{
if (log.isTraceEnabled())
{
tempAEFMessage.setMessage("+Enter GSALogoffActionImpl.performAction().");
log.trace(tempAEFMessage);
}
super.performAction(); // Call super to perform any common processing and clear any errors before we start.
try
{
Transaction trans = automationProvider.getTransaction();
if (trans != null)
{
// We have a transaction in progress. The client must void the transaction before logging off.
throw new AEFException(AEFConst.PROCEDURE_NOT_ALLOWED,
AEFConst.TRANSACTION_IN_PROGRESS,
"GSALogoffActionImpl.performAction(): Unable to logoff because a transaction is in progress.");
}
sendLogoffSequence();
// Log Trace info.
if (perfTrace.isEnabled(AEFPerfTrace. COARSE))
{
perfTrace.reportTimer(AEFPerfTrace. COARSE,
sessionID,
"logoff",
"<<>>Sending logoff key sequence to application.");
}
retVal = lock.performActionAndWait("wait-for-id-state", keySequenceAction, goodConditions2, BadConditionsImpl.getInstance().getBadConditions(), getTimeout());
if (retVal < 0)
{
AEFErrorHandler errorHandler = new AEFErrorHandler("Send Logoff Sequence Error Part 2");
retVal = errorHandler.handleError(lock, keySequenceAction, goodConditions2, BadConditionsImpl.getInstance().getBadConditions(), getTimeout(), retVal);
if (retVal < 0)
{
tempAEFMessage.setMessage("An AEF exception was thrown in GSALogoffActionImpl.performAction().");
log.trace(tempAEFMessage, errorHandler.getAllExceptions());
throw errorHandler.getAllExceptions();
}
}
if (log.isDebugEnabled())
{
tempAEFMessage.setMessage("GSALogoffActionImpl.sendLogoffSequence() retVal=" + retVal);
log.debug(tempAEFMessage);
}
if (log.isTraceEnabled())
{
tempAEFMessage.setMessage("-Exit GSALogoffActionImpl.sendLogoffSequence().");
log.trace(tempAEFMessage);
}
return retVal;
}
}