java.lang.Object
com.broadleafcommerce.data.tracking.core.context.ContextInfo
All Implemented Interfaces:
com.broadleafcommerce.common.extension.cache.temporal.TemporalIdentifier

public class ContextInfo extends Object implements com.broadleafcommerce.common.extension.cache.temporal.TemporalIdentifier
POJO representing context information regarding the current API request. This object is generally created in a @RestController implementation before being passed as a parameter to an internal data service.
Author:
Jeff Fischer
  • Constructor Details

    • ContextInfo

      public ContextInfo(@NonNull OperationType operationType)
    • ContextInfo

      public ContextInfo(OperationType operationType, boolean ignoreNarrowing)
      Convenience constructor to set the operationType and ignoreNarrowing indicator
      Parameters:
      operationType -
      ignoreNarrowing -
    • ContextInfo

      public ContextInfo(@NonNull OperationType operationType, ContextRequest request)
      Convenience method for operationType and contextRequest
      Parameters:
      operationType -
    • ContextInfo

      public ContextInfo(@NonNull OperationType operationType, ContextRequest request, String author)
      Convenience method for operationType and contextRequest
      Parameters:
      operationType -
    • ContextInfo

      public ContextInfo(@NonNull ContextInfo contextInfo)
      Create a copy of an existing ContextInfo, including a copy of its ContextRequest.
      Parameters:
      contextInfo - The ContextInfo to create the copy from.
      See Also:
      • ContextRequest(ContextRequest)
    • ContextInfo

      public ContextInfo()
  • Method Details

    • setFilterByActiveDates

      public void setFilterByActiveDates(boolean filterByActiveDates)
    • getAuthor

      public String getAuthor()
      Returns the user principal for this request.

      If a previewToken is present, and it matches the current context, this will return PreviewToken.getAuthor() instead. This is primarily engaged to allow anonymous requests from an application to preview a user's sandbox data.

      Returns:
      the user principal for this request
    • nowOrPreviewDate

      public Instant nowOrPreviewDate()
      Returns the time to be used for the current request. Generally this returns the result of Instant.now(), except for when a valid previewDate is set, in which case the preview date will be used.
      Specified by:
      nowOrPreviewDate in interface com.broadleafcommerce.common.extension.cache.temporal.TemporalIdentifier
      Returns:
      the current time or preview date
    • hasPreviewDate

      public boolean hasPreviewDate()
      Return true if this request is using a preview date. Caching implementations may be bypassed if this is true.
      Returns:
      true if this context has a valid preview date
    • setPendingCatalogs

      public void setPendingCatalogs(boolean includePendingCatalogs)
    • withOperationType

      public ContextInfo withOperationType(ContextInfo info, OperationType type)
      Creates a new ContextInfo and sets the operation type.
      Parameters:
      type -
      Returns:
    • getIpAddress

      public String getIpAddress()
      The ip address of the remote caller
      Returns:
      The ip address
    • isIgnoreNarrowing

      public boolean isIgnoreNarrowing()
      Whether or not to turn off sandbox and multitenant narrowing behavior. Narrowing is applied as part of a read operations where additional discrimination is performed to retrieve the appropriate sandbox or catalog result for a given entity context id. In a write operation these discriminators are automatically applied to the Trackable instance based on other information within the ContextInfo. See TrackableRepository for more information.
      Returns:
      Whether or not to turn off narrowing behavior
    • isIgnoreDeleteFiltering

      public boolean isIgnoreDeleteFiltering()
      Whether or not to ignore narrowing on deleted sandbox items. Deleted sandbox items are generally filtered out of results. However, it can occasionally be useful to include those items in results. Setting this flag to true on a fetch request will enable that behavior.
      Returns:
      Whether or not to ignore narrowing on deleted sandbox items
    • isIncludePendingCatalogs

      public boolean isIncludePendingCatalogs()
      Whether or not pending catalogs should be included in this context. Generally, pending catalogs are only interesting to admin requests.
      Returns:
      Whether or not pending catalogs should be included in this context
    • isIgnoreCatalogNarrowing

      public boolean isIgnoreCatalogNarrowing()
      Whether to turn off only catalog narrowing behavior.
      See Also:
      • For additional information about narrowing in general.
    • getLocale

      public Locale getLocale()
      The Locale for this context, primarily used for translation.
      Returns:
      The Locale for this context, primarily used for translation
    • getDefaultCurrency

      public Currency getDefaultCurrency()
      The default Currency for this request. This is typically set by a ContextInfoCustomizer implementation. This may be null if not otherwise resolved.
      Returns:
      The default currency
    • getAdditionalProperties

      public Map<String,Object> getAdditionalProperties()
      This is a generic Map to support the ability for Broadleaf clients, specifically, to add additional (typically transient) properties during a particular request flow to support setting up and passing along additional state throughout a particular API invocation or web request. Note that this should normally be used by Broadleaf clients and not internally by Broadleaf framework engineers.
      Returns:
      A Map that can generically hold state
    • isIgnoreTranslation

      public boolean isIgnoreTranslation()
      Whether to ignore the process of translating fields while executing DomainMapperManager.fromRepositoryDomain(Object, Class, ContextInfo) for a given request.
      Returns:
      Whether to ignore the process of translating fields while executing DomainMapperManager.fromRepositoryDomain(java.lang.Object, java.lang.Class<P>, com.broadleafcommerce.data.tracking.core.context.ContextInfo) for a given request
    • isClearOverride

      public boolean isClearOverride()
      Used for OperationType.DELETE requests of entities marked as TrackableBehavior.CATALOG to indicate whether the record for deletion is an override of a parent catalog that should be cleared instead of deleted.
      Returns:
      Whether the TrackableBehavior.CATALOG record for OperationType.DELETE is an override that should be cleared.
    • getQueryHints

      public ContextInfo.QueryHints getQueryHints()
    • getQueryInfluencers

      public List<ContextInfo.QueryInfluencer> getQueryInfluencers()
      This field is not serialized or deserialized as QueryInfluencers are dynamic, functional components that execute logic rather than hold data. These are intended to be added and used by internal service logic for internal use rather than transferred between services.
      See Also:
    • getContextIdOverwriteBehavior

      public ContextIdOverwriteBehavior getContextIdOverwriteBehavior()
      Used for OperationType.CREATE requests for entities to determine whether CreateSetupDomainMapperMember should autogenerate a context ID for the current request. This allows for different behavior on a request-by-request basis to override the global system behavior defined in CreateSetupDomainMapperMember.isAutogenerateContextIdIfUnset() and CreateSetupDomainMapperMember.isOverwriteExistingContextIdOnCreate().
      See Also:
    • getContextRequest

      @NonNull public ContextRequest getContextRequest()
      Specific sandbox and multitenant context information. This should never be null but all of the properties within it can be
      Returns:
      Request context information
    • getPreviewToken

      public PreviewToken getPreviewToken()
      The preview token for use when previewing sandbox data. This token is used as proof of access to read sandbox data for a user within a certain context, usually anonymous.

      This token is expected to be validated to match the current request during policy validation and if it passes, will be used to inform the narrowing behavior for sandboxable entities.

      Returns:
      the decoded preview token object
      See Also:
    • getPreviewDate

      public Instant getPreviewDate()
      The date in which to preview data. This is utilized by services that opt-in to use nowOrPreviewDate() for their date filtering.

      This will only be defined and applicable when a valid previewToken exists on the context.

      This will be ignored if it is ever found to be before Instant.now(), as this functionality is only intended to support previewing future states, and never past states.

    • isFilterByActiveDates

      public boolean isFilterByActiveDates()
      Whether or not entities that implement ActiveAware will be filtered by their active dates during fetch narrowing.
      Specified by:
      isFilterByActiveDates in interface com.broadleafcommerce.common.extension.cache.temporal.TemporalIdentifier
    • isFilterByActiveFlag

      public boolean isFilterByActiveFlag()
      Whether or not entities that implement ActiveFlagAware will be filtered by their active flags during fetch narrowing.
    • getCustomerSegmentIds

      public List<String> getCustomerSegmentIds()
      The list of Customer Segment ids that are dynamically applied to the user according to the current context.
    • setAuthor

      public void setAuthor(String author)
      Intended to be the current Spring Security principal (the logged in user)
      Parameters:
      author - The logged in user
    • setIpAddress

      public void setIpAddress(String ipAddress)
      The ip address of the remote caller
      Parameters:
      ipAddress - The ip address
    • setIgnoreNarrowing

      public void setIgnoreNarrowing(boolean ignoreNarrowing)
      Whether or not to turn off sandbox and multitenant narrowing behavior. Narrowing is applied as part of a read operations where additional discrimination is performed to retrieve the appropriate sandbox or catalog result for a given entity context id. In a write operation these discriminators are automatically applied to the Trackable instance based on other information within the ContextInfo. See TrackableRepository for more information.
      Parameters:
      ignoreNarrowing - Whether or not to turn off narrowing behavior
    • setIgnoreDeleteFiltering

      public void setIgnoreDeleteFiltering(boolean ignoreDeleteFiltering)
      Whether or not to ignore narrowing on deleted sandbox items. Deleted sandbox items are generally filtered out of results. However, it can occasionally be useful to include those items in results. Setting this flag to true on a fetch request will enable that behavior.
      Parameters:
      ignoreDeleteFiltering - Whether or not to ignore narrowing on deleted sandbox items
    • setIncludePendingCatalogs

      public void setIncludePendingCatalogs(boolean includePendingCatalogs)
      Whether or not pending catalogs should be included in this context. Generally, pending catalogs are only interesting to admin requests.
      Parameters:
      includePendingCatalogs - Whether or not pending catalogs should be included in this context
    • setIgnoreCatalogNarrowing

      public void setIgnoreCatalogNarrowing(boolean ignoreCatalogNarrowing)
      Whether to turn off only catalog narrowing behavior.
      See Also:
      • For additional information about narrowing in general.
    • setLocale

      public void setLocale(Locale locale)
      The Locale for this context, primarily used for translation.
      Parameters:
      locale - The Locale for this context, primarily used for translation
    • setDefaultCurrency

      public void setDefaultCurrency(Currency defaultCurrency)
      The default Currency for this request. This is typically set by a ContextInfoCustomizer implementation. This may be null if not otherwise resolved.
      Parameters:
      The - default currency
    • setIgnoreTranslation

      public void setIgnoreTranslation(boolean ignoreTranslation)
      Whether to ignore the process of translating fields while executing DomainMapperManager.fromRepositoryDomain(Object, Class, ContextInfo) for a given request.
      Parameters:
      ignoreTranslation - Whether to ignore the process of translating fields while executing DomainMapperManager.fromRepositoryDomain(java.lang.Object, java.lang.Class<P>, com.broadleafcommerce.data.tracking.core.context.ContextInfo) for a given request
    • setClearOverride

      public void setClearOverride(boolean clearOverride)
      Used for OperationType.DELETE requests of entities marked as TrackableBehavior.CATALOG to indicate whether the record for deletion is an override of a parent catalog that should be cleared instead of deleted.
      Parameters:
      clearOverride - Whether the TrackableBehavior.CATALOG record for OperationType.DELETE is an override that should be cleared.
    • setQueryHints

      public void setQueryHints(ContextInfo.QueryHints queryHints)
    • setQueryInfluencers

      public void setQueryInfluencers(List<ContextInfo.QueryInfluencer> queryInfluencers)
      This field is not serialized or deserialized as QueryInfluencers are dynamic, functional components that execute logic rather than hold data. These are intended to be added and used by internal service logic for internal use rather than transferred between services.
      See Also:
    • setContextIdOverwriteBehavior

      public void setContextIdOverwriteBehavior(ContextIdOverwriteBehavior contextIdOverwriteBehavior)
      Used for OperationType.CREATE requests for entities to determine whether CreateSetupDomainMapperMember should autogenerate a context ID for the current request. This allows for different behavior on a request-by-request basis to override the global system behavior defined in CreateSetupDomainMapperMember.isAutogenerateContextIdIfUnset() and CreateSetupDomainMapperMember.isOverwriteExistingContextIdOnCreate().
      See Also:
    • setContextRequest

      public void setContextRequest(@NonNull ContextRequest contextRequest)
      Specific sandbox and multitenant context information. This should never be null but all of the properties within it can be
      Parameters:
      contextRequest - Request context information
    • setPreviewToken

      public void setPreviewToken(PreviewToken previewToken)
      The preview token for use when previewing sandbox data. This token is used as proof of access to read sandbox data for a user within a certain context, usually anonymous.

      This token is expected to be validated to match the current request during policy validation and if it passes, will be used to inform the narrowing behavior for sandboxable entities.

      Parameters:
      previewToken - the decoded preview token object
      See Also:
    • setPreviewDate

      public void setPreviewDate(Instant previewDate)
      The date in which to preview data. This is utilized by services that opt-in to use nowOrPreviewDate() for their date filtering.

      This will only be defined and applicable when a valid previewToken exists on the context.

      This will be ignored if it is ever found to be before Instant.now(), as this functionality is only intended to support previewing future states, and never past states.

    • setFilterByActiveFlag

      public void setFilterByActiveFlag(boolean filterByActiveFlag)
      Whether or not entities that implement ActiveFlagAware will be filtered by their active flags during fetch narrowing.
    • setCustomerSegmentIds

      public void setCustomerSegmentIds(List<String> customerSegmentIds)
      The list of Customer Segment ids that are dynamically applied to the user according to the current context.
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • canEqual

      protected boolean canEqual(Object other)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getOperationType

      @NonNull public OperationType getOperationType()
      The type of CRUD operation being requested
      Returns:
      The type of CRUD operation
    • setOperationType

      @NonNull public void setOperationType(OperationType operationType)
      The type of CRUD operation being requested
      Parameters:
      operationType - The type of CRUD operation