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@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.UserTableBase;
49 import java.sql.ResultSet;
50
51 /**
52 * The {@link Table} of registered {@link User}s.
53 *
54 * Every Melati DB has this table.
55 * This table will contain at least a <code>_guest_</code>
56 * and <code>_administrator_</code> {@link User}.
57 *
58 * Melati POEM generated, programmer modifiable stub
59 * for a <code>UserTable</code> object.
60 * <p>
61 * Description:
62 * A registered user of the database.
63 * </p>
64 *
65 *
66 * <table>
67 * <caption>
68 * Field summary for SQL table <code>User</code>
69 * </caption>
70 * <tr><th>Name</th><th>Type</th><th>Description</th></tr>
71 * <tr><td> id </td><td> Integer </td><td> The Table Row Object ID </td></tr>
72 * <tr><td> name </td><td> String </td><td> The user's real name </td></tr>
73 * <tr><td> login </td><td> String </td><td> The user's login name </td></tr>
74 * <tr><td> password </td><td> String </td><td> The user's password
75 * </td></tr>
76 * </table>
77 *
78 * See org.melati.poem.prepro.TableDef#generateTableMainJava
79 */
80 public class UserTable<T extends User> extends UserTableBase<T> {
81
82
83 // programmer's domain-specific code here
84 protected User guestUser, administratorUser;
85 // see below
86 // private Capability canReadPasswords = new Capability("ReadPasswords");
87 // private Capability canWritePasswords = new Capability("WritePasswords");
88
89
90 /**
91 * Constructor.
92 *
93 * @param database the POEM database we are using
94 * @param name the name of this <code>Table</code>
95 * @param definitionSource which definition is being used
96 * @throws PoemException if anything goes wrong
97 */
98 public UserTable(Database database, String name,
99 DefinitionSource definitionSource) throws PoemException {
100 super(database, name, definitionSource);
101
102 guestUser = (User)newPersistent();
103 guestUser.setLogin_unsafe("_guest_");
104 guestUser.setPassword_unsafe("guest"); //Oracle bug means '' is null
105 guestUser.setName_unsafe("Melati guest user");
106
107 administratorUser = (User)newPersistent();
108 administratorUser.setLogin_unsafe("_administrator_");
109 administratorUser.setPassword_unsafe("FIXME");
110 administratorUser.setName_unsafe("Melati database administrator");
111 }
112
113 /**
114 * @return the special User guest
115 */
116 public User guestUser() {
117 return guestUser;
118 }
119
120 /**
121 * @return the special User administrator
122 */
123 public User administratorUser() {
124 return administratorUser;
125 }
126
127 /**
128 * Defaults to the db's administrator capability.
129 * @return the Capability required to read a password
130 */
131 public Capability canReadPasswords() {
132 return getDatabase().administerCapability();
133 // return canReadPasswords;
134 }
135
136 /**
137 * Defaults to the db's administraor capability.
138 * @return the Capability required to write a password
139 */
140 public Capability canWritePasswords() {
141 return getDatabase().administerCapability();
142 // return canWritePasswords;
143 }
144
145 /**
146 * Create guestUser and administratorUser.
147 * {@inheritDoc}
148 * @see org.melati.poem.Table#unifyWithDB
149 */
150 public synchronized void unifyWithDB(ResultSet colDescs, String troidColumnName)
151 throws PoemException {
152 super.unifyWithDB(colDescs, troidColumnName);
153 guestUser = (User)getLoginColumn().ensure(guestUser);
154 administratorUser = (User)getLoginColumn().ensure(administratorUser);
155 }
156
157 public void postInitialise() {
158 super.postInitialise();
159 // canReadPasswords =
160 // (Capability)getDatabase().getCapabilityTable().getNameColumn().
161 // ensure(canReadPasswords);
162 // canWritePasswords =
163 // (Capability)getDatabase().getCapabilityTable().getNameColumn().
164 // ensure(canWritePasswords);
165 }
166 }