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