001    /*
002     * Copyright (c) 2002-2005 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.security;
017    
018    import java.util.Map;
019    
020    /**
021     * A SecurityControllerManager is responsible for linking a controllable object, one that
022     * implements {@link org.springframework.richclient.core.SecurityControllable}, to the
023     * appropriate {@link SecurityController} to manage it.
024     * <p>
025     * The SecurityControllable object will provide a controller Id that needs to be mapped to
026     * a specific controller. See {@link SecurityControllable#getSecurityControllerId()}.
027     * This id will then be used in a call to {@link #getSecurityController(String)} to find
028     * the registered security controller.
029     * <p>
030     * Each security controller is implicitly registered under its bean context id. Aliases
031     * may be registered by calling
032     * {@link #registerSecurityControllerAlias(String, SecurityController)}. Subsequently,
033     * any call to <code>getSecurityController</code> with that alias id will return the
034     * registered security controller. This is useful for mapping generated command security
035     * controller ids (which are often a combination of a form id and a command face id) to
036     * the actual security controller that should manage the command. This provides a
037     * declarative model for linking commands to controllers instead of requiring the
038     * subclassing a Form in order to specify the command's security controller id.
039     * 
040     * @author Larry Streepy
041     * @see org.springframework.richclient.security.support.DefaultSecurityControllerManager
042     * 
043     */
044    public interface SecurityControllerManager {
045    
046        /**
047         * Set the map of controller Ids to controller instances.
048         * @param map keyed by controller Id, value is {@link SecurityController} instance
049         */
050        public void setSecurityControllerMap(Map map);
051    
052        /**
053         * Register an alias for a SecurityController.
054         * @param aliasId to register
055         * @param securityController to register under given alias Id
056         */
057        public void registerSecurityControllerAlias(String aliasId, SecurityController securityController);
058    
059        /**
060         * Get the security controller for a given Id.
061         * @param id of security controller
062         * @return controller instance, or null if nothing is registered for the id
063         */
064        public SecurityController getSecurityController(String id);
065    }