View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2000 William Chesters
6    *
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     William Chesters <williamc At paneris.org>
42   *     http://paneris.org/~williamc
43   *     Obrechtstraat 114, 2517VX Den Haag, The Netherlands
44   */
45  
46  package org.melati.poem;
47  
48  import org.melati.poem.generated.UserBase;
49  
50  /**
51   * A registered user.
52   *
53   * 
54   * Melati POEM generated, programmer modified stub 
55   * for a <code>Persistent</code> <code>User</code> object.
56   * 
57   * <p> 
58   * Description: 
59   *   A registered user of the database. 
60   * </p>
61   * 
62   * <table> 
63   * <caption>
64   * Field summary for SQL table <code>User</code>
65   * </caption>
66   * <tr><th>Name</th><th>Type</th><th>Description</th></tr>
67   * <tr><td> id </td><td> Integer </td><td> The Table Row Object ID </td></tr> 
68   * <tr><td> name </td><td> String </td><td> The user's real name </td></tr> 
69   * <tr><td> login </td><td> String </td><td> The user's login name </td></tr> 
70   * <tr><td> password </td><td> String </td><td> The user's password 
71   * </td></tr> 
72   * </table> 
73   * 
74   * See org.melati.poem.prepro.TableDef#generateMainJava 
75   */
76  public class User extends UserBase implements AccessToken {
77  
78  
79   /**
80    * Constructor 
81    * for a <code>Persistent</code> <code>User</code> object.
82    * <p>
83    * Description: 
84    *   A registered user of the database. 
85    * </p>
86    * 
87    * See org.melati.poem.prepro.TableDef#generateMainJava 
88    */
89    public User() { }
90  
91    // programmer's domain-specific code here
92  
93  
94    /**
95     * Constructor.
96     * 
97     * @param login user's login name 
98     * @param password user's password
99     * @param name user's name
100    */
101   public User(String login, String password, String name) {
102     setLogin_unsafe(login);
103     setPassword_unsafe(password);
104     setName_unsafe(name);
105   }
106 
107   /**
108    * {@inheritDoc}
109    * @see org.melati.poem.AccessToken#givesCapability(org.melati.poem.Capability)
110    */
111   public boolean givesCapability(Capability capability) {
112     return getDatabase().hasCapability(this, capability);
113   }
114 
115   /**
116    * Will throw a <TT>ReadPasswordAccessPoemException</TT> unless the access
117    * token associated with the running thread is the <TT>User</TT> object
118    * itself or provides the <TT>readPasswords</TT> capability.
119    * 
120    * FIXME It shouldn't be possible for anyone to getPassword
121    *  
122    * {@inheritDoc}
123    * @see org.melati.poem.generated.UserBase#getPassword()
124    */
125   public String getPassword() throws AccessPoemException {
126     // FIXME We need 2 sorts of object here 
127     if (troid() != null) {
128       AccessToken token = PoemThread.accessToken();
129       if (token != this &&
130           !token.givesCapability(getUserTable().canReadPasswords()))
131         throw new ReadPasswordAccessPoemException(
132               this, getUserTable().getPasswordColumn(), token,
133               getUserTable().canReadPasswords());
134     }
135 
136     return super.getPassword();
137   }
138 
139   /**
140    * {@inheritDoc}
141    * @see org.melati.poem.generated.UserBase#setPassword(java.lang.String)
142    */
143   public void setPassword(String cooked) throws AccessPoemException {
144     // FIXME We need 2 sorts of object here
145     if (troid() != null) {
146       AccessToken token = PoemThread.accessToken();
147       if (token != this &&
148           !token.givesCapability(getUserTable().canWritePasswords()))
149         throw new WriteFieldAccessPoemException(
150               this, getUserTable().getPasswordColumn(), token,
151               getUserTable().canWritePasswords());
152     }
153 
154     super.setPassword(cooked);
155   }
156 
157   /**
158    * {@inheritDoc}
159    * @see java.lang.Object#toString()
160    */
161   public String toString() {
162     return getLogin_unsafe() == null ? super.toString() : getLogin_unsafe();
163   }
164 
165   /**
166    * @return whether this User is the special, guest user
167    */
168   @SuppressWarnings("unchecked")
169   public boolean isGuest() {
170     return (this == ((UserTable<User>)getTable()).guestUser()) ? true: false;
171   }
172 
173   /**
174    * @return whether this User is an administrator
175    */
176   @SuppressWarnings("unchecked")
177   public boolean isAdministrator() {
178     return (this == ((UserTable<User>)getTable()).administratorUser()) ? true: false;
179   }
180 
181 }
182 
183 
184 
185 
186