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 Details

    • LOCK_OBJECT

      protected static String LOCK_OBJECT
    • handlersSorted

      protected boolean handlersSorted
    • extensionHandler

      protected T extends ExtensionHandler extensionHandler
    • handlers

      protected List<T extends ExtensionHandler> handlers
  • Constructor Details

    • ExtensionManager

      public ExtensionManager(Class<T> _clazz)
      Should take in a className that matches the ExtensionHandler interface being managed.
      Parameters:
      _clazz -
  • Method Details

    • getProxy

      public T getProxy()
    • getHandlers

      public List<T> getHandlers()
      If you are attempting to register a handler with this manager and are invoking this outside of an ExtensionManager subclass, consider using registerHandler(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

      public void setHandlers(List<T> handlers)
    • sortHandlers

      protected void sortHandlers()
    • registerHandler

      public boolean registerHandler(T handler)
      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 this ExtensionManager 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 on ExtensionResultStatusType.HANDLED.
      Returns:
    • getPriority

      public int getPriority()
      ExtensionManagers don't really need a priority but they pick up this property due to the fact that we want them to implement the same interface as the handlers they are managing.
      Returns:
    • invoke

      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
      Specified by:
      invoke in interface InvocationHandler
      Throws:
      Throwable
    • execute

      protected ExtensionResultStatusType execute(ExtensionManagerOperation operation, Object... params)
      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: