atg.multisite
Class SiteGroupManager

java.lang.Object
  extended by atg.nucleus.logging.VariableArgumentApplicationLoggingImpl
      extended by atg.nucleus.GenericService
          extended by atg.multisite.SiteGroupManager
All Implemented Interfaces:
atg.naming.AbsoluteNameable, NameContextBindingListener, NameContextElement, atg.naming.NameContextParentable, NameResolver, AdminableService, atg.nucleus.Configured, ApplicationLogging, atg.nucleus.logging.ApplicationLoggingSender, atg.nucleus.logging.TraceApplicationLogging, VariableArgumentApplicationLogging, ComponentNameResolver, Service, ServiceListener, java.util.EventListener

public class SiteGroupManager
extends GenericService

Utility class that gets information regarding SiteGroups and the ShareableTypes they share.


Field Summary
static java.lang.String CLASS_VERSION
          Class version string
protected  SiteContextManager mSiteContextManager
          SiteContextManager
protected  SiteManager mSiteManager
          SiteManager
 
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
SiteGroupManager()
          Constructs an instanceof SiteGroupManager
 
Method Summary
 boolean addShareableTypeChangeListener(atg.multisite.ShareableTypeChangeListener pListener)
          Adds a ShareableTypeChangeListener
 boolean containsSiteWithId(java.util.Collection<Site> pSites, java.lang.String pId)
          Searches for a particular Site id in a collection of sites
 boolean doSitesShare(Site pOtherSite, ShareableType pShareableTypeId)
          check to see if a specified site shares a shareable type with the current site.
 boolean doSitesShare(Site pSite1, Site pSite2, ShareableType pShareableType)
          check to see if two sites share a shareable type.
 boolean doSitesShare(java.lang.String pOtherSiteId, java.lang.String pShareableTypeId)
          check to see if a specified site shares a shareable type with the current site.
 boolean doSitesShare(java.lang.String pSiteId1, java.lang.String pSiteId2, java.lang.String pShareableTypeId)
          check to see if two sites share a shareable type.
 java.util.Collection<Site> filterInactiveSites(java.util.Collection<Site> pSites)
          This method returns sites that are active
 java.util.Collection<Site> findSharingSites(java.lang.String pSiteId, java.lang.String pShareableTypeId, boolean pExcludeGivenSite, boolean pExcludeInactiveSites)
          Returns a collection of sites that share with the given site based on the given shareable type.
 java.util.Collection<ShareableType> getAllShareableTypes()
          get a list of all available shareable types
 java.util.Collection<java.lang.String> getOtherSharingSiteIds(java.lang.String pShareableTypeId)
          get a collection of site Ids (excluding the current site) for all the sites that share a given shareable type with the current site
 java.util.Collection<java.lang.String> getOtherSharingSiteIds(java.lang.String pSiteId, java.lang.String pShareableTypeId)
          get a collection of site Ids (excluding the specified site) for all the sites that share a given shareable type with the specified site.
 java.util.Collection<Site> getOtherSharingSites(ShareableType pShareableType)
          get a collection of sites (excluding the current site) that share a given shareable type with the current site.
 java.util.Collection<Site> getOtherSharingSites(Site pSite, ShareableType pShareableTypeId)
          get a collection of all the sites (excluding the specified site) that share a given shareable type with the specified site.
 ShareableType getShareableTypeById(java.lang.String pShareableTypeId)
          get a ShareableType given an Id
 ShareableType[] getShareableTypes()
          get ShareableTypes
 java.util.Collection<ShareableType> getShareableTypesByGenre(java.lang.String pGenreName)
          get a list of all available shareable types of a specific genre
 java.util.Collection<java.lang.String> getSharingSiteIds(java.lang.String pShareableTypeId)
          get a collection of site Ids for all the sites that share a given shareable type with the current site.
 java.util.Collection<java.lang.String> getSharingSiteIds(java.lang.String pSiteId, java.lang.String pShareableTypeId)
          get a collection of site Ids for all the sites that share a given shareable type with the specified site.
 java.util.Collection<Site> getSharingSites(ShareableType pShareableType)
          get a collection of sites that share a given shareable type with the current site.
 java.util.Collection<Site> getSharingSites(Site pSite, ShareableType pShareableType)
          get a collection of all the sites that share a given shareable type with the specified site.
 SiteContextManager getSiteContextManager()
          Gets the SiteContextManager.
 SiteGroup getSiteGroup(Site pSite, ShareableType pShareableType)
          get the SiteGroup in which the specified site shares the specificed shareable type.
 SiteGroup getSiteGroup(java.lang.String pShareableTypeId)
          get the SiteGroup in which the current site shares the specificed shareable type.
 SiteGroup getSiteGroup(java.lang.String pSiteId, java.lang.String pShareableTypeId)
          get the SiteGroup in which the specified site shares the specificed shareable type.
 SiteGroup getSiteGroupById(java.lang.String pSiteGroupId)
          get a SiteGroup with a specific id.
 java.lang.String getSiteGroupNamePropertyName()
          Gets the site group name property name
 java.util.Collection<SiteGroup> getSiteGroups(java.lang.String pShareableTypeId)
          get a collection of all site groups that share a given shareable type.
 java.util.Collection<SiteGroup> getSiteGroups(java.lang.String pShareableTypeId, java.lang.String pSiteType)
          get a collection of all site groups that share a given shareable type and contain at least one site of a particular type.
 java.util.Collection<SiteGroup> getSiteGroupsBySite(java.lang.String pSiteId)
          get a collection of all site groups to which the specified site belongs.
 atg.multisite.SiteGroupStorageAdapter getSiteGroupStorageAdapter()
           
 java.util.Collection<java.lang.String> getSiteIdCollection(java.util.Collection<Site> pSites)
          Converts a Collection of Sites to a Collection of site ids.
 Site getSiteInSiteGroup(java.lang.String pSiteGroupId)
          get a random site from a specified site group.
 SiteManager getSiteManager()
          Returns the SiteManager.
 java.util.Collection<Site> getSitesNotInGroups(java.util.Collection<SiteGroup> pSiteGroups)
          returns sites that are not in a collection of SiteGroups.
 java.util.Collection<Site> getSitesNotInGroups(java.util.Collection<SiteGroup> pSiteGroups, java.lang.String pSiteType)
          returns sites of a particular type that are not in a collection of SiteGroups.
 atg.multisite.SiteStorageAdapter getSiteStorageAdapter()
           
 java.lang.String getSiteTypePropertyName()
          Gets the site type property name
 boolean isShareableTypeRegistered(java.lang.String pShareableTypeId)
          check to see if a given ShareableType is registered
protected  void notifiyShareableTypeChangeListeners()
          Notify all ShareableTypeChangeListener that the ShareableTypes have changed.
 boolean removeShareableTypeChangeListener(atg.multisite.ShareableTypeChangeListener pListener)
          Removes a ShareableTypeChangeListener
 void setShareableTypes(ShareableType[] pShareableTypes)
          set ShareableTypes
 void setSiteContextManager(SiteContextManager pSiteContextManager)
          Sets the SiteContextManager
 void setSiteGroupNamePropertyName(java.lang.String pSiteGroupNamePropertyName)
          Sets the site group name property name
 void setSiteGroupStorageAdapter(atg.multisite.SiteGroupStorageAdapter pSiteGroupStorageAdapter)
           
 void setSiteManager(SiteManager pSiteManager)
          Sets the SiteManager
 void setSiteStorageAdapter(atg.multisite.SiteStorageAdapter pSiteStorageAdapter)
           
 void setSiteTypePropertyName(java.lang.String pSiteTypePropertyName)
          Sets the site type property name
 
Methods inherited from class atg.nucleus.GenericService
addLogListener, createAdminServlet, doStartService, doStopService, getAbsoluteName, getAdminServlet, getAdminServletOutputStreamEncoding, getLoggingForVlogging, getLogListenerCount, getLogListeners, getName, getNameContext, getNucleus, getRoot, getServiceConfiguration, getServiceInfo, isAdminServletUseServletOutputStream, isLoggingDebug, isLoggingError, isLoggingInfo, isLoggingTrace, isLoggingWarning, isRunning, logDebug, logDebug, logDebug, logError, logError, logError, logInfo, logInfo, logInfo, logTrace, logTrace, logTrace, logWarning, logWarning, logWarning, nameContextElementBound, nameContextElementUnbound, removeLogListener, reResolveThis, resolveName, resolveName, resolveName, resolveName, sendLogEvent, setAdminServletOutputStreamEncoding, setAdminServletUseServletOutputStream, setLoggingDebug, setLoggingError, setLoggingInfo, setLoggingTrace, setLoggingWarning, setNucleus, setServiceInfo, startService, stopService
 
Methods inherited from class atg.nucleus.logging.VariableArgumentApplicationLoggingImpl
vlogDebug, vlogDebug, vlogDebug, vlogDebug, vlogDebugTrace, 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

CLASS_VERSION

public static java.lang.String CLASS_VERSION
Class version string


mSiteManager

protected SiteManager mSiteManager
SiteManager


mSiteContextManager

protected SiteContextManager mSiteContextManager
SiteContextManager

Constructor Detail

SiteGroupManager

public SiteGroupManager()
Constructs an instanceof SiteGroupManager

Method Detail

setShareableTypes

public void setShareableTypes(ShareableType[] pShareableTypes)
set ShareableTypes

Parameters:
pShareableTypes - the ShareableTypes

getShareableTypes

public ShareableType[] getShareableTypes()
get ShareableTypes

Returns:
the ShareableTypes

getSiteGroupStorageAdapter

public atg.multisite.SiteGroupStorageAdapter getSiteGroupStorageAdapter()
Returns:
the siteGroupStorageAdapter

setSiteGroupStorageAdapter

public void setSiteGroupStorageAdapter(atg.multisite.SiteGroupStorageAdapter pSiteGroupStorageAdapter)
Parameters:
pSiteGroupStorageAdapter - the siteGroupStorageAdapter to set

getSiteStorageAdapter

public atg.multisite.SiteStorageAdapter getSiteStorageAdapter()
Returns:
the siteStorageAdapter

setSiteStorageAdapter

public void setSiteStorageAdapter(atg.multisite.SiteStorageAdapter pSiteStorageAdapter)
Parameters:
pSiteStorageAdapter - the siteStorageAdapter to set

getSiteTypePropertyName

public java.lang.String getSiteTypePropertyName()
Gets the site type property name

Returns:
the siteTypePropertyName

setSiteTypePropertyName

public void setSiteTypePropertyName(java.lang.String pSiteTypePropertyName)
Sets the site type property name

Parameters:
pSiteTypePropertyName - the siteTypePropertyName to set

getSiteGroupNamePropertyName

public java.lang.String getSiteGroupNamePropertyName()
Gets the site group name property name

Returns:
the siteGroupNamePropertyName

setSiteGroupNamePropertyName

public void setSiteGroupNamePropertyName(java.lang.String pSiteGroupNamePropertyName)
Sets the site group name property name

Parameters:
pSiteGroupNamePropertyName - The name of the site group property

setSiteManager

public void setSiteManager(SiteManager pSiteManager)
Sets the SiteManager

Parameters:
pSiteManager - the siteManager to set

getSiteManager

public SiteManager getSiteManager()
Returns the SiteManager.

Returns:
the siteManager

getSiteContextManager

public SiteContextManager getSiteContextManager()
Gets the SiteContextManager.

Returns:
the siteContextManager

setSiteContextManager

public void setSiteContextManager(SiteContextManager pSiteContextManager)
Sets the SiteContextManager

Parameters:
pSiteContextManager - the siteContextManager to set

getSiteGroupById

public SiteGroup getSiteGroupById(java.lang.String pSiteGroupId)
get a SiteGroup with a specific id.

Parameters:
pSiteGroupId - the Id of the site group to get
Returns:
the SiteGroup object with the specified Id, null is none exist with the specified id

getSiteGroup

public SiteGroup getSiteGroup(java.lang.String pShareableTypeId)
get the SiteGroup in which the current site shares the specificed shareable type.

Parameters:
pShareableTypeId - the id of the shareable type
Returns:
the SiteGroup containing the current site and the shareable type specified by pShareableTypeId, null if the current site is null or the shareable type isn't registered.

getSiteGroup

public SiteGroup getSiteGroup(java.lang.String pSiteId,
                              java.lang.String pShareableTypeId)
get the SiteGroup in which the specified site shares the specificed shareable type.

Parameters:
pSiteId - the site in question
pShareableTypeId - The id of the shareable type in question
Returns:
the SiteGroup containing the current site and the shareable type specified by pShareableTypeId, null if the site is not found, the shareable type isn't registered, or there isn't a SiteGroup containing the site and the shareable type

getSiteGroup

public SiteGroup getSiteGroup(Site pSite,
                              ShareableType pShareableType)
get the SiteGroup in which the specified site shares the specificed shareable type.

Parameters:
pSite - the site in question
pShareableType - the shareable type in question
Returns:
the SiteGroup containing the current site and the shareable type specified by pShareableTypeId, null if the site is not found, the shareable type isn't registered, or there isn't a SiteGroup containing the site and the shareable type

getSiteGroups

public java.util.Collection<SiteGroup> getSiteGroups(java.lang.String pShareableTypeId)
get a collection of all site groups that share a given shareable type.

Parameters:
pShareableTypeId - the id of the shareable type in question, all site groups will be returned if null
Returns:
a collection of SiteGroup objects to which the shareable type specified by pShareableTypeId belongs, null if the shareable type isn't registered

getSiteGroups

public java.util.Collection<SiteGroup> getSiteGroups(java.lang.String pShareableTypeId,
                                                     java.lang.String pSiteType)
get a collection of all site groups that share a given shareable type and contain at least one site of a particular type.

Parameters:
pShareableTypeId - The shareable type id, all site groups will be returned if null
pSiteType - The site type, all site types will be returned if null
Returns:
a collection of SiteGroup objects to which the shareable type specified by pShareableTypeId belongs and at least one of the site's type is pSiteType, null if the shareable type isn't registered

getSiteGroupsBySite

public java.util.Collection<SiteGroup> getSiteGroupsBySite(java.lang.String pSiteId)
get a collection of all site groups to which the specified site belongs.

Parameters:
pSiteId - the id of the site in question
Returns:
a collection of SiteGroups to which the site specified by pSiteId belongs, null if the site can not be found or if no SiteGroups contain this site.

isShareableTypeRegistered

public boolean isShareableTypeRegistered(java.lang.String pShareableTypeId)
check to see if a given ShareableType is registered

Parameters:
pShareableTypeId - the Id of the ShareableType in question
Returns:
true if the ShareableType identified by pShareableTypeId is registered with the SiteGroupManager

getShareableTypeById

public ShareableType getShareableTypeById(java.lang.String pShareableTypeId)
get a ShareableType given an Id

Parameters:
pShareableTypeId - the Id of the ShareableType to get
Returns:
the ShareableType corresponding to pShareableTypeId or null if there is no valid ShareableType that corresponds to pShareableTypeId

getAllShareableTypes

public java.util.Collection<ShareableType> getAllShareableTypes()
get a list of all available shareable types

Returns:
a Collection of all ShareableTypes registered with the SiteGroupManager, null is none are registered

getShareableTypesByGenre

public java.util.Collection<ShareableType> getShareableTypesByGenre(java.lang.String pGenreName)
get a list of all available shareable types of a specific genre

Parameters:
pGenreName - The name of the genre
Returns:
a Collection of all ShareableTypes registered with the SiteGroupManager who belong to the specified genre, null is no shareable types are registered or no shareable types have the given genre

getSiteInSiteGroup

public Site getSiteInSiteGroup(java.lang.String pSiteGroupId)
get a random site from a specified site group. this is useful in cases when one just needs to know at least one site that exists in a given site group. This will be used for session fail over with shared session scoped components

Parameters:
pSiteGroupId - the id of the site group in question
Returns:
a site that is a member of the site group. The selection of the site is not guaranteed to follow any pattern or logic other than the site belonging to the specified site group. Null is returned if the site group doesn't exist or contains no sites.

doSitesShare

public boolean doSitesShare(java.lang.String pSiteId1,
                            java.lang.String pSiteId2,
                            java.lang.String pShareableTypeId)
check to see if two sites share a shareable type. return true if both site Ids are equal, if either site Id is null, or if the shareableTypeId is null.

Parameters:
pSiteId1 - the id of the first site
pSiteId2 - the id of the second site
pShareableTypeId - the id of the shareable type in question
Returns:
true if the sites represented by pSiteId1 and pSiteId2 are in a SiteGroup together along with the ShareableType represented by pShareableTypeId. False if not. True is also returned if either site doesn't exist, or the shareable type isn't registered.

doSitesShare

public boolean doSitesShare(Site pSite1,
                            Site pSite2,
                            ShareableType pShareableType)
check to see if two sites share a shareable type. return true if both site's Ids are equal, or if either site's Id is null.

Parameters:
pSite1 - the first site to compare
pSite2 - the second site to compare
pShareableType - the shareable type in question
Returns:
true if pSite1 and pSite2 are in a SiteGroup together along with pShareableType. False if not. True is also returned if either site doesn't exist, or the shareable type isn't registered.

doSitesShare

public boolean doSitesShare(java.lang.String pOtherSiteId,
                            java.lang.String pShareableTypeId)
check to see if a specified site shares a shareable type with the current site. return true if pOtherSiteId is equal to the current site's Id, or if either pOtherSiteId or the current site are null.

Parameters:
pOtherSiteId - the id of the site
pShareableTypeId - the id of the shareable type in question
Returns:
true if the site represented by pOtherSiteId and the current site are in a SiteGroup together along with the ShareableType represented by pShareableTypeId. False if not. True is also returned if the current site is null, the specified site doesn't exist, or the shareable type isn't registered.

doSitesShare

public boolean doSitesShare(Site pOtherSite,
                            ShareableType pShareableTypeId)
check to see if a specified site shares a shareable type with the current site. return true if pOtherSite's Id is equal to the current site's Id, or if either pOtherSite or the current site are null.

Parameters:
pOtherSite - the site to compare against the current site
pShareableTypeId - the shareable type in question
Returns:
true if pOtherSite and the current site are in a SiteGroup together along with the pShareableType. False if not. True is also returned if the current site is null, the specified site doesn't exist, or the shareable type isn't registered.

getOtherSharingSiteIds

public java.util.Collection<java.lang.String> getOtherSharingSiteIds(java.lang.String pSiteId,
                                                                     java.lang.String pShareableTypeId)
get a collection of site Ids (excluding the specified site) for all the sites that share a given shareable type with the specified site.

Parameters:
pSiteId - the Id of the site in question
pShareableTypeId - the id of the shareable type in question
Returns:
a collection of Site Ids that share pShareableTypeId with pSiteId, null if there are none.

getOtherSharingSiteIds

public java.util.Collection<java.lang.String> getOtherSharingSiteIds(java.lang.String pShareableTypeId)
get a collection of site Ids (excluding the current site) for all the sites that share a given shareable type with the current site

Parameters:
pShareableTypeId - the id of the shareable type in question
Returns:
a collection of Site Ids for sites that share the shareable identified by pShareableTypeId with the current site, null if there are none

getOtherSharingSites

public java.util.Collection<Site> getOtherSharingSites(Site pSite,
                                                       ShareableType pShareableTypeId)
get a collection of all the sites (excluding the specified site) that share a given shareable type with the specified site.

Parameters:
pSite - the site in question
pShareableTypeId - the shareable type in question
Returns:
a collection of Sites that share pShareableType with pSite, null if there are none

getOtherSharingSites

public java.util.Collection<Site> getOtherSharingSites(ShareableType pShareableType)
get a collection of sites (excluding the current site) that share a given shareable type with the current site.

Parameters:
pShareableType - the shareable type in question
Returns:
a collection of Site that share pShareableType with the current site, null if there are none

getSharingSiteIds

public java.util.Collection<java.lang.String> getSharingSiteIds(java.lang.String pSiteId,
                                                                java.lang.String pShareableTypeId)
get a collection of site Ids for all the sites that share a given shareable type with the specified site.

Parameters:
pSiteId - the Id of the site in question
pShareableTypeId - the id of the shareable type in question
Returns:
a collection of Site Ids that share pShareableTypeId with pSiteId, null if there are none

getSharingSiteIds

public java.util.Collection<java.lang.String> getSharingSiteIds(java.lang.String pShareableTypeId)
get a collection of site Ids for all the sites that share a given shareable type with the current site.

Parameters:
pShareableTypeId - the id of the shareable type in question
Returns:
a collection of Site Ids for sites that share the shareable identified by pShareableTypeId with the current site, null if there are none

getSharingSites

public java.util.Collection<Site> getSharingSites(Site pSite,
                                                  ShareableType pShareableType)
get a collection of all the sites that share a given shareable type with the specified site.

Parameters:
pSite - the site in question
pShareableTypeId - the shareable type in question
Returns:
a collection of Sites that share pShareableType with pSite, null if there are none

getSharingSites

public java.util.Collection<Site> getSharingSites(ShareableType pShareableType)
get a collection of sites that share a given shareable type with the current site.

Parameters:
pShareableType - the shareable type in question
Returns:
a collection of Site that share pShareableType with the current site, null if there are none

getSitesNotInGroups

public java.util.Collection<Site> getSitesNotInGroups(java.util.Collection<SiteGroup> pSiteGroups)
returns sites that are not in a collection of SiteGroups.

Parameters:
pSiteGroups - The SiteGroups
Returns:
A collection of sites that are not in any of the SiteGroups.

getSitesNotInGroups

public java.util.Collection<Site> getSitesNotInGroups(java.util.Collection<SiteGroup> pSiteGroups,
                                                      java.lang.String pSiteType)
returns sites of a particular type that are not in a collection of SiteGroups.

Parameters:
pSiteGroups - The SiteGroups
pSiteType - The site type
Returns:
A collection of sites that are not in any of the SiteGroups and are of type pSiteType.

addShareableTypeChangeListener

public boolean addShareableTypeChangeListener(atg.multisite.ShareableTypeChangeListener pListener)
Adds a ShareableTypeChangeListener

Parameters:
pListener - The listener to add
Returns:
true if the listener was added, false otherwise

removeShareableTypeChangeListener

public boolean removeShareableTypeChangeListener(atg.multisite.ShareableTypeChangeListener pListener)
Removes a ShareableTypeChangeListener

Parameters:
pListener - The listener to remove
Returns:
true if the listener was removed, false otherwise

getSiteIdCollection

public java.util.Collection<java.lang.String> getSiteIdCollection(java.util.Collection<Site> pSites)
Converts a Collection of Sites to a Collection of site ids.

Parameters:
pSites - The Collection of Sites
Returns:
The Collection of Site ids

containsSiteWithId

public boolean containsSiteWithId(java.util.Collection<Site> pSites,
                                  java.lang.String pId)
Searches for a particular Site id in a collection of sites

Parameters:
pSites - The Collection of sites to search
pId - The id to search for.
Returns:
True if the the collection contains a site with the given id.

notifiyShareableTypeChangeListeners

protected void notifiyShareableTypeChangeListeners()
Notify all ShareableTypeChangeListener that the ShareableTypes have changed.


filterInactiveSites

public java.util.Collection<Site> filterInactiveSites(java.util.Collection<Site> pSites)
This method returns sites that are active

Parameters:
pSites - The collection of sites
Returns:
The collection of filtered sites
See Also:
SiteManager#isSiteActive()

findSharingSites

public java.util.Collection<Site> findSharingSites(java.lang.String pSiteId,
                                                   java.lang.String pShareableTypeId,
                                                   boolean pExcludeGivenSite,
                                                   boolean pExcludeInactiveSites)
                                            throws SiteContextException
Returns a collection of sites that share with the given site based on the given shareable type.

You may optionally exclude the given site or any inactive sites from the result

Parameters:
pSiteId - the site for which the sharing sites are found.
pShareableTypeId - sites must share this type
pExcludeGivenSite - true if you want to exclude the given site from the result
pExcludeInactiveSites - true if you want to exclude inactive sites from the result.
Returns:
a collection of sites that share.
Throws:
SiteContextException