@@ -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