public class HibernatePageDao extends AbstractContentEntityObjectHibernateDao<Page> implements PageDaoInternal
HibernateObjectDao.Cacheability
cacheFactory, confluenceUserDao
Constructor and Description |
---|
HibernatePageDao() |
Modifier and Type | Method and Description |
---|---|
int |
countAllPages()
Counts the total number of all page entities across all spaces, including non-current pages
|
int |
countCurrentPages()
Counts the total number of current pages across all spaces
|
int |
countDraftPages()
Counts the number of pages that are drafts.
|
int |
countPagesInSubtree(@NonNull Page page)
Return total descendant page including input page
|
int |
countPagesWithUnpublishedChanges()
Counts the number of published pages that have unpublished changes.
|
List<AbstractPage> |
findBlogsWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept(SpacePermissionQueryBuilder permissionQueryBuilder,
String blogTitle,
Space space,
int maxResultCount)
Searches for blog posts in all spaces except the one specified, looking for those that have the given title in a
current or previous version, and returns the first maxResultCount results.
|
List<AbstractPage> |
findBlogsWithCurrentOrHistoricalTitleInPermittedSpace(SpacePermissionQueryBuilder permissionQueryBuilder,
String blogTitle,
Space space,
int maxResultCount)
Searches for blogs in the space specified, looking for those that have the given title in a previous version, and
returns the first maxResultCount results.
|
List<ContentPermissionSummary> |
findContentPermissionSummaryByIds(Collection<Long> ids)
Get Content creator for bulk permission checking
|
PageResponse<Page> |
findCurrentPages(LimitedRequest request)
Find all current pages.
|
List<AbstractPage> |
findPagesWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept(SpacePermissionQueryBuilder permissionQueryBuilder,
String pageTitle,
Space space,
int maxResultCount)
Searches for pages in all spaces except the one specified, looking for those that have the given title in a
previous version, and returns the first maxResultCount results.
|
List<AbstractPage> |
findPagesWithCurrentOrHistoricalTitleInPermittedSpace(SpacePermissionQueryBuilder permissionQueryBuilder,
String pageTitle,
Space space,
int maxResultCount)
Searches for pages in the space specified, looking for those that have the given title in a previous version, and
returns the first maxResultCount results.
|
PageResponse<AbstractPage> |
getAbstractPages(org.joda.time.DateTime date,
List<ContentStatus> statuses,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPages(List<ContentType> contentTypes,
List<ContentStatus> statuses,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPages(Space space,
List<ContentType> contentTypes,
List<ContentStatus> statuses,
LimitedRequest pageRequest,
@Nullable com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPages(Space space,
String title,
List<ContentStatus> statuses,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPages(String title,
List<ContentStatus> statuses,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPagesByCreationDate(org.joda.time.DateTime date,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<AbstractPage> |
getAbstractPagesByTitle(String title,
LimitedRequest limitedRequest,
com.google.common.base.Predicate<? super AbstractPage> filter)
Deprecated.
|
PageResponse<Page> |
getAllChildren(Page page,
LimitedRequest pageRequest,
Depth depth)
Returns all children of a page (including drafts), limited to the pagination requested.
|
Map<Long,List<Long>> |
getAncestorsFor(Collection<Long> ids)
Get the list page ids of the ancestors of the given page ids.
|
int |
getAuthoredPagesCountByUser(String username) |
PageResponse<BlogPost> |
getBlogPosts(Space space,
LimitedRequest limitedRequest,
com.google.common.base.Predicate<? super BlogPost> filter)
Deprecated.
|
PageResponse<Page> |
getChildren(Page page,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super Page> predicate,
Depth depth)
Deprecated.
|
int |
getCommentCountOnPage(long id)
Count the number of comments on the passed in page.
|
List<Long> |
getDescendantIds(Page page)
Finds the ids of all descendant pages of the given page
|
List<Long> |
getDescendantIds(Page page,
ContentStatus... contentStatus)
Finds the ids of all descendant pages of the given page
|
List<Page> |
getDescendants(Page page)
Finds all descendant pages (recursive) of the given page
|
List<String> |
getDescendantTitles(Page page)
Finds all descendant titles of the given page
|
PageResponse<Page> |
getDraftChildren(Page page,
LimitedRequest pageRequest,
Depth depth)
Returns the children of a page which have a status of DRAFT, limited to the pagination requested.
|
Integer |
getMaxSiblingPosition(Page page)
Gets the highest position value of all the page's siblings.
|
Date |
getOldestPageCreationDate()
Gets the creation date of the oldest page.
|
List<Page> |
getOrphanedPages(@Nullable String spaceKey) |
Page |
getPage(Space space,
String pageTitle)
Get the page by space and title.
|
Page |
getPage(Space space,
String pageTitle,
boolean eagerLoadComments) |
Page |
getPageById(long id)
Get the page with the given id.
|
Page |
getPageByIdWithComments(long id)
Get the page with the given id, and perform an eager load of the comments and their children.
|
long |
getPageCount(@NonNull String spaceKey)
Get total number of current pages in a space
|
Collection<Long> |
getPageIds(Space space)
Get the ids of all pages (current and historical) in the given space.
|
List<Page> |
getPageInTrash(String spaceKey,
String title) |
PageResponse<Page> |
getPages(LimitedRequest pageRequest,
com.google.common.base.Predicate<? super Page> filter)
Deprecated.
|
List<Page> |
getPages(Space space,
boolean currentOnly) |
PageResponse<Page> |
getPages(Space space,
LimitedRequest pageRequest,
com.google.common.base.Predicate<? super Page> filter)
Deprecated.
|
List<Page> |
getPagesByIds(Iterable<Long> ids)
Get the pages with the given ids.
|
List<Page> |
getPagesCreatedOrUpdatedSinceDate(Date previousLoginDate) |
List<Page> |
getPagesStartingWith(Space space,
String s) |
Optional<PageStatisticsDTO> |
getPageStatistics()
Fetches statistics about pages
|
List<Page> |
getPagesWithPermissions(@NonNull Space space)
Get all current pages in a space and eagerly fetch permissions at the same time.
|
Page |
getPageWithComments(Space space,
String pageTitle)
Get the page by space and title, and perform an eager load of the comments and their children.
|
List<Page> |
getPermissionPages(Space space) |
Class |
getPersistentClass()
Gets the type of
EntityObject this Dao works with. |
List<Page> |
getRecentlyAddedPages(int maxCount,
@Nullable String spaceKey) |
List<Page> |
getRecentlyAuthoredPagesByUser(String username,
int maxCount) |
List<Page> |
getRecentlyUpdatedPages(int maxCount,
@Nullable String spaceKey) |
List<Page> |
getTopLevelPages(Space space) |
PageResponse<Page> |
getTopLevelPages(Space space,
LimitedRequest limitedRequest,
com.google.common.base.Predicate<? super Page> predicate)
Deprecated.
|
List<OutgoingLink> |
getUndefinedLinks(@Nullable String spaceKey) |
List<Page> |
getUndefinedPages(@Nullable String spaceKey)
Deprecated.
since 6.6.0, use
getUndefinedLinks(String) |
countContentBySpaceIdAndStatus, findAllDraftsFor, findAllLegacyDraftsFor, findContentBySpaceIdAndStatus, findContentBySpaceIdAndStatus, findDraftFor, findHistoricalVersionsAfterVersion, findPreviousVersions, findUnpublishedContentWithUserContributions, getAllCurrentEntities, getByClassId, getById, getContentAuthoredByUser, getContributionStatusByUser, getFirstVersionAfter, getFirstVersionBefore, getLastEditedVersionsOf, getObjectType, getPageAndBlogPostsVersionsLastEditedByUser, getPageAndBlogPostsVersionsLastEditedByUserIncludingDrafts, getRecentlyAddedEntities, getRecentlyModifiedEntities, getRecentlyModifiedEntities, getRecentlyModifiedEntitiesForUser, getRecentlyModifiedForChangeDigest, getTrashedContent, getTrashedContents, getVersion, getVersionEditContributors, getVersionHistorySummary, getVersionHistorySummary, getVersionsLastEditedByUser, getVersionsLastEditedByUserNew
findAllSorted, findLatestVersionsCount, findLatestVersionsCount, findLatestVersionsIterator, findLatestVersionsIterator, findNamedQueryStringParams, findNamedQueryStringParams, save, saveEntity, setCacheFactory, setConfluenceUserDao, updateEntityModificationData, updateModificationData
applyTransactionTimeout, applyTransactionTimeout, checkDaoConfig, createHibernateTemplate, findAll, findAllSorted, findByClassIds, findByClassIdsFiltered, findNamedQuery, findNamedQuery, findNamedQuery, findNamedQueryStringParam, findNamedQueryStringParam, findNamedQueryStringParam, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findNamedQueryStringParams, findSingleObject, getCountResult, getHibernateTemplate, getSession, getSessionFactory, index, indexEntity, refresh, refreshEntity, reIndex, reIndexEntity, remove, removeEntity, replicate, replicateEntity, save, saveEntity, saveRaw, saveRawEntity, setHibernateTemplate, setIndexer, setSessionFactory, unIndex, unIndexEntity, uniqueResult
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getFilteredAbstractPages, getFilteredAbstractPages, getFilteredAbstractPages, getFilteredAbstractPages, getFilteredAbstractPages, getFilteredAbstractPagesByCreationDate, getFilteredAbstractPagesByTitle, getFilteredBlogPosts, getFilteredChildren, getFilteredPages, getFilteredPages, getFilteredTopLevelPages
findContentBySpaceIdAndStatusAndFilter
countContentBySpaceIdAndStatus, findAllDraftsFor, findAllLegacyDraftsFor, findContentBySpaceIdAndStatus, findContentBySpaceIdAndStatus, findDraftFor, findHistoricalVersionsAfterVersion, findPreviousVersions, findUnpublishedContentWithUserContributions, getAllCurrentEntities, getById, getContentAuthoredByUser, getContributionStatusByUser, getFirstVersionAfter, getFirstVersionBefore, getLastEditedVersionsOf, getObjectType, getPageAndBlogPostsVersionsLastEditedByUser, getPageAndBlogPostsVersionsLastEditedByUserIncludingDrafts, getRecentlyAddedEntities, getRecentlyModifiedEntities, getRecentlyModifiedEntities, getRecentlyModifiedEntitiesForUser, getRecentlyModifiedForChangeDigest, getTrashedContent, getTrashedContents, getVersion, getVersionEditContributors, getVersionHistorySummary, getVersionHistorySummary, getVersionsLastEditedByUser, getVersionsLastEditedByUserNew
saveEntity
findLatestVersionsCount, findLatestVersionsIterator, save
findAll, findAllSorted, findAllSorted, findByClassIds, findByClassIdsFiltered, refresh, refreshEntity, remove, removeEntity, replicate, replicateEntity, save, saveEntity, saveRaw, saveRawEntity
public Page getPageById(long id)
PageDao
getPageById
in interface PageDao
id
- of the page to loadpublic List<Page> getPagesByIds(Iterable<Long> ids)
PageDao
getPagesByIds
in interface PageDao
public int getCommentCountOnPage(long id)
PageDao
getCommentCountOnPage
in interface PageDao
public Page getPageByIdWithComments(long id)
PageDao
getPageByIdWithComments
in interface PageDao
id
- of the page to loadpublic Page getPageWithComments(Space space, String pageTitle)
PageDao
getPageWithComments
in interface PageDao
space
- The space the page belongs topageTitle
- The title of the pagepublic Page getPage(Space space, String pageTitle)
PageDao
public List<Page> getPagesWithPermissions(@NonNull Space space)
PageDao
getPagesWithPermissions
in interface PageDao
@Deprecated public PageResponse<Page> getPages(LimitedRequest pageRequest, com.google.common.base.Predicate<? super Page> filter)
PageDaoInternal.getFilteredPages(LimitedRequest, java.util.function.Predicate)
PageDao
@Deprecated public PageResponse<Page> getPages(Space space, LimitedRequest pageRequest, com.google.common.base.Predicate<? super Page> filter)
PageDaoInternal.getFilteredPages(Space, LimitedRequest, java.util.function.Predicate)
PageDao
@Deprecated public PageResponse<BlogPost> getBlogPosts(Space space, LimitedRequest limitedRequest, com.google.common.base.Predicate<? super BlogPost> filter)
PageDaoInternal.getFilteredBlogPosts(Space, LimitedRequest, java.util.function.Predicate)
PageDao
getBlogPosts
in interface PageDao
space
- the space to locate the blog posts inlimitedRequest
- the start and offset of the pages to retrievefilter
- the predicate to filter the returned results by, may be null@Deprecated public PageResponse<AbstractPage> getAbstractPages(Space space, List<ContentType> contentTypes, List<ContentStatus> statuses, LimitedRequest pageRequest, @Nullable com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPages(Space, List, List, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPages
in interface PageDao
space
- the space to locate the page incontentTypes
- list of content types to findstatuses
- list of statuses the pages can be inpageRequest
- the pagination requestfilter
- the predicate to pages the returned results by, may be null@Deprecated public PageResponse<AbstractPage> getAbstractPages(List<ContentType> contentTypes, List<ContentStatus> statuses, LimitedRequest pageRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPages(List, List, LimitedRequest, java.util.function.Predicate)
)}PageDao
getAbstractPages
in interface PageDao
contentTypes
- list of content types to findstatuses
- list of statuses the pages can be inpageRequest
- the start and offset of the pages to retrievefilter
- the predicate to filter the returned results by, may be nullpublic Collection<Long> getPageIds(Space space)
PageDao
getPageIds
in interface PageDao
space
- space to retrieve page ids from, can not be null.@Deprecated public PageResponse<AbstractPage> getAbstractPagesByTitle(String title, LimitedRequest limitedRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPagesByTitle(String, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPagesByTitle
in interface PageDao
title
- the title of the page to matchlimitedRequest
- the pagination requestedfilter
- the predicate to apply to the results before returning@Deprecated public PageResponse<AbstractPage> getAbstractPagesByCreationDate(org.joda.time.DateTime date, LimitedRequest pageRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPagesByCreationDate(DateTime, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPagesByCreationDate
in interface PageDao
date
- - the creation date to matchpageRequest
- the pagination requestfilter
- the predicate to apply to the results before returning@Deprecated public PageResponse<AbstractPage> getAbstractPages(Space space, String title, List<ContentStatus> statuses, LimitedRequest pageRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPages(Space, String, List, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPages
in interface PageDao
space
- space the page belongs totitle
- the title of the page to matchstatuses
- list of statuses the content can be inpageRequest
- the pagination requestedfilter
- the predicate to apply to the results before returning@Deprecated public PageResponse<AbstractPage> getAbstractPages(String title, List<ContentStatus> statuses, LimitedRequest pageRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPages(String, List, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPages
in interface PageDao
title
- the title of the page to matchstatuses
- list of statuses the content can be inpageRequest
- the pagination requestedfilter
- the predicate to apply to the results before returning@Deprecated public PageResponse<AbstractPage> getAbstractPages(org.joda.time.DateTime date, List<ContentStatus> statuses, LimitedRequest pageRequest, com.google.common.base.Predicate<? super AbstractPage> filter)
PageDaoInternal.getFilteredAbstractPages(DateTime, List, LimitedRequest, java.util.function.Predicate)
PageDao
getAbstractPages
in interface PageDao
date
- the creation date to matchstatuses
- list of statuses the content can be inpageRequest
- the pagination requestfilter
- the predicate to apply to the results before returningpublic List<Page> getPagesStartingWith(Space space, String s)
getPagesStartingWith
in interface PageDao
public List<Page> getRecentlyAddedPages(int maxCount, @Nullable String spaceKey)
getRecentlyAddedPages
in interface PageDao
public List<Page> getRecentlyUpdatedPages(int maxCount, @Nullable String spaceKey)
getRecentlyUpdatedPages
in interface PageDao
public List<Page> getOrphanedPages(@Nullable String spaceKey)
getOrphanedPages
in interface PageDao
@Deprecated public List<Page> getUndefinedPages(@Nullable String spaceKey)
getUndefinedLinks(String)
getUndefinedPages
in interface PageDao
public final List<OutgoingLink> getUndefinedLinks(@Nullable String spaceKey)
getUndefinedLinks
in interface PageDao
public List<Page> getPermissionPages(Space space)
getPermissionPages
in interface PageDao
public int getAuthoredPagesCountByUser(String username)
getAuthoredPagesCountByUser
in interface PageDao
public List<Page> getRecentlyAuthoredPagesByUser(String username, int maxCount)
getRecentlyAuthoredPagesByUser
in interface PageDao
public List<Page> getPagesCreatedOrUpdatedSinceDate(Date previousLoginDate)
getPagesCreatedOrUpdatedSinceDate
in interface PageDao
public Class getPersistentClass()
ObjectDaoInternal
EntityObject
this Dao works with.getPersistentClass
in interface ObjectDao
getPersistentClass
in interface ObjectDaoInternal<Page>
public List<AbstractPage> findPagesWithCurrentOrHistoricalTitleInPermittedSpace(SpacePermissionQueryBuilder permissionQueryBuilder, String pageTitle, Space space, int maxResultCount)
PageDao
Only pages in spaces the remote user is able to view will be returned.
findPagesWithCurrentOrHistoricalTitleInPermittedSpace
in interface PageDao
pageTitle
- title of a page in a previous version.space
- Space to search. Must not be null.maxResultCount
- maximum pages to returnpublic List<AbstractPage> findBlogsWithCurrentOrHistoricalTitleInPermittedSpace(SpacePermissionQueryBuilder permissionQueryBuilder, String blogTitle, Space space, int maxResultCount)
PageDao
Only blogs in spaces the remote user is able to view will be returned.
findBlogsWithCurrentOrHistoricalTitleInPermittedSpace
in interface PageDao
permissionQueryBuilder
- required to determine how to construct database queries for space permissions, for
the current userblogTitle
- title of a page in a previous version.space
- Space to search. Must not be null.maxResultCount
- maximum pages to returnpublic List<AbstractPage> findBlogsWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept(SpacePermissionQueryBuilder permissionQueryBuilder, String blogTitle, Space space, int maxResultCount)
PageDao
Only pages in spaces the remote user is able to view will be returned.
findBlogsWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept
in interface PageDao
blogTitle
- Title of the blog to findspace
- Space to exclude from search. If null, all spaces are searched.maxResultCount
- maximum blog posts to returnpublic List<AbstractPage> findPagesWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept(SpacePermissionQueryBuilder permissionQueryBuilder, String pageTitle, Space space, int maxResultCount)
PageDao
Only pages in spaces the remote user is able to view will be returned.
findPagesWithCurrentOrHistoricalTitleInAllPermittedSpacesExcept
in interface PageDao
pageTitle
- title of a page in a previous version.space
- Space to exclude from search. If null, all spaces are searched.maxResultCount
- maximum pages to returnpublic List<ContentPermissionSummary> findContentPermissionSummaryByIds(Collection<Long> ids)
PageDao
findContentPermissionSummaryByIds
in interface PageDao
ids
- of Contentpublic int countCurrentPages()
PageDao
countCurrentPages
in interface PageDao
public PageResponse<Page> findCurrentPages(LimitedRequest request)
PageDaoInternal
findCurrentPages
in interface PageDaoInternal
request
- the limited pagination request.public int countDraftPages()
PageDao
countDraftPages
in interface PageDao
public int countPagesWithUnpublishedChanges()
PageDao
countPagesWithUnpublishedChanges
in interface PageDao
public long getPageCount(@NonNull String spaceKey)
PageDao
getPageCount
in interface PageDao
spaceKey
- the space to look for posts inpublic Optional<PageStatisticsDTO> getPageStatistics()
PageDao
getPageStatistics
in interface PageDao
public int countAllPages()
PageDao
countAllPages
in interface PageDao
public List<Page> getPageInTrash(String spaceKey, String title)
getPageInTrash
in interface PageDao
public List<Page> getDescendants(Page page)
PageDao
getDescendants
in interface PageDao
public int countPagesInSubtree(@NonNull Page page)
PageDao
countPagesInSubtree
in interface PageDao
public Map<Long,List<Long>> getAncestorsFor(Collection<Long> ids)
PageDao
getAncestorsFor
in interface PageDao
ids
- the list of page ids to get ancestor page ids forpublic List<String> getDescendantTitles(Page page)
PageDao
getDescendantTitles
in interface PageDao
public List<Long> getDescendantIds(Page page)
PageDao
getDescendantIds
in interface PageDao
public List<Long> getDescendantIds(Page page, ContentStatus... contentStatus)
PageDao
getDescendantIds
in interface PageDao
public List<Page> getTopLevelPages(Space space)
getTopLevelPages
in interface PageDao
@Deprecated public PageResponse<Page> getTopLevelPages(Space space, LimitedRequest limitedRequest, com.google.common.base.Predicate<? super Page> predicate)
PageDaoInternal.getFilteredTopLevelPages(Space, LimitedRequest, java.util.function.Predicate)
getTopLevelPages
in interface PageDao
@Deprecated public PageResponse<Page> getChildren(Page page, LimitedRequest pageRequest, com.google.common.base.Predicate<? super Page> predicate, Depth depth)
PageDaoInternal.getFilteredChildren(Page, LimitedRequest, java.util.function.Predicate, Depth)
PageDao
getChildren
in interface PageDao
page
- the page to find children forpageRequest
- the pagination requestedpredicate
- predicate used to entitiesdepth
- the depth to return children topublic PageResponse<Page> getDraftChildren(Page page, LimitedRequest pageRequest, Depth depth)
PageDao
getDraftChildren
in interface PageDao
page
- the page to find children forpageRequest
- the pagination requesteddepth
- the depth to return children topublic PageResponse<Page> getAllChildren(Page page, LimitedRequest pageRequest, Depth depth)
PageDao
getAllChildren
in interface PageDao
page
- the page to find children forpageRequest
- the pagination requesteddepth
- the depth to return children topublic Integer getMaxSiblingPosition(Page page)
PageDao
getMaxSiblingPosition
in interface PageDao
page
- The page whose siblings from which to get the max positionpublic Date getOldestPageCreationDate()
ContentEntityObjectDao
getOldestPageCreationDate
in interface ContentEntityObjectDao<Page>
getOldestPageCreationDate
in class AbstractContentEntityObjectHibernateDao<Page>
Copyright © 2003–2020 Atlassian. All rights reserved.