package org.exoplatform.portal.mop.page;
import org.exoplatform.portal.mop.QueryResult;
import org.exoplatform.portal.mop.SiteType;
/**
* <p>
* The page service manages the page objects in GateIn, it focus on the page entities and does not provide access to the
* underlying page layout associated with the page.
* </p>
*
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
*/
public interface PageService {
/**
* Find and returns a page, if no such page exist, null is returned.
*
* @param key the page key
* @return the matching page
* @throws NullPointerException if the key is null
* @throws PageServiceException anything that would prevent the operation to succeed
*/
PageContext loadPage(PageKey key) throws NullPointerException, PageServiceException;
/**
* Create, update a page. When the page state is not null, the page will be created or updated depending on whether or not
* the page already exists.
*
*
* @param page the page
*
* @return true if the page is not already existed, otherwise return false.
*
* @throws NullPointerException if the key is null
* @throws PageServiceException anything that would prevent the operation to succeed
*
*/
boolean savePage(PageContext page) throws NullPointerException, PageServiceException;
/**
* Destroy a page.
*
* @param key the page key
* @return true when the page was destroyed
* @throws NullPointerException if the page key is null
* @throws PageServiceException anything that would prevent the operation to succeed
*/
boolean destroyPage(PageKey key) throws NullPointerException, PageServiceException;
/**
* Clone a page.
*
* @param src the source key
* @param dst the destination key
* @return the cloned page
* @throws NullPointerException if any key argument is null
* @throws PageServiceException anything that would prevent the operation to succeed
*/
PageContext clone(PageKey src, PageKey dst) throws NullPointerException, PageServiceException;
/**
* Query the page service to find pages that match the <code>siteType</code>, <code>siteName</code>, <code>pageName</code>
* and <code>title</code> criterions.
*
* @param offset the query offset
* @param limit the query limit
* @param siteType the site type
* @param siteName the site name
* @param pageName the page name
* @param pageTitle the page title
* @return the query result
* @throws PageServiceException anything that would prevent the operation to succeed
*/
QueryResult<PageContext> findPages(int offset, int limit, SiteType siteType, String siteName, String pageName,
String pageTitle) throws PageServiceException;
}