package net.cyklotron.cms.category; import java.util.Set; import org.objectledge.coral.relation.Relation; import org.objectledge.coral.session.CoralSession; import org.objectledge.coral.store.InvalidResourceNameException; import org.objectledge.coral.store.Resource; import net.cyklotron.cms.integration.ResourceClassResource; import net.cyklotron.cms.link.BaseLinkResource; import net.cyklotron.cms.site.SiteResource; /** * This service manages the categories and their relations with various * resources. * * @author Pawel Potempski * @author Damian Gajda * @version $Id: CategoryService.java,v 1.10 2007-11-18 21:23:16 rafal Exp $ */ public interface CategoryService extends CategoryConstants { /** The parent node of the system-wide categories (/cms/categories) */ public static final String SYSTEM_CATEGORIES = "/cms/categories"; /** The parent node of the site-wide categories (categories) */ public static final String SITE_CATEGORIES = "categories"; public Relation getResourcesRelation(CoralSession coralSession); public Relation getResourceClassRelation(CoralSession coralSession); /** * Returns the root of category tree. * * @param site the site to return category tree for, or null * for system-wide categories. */ public Resource getCategoryRoot(CoralSession coralSession, SiteResource site) throws CategoryException; /** * Returns a list of super categories of a specified category. * * @param category the category resource. * @param includeSelf true to include category * in the list. * @return the list of categories. */ public CategoryResource[] getImpliedCategories(CategoryResource category, boolean includeSelf); /** * Returns a list of sub categories of a specified category. * * @param category the category resource. * @param includeSelf true to include category * in the list. * @return the list of categories. */ public CategoryResource[] getSubCategories(CoralSession coralSession, CategoryResource category, boolean includeSelf); /** * Returns all categories the resource belongs to. * * @param resource the resource. * @param includeImplied false to list categories assigned * directly, true to include super-categories also. */ public CategoryResource[] getCategories(CoralSession coralSession, Resource resource, boolean includeImplied); /** * Returns all resources belonging to a category. * *

Note that the meaning of includeImplied parameter of * this method is quite different than in the {@link * #getImpliedCategories(CategoryResource,boolean)}, and in general case * setting this one to true makes less senese.

* * @param category the category. * @param includeImplied false to return only resources * assigned directly to the given category, true to * inclue resources assigned directly to super-categories of the * given category. */ public Resource[] getResources(CoralSession coralSession, CategoryResource category, boolean includeImplied) throws CategoryException; /** * Adds a new category to the system. * @param name the category name. * @param description the category description. * @param parent the parent category or category tree root. * @param uiStyle TODO * * @return category resource. * * @throws InvalidResourceNameException if the name argument contains illegal characters. */ public CategoryResource addCategory(CoralSession coralSession, String name, String description, BaseLinkResource link,Resource parent, ResourceClassResource[] resourceClasses, String uiStyle) throws CategoryException, InvalidResourceNameException; /** * Deletes a category from the system. * * @param category the category to delete. */ public void deleteCategory(CoralSession coralSession, CategoryResource category) throws CategoryException; /** * Update a category. * @param category the category being updated. * @param name new category name. * @param description new category description. * @param parent new category parent (can be another category, or category * root) * @param uiStyle TODO * * @throws InvalidResourceNameException if the name argument contains illegal characters. */ public void updateCategory(CoralSession coralSession, CategoryResource category, String name, String description, BaseLinkResource link, Resource parent, ResourceClassResource[] resourceClasses, String uiStyle) throws CategoryException, InvalidResourceNameException; /** * Returns all resource classes bound to a category. * * @param category the category. * @param includeImplied if true returns also resource classes implied by parent * categories * @return an array of resource class resources bound to a category */ public ResourceClassResource[] getResourceClasses(CoralSession coralSession, CategoryResource category, boolean includeImplied); /** * Returns true if given category is bound to a given resource class. * * @param category the category. * @param resClass the resource class. * @return true if given category is bound to given resource class. */ public boolean hasResourceClass(CoralSession coralSession, CategoryResource category, ResourceClassResource resClass); /** * Returns true if given category supports given resource class, * ie. if the category or one of the parent categories is bound to a given resource class. * * @param category the category. * @param resClass the resource class. * @return true if given category is bound to given resource class. */ public boolean supportsResourceClass(CoralSession coralSession, CategoryResource category, ResourceClassResource resClass); /** * Remove a resource collection from a category. * * @param resources the resource collection. * @param category the category. */ public void removeFromCategory(CoralSession coralSession, Resource[] resources, CategoryResource category) throws CategoryException; /** * Remove a resource from all categories. * * @param resource the resource. */ public void removeFromAllCategories(CoralSession coralSession, Resource resource) throws CategoryException; // optimisation ///////////////////////////////////////////////////////////////////////// /** * Optimises Resource Class assignments in category tree. */ public Set optimiseResourceClassesAssignments(CoralSession coralSession, CategoryResource category, boolean recursive) throws CategoryException; /** * Optimises category set (assigned to a resource), leaves only subcategories removing * categories which are implied. */ public Set optimiseCategorizationSet(Set categories); /** * Gathers wrong resource assignments for a category taking into account supported resource * classes. Returns resources which do not fit supported resource classes. */ public Set fixCategoryAssignments(CoralSession coralSession, CategoryResource category) throws CategoryException; /** * * @param coralSession * @param node * @param oldSite * @param newSite */ public void reassignLocalCategories(CoralSession coralSession, Resource node, SiteResource oldSite, SiteResource newSite) throws CategoryException; }