|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object atg.nucleus.logging.VariableArgumentApplicationLoggingImpl atg.nucleus.GenericService atg.commerce.pricing.PricingEngineService
public abstract class PricingEngineService
A GenericService version of a PricingEngine. PricingEngine implementations can extend this class in order to leverage scheduling, global promotions, locale, and other configuration functionality from the PricingEngineService.
Properties:
globalPromotionsQuery
. Re-running
that query generates a new list of global promotions.
globalPromotionsQuery
is periodically run.
Field Summary | |
---|---|
static java.lang.String |
CLASS_VERSION
Class version string |
static java.lang.String |
EXTRA_PARAM_QUALIFIERSERVICE
|
protected java.util.List |
mGlobalPromotions
|
protected java.util.Map |
mPricingCalculatorServices
Cache of calculator names to calculator service instances |
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 | |
---|---|
PricingEngineService()
|
Method Summary | |
---|---|
protected boolean |
addPromotion(RepositoryItem pPromotion,
java.util.Date pNow)
This method determines if the given promotion should qualify for use in determining pricing. |
void |
addPromotionToList(RepositoryItem pPromotion,
java.util.List pPricingModels,
RepositoryItem pProfile)
Adds a new promotion to the list of pricing models. |
protected void |
checkAndAddPromotions(java.util.Collection pSource,
java.util.Collection pDestination,
java.util.Date pNow,
RepositoryItem pProfile)
Receives a collection of promotionStatus objects which are cycled through to determine which of these promotions has expired, and which should be added to the pricingModels used. |
protected void |
checkAndMergePromotions(java.util.Collection pSource,
java.util.Collection pCheckedMerge,
java.util.Collection pDestination,
java.util.Date pNow,
RepositoryItem pProfile)
Merges together two lists of promotions in the correct sorted order. |
protected boolean |
checkPromotionExpiration(RepositoryItem pPromotion,
java.util.Date pNow)
Return true if the promotion has expired and should be removed from the user's collection of active promotions |
protected AmountInfo |
createPriceInfo()
Returns a new instance of the of the class defined through the priceInfoClass
property. |
void |
doStartService()
Loads the global promotions. |
void |
doStopService()
Stops the schedule for updating the global promotions |
protected void |
expirePromotion(RepositoryItem pPromotion,
RepositoryItem pProfile)
Called if checkPromotionExpiration determines that a promotion has expired and
should no longer be active. |
protected java.util.List |
findGlobalPromotions()
Return the set of global promotions for this pricing engine |
protected java.util.List |
getAdjustmentPricingModels(AmountInfo pPriceInfo)
Gets the pricingModels from the priceInfo's "adjustments" property These are the promotions the order has qualified for, and should not be evaluated for closeness |
boolean |
getAlwaysLoadGlobalPromotions()
Gets whether or not to always load the global promotions rather than using the cache. |
protected java.lang.Object |
getCalculator(RepositoryItem pPricingModel)
Return the pricing calculator that should be used for the given promotion. |
java.lang.Object |
getCalculatorForCalculatorType(java.lang.String pCalculatorType)
Returns the calculator service for the given type. |
ServiceMap |
getCalculatorTypeCalculators()
|
CalculatorInfo[] |
getCalculatorTypes()
Gets the information for the calculators this pricing engine supports |
ClosenessQualifierEvaluator |
getClosenessQualifierEvaluator()
|
protected java.lang.String |
getCurrencyCode(java.util.Locale pLocale)
Return the currency code which should be used for the given locale. |
java.util.Locale |
getDefaultLocale()
Returns property DefaultLocale |
java.util.List |
getGlobalPromotions()
Returns property GlobalPromotions |
RqlStatement |
getGlobalPromotionsQuery()
Returns property GlobalPromotionsQuery |
CurrentDate |
getGlobalPromotionsSchedulableDate()
Returns property GlobalPromotionsSchedulableDate |
protected java.util.List |
getInitialPromotions(RepositoryItem pProfile)
Helper method that returns a List of promotions for given a Profile. |
java.lang.Class |
getPriceInfoClass()
Returns property PriceInfoClass |
protected java.lang.String |
getPricingCurrencyCode(RepositoryItem pProfile,
java.lang.String pPriceListPropertyName,
boolean pUseDefaultPriceList,
java.util.Map pExtraParameters,
java.util.Locale pLocale)
Gets the locale currency code for pricing. |
java.util.Comparator |
getPricingModelComparator()
Returns property PricingModelComparator |
PricingModelEvaluationVetoer[] |
getPricingModelEvaluationVetoers()
|
PricingModelHolderVetoer[] |
getPricingModelHolderVetoers()
|
PricingModelProperties |
getPricingModelProperties()
Returns a bean that contains properties for a PricingModel |
PricingTools |
getPricingTools()
Returns property PricingTools |
java.lang.String[] |
getProfileProperties()
The profile properties to inspect for pricing models |
RepositoryItemDescriptor[] |
getPromotionItemDescriptors()
Returns the promotion item descriptors |
java.lang.String[] |
getPromotionItemTypes()
Returns property PromotionItemTypes |
java.util.List |
getPromotions(RepositoryItem pProfile)
|
Repository |
getPromotionsRepository()
The repository which contains the promotions |
PromotionTools |
getPromotionTools()
Returns property PromotionTools |
Qualifier |
getQualifierService()
|
Qualifier |
getQualifierService(java.util.Map pExtraParameters)
Gets the Qualifier service to use. |
Qualifier |
getQualifierService(RepositoryItem pPricingModel,
java.util.Map pExtraParameters)
Gets the Qualifier service to use. |
Scheduler |
getScheduler()
Returns property Scheduler |
Schedule |
getUpdateSchedule()
Returns property UpdateSchedule |
java.util.List |
getUserOnlyPromotions(RepositoryItem pProfile)
|
boolean |
isUseMerge()
If true then this flag turns on an efficient merge algorithm to merge profile and global promotions. |
protected boolean |
isValidItemDescriptor(RepositoryItem pPromotion)
This method determines if the given promotion's item descriptor matches that of the PricingEngine configured item descriptors, promotionItemDescriptors |
void |
loadGlobalPromotions()
Find and load the global promotions. |
void |
performScheduledTask(Scheduler pScheduler,
ScheduledJob pJob)
Reload the global promotions |
protected java.util.List<atg.commerce.pricing.PricingEngineService.ValidEvaluationVetoer> |
prepareEvaluationVetoers(PricingEngineService pPricingEngine,
PricingContext pPricingContext,
java.util.Map pExtraParametersMap)
Iterates over the configured pricing model evaluation vetoers and calls the prepare method for each. |
protected java.util.List<atg.commerce.pricing.PricingEngineService.ValidHolderVetoer> |
prepareHolderVetoers(PricingEngineService pPricingEngine,
RepositoryItem pProfile)
Iterates over the configured pricing model holdr vetoers and calls the prepare method for each. |
protected java.lang.Object |
resolveCalculator(java.lang.String pCalcServiceString)
Resolves the passed in calculator service nucleus path to a service reference. |
void |
setAlwaysLoadGlobalPromotions(boolean pAlwaysLoadGlobalPromotions)
Sets whether or not to always load the global promotions rather than using the cache. |
void |
setCalculatorTypeCalculators(ServiceMap pCalculatorTypeCalculators)
|
void |
setClosenessQualifierEvaluator(ClosenessQualifierEvaluator pClosenessQualifierEvaluator)
Component that evaluates if an order or item meets the closenessQualifiers for relevant promotions |
void |
setDefaultLocale(java.util.Locale pDefaultLocale)
Sets property DefaultLocale |
void |
setGlobalPromotionsQuery(RqlStatement pGlobalPromotionsQuery)
Sets property GlobalPromotionsQuery |
void |
setGlobalPromotionsSchedulableDate(CurrentDate pGlobalPromotionsSchedulableDate)
Sets property GlobalPromotionsSchedulableDate |
void |
setPriceInfoClass(java.lang.Class pPriceInfoClass)
Sets property PriceInfoClass |
void |
setPricingModelComparator(java.util.Comparator pPricingModelComparator)
Sets property PricingModelComparator |
void |
setPricingModelEvaluationVetoers(PricingModelEvaluationVetoer[] pPricingModelEvaluationVetoers)
|
void |
setPricingModelHolderVetoers(PricingModelHolderVetoer[] pPricingModelHolderVetoers)
|
void |
setPricingModelProperties(PricingModelProperties pPricingModelProperties)
|
void |
setPricingTools(PricingTools pPricingTools)
Sets property PricingTools |
void |
setProfileProperties(java.lang.String[] pProfileProperties)
|
void |
setPromotionItemTypes(java.lang.String[] pPromotionItemTypes)
Sets property PromotionItemTypes |
void |
setPromotionsRepository(Repository pPromotionsRepository)
|
void |
setPromotionTools(PromotionTools pPromotionTools)
Sets property PromotionTools |
void |
setQualifierService(Qualifier pQualifierService)
|
void |
setScheduler(Scheduler pScheduler)
Sets property Scheduler |
void |
setUpdateSchedule(Schedule pUpdateSchedule)
Sets property UpdateSchedule |
void |
setUseMerge(boolean pUseMerge)
|
protected java.util.Collection<RepositoryItem> |
vetoPromotionsForEvaluation(PricingContext pPricingContext,
java.util.Map pExtraParametersMap,
java.util.Collection<RepositoryItem> pPricingModels)
Validates the passed in promotions against the configured vetoers for evaluation. |
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 |
---|
public static java.lang.String CLASS_VERSION
public static final java.lang.String EXTRA_PARAM_QUALIFIERSERVICE
protected java.util.Map mPricingCalculatorServices
protected java.util.List mGlobalPromotions
Constructor Detail |
---|
public PricingEngineService()
Method Detail |
---|
public boolean isUseMerge()
If the number of profile based promotions is typically very large it may be more efficient to disable this flag. Defaults to true.
public void setUseMerge(boolean pUseMerge)
public ServiceMap getCalculatorTypeCalculators()
public void setCalculatorTypeCalculators(ServiceMap pCalculatorTypeCalculators)
public PricingModelEvaluationVetoer[] getPricingModelEvaluationVetoers()
public void setPricingModelEvaluationVetoers(PricingModelEvaluationVetoer[] pPricingModelEvaluationVetoers)
public PricingModelHolderVetoer[] getPricingModelHolderVetoers()
public void setPricingModelHolderVetoers(PricingModelHolderVetoer[] pPricingModelHolderVetoers)
public Qualifier getQualifierService()
public void setQualifierService(Qualifier pQualifierService)
public RepositoryItemDescriptor[] getPromotionItemDescriptors()
public void setPromotionTools(PromotionTools pPromotionTools)
public PromotionTools getPromotionTools()
public void setPricingTools(PricingTools pPricingTools)
public PricingTools getPricingTools()
public void setScheduler(Scheduler pScheduler)
public Scheduler getScheduler()
public void setUpdateSchedule(Schedule pUpdateSchedule)
public Schedule getUpdateSchedule()
public void setDefaultLocale(java.util.Locale pDefaultLocale)
public java.util.Locale getDefaultLocale()
public java.util.List getGlobalPromotions()
public void setPriceInfoClass(java.lang.Class pPriceInfoClass)
public java.lang.Class getPriceInfoClass()
public void setPricingModelComparator(java.util.Comparator pPricingModelComparator)
public java.util.Comparator getPricingModelComparator()
public void setClosenessQualifierEvaluator(ClosenessQualifierEvaluator pClosenessQualifierEvaluator)
pClosenessQualifierEvaluator
- the component that evaluates if an order
or item meets the closenessQualifiers for relevant promotionspublic ClosenessQualifierEvaluator getClosenessQualifierEvaluator()
public void setPricingModelProperties(PricingModelProperties pPricingModelProperties)
public PricingModelProperties getPricingModelProperties()
public void setProfileProperties(java.lang.String[] pProfileProperties)
public java.lang.String[] getProfileProperties()
public void setPromotionsRepository(Repository pPromotionsRepository)
public Repository getPromotionsRepository()
public void setPromotionItemTypes(java.lang.String[] pPromotionItemTypes)
public java.lang.String[] getPromotionItemTypes()
public void setGlobalPromotionsQuery(RqlStatement pGlobalPromotionsQuery)
public RqlStatement getGlobalPromotionsQuery()
public void setGlobalPromotionsSchedulableDate(CurrentDate pGlobalPromotionsSchedulableDate)
public CurrentDate getGlobalPromotionsSchedulableDate()
public void setAlwaysLoadGlobalPromotions(boolean pAlwaysLoadGlobalPromotions)
Setting this property to true will ensure the global promotions are loaded from the repository if they haven't expired by the current date and time, i.e. it will not use the globalPromotionsSchedulableDate in the query.
This should be set to true for preview to allow merch users to see the latest promotion changes (see COMMERCE-168402).
pAlwaysLoadGlobalPromotions
- boolean defaults to falsepublic boolean getAlwaysLoadGlobalPromotions()
If this property is true it will ensure the global promotions are loaded from the repository if they haven't expired by the current date and time, i.e. it will not use the globalPromotionsSchedulableDate in the query.
This would be set to true for preview to allow merch users to see the latest promotion changes (see COMMERCE-168402).
protected java.util.List findGlobalPromotions()
public void loadGlobalPromotions() throws PricingException
findGlobalPromotions
. The list returned by this operation
is made available through the globalPromotions
property.
PricingException
public void doStartService() throws ServiceException
doStartService
in class GenericService
ServiceException
- if the Service had a problem starting uppublic void doStopService() throws ServiceException
doStopService
in class GenericService
ServiceException
- if an error occurred during the operationpublic void performScheduledTask(Scheduler pScheduler, ScheduledJob pJob)
performScheduledTask
in interface Schedulable
pScheduler
- calling the jobpJob
- the ScheduledJobprotected java.lang.String getCurrencyCode(java.util.Locale pLocale)
protected java.lang.String getPricingCurrencyCode(RepositoryItem pProfile, java.lang.String pPriceListPropertyName, boolean pUseDefaultPriceList, java.util.Map pExtraParameters, java.util.Locale pLocale)
pProfile
- RepositoryItem profilepPriceListPropertyName
- String name of the price list property in the profilepUseDefaultPriceList
- boolean, true to use the default price list if neededpExtraParameters
- Optional map of extra parameters which may include the price listpLocale
- Locale to use if no price list or default locale is found
protected AmountInfo createPriceInfo() throws PricingException
priceInfoClass
property.
PricingException
- if there was a problem instantiating the objectprotected java.util.List getInitialPromotions(RepositoryItem pProfile) throws PricingException
pProfile
- The user's profile from which the engine will extract promotions
PricingException
public void addPromotionToList(RepositoryItem pPromotion, java.util.List pPricingModels, RepositoryItem pProfile)
pPromotion
- pPricingModels
- pProfile
-
PricingException
checkAndAddPromotions(Collection, Collection, Date, RepositoryItem)
public java.util.List getUserOnlyPromotions(RepositoryItem pProfile) throws PricingException
PricingException
public java.util.List getPromotions(RepositoryItem pProfile) throws PricingException
PricingException
protected void checkAndAddPromotions(java.util.Collection pSource, java.util.Collection pDestination, java.util.Date pNow, RepositoryItem pProfile)
protected java.util.List<atg.commerce.pricing.PricingEngineService.ValidEvaluationVetoer> prepareEvaluationVetoers(PricingEngineService pPricingEngine, PricingContext pPricingContext, java.util.Map pExtraParametersMap)
Iterates over the configured pricing model evaluation vetoers and calls the prepare method for each.
If a non null object is returned then it is added to the return list of ValidEvaluation Vetoer objects.
pPricingEngine
- PricingEngineService that called this vetoerpPricingContext
- PricingContext for this pricing operationpExtraParametersMap
- Map of extra parameters if needed
protected java.util.Collection<RepositoryItem> vetoPromotionsForEvaluation(PricingContext pPricingContext, java.util.Map pExtraParametersMap, java.util.Collection<RepositoryItem> pPricingModels)
pPricingContext
- PricingContext for pricingpExtraParametersMap
- Map of extra parameters if neededpPricingModels
- Collection of promotion items
protected java.util.List<atg.commerce.pricing.PricingEngineService.ValidHolderVetoer> prepareHolderVetoers(PricingEngineService pPricingEngine, RepositoryItem pProfile)
Iterates over the configured pricing model holdr vetoers and calls the prepare method for each.
If a non null object is returned then it is added to the return list of ValidHolderVetoer objects.
pPricingEngine
- PricingEngineService that called this vetoerpProfile
- RepositoryItem profile for the holder session
protected void checkAndMergePromotions(java.util.Collection pSource, java.util.Collection pCheckedMerge, java.util.Collection pDestination, java.util.Date pNow, RepositoryItem pProfile)
Note: It is assumed that pCheckedMerge has already been checked e.g. via checkAndAddPromotions.
pSource
- - Source collection. It should be pre-sorted but this method will check expiry dates.pCheckedMerge
- Collection to merge into the source. It should be pre-sorted and pre-checked.pDestination
- - Destination Collection for the merge.pNow
- - todaypProfile
- - RepositoryItem profileprotected boolean addPromotion(RepositoryItem pPromotion, java.util.Date pNow)
pPromotion
- the promotion that should be verifiedpNow
- the current datepProfile
- the user's profile
protected boolean isValidItemDescriptor(RepositoryItem pPromotion)
pPromotion
- the promotion that should be verified
protected boolean checkPromotionExpiration(RepositoryItem pPromotion, java.util.Date pNow)
pPromotion
- the promotion that should be verifiedpNow
- the current datepProfile
- the user's profileprotected void expirePromotion(RepositoryItem pPromotion, RepositoryItem pProfile)
checkPromotionExpiration
determines that a promotion has expired and
should no longer be active. Currently this method calls PromotionTools.expirePromotion.
pProfile
- the profile for which a promotion has expiredpPromotion
- the promotion which has expiredpublic CalculatorInfo[] getCalculatorTypes()
public java.lang.Object getCalculatorForCalculatorType(java.lang.String pCalculatorType) throws PricingException
pCalculatorType
- String type
PricingException
- if a non-null calculator could not be foundprotected java.lang.Object getCalculator(RepositoryItem pPricingModel) throws PricingException
pPromotion
- The promotion to examine for its PricingCalculator
PricingException
protected java.lang.Object resolveCalculator(java.lang.String pCalcServiceString) throws PricingException
pCalcServiceString
- String nucleus path to the calculator service
PricingException
- if the service could not be resolvedprotected java.util.List getAdjustmentPricingModels(AmountInfo pPriceInfo)
pPriceInfo
- the priceInfo object
public Qualifier getQualifierService(java.util.Map pExtraParameters)
pExtraParameters
- Map of optional extra parameters. May be null.
PromotionTools.getQualifierService(RepositoryItem, Map, Qualifier)
public Qualifier getQualifierService(RepositoryItem pPricingModel, java.util.Map pExtraParameters)
pPricingModel
- RepositoryItem promotion item to check. May be null.pExtraParameters
- Map of optional extra parameters. May be null.
PromotionTools.getQualifierService(RepositoryItem, Map, Qualifier)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |