src.openwfe.org.decision.impl.DecisionParticipant Maven / Gradle / Ivy
/*
* Copyright (c) 2006, John Mettraux, OpenWFE.org
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* . Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* . Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* . Neither the name of the "OpenWFE" nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $Id: AbstractService.java 2587 2006-05-09 09:15:59Z jmettraux $
*/
//
// DecisionParticipant.java
//
// [email protected]
//
// generated with
// jtmpl 1.1.01 2004/05/19 ([email protected])
//
package openwfe.org.decision.impl;
import openwfe.org.MapUtils;
import openwfe.org.ApplicationContext;
import openwfe.org.engine.Definitions;
import openwfe.org.engine.workitem.WorkItem;
import openwfe.org.engine.workitem.InFlowWorkItem;
import openwfe.org.engine.dispatch.DispatchingException;
import openwfe.org.engine.expressions.FlowExpression;
import openwfe.org.engine.participants.LeafParticipant;
import openwfe.org.decision.DecisionService;
import openwfe.org.decision.DecisionException;
/**
* A participant that applies a decision table.
*
* CVS Info :
*
$Author$
*
$Id$
*
* @author [email protected]
*/
public class DecisionParticipant
extends LeafParticipant
{
private final static org.apache.log4j.Logger log = org.apache.log4j.Logger
.getLogger(DecisionParticipant.class.getName());
//
// CONSTANTS & co
/**
* The parameter 'tableName' points to the name of a decision table
* within the local decisionService.
* If 'participantNamePrefix' is set, this 'tableName' parameter will not
* be taken into account.
*/
public final static String P_TABLE_NAME
= "tableName";
/**
* By default, the 'decisionService' parameter points to 'decisionService'.
*/
public final static String P_DECISION_SERVICE
= "decisionService";
/**
* If this 'participantNamePrefix' parameter is set, the 'tableName' one
* is not taken into account;
* When set thus, the tableName will be the name of the participant
* without this prefix; if this parameter is set, for example, to
* "decide-" and this instance receives a workitem for the participant
* named "decide-price-level", the table name requested to the
* DecisionService will be "price-level".
*/
public final static String P_PNAME_PREFIX
= "participantNamePrefix";
//
// FIELDS
private String tableName = null;
private String participantNamePrefix = null;
private String decisionService = null;
//
// CONSTRUCTORS
public void init
(final String regex,
final java.util.Map params)
{
super.init(regex, params);
this.participantNamePrefix = MapUtils
.getAsString(params, P_PNAME_PREFIX);
if (this.participantNamePrefix != null)
{
log.info
("init() "+
"participantNamePrefix >"+this.participantNamePrefix+"<");
}
else
{
this.tableName = MapUtils
.getMandatoryString(params, P_TABLE_NAME);
log.info("init() tableName '"+this.tableName+"'");
}
this.decisionService = MapUtils
.getAsString(params, P_DECISION_SERVICE, P_DECISION_SERVICE);
log.info("init() decisionService '"+this.decisionService+"'");
}
//
// METHODS from Participant
public Object dispatch
(final ApplicationContext context, final WorkItem wi)
throws
DispatchingException
{
final InFlowWorkItem ifwi = (InFlowWorkItem)wi;
final FlowExpression fe = Definitions
.getExpressionPool(context).fetch(ifwi.getLastExpressionId());
final DecisionService ds =
(DecisionService)context.get(this.decisionService);
if (ds == null)
{
log.error
("dispatch() "+
"couldn't find decision service named '"+
this.decisionService+"'");
}
try
{
String tName = this.tableName;
if (this.tableName != null)
{
ds.apply(this.tableName, fe, ifwi);
}
else
{
tName = ifwi.getParticipantName();
if (log.isDebugEnabled())
log.debug("dispatch() participantName is >"+tName+"<");
tName = tName.substring(this.participantNamePrefix.length());
}
if (log.isDebugEnabled())
log.debug("dispatch() tableName is >"+tName+"<");
ds.apply(tName, fe, ifwi);
}
catch (final DecisionException e)
{
throw new DispatchingException
("failed to apply the workitem in the decision table '"+
tableName+"'", e);
}
log.debug("dispatch() decision application done");
//
// reply
reply(context, ifwi);
return null;
//
// no feedback required
}
//
// METHODS
//
// STATIC METHODS
}