Skip to content

Commit b38fd84

Browse files
committed
fixup! Implement ExposedThing functionality
1 parent 7304fc0 commit b38fd84

File tree

1 file changed

+70
-21
lines changed

1 file changed

+70
-21
lines changed

lib/src/core/implementation/exposed_thing.dart

Lines changed: 70 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,60 @@ class ExposedThing implements scripting_api.ExposedThing, ExposableThing {
3030
final Map<String, scripting_api.PropertyWriteHandler> _propertyWriteHandlers =
3131
{};
3232

33+
final Map<String, scripting_api.PropertyReadHandler>
34+
_propertyObserveHandlers = {};
35+
36+
final Map<String, scripting_api.PropertyReadHandler>
37+
_propertyUnobserveHandlers = {};
38+
3339
final Map<String, scripting_api.ActionHandler> _actionHandlers = {};
3440

41+
Property _obtainProperty(String name) {
42+
final property = thingDescription.properties?[name];
43+
44+
if (property == null) {
45+
throw ArgumentError(
46+
"Property $name does not exist in ExposedThing "
47+
"with title ${thingDescription.title}.",
48+
);
49+
}
50+
51+
return property;
52+
}
53+
54+
void _checkReadableProperty(String name) {
55+
final property = _obtainProperty(name);
56+
57+
if (property.writeOnly) {
58+
final title = property.title ?? "without title";
59+
throw ArgumentError("Property $title is not readable.");
60+
}
61+
}
62+
63+
void _checkWritableProperty(String name) {
64+
final property = _obtainProperty(name);
65+
66+
if (property.readOnly) {
67+
final title = property.title ?? "without title";
68+
throw ArgumentError("Property $title is not writable.");
69+
}
70+
}
71+
72+
void _checkObservableProperty(String name) {
73+
final property = _obtainProperty(name);
74+
75+
if (!property.observable) {
76+
final title = property.title ?? "without title";
77+
throw ArgumentError("Property $title is not observable.");
78+
}
79+
}
80+
3581
@override
3682
Future<void> emitPropertyChange(String name) {
3783
// TODO(JKRhb): implement emitPropertyChange
3884
throw UnimplementedError();
3985
}
4086

41-
@override
42-
void setPropertyWriteHandler(
43-
String name,
44-
scripting_api.PropertyWriteHandler handler,
45-
) {
46-
_propertyWriteHandlers[name] = handler;
47-
}
48-
4987
@override
5088
Future<void> destroy() async {
5189
_servient.destroyThing(this);
@@ -62,48 +100,59 @@ class ExposedThing implements scripting_api.ExposedThing, ExposableThing {
62100

63101
@override
64102
void setActionHandler(String name, scripting_api.ActionHandler handler) {
103+
if (thingDescription.actions?[name] == null) {
104+
throw ArgumentError("ExposedThing does not an Action with the key $name");
105+
}
106+
65107
_actionHandlers[name] = handler;
66108
}
67109

68110
@override
69-
void setEventHandler(
111+
void setPropertyReadHandler(
70112
String name,
71-
scripting_api.EventListenerHandler handler,
113+
scripting_api.PropertyReadHandler handler,
72114
) {
73-
// TODO(JKRhb): implement setEventHandler
115+
_checkReadableProperty(name);
116+
117+
_propertyReadHandlers[name] = handler;
74118
}
75119

76120
@override
77-
void setEventSubscribeHandler(
121+
void setPropertyWriteHandler(
78122
String name,
79-
scripting_api.EventSubscriptionHandler handler,
123+
scripting_api.PropertyWriteHandler handler,
80124
) {
81-
// TODO(JKRhb): implement setEventSubscribeHandler
125+
_checkWritableProperty(name);
126+
127+
_propertyWriteHandlers[name] = handler;
82128
}
83129

84130
@override
85131
void setPropertyObserveHandler(
86132
String name,
87133
scripting_api.PropertyReadHandler handler,
88134
) {
89-
// TODO(JKRhb): implement setPropertyObserveHandler
135+
_checkObservableProperty(name);
136+
137+
_propertyObserveHandlers[name] = handler;
90138
}
91139

92140
@override
93-
void setPropertyReadHandler(
141+
void setPropertyUnobserveHandler(
94142
String name,
95143
scripting_api.PropertyReadHandler handler,
96144
) {
97-
// TODO: Ensure that the property is actually readable.
98-
_propertyReadHandlers[name] = handler;
145+
_checkObservableProperty(name);
146+
147+
_propertyUnobserveHandlers[name] = handler;
99148
}
100149

101150
@override
102-
void setPropertyUnobserveHandler(
151+
void setEventSubscribeHandler(
103152
String name,
104-
scripting_api.PropertyReadHandler handler,
153+
scripting_api.EventSubscriptionHandler handler,
105154
) {
106-
// TODO(JKRhb): implement setPropertyUnobserveHandler
155+
// TODO(JKRhb): implement setEventSubscribeHandler
107156
}
108157

109158
@override

0 commit comments

Comments
 (0)