atg.commerce.pricing
Class OrderPricingEngineImpl

java.lang.Object
  extended by atg.nucleus.logging.VariableArgumentApplicationLoggingImpl
      extended by atg.nucleus.GenericService
          extended by atg.commerce.pricing.PricingEngineService
              extended by atg.commerce.pricing.OrderPricingEngineImpl
All Implemented Interfaces:
OrderPricingEngine, PricingEngine, NameContextBindingListener, NameContextElement, NameResolver, AdminableService, ApplicationLogging, atg.nucleus.logging.ApplicationLoggingSender, atg.nucleus.logging.TraceApplicationLogging, VariableArgumentApplicationLogging, ComponentNameResolver, Service, ServiceListener, Schedulable, java.util.EventListener

public class OrderPricingEngineImpl
extends PricingEngineService
implements OrderPricingEngine

An OrderPricingEngine implementation which computes the price for an order. It accomplishes this task by invoking a series of OrderPricingCalculators which incrementally compute the order's price:

Note: if a particular order of calculator invocation is desired, sorting must be done prior to passing discounts/precalculators/postcalculators in to the Engine. Properties:

See Also:
OrderPriceInfo, OrderPricingCalculator

Field Summary
static java.lang.String CLASS_VERSION
          Class version string
 
Fields inherited from class atg.commerce.pricing.PricingEngineService
EXTRA_PARAM_QUALIFIERSERVICE, mGlobalPromotions, mPricingCalculatorServices
 
Fields inherited from class atg.nucleus.GenericService
SERVICE_INFO_KEY
 
Fields inherited from interface atg.nucleus.logging.TraceApplicationLogging
DEFAULT_LOG_TRACE_STATUS
 
Fields inherited from interface atg.nucleus.logging.ApplicationLogging
DEFAULT_LOG_DEBUG_STATUS, DEFAULT_LOG_ERROR_STATUS, DEFAULT_LOG_INFO_STATUS, DEFAULT_LOG_WARNING_STATUS
 
Constructor Summary
OrderPricingEngineImpl()
           
 
Method Summary
protected  void applyCalculator(java.lang.Object pCalc, OrderPriceInfo pOrderPriceQuote, PricingContext pPricingContext, java.util.Map pExtraParameters)
          Calls the supplied calculator service to price an Order.
protected  java.util.Collection<RepositoryItem> applyPromotions(java.util.Collection pPricingModels, OrderPriceInfo pOrderPriceQuote, PricingContext pPricingContext, java.util.Map pExtraParameters)
          Apply the pricing models (promotions) to the object being priced.
 void checkPromotionsForCloseness(OrderPriceInfo pPriceInfo, Order pOrder, java.util.Collection pPricingModels, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters)
          Check to see if the item qualifies under any of the pricingModels' "closenessQualifiers".
protected  java.lang.String getCurrencyCode(Order pOrder, java.util.Collection pPricingModels, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters)
          Return the currency code that should be used in the context of this pricing request
 OrderPricingCalculator[] getPostCalculators()
          Returns property PostCalculators
 OrderPricingCalculator[] getPreCalculators()
          Returns property PreCalculators
 java.util.Collection getPricingModels(RepositoryItem pProfile)
          Returns a List of pricing models (e.g.
 OrderPriceInfo priceOrder(Order pOrder, java.util.Collection pPricingModels, java.util.Locale pLocale, RepositoryItem pProfile, java.util.Map pExtraParameters)
          Price an order within a context
 void setPostCalculators(OrderPricingCalculator[] pPostCalculators)
          Sets property PostCalculators
 void setPreCalculators(OrderPricingCalculator[] pPreCalculators)
          Sets property PreCalculators
 
Methods inherited from class atg.commerce.pricing.PricingEngineService
addPromotion, addPromotionToList, checkAndAddPromotions, checkAndMergePromotions, checkPromotionExpiration, createPriceInfo, doStartService, doStopService, expirePromotion, findGlobalPromotions, getAdjustmentPricingModels, getAlwaysLoadGlobalPromotions, getCalculator, getCalculatorForCalculatorType, getCalculatorTypeCalculators, getCalculatorTypes, getClosenessQualifierEvaluator, getCurrencyCode, getDefaultLocale, getGlobalPromotions, getGlobalPromotionsQuery, getGlobalPromotionsSchedulableDate, getInitialPromotions, getPriceInfoClass, getPricingCurrencyCode, getPricingModelComparator, getPricingModelEvaluationVetoers, getPricingModelHolderVetoers, getPricingModelProperties, getPricingTools, getProfileProperties, getPromotionItemDescriptors, getPromotionItemTypes, getPromotions, getPromotionsRepository, getPromotionTools, getQualifierService, getQualifierService, getQualifierService, getScheduler, getUpdateSchedule, getUserOnlyPromotions, isUseMerge, isValidItemDescriptor, loadGlobalPromotions, performScheduledTask, prepareEvaluationVetoers, prepareHolderVetoers, resolveCalculator, setAlwaysLoadGlobalPromotions, setCalculatorTypeCalculators, setClosenessQualifierEvaluator, setDefaultLocale, setGlobalPromotionsQuery, setGlobalPromotionsSchedulableDate, setPriceInfoClass, setPricingModelComparator, setPricingModelEvaluationVetoers, setPricingModelHolderVetoers, setPricingModelProperties, setPricingTools, setProfileProperties, setPromotionItemTypes, setPromotionsRepository, setPromotionTools, setQualifierService, setScheduler, setUpdateSchedule, setUseMerge, vetoPromotionsForEvaluation
 
Methods inherited from class atg.nucleus.GenericService
addLogListener, createAdminServlet, getAbsoluteName, getAdminServlet, getLoggingForVlogging, getLogListenerCount, getLogListeners, getName, getNameContext, getNucleus, getRoot, getServiceConfiguration, getServiceInfo, isLoggingDebug, isLoggingError, isLoggingInfo, isLoggingTrace, isLoggingWarning, isRunning, logDebug, logDebug, logDebug, logError, logError, logError, logInfo, logInfo, logInfo, logTrace, logTrace, logTrace, logWarning, logWarning, logWarning, nameContextElementBound, nameContextElementUnbound, removeLogListener, reResolveThis, resolveName, resolveName, resolveName, resolveName, sendLogEvent, setLoggingDebug, setLoggingError, setLoggingInfo, setLoggingTrace, setLoggingWarning, setNucleus, setServiceInfo, startService, stopService
 
Methods inherited from class atg.nucleus.logging.VariableArgumentApplicationLoggingImpl
vlogDebug, vlogDebug, vlogDebug, vlogDebug, vlogError, vlogError, vlogError, vlogError, vlogInfo, vlogInfo, vlogInfo, vlogInfo, vlogTrace, vlogTrace, vlogTrace, vlogTrace, vlogWarning, vlogWarning, vlogWarning, vlogWarning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CLASS_VERSION

public static java.lang.String CLASS_VERSION
Class version string

Constructor Detail

OrderPricingEngineImpl

public OrderPricingEngineImpl()
Method Detail

setPreCalculators

public void setPreCalculators(OrderPricingCalculator[] pPreCalculators)
Sets property PreCalculators


getPreCalculators

public OrderPricingCalculator[] getPreCalculators()
Returns property PreCalculators


setPostCalculators

public void setPostCalculators(OrderPricingCalculator[] pPostCalculators)
Sets property PostCalculators


getPostCalculators

public OrderPricingCalculator[] getPostCalculators()
Returns property PostCalculators


getPricingModels

public java.util.Collection getPricingModels(RepositoryItem pProfile)
Returns a List of pricing models (e.g. promotions) for given a Profile.

Specified by:
getPricingModels in interface PricingEngine
Parameters:
pProfile - The user's profile from which the engine will extract promotions
Returns:
List of RepositoryItems which represent pricing models for use in pricing.

getCurrencyCode

protected java.lang.String getCurrencyCode(Order pOrder,
                                           java.util.Collection pPricingModels,
                                           java.util.Locale pLocale,
                                           RepositoryItem pProfile,
                                           java.util.Map pExtraParameters)
                                    throws PricingException
Return the currency code that should be used in the context of this pricing request

Throws:
PricingException - if an error occurs while attempting to determine the currency code

priceOrder

public OrderPriceInfo priceOrder(Order pOrder,
                                 java.util.Collection pPricingModels,
                                 java.util.Locale pLocale,
                                 RepositoryItem pProfile,
                                 java.util.Map pExtraParameters)
                          throws PricingException
Price an order within a context

Specified by:
priceOrder in interface OrderPricingEngine
Parameters:
pOrder - The order to price
pPricingModels - A Collection of RepositoryItems representing PricingModels
pLocale - The Locale to use for pricing
pProfile - The user's profile
pExtraParameters - A Map of extra parameters to be used in the pricing, may be null
Returns:
OrderPriceInfo representing the price quote for the order. Return null if no pricing info can be determined. This may occur if the order supplied is null.
Throws:
PricingException - if an error occurs while attempting to price

applyPromotions

protected java.util.Collection<RepositoryItem> applyPromotions(java.util.Collection pPricingModels,
                                                               OrderPriceInfo pOrderPriceQuote,
                                                               PricingContext pPricingContext,
                                                               java.util.Map pExtraParameters)
                                                        throws PricingException
Apply the pricing models (promotions) to the object being priced. Evaluates the promotions and calls the associated calculator services to price the object.

Parameters:
pPricingModels - Collection of PricingModel items
pOrderPriceQuote - OrderPriceInfo for the Order being priced
pPricingContext - PricingContext
pExtraParameters - Map of extra parameters, may be null
Returns:
Collection of RepositoryItem promotions that were applied, i.e. not vetoed.
Throws:
PricingException

applyCalculator

protected void applyCalculator(java.lang.Object pCalc,
                               OrderPriceInfo pOrderPriceQuote,
                               PricingContext pPricingContext,
                               java.util.Map pExtraParameters)
                        throws PricingException
Calls the supplied calculator service to price an Order.

Parameters:
pCalc - OrderPricingCalculator to call
pOrderPriceQuote - OrderPriceInfo for the Order
pPricingContext - PricingContext
pExtraParameters - Map of extra parameters
Throws:
PricingException

checkPromotionsForCloseness

public void checkPromotionsForCloseness(OrderPriceInfo pPriceInfo,
                                        Order pOrder,
                                        java.util.Collection pPricingModels,
                                        java.util.Locale pLocale,
                                        RepositoryItem pProfile,
                                        java.util.Map pExtraParameters)
                                 throws PricingException
Check to see if the item qualifies under any of the pricingModels' "closenessQualifiers". If so, add the closenessQualifiers to the priceInfo.

Parameters:
pPriceInfo - The OrderPriceInfo object associated with the order.
pOrder - The item to check
pPricingModels - A Collection of RepositoryItems representing PricingModels
pLocale - The Locale to use for pricing
pProfile - The user's profile
pExtraParameters - A Map of extra parameters to be used in the pricing, may be null
Throws:
PricingException