/** * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.portal.config; import java.util.Comparator; import java.util.List; import org.exoplatform.commons.utils.LazyPageList; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.portal.config.model.Application; import org.exoplatform.portal.config.model.ApplicationState; import org.exoplatform.portal.config.model.ApplicationType; import org.exoplatform.portal.config.model.Container; import org.exoplatform.portal.config.model.Dashboard; import org.exoplatform.portal.config.model.ModelObject; import org.exoplatform.portal.config.model.Page; import org.exoplatform.portal.config.model.PortalConfig; import org.exoplatform.portal.mop.page.PageService; import org.exoplatform.portal.pom.config.tasks.PreferencesTask; import org.exoplatform.portal.pom.data.ModelChange; /** * Created by The eXo Platform SAS Apr 19, 2007 * * This interface is used to load the PortalConfig, Page config and Navigation config from the database */ public interface DataStorage { String PAGE_CREATED = "org.exoplatform.portal.config.DataStorage.pageCreated".intern(); String PAGE_REMOVED = "org.exoplatform.portal.config.DataStorage.pageRemoved".intern(); String PAGE_UPDATED = "org.exoplatform.portal.config.DataStorage.pageUpdated".intern(); String PORTAL_CONFIG_CREATED = "org.exoplatform.portal.config.DataStorage.portalConfigCreated".intern(); String PORTAL_CONFIG_REMOVED = "org.exoplatform.portal.config.DataStorage.portalConfigRemoved".intern(); String PORTAL_CONFIG_UPDATED = "org.exoplatform.portal.config.DataStorage.portalConfigUpdated".intern(); /** * Create a PortalConfig in database <br/> * Then broadcast PORTAL_CONFIG_CREATED event * * @param config */ void create(PortalConfig config) throws Exception; /** * This method should update the PortalConfig object <br/> * Then broadcast PORTAL_CONFIG_UPDATED event * * @param config */ void save(PortalConfig config) throws Exception; /** * This method should load the PortalConfig object from db according to the portalName * * @param portalName */ PortalConfig getPortalConfig(String portalName) throws Exception; /** * This method should load the PortalConfig object from db according to the portalName and ownerType * * @param portalName * @param ownerType */ PortalConfig getPortalConfig(String ownerType, String portalName) throws Exception; /** * Remove the PortalConfig from the database <br/> * Then broadcast PORTAL_CONFIG_REMOVED event * * @param config * @throws Exception */ void remove(PortalConfig config) throws Exception; /** * This method should load the Page object from the database according to the pageId * * @param pageId - String represent id of page, it must be valid pageId (3 parts saparate by :: ) */ Page getPage(String pageId) throws Exception; /** * @deprecated replaced by * {@link PageService#clone(org.exoplatform.portal.mop.page.PageKey, org.exoplatform.portal.mop.page.PageKey)} * */ @Deprecated Page clonePage(String pageId, String clonedOwnerType, String clonedOwnerId, String clonedName); /** * @deprecated replaced by {@link PageService#destroyPage(org.exoplatform.portal.mop.page.PageKey)} */ @Deprecated void remove(Page page); /** * This method should create or udate the given page object <br /> * Then broasdcast PAGE_CREATED event * * @deprecated This is replaced by {@link PageService#savePage(org.exoplatform.portal.mop.page.PageContext)} * * @param page * @throws Exception */ @Deprecated void create(Page page); /** * Saves a page. If a page with the same id already exists then a merge operation will occur, otherwise it throws * {@link IllegalStateException} <br /> * * The operation returns a list of the change object that describes the changes that occured during the save operation. <br/> * * Then broadcast PAGE_UPDATED event * * @param page the page to save * @return the list of model changes that occured during the save operation * @throws Exception any exception */ List<ModelChange> save(Page page) throws Exception; /** * Return contentId according to each state (transient, persitent, clone) * * @param state */ <S> String getId(ApplicationState<S> state) throws Exception; /** * Return content state. If can't find, return null * * @see PreferencesTask * @param state - ApplicationState object * @param type - ApplicationType object */ <S> S load(ApplicationState<S> state, ApplicationType<S> type) throws Exception; /** * Save content state <br /> * * @param state - ApplicationState object. It must be CloneApplicationState or PersistentApplicationState object * @param preferences - object to be saved */ <S> ApplicationState<S> save(ApplicationState<S> state, S preferences) throws Exception; /** * Return LazyPageList of object (unsorted) which type and other info determined in Query object * * @param q - Query object */ <T> LazyPageList<T> find(Query<T> q) throws Exception; /** * Return LazyPageList of object (sorted) which type and other info determined in Query object * * @param q - Query object */ <T> LazyPageList<T> find(Query<T> q, Comparator<T> sortComparator) throws Exception; /** * Return ListAccess, we can retrieved array of object (unsorted) in database through this. * * @param q - Query object */ <T> ListAccess<T> find2(Query<T> q) throws Exception; /** * Return ListAccess, we can retrieved array of object (sorted) in database through this. * * @param q - Query object * @param sortComparator - Comparator object, used to sort the result list */ <T> ListAccess<T> find2(Query<T> q, Comparator<T> sortComparator) throws Exception; /** * Return Container object - info that be used to build this Container is retrieved from * /conf/portal/portal/sharedlayout.xml */ Container getSharedLayout() throws Exception; /** * Return Dashboard object from database according to dashboard id If can't find out, return null * * @param dashboardId */ Dashboard loadDashboard(String dashboardId) throws Exception; /** * Save Dashboard (its data : DashboadData) to database * * @param dashboard - Dashboard object to be saved */ void saveDashboard(Dashboard dashboard) throws Exception; void save() throws Exception; /** * Returns the list of all portal names. * * @return the portal names * @throws Exception any exception */ List<String> getAllPortalNames() throws Exception; List<String> getAllGroupNames() throws Exception; /** * Returns a String array that contains two elements. The first one is the site type and the second one is site name. <br/> * * @param applicationStorageId * @return * @throws Exception */ String[] getSiteInfo(String applicationStorageId) throws Exception; <S> Application<S> getApplicationModel(String applicationStorageId) throws Exception; /************************************************************* * Public API to access/modify MOP mixin, temporarily put here **************************************************************/ <A> A adapt(ModelObject modelObject, Class<A> type); <A> A adapt(ModelObject modelObject, Class<A> type, boolean create); }