Subversion Repositories general

Rev

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
}