/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/rwiki/trunk/rwiki-api/api/src/java/uk/ac/cam/caret/sakai/rwiki/service/api/RWikiObjectService.java $
* $Id: RWikiObjectService.java 33827 2007-08-10 15:05:21Z ian@caret.cam.ac.uk $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006 The Sakai Foundation.
*
* Licensed under the Educational Community License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ecl1.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package uk.ac.cam.caret.sakai.rwiki.service.api;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.sakaiproject.entity.api.ContextObserver;
import org.sakaiproject.entity.api.Entity;
import org.sakaiproject.entity.api.EntityProducer;
import org.sakaiproject.entity.api.EntityTransferrer;
import org.sakaiproject.entity.api.Reference;
import uk.ac.cam.caret.sakai.rwiki.service.api.dao.ObjectProxy;
import uk.ac.cam.caret.sakai.rwiki.service.api.model.RWikiCurrentObject;
import uk.ac.cam.caret.sakai.rwiki.service.api.model.RWikiHistoryObject;
import uk.ac.cam.caret.sakai.rwiki.service.api.model.RWikiObject;
import uk.ac.cam.caret.sakai.rwiki.service.api.model.RWikiPermissions;
import uk.ac.cam.caret.sakai.rwiki.service.exception.PermissionException;
import uk.ac.cam.caret.sakai.rwiki.service.exception.VersionException;
// FIXME: Service
public interface RWikiObjectService extends EntityProducer, EntityTransferrer, ContextObserver
{
/** The type string for this application: should not change over time as it may be stored in various parts of persistent entities. */
static final String APPLICATION_ID = RWikiObjectService.class.getName();
/** This string starts the references to resources in this service. */
static final String REFERENCE_ROOT = Entity.SEPARATOR + "wiki";
/** This string starts the references to resources in this service. */
static final String REFERENCE_LABEL = "wiki";
/** Name of the event when creating a resource. */
public static final String EVENT_RESOURCE_ADD = "wiki.new";
/** Name of the event when reading a resource. */
public static final String EVENT_RESOURCE_READ = "wiki.read";
/** Name of the event when writing a resource. */
public static final String EVENT_RESOURCE_WRITE = "wiki.revise";
/** Name of the event when removing a resource. */
public static final String EVENT_RESOURCE_REMOVE = "wiki.delete";
public static final String SMALL_CHANGE_IN_THREAD = "wiki.smallchange.request";
/**
* Gets the current object
*
* @param name
* @param realm
* @return
* @throws PermissionException
*/
RWikiCurrentObject getRWikiObject(String name, String realm)
throws PermissionException;
/**
* Gets the current object using a named template if it does not exist
*
* @param name
* @param realm
* the page space the page is in, used to localise and globalise the
* name
* @param templateName
* @return
* @throws PermissionException
*/
RWikiCurrentObject getRWikiObject(String name, String realm,
RWikiObject ignore, String templateName) throws PermissionException;
/**
* Gets the object based on the ID. This
*
* @param reference
* the reference object
* @return
*/
RWikiCurrentObject getRWikiObject(RWikiObject reference);
/**
* Search on current objects
*
* @param criteria
* @param realm
* @return
* @throws PermissionException
*/
List search(String criteria, String realm) throws PermissionException;
/**
* Update the named page, with permissions
*
* @param name
* @param realm
* @param version
* @param content
* @param permissions
* @throws PermissionException
* @throws VersionException
*/
void update(String name, String realm, Date version, String content,
RWikiPermissions permissions) throws PermissionException,
VersionException;
/**
* Update the name page, no permissions
*
* @param name
* @param realm
* @param version
* @param content
* @throws PermissionException
* @throws VersionException
*/
void update(String name, String realm, Date version, String content)
throws PermissionException, VersionException;
/**
* Update the name page's permissions
*
* @param name
* @param realm
* @param version
* @param permissions
* @throws PermissionException
* @throws VersionException
*/
void update(String name, String realm, Date version,
RWikiPermissions permissions) throws PermissionException,
VersionException;
/**
* Does the page exist
*
* @param name
* A possibly non-globalised page name
* @param space
* Default space to globalise to
* @return
*/
boolean exists(String name, String space);
// SAK-2519
/**
* A list of pages that have changed since (current versions)
*
* @param since
* @param realm
* @return a list containing RWikiCurrentObjects
*/
List findChangedSince(Date since, String realm);
/**
* Finds pages that reference the given page name
*
* @param name
* @return a non-null list of page names not rwikiObjects
*/
List findReferencingPages(String name);
/**
* Revert current revision to a named revision, creates a new revision
*
* @param name
* @param realm
* @param version
* @param revision
*/
void revert(String name, String realm, Date version, int revision);
/**
* Get a previous version
*
* @param referenceObject
* the Rwiki object whore rwikiobjectid field will be used to locate
* the revision
* @param revision
* @return
*/
RWikiHistoryObject getRWikiHistoryObject(RWikiObject refernceObject,
int revision);
/**
* get a list of all previous versions as RWikiHistoryObjects
*
* @param id
* @return
*/
List findRWikiHistoryObjects(RWikiObject reference);
/**
* Finds the history objects sorted in reverse order
*
* @param rwo
* @return
*/
List findRWikiHistoryObjectsInReverse(RWikiObject rwo);
/**
* get list of subpages of the supplied page. The list will be
* alphabetiallcy sorted
*
* @param globalParentPageName
* is the page on which we want to find sub pages. THIS IS A GLOBAL
* NAME. DONT CONFUSE WITH A LOCAL NAME
* @return a list of pages sorted by name alphabetically.
*/
List findRWikiSubPages(String globalParentPageName);
/**
* Updates and creates a new comment on the page
*
* @param name
* @param realm
* @param version
* @param content
* @throws PermissionException
* @throws VersionException
*/
void updateNewComment(String name, String realm, Date version,
String content) throws PermissionException, VersionException;
/**
* Create a list proxy based on the List and Object Proxy
*
* @param commentsList
* @param lop
* @return
*/
List createListProxy(List commentsList, ObjectProxy lop);
/**
* Creates a new rwiki Current Object according to the implementation
*
* @return
*/
RWikiObject createNewRWikiCurrentObject();
/**
* Creates a new RWiki Permissions Bean
*
* @return
*/
RWikiPermissions createNewRWikiPermissionsImpl();
/**
* fetches the entity based on the RWikiObject
*
* @param rwo
* @return
*/
Entity getEntity(RWikiObject rwo);
/**
* Fetches the Reference Object from the Entity manager based on the
* RWikiObject
*
* @param rwo
* @return
*/
Reference getReference(RWikiObject rwo);
/**
* A Map containing EntityHandlers for the Service, Each entity handler
* handles a subtype
*
* @return
*/
Map getHandlers();
/**
* Find all the changes under this point and under since the time specified
*
* @param time
* the time after which to consider changes
* @param basepath
* the base path
* @return a list of RWikiCurrentObjects
*/
List findAllChangedSince(Date time, String basepath);
/**
* Check for read permission
*
* @param rwo
* @return
*/
boolean checkRead(RWikiObject rwo);
/**
* check for update permission
*
* @param rwo
* @return
*/
boolean checkUpdate(RWikiObject rwo);
/**
* check for admin permission
*
* @param rwo
* @return
*/
boolean checkAdmin(RWikiObject rwo);
/**
* Find all pages in the database just reture
*
* @return
*/
List findAllPageNames();
/**
* generates a valid entity reference from the page name
*
* @param pageName
* @return
*/
String createReference(String pageName);
/**
* gets a component page link renderer
*
* @param pageSpace
* @return
*/
PageLinkRenderer getComponentPageLinkRender(String pageSpace, boolean withBreadCrumb);
}