001    package org.apache.turbine.services.security.torque;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import java.util.Iterator;
023    
024    import org.apache.turbine.om.security.Permission;
025    import org.apache.turbine.om.security.Role;
026    import org.apache.turbine.services.security.TurbineSecurity;
027    import org.apache.turbine.util.security.PermissionSet;
028    import org.apache.turbine.util.security.TurbineSecurityException;
029    
030    import org.apache.torque.om.Persistent;
031    
032    /**
033     * This class represents a role played by the User associated with the
034     * current Session. It is separated from the actual Torque peer object
035     * to be able to replace the Peer with an user supplied Peer (and Object)
036     *
037     * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
038     * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
039     * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
040     * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
041     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
042     * @version $Id: TorqueRole.java 534527 2007-05-02 16:10:59Z tv $
043     */
044    
045    public class TorqueRole
046        extends TorqueObject
047        implements Role,
048                   Comparable
049    {
050    
051            private static final long serialVersionUID = -7774684697021445523L;
052    
053        /** The permissions for this role. */
054        private PermissionSet permissionSet = null;
055    
056        /**
057         * Constructs a new Role
058         */
059        public TorqueRole()
060        {
061            super();
062        }
063    
064        /**
065         * Constructs a new Role with the specified name.
066         *
067         * @param name The name of the new object.
068         */
069        public TorqueRole(String name)
070        {
071            super(name);
072        }
073    
074        /**
075         * The package private Constructor is used when the RolePeerManager
076         * has retrieved a list of Database Objects from the peer and
077         * must 'wrap' them into TorqueRole Objects. You should not use it directly!
078         *
079         * @param obj An Object from the peer
080         */
081        public TorqueRole(Persistent obj)
082        {
083            super(obj);
084        }
085    
086        /**
087         * Returns the underlying Object for the Peer
088         *
089         * Used in the RolePeerManager when building a new Criteria.
090         *
091         * @return The underlying persistent object
092         *
093         */
094    
095        public Persistent getPersistentObj()
096        {
097            if (obj == null)
098            {
099                obj = RolePeerManager.newPersistentInstance();
100            }
101            return obj;
102        }
103    
104        /**
105         * Returns the name of this role.
106         *
107         * @return The name of the role.
108         */
109        public String getName()
110        {
111            return RolePeerManager.getRoleName(getPersistentObj());
112        }
113    
114        /**
115         * Sets the name of this Role
116         *
117         * @param name The name of the role.
118         */
119        public void setName(String name)
120        {
121            RolePeerManager.setRoleName(getPersistentObj(), name);
122        }
123    
124        /**
125         * Gets the Id of this object
126         *
127         * @return The Id of the object
128         */
129        public int getId()
130        {
131            return RolePeerManager.getIdAsObj(getPersistentObj()).intValue();
132        }
133    
134        /**
135         * Gets the Id of this object
136         *
137         * @return The Id of the object
138         */
139        public Integer getIdAsObj()
140        {
141            return RolePeerManager.getIdAsObj(getPersistentObj());
142        }
143    
144        /**
145         * Sets the Id of this object
146         *
147         * @param id The new Id
148         */
149        public void setId(int id)
150        {
151            RolePeerManager.setId(getPersistentObj(), id);
152        }
153        /**
154         * Returns the set of Permissions associated with this Role.
155         *
156         * @return A PermissionSet.
157         *
158         * @exception Exception a generic exception.
159         */
160        public PermissionSet getPermissions()
161            throws Exception
162        {
163            return permissionSet;
164        }
165    
166        /**
167         * Sets the Permissions associated with this Role.
168         *
169         * @param permissionSet A PermissionSet.
170         */
171        public void setPermissions(PermissionSet permissionSet)
172        {
173            this.permissionSet = permissionSet;
174        }
175    
176        // These following methods are wrappers around TurbineSecurity
177    
178        /**
179         * Creates a new Role in the system.
180         *
181         * @param name The name of the new Role.
182         * @return An object representing the new Role.
183         * @throws TurbineSecurityException if the Role could not be created.
184         */
185        public Role create(String name)
186            throws TurbineSecurityException
187        {
188            return TurbineSecurity.createRole(name);
189        }
190    
191        /**
192         * Makes changes made to the Role attributes permanent.
193         *
194         * @throws TurbineSecurityException if there is a problem while
195         *  saving data.
196         */
197        public void save()
198            throws TurbineSecurityException
199        {
200            TurbineSecurity.saveRole(this);
201        }
202    
203        /**
204         * Removes a role from the system.
205         *
206         * @throws TurbineSecurityException if the Role could not be removed.
207         */
208        public void remove()
209            throws TurbineSecurityException
210        {
211            TurbineSecurity.removeRole(this);
212        }
213    
214        /**
215         * Renames the role.
216         *
217         * @param name The new Role name.
218         * @throws TurbineSecurityException if the Role could not be renamed.
219         */
220        public void rename(String name)
221            throws TurbineSecurityException
222        {
223            TurbineSecurity.renameRole(this, name);
224        }
225    
226        /**
227         * Grants a Permission to this Role.
228         *
229         * @param permission A Permission.
230         * @throws TurbineSecurityException if there is a problem while assigning
231         * the Permission.
232         */
233        public void grant(Permission permission)
234            throws TurbineSecurityException
235        {
236            TurbineSecurity.grant(this, permission);
237        }
238    
239        /**
240         * Grants Permissions from a PermissionSet to this Role.
241         *
242         * @param permissionSet A PermissionSet.
243         * @throws TurbineSecurityException if there is a problem while assigning
244         * the Permissions.
245         */
246        public void grant(PermissionSet permissionSet)
247            throws TurbineSecurityException
248        {
249            Iterator permissions = permissionSet.iterator();
250            while (permissions.hasNext())
251            {
252                TurbineSecurity.grant(this, (Permission) permissions.next());
253            }
254        }
255    
256        /**
257         * Revokes a Permission from this Role.
258         *
259         * @param permission A Permission.
260         * @throws TurbineSecurityException if there is a problem while unassigning
261         * the Permission.
262         */
263        public void revoke(Permission permission)
264            throws TurbineSecurityException
265        {
266            TurbineSecurity.revoke(this, permission);
267        }
268    
269        /**
270         * Revokes Permissions from a PermissionSet from this Role.
271         *
272         * @param permissionSet A PermissionSet.
273         * @throws TurbineSecurityException if there is a problem while unassigning
274         * the Permissions.
275         */
276        public void revoke(PermissionSet permissionSet)
277            throws TurbineSecurityException
278        {
279            Iterator permissions = permissionSet.iterator();
280            while (permissions.hasNext())
281            {
282                TurbineSecurity.revoke(this, (Permission) permissions.next());
283            }
284        }
285    }