All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.openfire.group.GroupProvider Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2004-2008 Jive Software. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
 *
 * 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 org.jivesoftware.openfire.group;

import java.util.Collection;
import java.util.Map;

import org.jivesoftware.util.PersistableMap;
import org.xmpp.packet.JID;

/**
 * Provider interface for groups. Users that wish to integrate with
 * their own group system must implement this class and then register
 * the implementation with Openfire in the openfire.xml
 * file. An entry in that file would look like the following:
 *
 * 
 *   <provider>
 *     <group>
 *       <className>com.foo.auth.CustomGroupProvider</className>
 *     </group>
 *   </provider>
* * @see AbstractGroupProvider * * @author Matt Tucker */ public interface GroupProvider { /** * Creates a group with the given name (optional operation). *

* The provider is responsible for setting the creation date and * modification date to the current date/time. *

* * @param name name of the group. * @return the newly created group. * @throws GroupAlreadyExistsException if a group with the same name already * exists. * @throws UnsupportedOperationException if the provider does not * support the operation. */ Group createGroup(String name) throws GroupAlreadyExistsException; /** * Deletes the group (optional operation). * * @param name the name of the group to delete. * @throws UnsupportedOperationException if the provider does not * support the operation. */ void deleteGroup(String name); /** * Returns a group based on it's name. * * @param name the name of the group. * @return the group with the given name. * @throws GroupNotFoundException If no group with that ID could be found */ Group getGroup(String name) throws GroupNotFoundException; /** * Sets the name of a group to a new name. * * @param oldName the current name of the group. * @param newName the desired new name of the group. * @throws GroupAlreadyExistsException if a group with the same name already * exists. * @throws UnsupportedOperationException if the provider does not * support the operation. */ void setName(String oldName, String newName) throws GroupAlreadyExistsException; /** * Updates the group's description. * * @param name the group name. * @param description the group description. * @throws GroupNotFoundException if no existing group could be found to update. */ void setDescription(String name, String description) throws GroupNotFoundException; /** * Returns the number of groups in the system. * * @return the number of groups in the system. */ int getGroupCount(); /** * Returns the Collection of all group names in the system. * * @return the Collection of all groups. */ Collection getGroupNames(); /** * Returns true if this GroupProvider allows group sharing. Shared groups * enable roster sharing. * * @return true if the group provider supports group sharing. */ boolean isSharingSupported(); /** * Returns an unmodifiable Collection of all shared groups in the system. * * @return unmodifiable Collection of all shared groups in the system. */ Collection getSharedGroupNames(); /** * Returns an unmodifiable Collection of all shared groups in the system for a given user. * * @param user The bare JID for the user (node@domain) * @return unmodifiable Collection of all shared groups in the system for a given user. */ Collection getSharedGroupNames(JID user); /** * Returns an unmodifiable Collection of all public shared groups in the system. * * @return unmodifiable Collection of all public shared groups in the system. */ Collection getPublicSharedGroupNames(); /** * Returns an unmodifiable Collection of groups that are visible * to the members of the given group. * * @param userGroup The given group * @return unmodifiable Collection of group names that are visible * to the given group. */ Collection getVisibleGroupNames(String userGroup); /** * Returns the Collection of all groups in the system. * * @param startIndex start index in results. * @param numResults number of results to return. * @return the Collection of all group names given the * startIndex and numResults. */ Collection getGroupNames(int startIndex, int numResults); /** * Returns the Collection of group names that an entity belongs to. * * @param user the JID of the entity. * @return the Collection of group names that the user belongs to. */ Collection getGroupNames(JID user); /** * Adds an entity to a group (optional operation). * * @param groupName the group to add the member to * @param user the JID of the entity to add * @param administrator True if the member is an administrator of the group * @throws UnsupportedOperationException if the provider does not * support the operation. */ void addMember(String groupName, JID user, boolean administrator); /** * Updates the privileges of an entity in a group. * * @param groupName the group where the change happened * @param user the JID of the entity with new privileges * @param administrator True if the member is an administrator of the group * @throws UnsupportedOperationException if the provider does not * support the operation. */ void updateMember(String groupName, JID user, boolean administrator); /** * Deletes an entity from a group (optional operation). * * @param groupName the group name. * @param user the JID of the entity to delete. * @throws UnsupportedOperationException if the provider does not * support the operation. */ void deleteMember(String groupName, JID user); /** * Returns true if this GroupProvider is read-only. When read-only, * groups can not be created, deleted, or modified. * * @return true if the user provider is read-only. */ boolean isReadOnly(); /** * Returns the group names that match a search. The search is over group names and * implicitly uses wildcard matching (although the exact search semantics are left * up to each provider implementation). For example, a search for "HR" should match * the groups "HR", "HR Department", and "The HR People".

* * Before searching or showing a search UI, use the {@link #isSearchSupported} method * to ensure that searching is supported. * * @param query the search string for group names. * @return all groups that match the search. */ Collection search(String query); /** * Returns the group names that match a search given a start index and desired number of results. * The search is over group names and implicitly uses wildcard matching (although the * exact search semantics are left up to each provider implementation). For example, a * search for "HR" should match the groups "HR", "HR Department", and "The HR People".

* * Before searching or showing a search UI, use the {@link #isSearchSupported} method * to ensure that searching is supported. * * @param query the search string for group names. * @param startIndex start index in results. * @param numResults number of results to return. * @return all groups that match the search. */ Collection search(String query, int startIndex, int numResults); /** * Returns the names of groups that have a property matching the given * key/value pair. This provides an simple extensible search mechanism * for providers with differing property sets and storage models. * * The semantics of the key/value matching (wildcard support, scoping, etc.) * are unspecified by the interface and may vary for each implementation. * * Before searching or showing a search UI, use the {@link #isSearchSupported} method * to ensure that searching is supported. * * @param key The name of a group property (e.g. "sharedRoster.showInRoster") * @param value The value to match for the given property * @return unmodifiable Collection of group names that match the * given key/value pair. */ Collection search(String key, String value); /** * Returns true if group searching is supported by the provider. * * @return true if searching is supported. */ boolean isSearchSupported(); /** * Loads the group properties (if any) from the backend data store. If * the properties can be changed, the provider implementation must ensure * that updates to the resulting {@link Map} are persisted to the * backend data store. Otherwise if a mutator method is called, the * implementation should throw an {@link UnsupportedOperationException}. * * If there are no corresponding properties for the given group, or if the * provider does not support group properties, this method should return * an empty Map rather than null. * * @param group The target group * @return The properties for the given group */ PersistableMap loadProperties(Group group); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy