Javolution 6.0.0 java
Configurable.java
Go to the documentation of this file.
1
/*
2
* Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3
* Copyright (C) 2012 - Javolution (http://javolution.org/)
4
* All rights reserved.
5
*
6
* Permission to use, copy, modify, and distribute this software is
7
* freely granted, provided that this notice is preserved.
8
*/
9
package
javolution.lang;
10
11
import
java.lang.reflect.Field;
12
13
import
javolution
.
context
.
LogContext
;
14
import
javolution
.
context
.
SecurityContext
;
15
import
javolution
.
context
.
SecurityContext
.
Permission
;
16
import
javolution
.
osgi
.
internal
.
OSGiServices
;
17
import
javolution
.
text
.
DefaultTextFormat
;
18
import
javolution
.
text
.
TextContext
;
19
78
public
abstract
class
Configurable
<T> {
79
84
public
interface
Listener
{
85
92
<T>
void
configurableInitialized
(
Configurable<T>
configurable, T
value
);
93
101
<T>
void
configurableReconfigured
(
Configurable<T>
configurable,
102
T oldValue, T newValue);
103
104
}
105
115
public
static
Permission<Configurable<?>
>
RECONFIGURE_PERMISSION
=
new
Permission<Configurable<?>
>(
116
Configurable
.class,
"reconfigure"
);
117
121
private
String
name
;
122
126
private
final
Permission<Configurable<T>
>
reconfigurePermission
;
127
131
private
volatile
T
value
;
132
142
public
Configurable
() {
143
reconfigurePermission
=
new
Permission<Configurable<T>
>(
144
Configurable
.class,
"reconfigure"
,
this
);
145
String
name
=
getName
();
146
T defaultValue =
getDefault
();
147
if
(
name
!=
null
) {
148
try
{
// Checks system properties.
149
String
property
= System.getProperty(
name
);
150
if
(property !=
null
) {
151
defaultValue =
parse
(property);
// Supersedes.
152
LogContext
.
debug
(
name
,
", System Properties Value: "
,
153
defaultValue);
154
}
155
}
catch
(SecurityException securityError) {
156
// Ok, current runtime does not allow system properties access.
157
}
158
}
159
this.name =
name
;
160
this.value =
initialized
(defaultValue);
161
Object[] listeners =
OSGiServices
.
getConfigurableListeners
();
162
for
(Object listener : listeners) {
163
((Listener) listener).configurableInitialized(
this
, this.value);
164
}
165
}
166
170
public
T
get
() {
171
return
value
;
172
}
173
185
public
String
getName
() {
186
if
(
name
!=
null
)
187
return
name
;
// Already set.
188
Class<?> thisClass = this.getClass();
189
Class<?> enclosingClass = thisClass.getEnclosingClass();
190
String fieldName =
null
;
191
for
(Field field : enclosingClass.getFields()) {
192
if
(field.getType().isAssignableFrom(thisClass)) {
193
if
(fieldName !=
null
)
// Indistinguishable field types.
194
throw
new
UnsupportedOperationException(
195
"Multiple configurables static fields in the same class"
+
196
"requires the Configurable.getName() method to be overriden."
);
197
fieldName = field.getName();
198
}
199
}
200
return
(fieldName !=
null
) ? enclosingClass.getName() +
"#"
+ fieldName
201
:
null
;
202
}
203
207
public
Permission<Configurable<T>
>
getReconfigurePermission
() {
208
return
reconfigurePermission
;
209
}
210
224
public
T
reconfigure
(T newValue) {
225
SecurityContext
.
check
(
reconfigurePermission
);
226
synchronized
(
this
) {
227
T oldValue = this.
value
;
228
this.value =
reconfigured
(oldValue, newValue);
229
Object[] listeners =
OSGiServices
.
getConfigurableListeners
();
230
for
(Object listener : listeners) {
231
((Listener) listener).configurableReconfigured(
this
, oldValue,
232
this.value);
233
}
234
return
this.
value
;
235
}
236
}
237
242
protected
abstract
T
getDefault
();
243
252
protected
T
initialized
(T
value
) {
253
return
value
;
254
}
255
263
@SuppressWarnings(
"unchecked"
)
264
protected T
parse
(String str) {
265
Class<? extends T> type = (Class<? extends T>)
getDefault
().getClass();
266
return
TextContext
.
getFormat
(type).parse(str);
267
}
268
280
protected
T
reconfigured
(T oldValue, T newValue) {
281
return
newValue;
282
}
283
}
javolution.text.TextContext.getFormat
static< T > TextFormat< T > getFormat(Class<? extends T > type)
Definition:
TextContext.java:69
javolution.context.LogContext
Definition:
LogContext.java:56
javolution.osgi.internal.OSGiServices.getConfigurableListeners
static Object[] getConfigurableListeners()
Definition:
OSGiServices.java:79
javolution
javolution.lang.Configurable.name
String name
Definition:
Configurable.java:121
javolution.lang.Configurable
Definition:
Configurable.java:78
javolution.context
Definition:
AbstractContext.java:9
javolution.lang.Configurable.parse
T parse(String str)
Definition:
Configurable.java:264
javolution.lang.Configurable.Listener.configurableReconfigured
< T > void configurableReconfigured(Configurable< T > configurable, T oldValue, T newValue)
javolution.context.LogContext.debug
static void debug(Object... message)
Definition:
LogContext.java:87
javolution.context.SecurityContext.check
static void check(Permission<?> permission)
Definition:
SecurityContext.java:195
javolution.lang.Configurable.value
volatile T value
Definition:
Configurable.java:131
javolution.text
Definition:
CharArray.java:9
javolution.lang.Configurable.getDefault
abstract T getDefault()
javolution.context.SecurityContext
Definition:
SecurityContext.java:34
javolution.lang.Configurable.RECONFIGURE_PERMISSION
static Permission< Configurable<?> > RECONFIGURE_PERMISSION
Definition:
Configurable.java:115
javolution.lang.Configurable.reconfigure
T reconfigure(T newValue)
Definition:
Configurable.java:224
javolution.context.SecurityContext.Permission
Definition:
SecurityContext.java:48
javolution.osgi.internal
Definition:
ConfigurableListenerImpl.java:9
javolution.text.DefaultTextFormat
Definition:
DefaultTextFormat.java:53
javolution.lang.Configurable.Listener.configurableInitialized
< T > void configurableInitialized(Configurable< T > configurable, T value)
javolution.lang.Configurable.initialized
T initialized(T value)
Definition:
Configurable.java:252
javolution.osgi.internal.OSGiServices
Definition:
OSGiServices.java:50
javolution.lang.Configurable.getName
String getName()
Definition:
Configurable.java:185
javolution.lang.Configurable.reconfigured
T reconfigured(T oldValue, T newValue)
Definition:
Configurable.java:280
javolution.osgi
javolution.lang.Configurable.getReconfigurePermission
Permission< Configurable< T > > getReconfigurePermission()
Definition:
Configurable.java:207
javolution.lang.Configurable.Configurable
Configurable()
Definition:
Configurable.java:142
javolution.lang.Configurable.Listener
Definition:
Configurable.java:84
javolution.text.TextContext
Definition:
TextContext.java:49
javolution.lang.Configurable.reconfigurePermission
final Permission< Configurable< T > > reconfigurePermission
Definition:
Configurable.java:126
core-java
src
main
java
javolution
lang
Configurable.java
Generated by
1.8.18