4254 |
25 Nov 16 |
nicklas |
1 |
package net.sf.basedb.opengrid.config; |
4126 |
26 Sep 16 |
nicklas |
2 |
|
4257 |
30 Nov 16 |
nicklas |
3 |
|
4126 |
26 Sep 16 |
nicklas |
4 |
/** |
4254 |
25 Nov 16 |
nicklas |
Handles locking and validation of configuration settings. The |
4126 |
26 Sep 16 |
nicklas |
generic parameter must be the subclass iteself |
4126 |
26 Sep 16 |
nicklas |
so the the {@link #lock()} method can return the |
4126 |
26 Sep 16 |
nicklas |
"this" reference. |
4126 |
26 Sep 16 |
nicklas |
9 |
|
4126 |
26 Sep 16 |
nicklas |
@author nicklas |
4126 |
26 Sep 16 |
nicklas |
@since 1.0 |
4126 |
26 Sep 16 |
nicklas |
12 |
*/ |
4126 |
26 Sep 16 |
nicklas |
13 |
public abstract class AbstractLockable<T extends AbstractLockable<T>> |
4126 |
26 Sep 16 |
nicklas |
14 |
{ |
4126 |
26 Sep 16 |
nicklas |
15 |
|
4126 |
26 Sep 16 |
nicklas |
16 |
private boolean locked; |
4254 |
25 Nov 16 |
nicklas |
17 |
private boolean valid; |
4126 |
26 Sep 16 |
nicklas |
18 |
|
4126 |
26 Sep 16 |
nicklas |
19 |
protected AbstractLockable() |
4126 |
26 Sep 16 |
nicklas |
20 |
{} |
4126 |
26 Sep 16 |
nicklas |
21 |
|
4126 |
26 Sep 16 |
nicklas |
22 |
/** |
4254 |
25 Nov 16 |
nicklas |
Check if this configuration is valid or not. |
4254 |
25 Nov 16 |
nicklas |
24 |
*/ |
4254 |
25 Nov 16 |
nicklas |
25 |
public final boolean isValid() |
4254 |
25 Nov 16 |
nicklas |
26 |
{ |
4254 |
25 Nov 16 |
nicklas |
27 |
if (locked) return valid; |
4257 |
30 Nov 16 |
nicklas |
28 |
checkValid(false); |
4254 |
25 Nov 16 |
nicklas |
29 |
valid = true; |
4254 |
25 Nov 16 |
nicklas |
30 |
return valid; |
4254 |
25 Nov 16 |
nicklas |
31 |
} |
4254 |
25 Nov 16 |
nicklas |
32 |
|
4254 |
25 Nov 16 |
nicklas |
33 |
/** |
4254 |
25 Nov 16 |
nicklas |
Check if the configuration settings are valid. The default |
4254 |
25 Nov 16 |
nicklas |
implementation does nothing. Subclasses should override |
4254 |
25 Nov 16 |
nicklas |
this method to implement their own validation and throw |
4254 |
25 Nov 16 |
nicklas |
an exception if the configuration is not valid. |
4257 |
30 Nov 16 |
nicklas |
@param forLock If TRUE, the instance will be locked after validation |
4254 |
25 Nov 16 |
nicklas |
39 |
*/ |
4257 |
30 Nov 16 |
nicklas |
40 |
protected void checkValid(boolean forLock) |
4254 |
25 Nov 16 |
nicklas |
41 |
{} |
4254 |
25 Nov 16 |
nicklas |
42 |
|
4254 |
25 Nov 16 |
nicklas |
43 |
/** |
4126 |
26 Sep 16 |
nicklas |
Is this instance locked for modifications? |
4126 |
26 Sep 16 |
nicklas |
45 |
*/ |
4126 |
26 Sep 16 |
nicklas |
46 |
public final boolean isLocked() |
4126 |
26 Sep 16 |
nicklas |
47 |
{ |
4126 |
26 Sep 16 |
nicklas |
48 |
return locked; |
4126 |
26 Sep 16 |
nicklas |
49 |
} |
4126 |
26 Sep 16 |
nicklas |
50 |
|
4126 |
26 Sep 16 |
nicklas |
51 |
/** |
4254 |
25 Nov 16 |
nicklas |
Lock this instance for future modifications. The lock will only |
4254 |
25 Nov 16 |
nicklas |
succeed if the configuration is valid. |
4126 |
26 Sep 16 |
nicklas |
@return This instance |
4126 |
26 Sep 16 |
nicklas |
55 |
*/ |
4126 |
26 Sep 16 |
nicklas |
56 |
@SuppressWarnings("unchecked") |
4126 |
26 Sep 16 |
nicklas |
57 |
public final T lock() |
4126 |
26 Sep 16 |
nicklas |
58 |
{ |
4257 |
30 Nov 16 |
nicklas |
59 |
if (!locked) checkValid(true); |
4126 |
26 Sep 16 |
nicklas |
60 |
this.locked = true; |
4126 |
26 Sep 16 |
nicklas |
61 |
return (T)this; |
4126 |
26 Sep 16 |
nicklas |
62 |
} |
4126 |
26 Sep 16 |
nicklas |
63 |
|
4126 |
26 Sep 16 |
nicklas |
64 |
/** |
4126 |
26 Sep 16 |
nicklas |
Check the locked status and throw an {@link IllegalStateException} |
4254 |
25 Nov 16 |
nicklas |
if this instance has been locked. Calling this method resets the validation |
4254 |
25 Nov 16 |
nicklas |
status of this configuration. |
4126 |
26 Sep 16 |
nicklas |
@param method The name of the method that is trying to modify this instance |
4126 |
26 Sep 16 |
nicklas |
69 |
*/ |
4126 |
26 Sep 16 |
nicklas |
70 |
protected final void checkLocked(String method) |
4126 |
26 Sep 16 |
nicklas |
71 |
{ |
4126 |
26 Sep 16 |
nicklas |
72 |
if (locked) |
4126 |
26 Sep 16 |
nicklas |
73 |
{ |
4234 |
11 Nov 16 |
nicklas |
74 |
throw new IllegalStateException(method + " not allowed after configuration has been locked."); |
4126 |
26 Sep 16 |
nicklas |
75 |
} |
4254 |
25 Nov 16 |
nicklas |
76 |
valid = false; |
4126 |
26 Sep 16 |
nicklas |
77 |
} |
4126 |
26 Sep 16 |
nicklas |
78 |
|
4126 |
26 Sep 16 |
nicklas |
79 |
} |