atg.commerce.dp
Class CatalogMapDerivation

java.lang.Object
  extended by java.beans.FeatureDescriptor
      extended by atg.beans.SerializableFeatureDescriptor
          extended by atg.repository.dp.DerivationMethodImpl
              extended by atg.commerce.dp.CatalogMapDerivation
All Implemented Interfaces:
atg.repository.dp.Constants, atg.repository.dp.DerivationMethod, java.io.Serializable
Direct Known Subclasses:
CatalogMapPropertyDerivation

public class CatalogMapDerivation
extends atg.repository.dp.DerivationMethodImpl

This class is specifically used for custom catalogs. It will derive a property based on the current session scoped Profile. Each category, product, and sku will have a map of "info" objects (one per catalog id). This derivation method will automatically return the correct object based on the catalog. For example:
(This example could be placed in product)

   <property name="currentInfo">
     <derivation user-method="atg.commerce.dp.CatalogMapDerivation">
       <expression>productInfos</expression>
     </derivation>
   </property>
 
In this example, currentInfo would be the productInfo in the map "productInfos" that is mapped to by the current session scoped profile.catalog. If this is accessed outside the scope of a session, or there is no catalog, this will return null. Created: Mon Apr 02 09:32:52 2001

See Also:
Serialized Form

Field Summary
protected static java.lang.String CATALOG_KEY_PROPERTY
           
static java.lang.String CLASS_VERSION
          Class version string
protected static java.lang.String DERIVATION_NAME
           
protected static java.lang.String DISPLAY_NAME
           
protected static java.lang.String MAP_TYPE_NAME
           
protected static java.lang.String PROFILE_CATALOG_PROPERTY
           
protected static java.lang.String SHORT_DESCRIPTION
           
 
Fields inherited from class atg.repository.dp.DerivationMethodImpl
COMPARISON_QUERY, INCLUDES_ALL_QUERY, INCLUDES_ANY_QUERY, INCLUDES_ITEM_QUERY, INCLUDES_QUERY, IS_NULL_QUERY, PATTERN_MATCH_QUERY, sZero, TEXT_SEARCH_QUERY
 
Fields inherited from class atg.beans.SerializableFeatureDescriptor
BUNDLE_ATTRIBUTE_NAME, LOCALE_ATTRIBUTE_NAME
 
Fields inherited from interface atg.repository.dp.Constants
ATTR_METHOD, ATTR_OVERRIDE_PROPERTY, ATTR_USER_METHOD, DEFAULT_METHOD_NAME, DEFAULT_RECURSION_DEPTH, DP_COUNT_ATTR_NAME, ERR_COLLECTION_EXPRESSION_TYPE, ERR_COLLECTION_ITEM_TYPE, ERR_DP_EXP_NOT_ARRAY, ERR_DP_EXP_NOT_COLLECTION, ERR_DP_EXP_NOT_SET_LIST, ERR_DP_EXP_NOT_SET_LIST_MAP, ERR_DP_EXP_REFERENCES_DP, ERR_DP_EXP_TYPE_MISMATCH, ERR_DP_NOT_SET_LIST_MAP, ERR_DP_QUERYABLE_OP_NOT, ERR_DP_READABLE_OP_NOT, ERR_DP_WRITABLE_OP_NOT, ERR_DP_WRITABLE_WITH_NULL_OP, ERR_EMPTY_EXPRESSION, ERR_EXACTLY_ONE_EXPRESSION, ERR_INCOMPATIBLE_DP_EXP, ERR_INCOMPATIBLE_OP, ERR_INVALID_OVERRIDE_PROPERTY_NAME, ERR_INVALID_PROPERTY, ERR_METHOD_AND_USER_METHOD, ERR_MISSING_DERIVATION, ERR_NO_DP, ERR_NO_EXP, ERR_NO_EXPRESSION, ERR_NO_METHOD, ERR_NO_PROPERTY_FOR_LOCALE, ERR_NO_PROPERTY_TYPE, ERR_NO_SET_LIST, ERR_NULL_ITEM_DESCRIPTOR, ERR_OP_SAME_AS_DP, ERR_PROP_COLLECTION_TYPE, ERR_SET_NOT_WRITABLE, PROPERTY_SEPARATOR, RECURSION_DEPTH_ATTR_NAME, RESOURCE_BUNDLE_NAME, TAG_DERIVATION, TAG_EXPRESSION
 
Constructor Summary
CatalogMapDerivation()
           
 
Method Summary
 Query createIsNullQuery(QueryBuilder pBuilder, atg.repository.query.PropertyQueryExpression pParentProperty, java.util.List pChildPropertyList)
          Create a query to check if our derived property is null.
protected  Query createQuery(int pQueryType, boolean pDerivedPropertyOnLeft, boolean pCountDerivedProperty, QueryExpression pOther, int pOperator, boolean pIgnoreCase, QueryExpression pMinScore, QueryExpression pSearchStringFormat, Query pItemQuery, QueryBuilder pBuilder, atg.repository.query.PropertyQueryExpression pParentProperty, java.util.List pChildPropertyList)
          Do the real work of implementing a query to find the correct map value.
 java.lang.Object derivePropertyValue(java.lang.Object pBean)
          Determine the specified derived property value.
 java.lang.Object derivePropertyValue(RepositoryItemImpl pItem)
          Determine the specified derived property value.
protected  java.lang.Object getCatalog()
          Get the catalog for the current user.
protected  java.lang.Object getKeyFromCatalog(java.lang.Object pCatalog)
          Get the key into the map for the given catalog The key is just the id.
protected  java.lang.Object getProfile()
          Get the Profile for the current session
 atg.repository.dp.Expression getPropertyOrigin(RepositoryItemImpl pItem)
          Determine from where the specified property value is derived, if applicable.
 boolean isQueryable()
          Determine whether the specified property can be used in a query.
 java.util.List validate()
          Validate the derivation.
 
Methods inherited from class atg.repository.dp.DerivationMethodImpl
createComparisonQuery, createExpression, createIncludesAllQuery, createIncludesAnyQuery, createIncludesItemQuery, createIncludesQuery, createPatternMatchQuery, createQuery, createReferencedByQuery, createTextSearchQuery, getAllowNoExpressions, getDerivation, getFeatureDescriptor, getPropertyDescriptor, getPropertyOrigin, getPropertyOrigin, getPropertyOrigin, isEmpty, isWritable, rebuildExpression, setDerivation, setFrom, setPropertyDescriptor, setPropertyValue, setPropertyValue, wrap
 
Methods inherited from class atg.beans.SerializableFeatureDescriptor
copyFeatureDescriptor, getDisplayName, getDisplayNameResource, getDisplaySortString, getLocalizedResourceBundle, getResourceBundle, getShortDescription, getShortDescriptionResource, getSortString, setDisplayNameResource, setShortDescriptionResource, toString
 
Methods inherited from class java.beans.FeatureDescriptor
attributeNames, getName, getValue, isExpert, isHidden, isPreferred, setDisplayName, setExpert, setHidden, setName, setPreferred, setShortDescription, setValue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

CLASS_VERSION

public static java.lang.String CLASS_VERSION
Class version string


DERIVATION_NAME

protected static final java.lang.String DERIVATION_NAME
See Also:
Constant Field Values

DISPLAY_NAME

protected static final java.lang.String DISPLAY_NAME
See Also:
Constant Field Values

SHORT_DESCRIPTION

protected static final java.lang.String SHORT_DESCRIPTION
See Also:
Constant Field Values

PROFILE_CATALOG_PROPERTY

protected static final java.lang.String PROFILE_CATALOG_PROPERTY
See Also:
Constant Field Values

CATALOG_KEY_PROPERTY

protected static final java.lang.String CATALOG_KEY_PROPERTY
See Also:
Constant Field Values

MAP_TYPE_NAME

protected static final java.lang.String MAP_TYPE_NAME
See Also:
Constant Field Values
Constructor Detail

CatalogMapDerivation

public CatalogMapDerivation()
Method Detail

validate

public java.util.List validate()
Validate the derivation. This derivation only works if the expression in the expression list is a map. This method ensures that.

Specified by:
validate in interface atg.repository.dp.DerivationMethod
Overrides:
validate in class atg.repository.dp.DerivationMethodImpl
Returns:
a non-null, possibly empty List of RepositoryExceptions if the derivation is not valid. The size of the list is the number of errors found.

derivePropertyValue

public java.lang.Object derivePropertyValue(RepositoryItemImpl pItem)
                                     throws RepositoryException
Determine the specified derived property value.

Parameters:
pItem - the item whose property value is desired
Returns:
the derived value
Throws:
PropertyNotFoundException - if a property referenced in this expression could not be found in the specified bean
RepositoryException

derivePropertyValue

public java.lang.Object derivePropertyValue(java.lang.Object pBean)
                                     throws RepositoryException
Determine the specified derived property value.

Parameters:
pBean - the bean representing a repository item whose property value is desired
Returns:
the derived value
Throws:
PropertyNotFoundException - if a property referenced in this expression could not be found in the specified bean
RepositoryException

getPropertyOrigin

public atg.repository.dp.Expression getPropertyOrigin(RepositoryItemImpl pItem)
                                               throws RepositoryException
Determine from where the specified property value is derived, if applicable. For some derivations there is no identifiable origin for a derived property.

Specified by:
getPropertyOrigin in interface atg.repository.dp.DerivationMethod
Overrides:
getPropertyOrigin in class atg.repository.dp.DerivationMethodImpl
Parameters:
pItem - the item whose property value origin is desired
Returns:
the orgin of this property, or null if not applicable
Throws:
RepositoryException

isQueryable

public boolean isQueryable()
Determine whether the specified property can be used in a query.

Returns:
true if it can be queried, else false

getCatalog

protected java.lang.Object getCatalog()
                               throws PropertyNotFoundException
Get the catalog for the current user. The catalog can be provided through either a ThreadLocal variable or through the session scoped profile's catalog property.

Throws:
PropertyNotFoundException

getProfile

protected java.lang.Object getProfile()
Get the Profile for the current session


getKeyFromCatalog

protected java.lang.Object getKeyFromCatalog(java.lang.Object pCatalog)
                                      throws RepositoryException
Get the key into the map for the given catalog The key is just the id. If the property CATALOG_KEY_PROPERTY is not found and the catalog is a repository item, then the repositoryId is returned.

Throws:
RepositoryException

createIsNullQuery

public Query createIsNullQuery(QueryBuilder pBuilder,
                               atg.repository.query.PropertyQueryExpression pParentProperty,
                               java.util.List pChildPropertyList)
                        throws RepositoryException
Create a query to check if our derived property is null.

Specified by:
createIsNullQuery in interface atg.repository.dp.DerivationMethod
Overrides:
createIsNullQuery in class atg.repository.dp.DerivationMethodImpl
Parameters:
pQuery - query to translate
pBuilder - query builder to use
the - equivalent query, which is build entirely with pBuilder and contains no references to derived properties
pParentProperty - the parent of the derived property, if the derived property is not a direct child of the Item being queried.
pChildPropertyList - a list of the children of the derived property, if the derived property is not the last expression in the query.
Returns:
the query
Throws:
RepositoryException - if there is problem building the query

createQuery

protected Query createQuery(int pQueryType,
                            boolean pDerivedPropertyOnLeft,
                            boolean pCountDerivedProperty,
                            QueryExpression pOther,
                            int pOperator,
                            boolean pIgnoreCase,
                            QueryExpression pMinScore,
                            QueryExpression pSearchStringFormat,
                            Query pItemQuery,
                            QueryBuilder pBuilder,
                            atg.repository.query.PropertyQueryExpression pParentProperty,
                            java.util.List pChildPropertyList)
                     throws RepositoryException
Do the real work of implementing a query to find the correct map value. The various translate methods call this helper method. The arguments may seem a little strange. By passing all the arguments to all the types of queries we can centralize the logic without having to instanceof and cast query objects (again).

All of the QueryExpression arguments to this method were created by pBuilder and thus can be used as is without being translated.

Specified by:
createQuery in class atg.repository.dp.DerivationMethodImpl
Parameters:
pQueryType - the type of the original query
pDerivedPropertyOnLeft - if true the derived property is used as the left hand side in the query and pOtherExpression is used as the right hand side. If false the derived property is used as the right hand side and pOtherExpression is used as the left hand side.
pCountDerivedProperty - if true the derived property is used in a count query expression
pOther - the other expression involved in binary queries
pOperator - the binary operator involved in binary queries
pIgnoreCase - whether to ignore case in pattern match queries
pMinScore - min score for text queries
pSearchStringFormat - search string format for text queries
pItemQuery - query to use in includes item queries only
pBuilder - query builder to use
pParentProperty - the parent of the derived property, if the derived property is not a direct child of the Item being queried.
pChildPropertyList - a list of the children of the derived property, if the derived property is not the last expression in the query.
Returns:
the specified first non null query
Throws:
RepositoryException - if there is problem building the query