Class ExtensionManager<T extends ExtensionHandler>
java.lang.Object
org.broadleafcommerce.common.extension.ExtensionManager<T>
- Type Parameters:
T
-
- All Implemented Interfaces:
InvocationHandler
- Direct Known Subclasses:
AdditionStatusDaoExtensionManager
,AdminAbstractControllerExtensionManager
,AdminAbstractListGridExtensionManager
,AdminBasicOperationsControllerExtensionManager
,AdminCatalogServiceExtensionManager
,AdminExternalLoginUserExtensionManager
,AdminFieldBuilderProcessorExtensionManager
,AdminNavigationServiceExtensionManager
,AdminRequestProcessorExtensionManager
,AdminSectionCustomCriteriaExtensionManager
,AdminSecurityCheckExtensionManager
,AdminSecurityServiceExtensionManager
,AdminTranslationControllerExtensionManager
,AdornedTargetAutoPopulateExtensionManager
,AnonymousCustomerExtensionManager
,ArchiveStatusPersistenceEventHandlerExtensionManager
,AuthSuccessHandlerExtensionManager
,BasicFieldPersistenceProviderExtensionManager
,BasicPersistenceModuleExtensionManager
,BLCICacheExtensionManager
,BreadcrumbServiceExtensionManager
,BroadleafCheckoutControllerExtensionManager
,BroadleafCommonAddressValidatorExtensionManager
,BroadleafFileServiceExtensionManager
,BroadleafMergeResourceExtensionManager
,BroadleafTemplateViewResolverExtensionManager
,CacheKeyResolverExtensionManager
,CartStateRequestProcessorExtensionManager
,CatalogServiceExtensionManager
,CategoriesProcessorExtensionManager
,CategoryCustomPersistenceHandlerExtensionManager
,CategoryDaoExtensionManager
,CategoryParentCategoryFieldPersistenceProviderExtensionManager
,ConfirmationControllerExtensionManager
,ContentProcessorExtensionManager
,CreditCardTypesExtensionManager
,CriteriaTransferObjectExtensionManager
,CustomerMergeExtensionManager
,DatabaseResourceResolverExtensionManager
,EntityDuplicatorExtensionManager
,EntityInformationServiceExtensionManager
,EntityParentIdServiceExtensionManager
,FilterProductTypePersistenceHandlerExtensionManager
,FormBuilderExtensionManager
,IndexFieldCustomPersistenceHandlerExtensionManager
,InventoryServiceExtensionManager
,LinkedDataGeneratorExtensionManager
,ListGridErrorMessageExtensionManager
,MediaFieldPersistenceProviderExtensionManager
,MergeCartServiceExtensionManager
,MultipleCatalogExtensionManager
,MultiTenantCopierExtensionManager
,OfferCodeDaoExtensionManager
,OfferCustomServiceExtensionManager
,OfferServiceExtensionManager
,OfferValueModifierExtensionManager
,OrderDaoExtensionManager
,OrderItemServiceExtensionManager
,OrderServiceExtensionManager
,PageQueryExtensionManager
,PageServiceExtensionManager
,PaymentGatewayFieldExtensionManager
,PostUpdateCustomerExtensionManager
,PostUpdateOrderExtensionManager
,PreviewProductUrlModifierExtensionManager
,ProductCustomPersistenceHandlerExtensionManager
,ProductDaoExtensionManager
,ProductOptionsProcessorExtensionManager
,ProductParentCategoryFieldPersistenceProviderExtensionManager
,ProductProcessorExtensionManager
,ProductUrlDuplicatorExtensionManager
,ProductUrlFieldPersistenceProviderExtensionManager
,PurgeSandboxClonedEntitiesExtensionManager
,ResourcePurgeExtensionManager
,ResourceRequestExtensionManager
,RuleBuilderFieldServiceExtensionManager
,RuleFieldPersistenceProviderCascadeExtensionManager
,RuleFieldPersistenceProviderExtensionManager
,SiteMapExtensionManager
,SiteServiceExtensionManager
,SkuCustomPersistenceHandlerExtensionManager
,SkuDaoExtensionManager
,SolrIndexServiceExtensionManager
,SolrSearchServiceExtensionManager
,StaticAssetDaoQueryExtensionManager
,StaticAssetMultiTenantExtensionManager
,StaticAssetServiceExtensionManager
,StructuredContentServiceExtensionManager
,SystemPropertyDaoQueryExtensionManager
,SystemPropertyServiceExtensionManager
,TemplateCacheExtensionManager
,TemplateOnlyQueryExtensionManager
,TemplateOverrideExtensionManager
,TranslationDaoExtensionManager
,TranslationServiceExtensionManager
,TRCreditCardExtensionManager
,UncacheableDataProcessorExtensionManager
,UpdateCartServiceExtensionManager
,URLHandlerFilterExtensionManager
,ValidateAddRequestActivityExtensionManager
,ValidateCheckoutActivityExtensionManager
public abstract class ExtensionManager<T extends ExtensionHandler>
extends Object
implements InvocationHandler
The ExtensionManager pattern is intended for out of box components to be extended by Broadleaf modules.
Each component that needs an extension should define an interface which is a descendant of ExtensionHandler. The concrete ExtensionManager class will utilize that interface as a parameter (e.g. T below).
The default extension manager pattern loops through all handlers and examines their ExtensionResultStatusType
to determine whether or not to continue with other handlers.
- Author:
- bpolster
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionExtensionManager
(Class<T> _clazz) Should take in a className that matches the ExtensionHandler interface being managed. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Returns whether or not this extension manager continues onExtensionResultStatusType
.HANDLED.protected ExtensionResultStatusType
execute
(ExtensionManagerOperation operation, Object... params) Provides a mechanism for executing multiple extension handler touchpoints without utilizing reflection.If you are attempting to register a handler with this manager and are invoking this outside of anExtensionManager
subclass, consider usingregisterHandler(ExtensionHandler)
instead.int
ExtensionManager
s don't really need a priority but they pick up this property due to the fact that we want them to implement the same interfaceas the handlers they are managing. getProxy()
boolean
registerHandler
(T handler) Intended to be invoked from the extension handlers themselves.void
setHandlers
(List<T> handlers) boolean
shouldContinue
(ExtensionResultStatusType result, ExtensionHandler handler, Method method, Object[] args) Utility method that is useful for determining whether or not an ExtensionManager implementation should continue after processing a ExtensionHandler call.protected void
-
Field Details
-
LOCK_OBJECT
-
handlersSorted
protected boolean handlersSorted -
extensionHandler
-
handlers
-
-
Constructor Details
-
ExtensionManager
Should take in a className that matches the ExtensionHandler interface being managed.- Parameters:
_clazz
-
-
-
Method Details
-
getProxy
-
getHandlers
If you are attempting to register a handler with this manager and are invoking this outside of anExtensionManager
subclass, consider usingregisterHandler(ExtensionHandler)
instead.While the sorting of the handlers prior to their return is thread safe, adding directly to this list is not.
- Returns:
- a list of handlers sorted by their priority
-
setHandlers
-
sortHandlers
protected void sortHandlers() -
registerHandler
Intended to be invoked from the extension handlers themselves. This will add the given handler to this manager's list of handlers. This also checks to ensure that the handler has not been already registered with thisExtensionManager
by checking the class names of the already-added handlers.This method is thread safe.
- Parameters:
handler
- the handler to register with this extension manager- Returns:
- true if the handler was successfully registered, false if this handler was already contained in the list of handlers for this manager
-
shouldContinue
public boolean shouldContinue(ExtensionResultStatusType result, ExtensionHandler handler, Method method, Object[] args) Utility method that is useful for determining whether or not an ExtensionManager implementation should continue after processing a ExtensionHandler call.By default, returns true for CONTINUE
- Returns:
-
continueOnHandled
public boolean continueOnHandled()Returns whether or not this extension manager continues onExtensionResultStatusType
.HANDLED.- Returns:
-
getPriority
public int getPriority()ExtensionManager
s don't really need a priority but they pick up this property due to the fact that we want them to implement the same interfaceas the handlers they are managing. - Returns:
-
invoke
- Specified by:
invoke
in interfaceInvocationHandler
- Throws:
Throwable
-
execute
Provides a mechanism for executing multiple extension handler touchpoints without utilizing reflection. This is a reasonable alternative when the ExtensionManager is used in an operation that is very sensitive to the time cost involved in reflection (e.g. an operation that has a high volume of calls)- Parameters:
operation
-params
-- Returns:
-