/* * JBoss, a division of Red Hat * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * 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.picketlink.idm.cache; import org.picketlink.idm.api.*; import org.picketlink.idm.api.cfg.IdentityConfigurationRegistry; import org.picketlink.idm.api.query.GroupQuery; import org.picketlink.idm.api.query.RoleQuery; import org.picketlink.idm.api.query.UserQuery; import java.util.Collection; import java.util.List; import java.util.Map; /** * Cache provider for Identity API. Namespaces enable flexible use (per realm or per session) * * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw Dawidowicz</a> * @version : 0.1 $ */ public interface APICacheProvider { /** * Initialize provider. * @param properties */ void initialize(Map<String, String> properties, IdentityConfigurationRegistry configurationRegistry); /** * Invalidate whole namespace * * @param ns */ void invalidate(String ns); /** * Invalidate whole cache including all namespaces; */ void invalidateAll(); /** * Generate realm namespace. * * @param realmId - if null will generate root namespace * @return */ String getNamespace(String realmId); /** * Generate namespace based on realm and session ids. * * @param realmId if null will generate root namespace * @param sessionId if null will generate realm namespace * @return */ String getNamespace(String realmId, String sessionId); // Persistence Manager /** * Store user in cache * * @param ns * @param user */ void putUser(String ns, User user); /** * Get user from cache * * @param ns * @param id * @return */ User getUser(String ns, String id); /** * Remove user from cache * * @param ns * @param id */ void removeUser(String ns, String id); /** * Store users in cache * * @param ns * @param criteria * @param users */ void putUsers(String ns, IdentitySearchCriteria criteria, Collection<User> users); /** * Get users from cache * * @param ns * @param criteria * @return */ Collection<User> getUsers(String ns, IdentitySearchCriteria criteria); /** * Invalidate all stored users * * @param ns */ void invalidateUsers(String ns); /** * Store user count in cache * @param ns * @param count */ void putUserCount(String ns, int count); /** * Get user count * @param ns * @return */ int getUserCount(String ns); /** * Invalidate user count * @param ns */ void invalidateUserCount(String ns); // /** * Put group in cache * * @param ns * @param group */ void putGroup(String ns, Group group); /** * Get group from cache * * @param ns * @param groupType * @param groupName * @return */ Group getGroup(String ns, String groupType, String groupName); /** * Remove group from cache * * @param ns * @param groupType * @param groupName */ void removeGroup(String ns, String groupType, String groupName); /** * Put groups in cache * * @param ns * @param criteria * @param groups */ void putGroups(String ns, IdentitySearchCriteria criteria, Collection<Group> groups); /** * Get groups from cache * * @param ns * @param criteria * @return */ Collection<Group> getGroups(String ns, IdentitySearchCriteria criteria); /** * Invalidate all stored groups * * @param ns */ void invalidateGroups(String ns); /** * Store group count * * @param ns * @param groupType * @param count */ void putGroupCount(String ns, String groupType, int count); /** * Get group count * * @param ns * @param groupType * @return */ int getGroupCount(String ns, String groupType); /** * Invalidate group count * * @param ns * @param groupType */ void invalidateGroupCount(String ns, String groupType); // /** * Store role * * @param ns * @param role */ void putRole(String ns, Role role); /** * Get role * * @param ns * @param role * @return */ Role getRole(String ns, Role role); /** * Remove role * * @param ns * @param role */ void removeRole(String ns, Role role); /** * Store role type * * @param ns * @param roleType */ void putRoleType(String ns, RoleType roleType); /** * Get role type * * @param ns * @param roleType * @return */ RoleType getRoleType(String ns, RoleType roleType); /** * Remove role type * * @param ns * @param roleType */ void removeRoleType(String ns, RoleType roleType); // Attribute /** * Store attributes * * @param ns * @param id * @param attributes */ void putAttributes(String ns, String id, Map<String, Attribute> attributes); /** * Get attributes * * @param ns * @param id * @return */ Map<String, Attribute> getAttributes(String ns, String id); /** * Invalidate attributes * * @param ns * @param id */ void invalidateAttributes(String ns, String id); /** * Invalidate attributes * * @param ns */ void invalidateAttributes(String ns); // Properties /** * Store properties * * @param ns * @param role * @param properties */ void putProperties(String ns, Role role, Map<String, String> properties); /** * Get properties * * @param ns * @param role * @return */ Map<String, String> getProperties(String ns, Role role); /** * Invalidate role properties * * @param ns * @param role */ void invalidateRoleProperties(String ns, Role role); /** * Invalidate role properties * * @param ns */ void invalidateRoleProperties(String ns); /** * Store properties * * @param ns * @param roleType * @param properties */ void putProperties(String ns, RoleType roleType, Map<String, String> properties); /** * Get role type properties * * @param ns * @param roleType * @return */ Map<String, String> getProperties(String ns, RoleType roleType); /** * Invalidate role type properties * * @param ns * @param roleType */ void invalidateRoleTypeProperties(String ns, RoleType roleType); /** * Invalidate role type properties * * @param ns */ void invalidateRoleTypeProperties(String ns); // Searches /** * Invalidate all searches stored in cache * * @param ns */ void invalidateAllSearches(String ns); /** * Store user search * * @param ns * @param search * @param results */ void putUserSearch(String ns, UserSearch search, Collection<User> results); /** * Get user search * * @param ns * @param search * @return */ Collection<User> getUserSearch(String ns, UserSearch search); /** * Store group search * * @param ns * @param search * @param results */ void putGroupSearch(String ns, GroupSearch search, Collection<Group> results); /** * Get group search * * @param ns * @param search * @return */ Collection<Group> getGroupSearch(String ns, GroupSearch search); /** * Store relationship search * * @param ns * @param search * @param result */ void putRelationshipSearch(String ns, RelationshipSearch search, Boolean result); /** * Get relationship Search * * @param ns * @param search * @return */ Boolean getRelationshipSearch(String ns, RelationshipSearch search); /** * Store role search * @param ns * @param search * @param results */ void putRoleSearch(String ns, RoleSearch search, Collection<Role> results); /** * Get role search * * @param ns * @param search * @return */ Collection<Role> getRoleSearch(String ns, RoleSearch search); /** * Store role type search * * @param ns * @param search * @param results */ void putRoleTypeSearch(String ns, RoleTypeSearch search, Collection<RoleType> results); /** * Get role type search * * @param ns * @param search * @return */ Collection<RoleType> getRoleTypeSearch(String ns, RoleTypeSearch search); // Queries /** * Invalidate all queries * * @param ns */ void invalidateAllQueries(String ns); /** * Store user query * * @param ns * @param q * @param results */ void putUserQuery(String ns, UserQuery q, Collection<User> results); /** * Store user query unique result * * @param ns * @param q * @param user */ void putUserQueryUnique(String ns, UserQuery q, User user); /** * Get user query * * @param ns * @param q * @return */ Collection<User> getUserQuery(String ns, UserQuery q); /** * Get user query unique result * @param ns * @param q * @return */ User getUserQueryUnique(String ns, UserQuery q); /** * Invalidate user queries * @param ns */ void invalidateUserQueries(String ns); // /** * Store group query * * @param ns * @param q * @param results */ void putGroupQuery(String ns, GroupQuery q, Collection<Group> results); /** * Store group query unique result * \ * @param ns * @param q * @param group */ void putGroupQueryUnique(String ns, GroupQuery q, Group group); /** * Get group query * * @param ns * @param q * @return */ Collection<Group> getGroupQuery(String ns, GroupQuery q); /** * Get group query unique * * @param ns * @param q * @return */ Group getGroupQueryUnique(String ns, GroupQuery q); /** * Invalidate all group queries * @param ns */ void invalidateGroupQueries(String ns); // /** * Store role query * * @param ns * @param q * @param results */ void putRoleQuery(String ns, RoleQuery q, Collection<Role> results); /** * Store role query unique result * * @param ns * @param q * @param role */ void putRoleQueryUnique(String ns, RoleQuery q, Role role); /** * Get role query * * @param ns * @param q * @return */ Collection<Role> getRoleQuery(String ns, RoleQuery q); /** * Get role query * * @param ns * @param q * @return */ Role getRoleQueryUnique(String ns, RoleQuery q); /** * Invalidate all role queries * * @param ns */ void invalidateRoleQueries(String ns); }