Rev 1056 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
924 | dev | 1 | package ak.hostadmiral.core.model; |
919 | dev | 2 | |
1015 | dev | 3 | import java.util.Iterator; |
4 | import java.util.Collection; |
||
5 | import java.util.HashSet; |
||
6 | |||
924 | dev | 7 | import ak.hostadmiral.util.ModelException; |
8 | import ak.hostadmiral.util.ModelSecurityException; |
||
919 | dev | 9 | |
10 | /** |
||
11 | * |
||
12 | * @hibernate.class table="mailboxes" |
||
13 | */ |
||
14 | public class Mailbox |
||
15 | extends GeneralModelObject |
||
16 | { |
||
17 | private String login; |
||
1015 | dev | 18 | private Collection passwords; // Collection(PasswordStore) |
919 | dev | 19 | private InetDomain domain; |
20 | private User owner; |
||
21 | private Boolean virusCheck; |
||
22 | private Boolean spamCheck; |
||
23 | private SystemUser systemUser; |
||
1011 | dev | 24 | private Mailbox origin; // save original object state before any changes |
919 | dev | 25 | |
26 | protected Mailbox() |
||
27 | { |
||
28 | } |
||
29 | |||
1011 | dev | 30 | protected Mailbox(Mailbox origin) |
31 | { |
||
32 | super(origin); |
||
33 | this.login = origin.login; |
||
1015 | dev | 34 | |
35 | if(origin.passwords == null) |
||
36 | this.passwords = null; |
||
37 | else |
||
38 | this.passwords = new HashSet(origin.passwords); |
||
39 | |||
1011 | dev | 40 | this.domain = origin.domain; |
41 | this.owner = origin.owner; |
||
42 | this.virusCheck = origin.virusCheck; |
||
43 | this.spamCheck = origin.spamCheck; |
||
44 | this.systemUser = origin.systemUser; |
||
45 | } |
||
46 | |||
47 | protected Mailbox getOrigin() |
||
48 | { |
||
49 | return origin; |
||
50 | } |
||
51 | |||
52 | protected void backupMe() |
||
53 | { |
||
54 | if(origin == null) |
||
55 | origin = new Mailbox(this); |
||
56 | } |
||
57 | |||
1045 | dev | 58 | protected void resetOrigin() |
59 | { |
||
60 | origin = null; |
||
61 | } |
||
62 | |||
919 | dev | 63 | /** |
64 | * |
||
65 | * @hibernate.property |
||
66 | */ |
||
67 | public String getLogin() |
||
68 | { |
||
69 | return login; |
||
70 | } |
||
71 | |||
921 | dev | 72 | protected void setLogin(String login) |
919 | dev | 73 | { |
74 | this.login = login; |
||
75 | } |
||
76 | |||
921 | dev | 77 | public void setLogin(User editor, String login) |
78 | throws ModelException |
||
79 | { |
||
80 | if(!editableBy(editor)) |
||
81 | throw new ModelSecurityException(); |
||
82 | |||
1011 | dev | 83 | backupMe(); |
921 | dev | 84 | this.login = login; |
85 | } |
||
86 | |||
1015 | dev | 87 | protected void addPasswordStore(PasswordStore ps) |
919 | dev | 88 | { |
1015 | dev | 89 | if(passwords == null) passwords = new HashSet(); |
90 | passwords.add(ps); |
||
919 | dev | 91 | } |
92 | |||
1082 | dev | 93 | public String getPassword(User editor, String digest) |
94 | throws ModelException |
||
95 | { |
||
96 | if(!editableBy(editor)) |
||
97 | throw new ModelSecurityException(); |
||
98 | |||
99 | for(Iterator i = passwords.iterator(); i.hasNext(); ) { |
||
100 | Object o = i.next(); |
||
101 | if(!(o instanceof PasswordStore)) |
||
102 | throw new ModelException("It's not a password store"); |
||
103 | |||
104 | PasswordStore ps = (PasswordStore)o; |
||
105 | if(ps.getDigest().equals(digest)) { |
||
106 | return ps.getPassword(); |
||
107 | } |
||
108 | } |
||
109 | |||
110 | throw new ModelException("Digest " + digest + " not found"); |
||
111 | } |
||
112 | |||
921 | dev | 113 | public void setPassword(User editor, String password) |
114 | throws ModelException |
||
919 | dev | 115 | { |
1015 | dev | 116 | if(!editableBy(editor)) |
117 | throw new ModelSecurityException(); |
||
118 | |||
919 | dev | 119 | if(password == null) |
120 | throw new NullPointerException("Null password"); |
||
121 | |||
1011 | dev | 122 | backupMe(); |
1015 | dev | 123 | |
124 | for(Iterator i = passwords.iterator(); i.hasNext(); ) { |
||
125 | Object o = i.next(); |
||
126 | if(!(o instanceof PasswordStore)) |
||
127 | throw new ModelException("It's not a password store"); |
||
128 | ((PasswordStore)o).setNewPassword(password); |
||
129 | } |
||
919 | dev | 130 | } |
131 | |||
1024 | dev | 132 | /** |
133 | * |
||
134 | * @hibernate.set cascade="all" lazy="true" |
||
135 | * @hibernate.collection-key column="obj" |
||
136 | * @hibernate.collection-one-to-many class="ak.hostadmiral.core.model.PasswordStoreAbstract" |
||
137 | */ |
||
138 | protected Collection getPasswords() |
||
139 | { |
||
140 | return passwords; |
||
141 | } |
||
142 | |||
1015 | dev | 143 | protected void setPasswords(Collection passwords) |
144 | { |
||
145 | this.passwords = passwords; |
||
146 | } |
||
147 | |||
919 | dev | 148 | /** |
149 | * |
||
150 | * @hibernate.many-to-one |
||
151 | */ |
||
152 | public InetDomain getDomain() |
||
153 | { |
||
154 | return domain; |
||
155 | } |
||
156 | |||
921 | dev | 157 | protected void setDomain(InetDomain domain) |
919 | dev | 158 | { |
159 | this.domain = domain; |
||
160 | } |
||
161 | |||
921 | dev | 162 | public void setDomain(User editor, InetDomain domain) |
163 | throws ModelException |
||
164 | { |
||
165 | if(!editableBy(editor)) |
||
166 | throw new ModelSecurityException(); |
||
167 | |||
1011 | dev | 168 | backupMe(); |
921 | dev | 169 | this.domain = domain; |
170 | } |
||
171 | |||
919 | dev | 172 | /** |
173 | * |
||
174 | * @hibernate.many-to-one |
||
175 | */ |
||
176 | public User getOwner() |
||
177 | { |
||
178 | return owner; |
||
179 | } |
||
180 | |||
921 | dev | 181 | protected void setOwner(User owner) |
919 | dev | 182 | { |
183 | this.owner = owner; |
||
184 | } |
||
185 | |||
921 | dev | 186 | public void setOwner(User editor, User owner) |
187 | throws ModelException |
||
188 | { |
||
189 | if(!editableBy(editor)) |
||
190 | throw new ModelSecurityException(); |
||
191 | |||
1011 | dev | 192 | backupMe(); |
921 | dev | 193 | this.owner = owner; |
194 | } |
||
195 | |||
919 | dev | 196 | /** |
197 | * |
||
198 | * @hibernate.property |
||
199 | */ |
||
200 | public Boolean getVirusCheck() |
||
201 | { |
||
202 | return virusCheck; |
||
203 | } |
||
204 | |||
921 | dev | 205 | protected void setVirusCheck(Boolean virusCheck) |
919 | dev | 206 | { |
207 | this.virusCheck = virusCheck; |
||
208 | } |
||
209 | |||
921 | dev | 210 | public void setVirusCheck(User editor, Boolean virusCheck) |
211 | throws ModelException |
||
212 | { |
||
213 | if(!editableBy(editor)) |
||
214 | throw new ModelSecurityException(); |
||
215 | |||
1011 | dev | 216 | backupMe(); |
921 | dev | 217 | this.virusCheck = virusCheck; |
218 | } |
||
219 | |||
919 | dev | 220 | /** |
221 | * |
||
222 | * @hibernate.property |
||
223 | */ |
||
224 | public Boolean getSpamCheck() |
||
225 | { |
||
226 | return spamCheck; |
||
227 | } |
||
228 | |||
921 | dev | 229 | protected void setSpamCheck(Boolean spamCheck) |
919 | dev | 230 | { |
231 | this.spamCheck = spamCheck; |
||
232 | } |
||
233 | |||
921 | dev | 234 | public void setSpamCheck(User editor, Boolean spamCheck) |
235 | throws ModelException |
||
236 | { |
||
237 | if(!editableBy(editor)) |
||
238 | throw new ModelSecurityException(); |
||
239 | |||
1011 | dev | 240 | backupMe(); |
921 | dev | 241 | this.spamCheck = spamCheck; |
242 | } |
||
243 | |||
919 | dev | 244 | /** |
245 | * |
||
246 | * @hibernate.many-to-one |
||
247 | */ |
||
248 | public SystemUser getSystemUser() |
||
249 | { |
||
250 | return systemUser; |
||
251 | } |
||
252 | |||
921 | dev | 253 | protected void setSystemUser(SystemUser systemUser) |
919 | dev | 254 | { |
255 | this.systemUser = systemUser; |
||
256 | } |
||
257 | |||
921 | dev | 258 | public void setSystemUser(User editor, SystemUser systemUser) |
259 | throws ModelException |
||
260 | { |
||
261 | if(!editableBy(editor)) |
||
262 | throw new ModelSecurityException(); |
||
263 | |||
1011 | dev | 264 | backupMe(); |
921 | dev | 265 | this.systemUser = systemUser; |
266 | } |
||
267 | |||
919 | dev | 268 | public String getTypeKey() |
269 | { |
||
1051 | dev | 270 | return ak.hostadmiral.core.resources.CoreResources.TYPE_MAILBOX; |
919 | dev | 271 | } |
272 | |||
273 | public String getIdentKey() |
||
274 | { |
||
1051 | dev | 275 | return ak.hostadmiral.core.resources.CoreResources.IDENT_MAILBOX; |
919 | dev | 276 | } |
277 | |||
278 | public Object[] getIdentParams() |
||
279 | { |
||
280 | return new Object[] { getLogin(), getDomain().getName() }; |
||
281 | } |
||
282 | |||
283 | public boolean viewableBy(User user) |
||
284 | { |
||
285 | return user.isSuperuser() || user.equals(domain.getOwner()) || user.equals(owner); |
||
286 | } |
||
287 | |||
288 | public boolean editableBy(User user) |
||
289 | { |
||
1010 | dev | 290 | return user.isSuperuser() |
291 | || (domain == null) // just created |
||
292 | || user.equals(domain.getOwner()); |
||
919 | dev | 293 | } |
294 | |||
295 | public boolean deleteableBy(User user) |
||
296 | { |
||
297 | return user.isSuperuser() || user.equals(domain.getOwner()); |
||
298 | } |
||
921 | dev | 299 | |
300 | protected static boolean allowedToCreate(MailboxManager manager, User editor) |
||
301 | throws ModelException |
||
302 | { |
||
303 | return editor.isSuperuser() |
||
304 | || InetDomainManager.getInstance().areInetDomainsAvailable(editor); |
||
305 | } |
||
949 | dev | 306 | |
307 | protected static Mailbox createLimitedCopy(Mailbox origin) |
||
308 | { |
||
1011 | dev | 309 | Mailbox m = new Mailbox(); |
310 | m.setLogin(origin.getLogin()); |
||
311 | m.setDomain(origin.getDomain()); |
||
312 | m.setOwner(origin.getOwner()); |
||
313 | return m; |
||
949 | dev | 314 | } |
1056 | dev | 315 | |
316 | public String toString() |
||
317 | { |
||
318 | return "Mailbox id=[" + getId() + "] login=[" + login + "@" |
||
319 | + (domain == null ? "_none_" : domain.getName()) + "]"; |
||
320 | } |
||
919 | dev | 321 | } |