502fdc3bb8f3a8be7e47d8bd7e26eae8c96beebd
[smartthings-infrastructure.git] / Extractor / Extractor.groovy
1 ////////////////////////////////////////
2 //import libraries
3 import groovy.transform.Field
4
5
6 //import classes
7 //Importing Classes
8 import ContactSensor.ContactSensor
9 import ContactSensor.ContactSensors
10 import DoorControl.DoorControl
11 import DoorControl.DoorControls
12 import Lock.Lock
13 import Lock.Locks
14 import Thermostat.Thermostat
15 import Thermostat.Thermostats
16 import Switch.Switch
17 import Switch.Switches
18 import PresenceSensor.PresenceSensor
19 import PresenceSensor.PresenceSensors
20 import Logger.Logger
21 import Location.LocationVar
22 import Location.Phrase
23 import appTouch.Touched
24 import NfcTouch.NfcTouch
25 import AeonKeyFob.AeonKeyFob
26 import AeonKeyFob.AeonKeyFobs
27 import MusicPlayer.MusicPlayer
28 import MusicPlayer.MusicPlayers
29 import MotionSensor.MotionSensor
30 import MotionSensor.MotionSensors
31 import ImageCapture.ImageCapture
32 import ImageCapture.ImageCaptures
33 import SmokeDetector.SmokeDetector
34 import SmokeDetector.SmokeDetectors
35 import Alarm.Alarm
36 import Alarm.Alarms
37 import SpeechSynthesis.SpeechSynthesis
38 import SpeechSynthesis.SpeechSynthesises
39 import AccelerationSensor.AccelerationSensor
40 import AccelerationSensor.AccelerationSensors
41 import Battery.Battery
42 import Battery.Batteries
43 import BeaconSensor.BeaconSensor
44 import BeaconSensor.BeaconSensors
45 import CarbonMonoxideDetector.CarbonMonoxideDetector
46 import CarbonMonoxideDetector.CarbonMonoxideDetectors
47 import ColorControl.ColorControl
48 import ColorControl.ColorControls
49 import EnergyMeter.EnergyMeter
50 import EnergyMeter.EnergyMeters
51 import IlluminanceMeasurement.IlluminanceMeasurement
52 import IlluminanceMeasurement.IlluminanceMeasurements
53 import PowerMeter.PowerMeter
54 import PowerMeter.PowerMeters
55 import RelativeHumidityMeasurement.RelativeHumidityMeasurement
56 import RelativeHumidityMeasurement.RelativeHumidityMeasurements
57 import RelaySwitch.RelaySwitch
58 import RelaySwitch.RelaySwitches
59 import SleepSensor.SleepSensor
60 import SleepSensor.SleepSensors
61 import StepSensor.StepSensor
62 import StepSensor.StepSensors
63 import SwitchLevel.SwitchLevel
64 import SwitchLevel.SwitchLevels
65 import TemperatureMeasurement.TemperatureMeasurement
66 import TemperatureMeasurement.TemperatureMeasurements
67 import WaterSensor.WaterSensor
68 import WaterSensor.WaterSensors
69 import Valve.Valve
70 import Valve.Valves
71 import MobilePresence.MobilePresence
72 import MobilePresence.MobilePresences
73 import Timer.SimulatedTimer
74
75 //GlobalVariables
76 @Field def location = new LocationVar()
77 //Settings variable defined to settings on purpose
78 @Field def settings = [app: "app"]
79 //Global variable for state[mode]
80 @Field def state = [home:[],away:[],night:[]]
81 //Create a global logger object for methods
82 @Field def log = new Logger()
83 //Create a global variable for optional property
84 @Field def optional = false //by default for now
85 //Global Object for class AtomicState!
86 @Field def atomicState = [history: "15:00"]
87
88
89 //Global variables for files
90 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
91 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
92 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
93 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
94
95
96 //Empty the files
97 if (App == "App1") {
98         extractedObjectsApp1.write("")
99         extractedObjectsConstructorApp1.write("")
100 } else if (App == "App2") {
101         extractedObjectsApp2.write("")
102         extractedObjectsConstructorApp2.write("")
103 }
104
105
106
107 //Some of methods-May be needed even in install
108 /////////////////////////////////////////////////////////////////////
109 def timeToday(String time, Object timeZone) {
110         def timeOfDay = new Date()
111         def _inputTime = time.split(':')
112         def inputTime = Integer.parseInt(_inputTime[0])*3600+Integer.parseInt(_inputTime[1])*60+1564191100415
113         timeOfDay.time = inputTime
114         return timeOfDay
115 }
116
117
118
119 //Global objects
120 //Global Object for class Touch Sensor!
121 @Field touchSensorObjects = 0
122 @Field def touchSensorObject0
123 @Field def touchSensorObject1
124 @Field def touchSensorObject2
125 //Global Object for class switch!
126 @Field switchObjects = 0
127 @Field def switchObject0
128 @Field def switchObject1
129 @Field def switchObject2
130 //Global Object for class lock!
131 @Field lockObjects = 0
132 @Field def lockObject0
133 @Field def lockObject1
134 @Field def lockObject2
135 //Global Object for class door control!
136 @Field doorControlObjects = 0
137 @Field def doorControlObject0
138 @Field def doorControlObject1
139 @Field def doorControlObject2
140 //Global Object for class contact sensor!
141 @Field contactObjects = 0
142 @Field def contactObject0
143 @Field def contactObject1
144 @Field def contactObject2
145 //Global Object for class presence sensor!
146 @Field presenceSensorObjects = 0
147 @Field def presenceSensorObject0
148 @Field def presenceSensorObject1
149 @Field def presenceSensorObject2
150 //Global Object for class thermostat!
151 @Field thermostatObjects = 0
152 @Field def thermostatObject0
153 @Field def thermostatObject1
154 @Field def thermostatObject2
155 //Global Object for class music player!
156 @Field musicPlayerObjects = 0
157 @Field def musicPlayerObject0
158 @Field def musicPlayerObject1
159 @Field def musicPlayerObject2
160 //Global Object for class aeon key fob!
161 @Field aeonKeyFobObjects = 0
162 @Field def aeonKeyFobObject0
163 @Field def aeonKeyFobObject1
164 @Field def aeonKeyFobObject2
165 //Global Object for class motion sensor!
166 @Field motionSensorObjects = 0
167 @Field def motionSensorObject0
168 @Field def motionSensorObject1
169 @Field def motionSensorObject2
170 //Global Object for class image capture!
171 @Field imageCaptureObjects = 0
172 @Field def imageCaptureObject0
173 @Field def imageCaptureObject1
174 @Field def imageCaptureObject2
175 //Global Object for class smoke detector!
176 @Field smokeDetectorObjects = 0
177 @Field def smokeDetectorObject0
178 @Field def smokeDetectorObject1
179 @Field def smokeDetectorObject2
180 //Global Object for class alarm!
181 @Field alarmObjects = 0
182 @Field def alarmObject0
183 @Field def alarmObject1
184 @Field def alarmObject2
185 //Global Object for class speech synthesis!
186 @Field speechSynthesisObjects = 0
187 @Field def speechSynthesisObject0
188 @Field def speechSynthesisObject1
189 @Field def speechSynthesisObject2
190 //Global Object for class acceleration sensor!
191 @Field accelerationSensorObjects = 0
192 @Field def accelerationSensorObject0
193 @Field def accelerationSensorObject1
194 @Field def accelerationSensorObject2
195 //Global Object for class battery!
196 @Field batteryObjects = 0
197 @Field def batteryObject0
198 @Field def batteryObject1
199 @Field def batteryObject2
200 //Global Object for class beacon sensor!
201 @Field beaconSensorObjects = 0
202 @Field def beaconSensorObject0
203 @Field def beaconSensorObject1
204 @Field def beaconSensorObject2
205 //Global Object for class carbon monoxide detector!
206 @Field carbonMonoxideDetectorObjects = 0
207 @Field def carbonMonoxideDetectorObject0
208 @Field def carbonMonoxideDetectorObject1
209 @Field def carbonMonoxideDetectorObject2
210 //Global Object for class color control!
211 @Field colorControlObjects = 0
212 @Field def colorControlObject0
213 @Field def colorControlObject1
214 @Field def colorControlObject2
215 //Global Object for class energy meter!
216 @Field energyMeterObjects = 0
217 @Field def energyMeterObject0
218 @Field def energyMeterObject1
219 @Field def energyMeterObject2
220 //Global Object for class energy meter!
221 @Field illuminanceMeasurementObjects = 0
222 @Field def illuminanceMeasurementObject0
223 @Field def illuminanceMeasurementObject1
224 @Field def illuminanceMeasurementObject2
225 //Global Object for class power meter!
226 @Field powerMeterObjects = 0
227 @Field def powerMeterObject0
228 @Field def powerMeterObject1
229 @Field def powerMeterObject2
230 //Global Object for class power meter!
231 @Field humidityMeasurementObjects = 0
232 @Field def humidityMeasurementObject0
233 @Field def humidityMeasurementObject1
234 @Field def humidityMeasurementObject2
235 //Global Object for class relay switch!
236 @Field relaySwitchObjects = 0
237 @Field def relaySwitchObject0
238 @Field def relaySwitchObject1
239 @Field def relaySwitchObject2
240 //Global Object for class sleep sensor!
241 @Field sleepSensorObjects = 0
242 @Field def sleepSensorObject0
243 @Field def sleepSensorObject1
244 @Field def sleepSensorObject2
245 //Global Object for class sleep sensor!
246 @Field stepSensorObjects = 0
247 @Field def stepSensorObject0
248 @Field def stepSensorObject1
249 @Field def stepSensorObject2
250 //Global Object for class switch level!
251 @Field switchLevelObjects = 0
252 @Field def switchLevelObject0
253 @Field def switchLevelObject1
254 @Field def switchLevelObject2
255 //Global Object for class temperature measurement!
256 @Field temperatureMeasurementObjects = 0
257 @Field def temperatureMeasurementObject0
258 @Field def temperatureMeasurementObject1
259 @Field def temperatureMeasurementObject2
260 //Global Object for class temperature measurement!
261 @Field waterSensorObjects = 0
262 @Field def waterSensorObject0
263 @Field def waterSensorObject1
264 @Field def waterSensorObject2
265 //Global Object for class valve!
266 @Field valveObjects = 0
267 @Field def valveObject0
268 @Field def valveObject1
269 @Field def valveObject2
270 //Global Object for class valve!
271 @Field mobilePresenceObjects = 0
272 @Field def mobilePresenceObject0
273 @Field def mobilePresenceObject1
274 @Field def mobilePresenceObject2
275
276
277
278 //Global variables
279 //For mode
280 @Field modeVariables = 0
281 @Field mode0
282 @Field mode1
283 @Field mode2
284 @Field mode3
285 @Field mode4
286 @Field mode5
287 //For number
288 @Field numberVariables = 0
289 @Field number0
290 @Field number1
291 @Field number2
292 @Field number3
293 @Field number4
294 @Field number5
295 //For decimal
296 @Field decimalVariables = 0
297 @Field decimal0
298 @Field decimal1
299 @Field decimal2
300 @Field decimal3
301 @Field decimal4
302 @Field decimal5
303 //For time
304 @Field timeVariables = 0
305 @Field time0
306 @Field time1
307 @Field time2
308 @Field time3
309 @Field time4
310 @Field time5
311 //For enum
312 @Field enumVariables = 0
313 @Field enum0
314 @Field enum1
315 @Field enum2
316 @Field enum3
317 @Field enum4
318 @Field enum5
319 //For phone
320 @Field phoneVariables = 0
321 @Field phone0
322 @Field phone1
323 @Field phone2
324 @Field phone3
325 @Field phone4
326 @Field phone5
327 //For contact
328 @Field contactVariables = 0
329 @Field contact0
330 @Field contact1
331 @Field contact2
332 @Field contact3
333 @Field contact4
334 @Field contact5
335 //For text
336 @Field textVariables = 0
337 @Field textVariable0
338 @Field textVariable1
339 @Field textVariable2
340 @Field textVariable3
341 @Field textVariable4
342 @Field textVariable5
343 //For boolean
344 @Field boolVariables = 0
345 @Field boolVariable0
346 @Field boolVariable1
347 @Field boolVariable2
348 @Field boolVariable3
349 @Field boolVariable4
350 @Field boolVariable5
351
352
353
354 /////Input Methods/////
355 //input "",""
356 def input(String name, String type) {
357         LinkedHashMap metaData = []
358         metaData.put('name',name)
359         metaData.put('type',type)
360         input(metaData)
361 }
362
363 //input "","",linkedHashMap
364 def input(LinkedHashMap metaData, String name, String type) {
365         metaData.put('name',name)
366         metaData.put('type',type)
367         input(metaData)
368 }
369
370 //input "", "", linkedHashMap, Closure
371 def input(LinkedHashMap metaData, String name, String type, Closure Input) {
372         metaData.put('name',name)
373         metaData.put('type',type)
374         input(metaData)
375         find(Input)
376 }
377
378 //input linkedHashMap
379 def input(LinkedHashMap metaData) {
380         if (metaData.containsKey('title')) {
381                 println metaData['title']
382         }
383         if (metaData.containsKey('options')) {
384                 println "Options: "+metaData['options']
385         }
386         switch(metaData['type']) {
387                 case "capability.lock":
388                         if (lockObjects == 0) {
389                                 lockObject0 = metaData['name']
390                                 this[lockObject0] = new Locks({}, 1)
391                         } else if (lockObjects == 1) {
392                                 lockObject1 = metaData['name']
393                                 this[lockObject1] = new Locks({}, 1)
394                         } else if (lockObjects == 2) {
395                                 lockObject2 = metaData['name']
396                                 this[lockObject2] = new Locks({}, 1)
397                         }
398
399                         lockObjects=lockObjects+1
400
401                         settings.put(metaData['name'], new Locks({}, 1)) 
402
403                         if (App == "App1") {
404                                 extractedObjectsApp1.append("//Object for class lock!\n")
405                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
406                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")          
407                         } else {
408                                 extractedObjectsApp2.append("//Object for class lock!\n")
409                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
410                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
411                         }
412                         break
413                 case "capability.alarm":
414                         if (alarmObjects == 0) {
415                                 alarmObject0 = metaData['name']
416                                 this[alarmObject0] = new Alarms({}, 1)
417                         } else if (alarmObjects == 1) {
418                                 alarmObject1 = metaData['name']
419                                 this[alarmObject1] = new Alarms({}, 1)
420                         } else if (alarmObjects == 2) {
421                                 alarmObject2 = metaData['name']
422                                 this[alarmObject2] = new Alarms({}, 1)
423                         }
424
425                         alarmObjects=alarmObjects+1
426
427                         settings.put(metaData['name'], new Alarms({}, 1)) 
428
429                         if (App == "App1") {
430                                 extractedObjectsApp1.append("//Object for class alarm!\n")
431                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
432                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.alarmObject\n")         
433                         } else {
434                                 extractedObjectsApp2.append("//Object for class alarm!\n")
435                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
436                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.alarmObject\n")
437                         }
438                         break
439                 case "capability.battery":
440                         if (batteryObjects == 0) {
441                                 batteryObject0 = metaData['name']
442                                 this[batteryObject0] = new Batteries({}, 1)
443                         } else if (batteryObjects == 1) {
444                                 batteryObject1 = metaData['name']
445                                 this[batteryObject1] = new Batteries({}, 1)
446                         } else if (batteryObjects == 2) {
447                                 batteryObject2 = metaData['name']
448                                 this[batteryObject2] = new Batteries({}, 1)
449                         }
450
451                         batteryObjects=batteryObjects+1
452
453                         settings.put(metaData['name'], new Batteries({}, 1))
454
455                         if (App == "App1") {
456                                 extractedObjectsApp1.append("//Object for class Battery!\n")
457                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
458                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.batteryObject\n")               
459                         } else {
460                                 extractedObjectsApp2.append("//Object for class Battery!\n")
461                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
462                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.batteryObject\n")
463                         }
464                         break
465                 case "capability.beacon":
466                         if (beaconSensorObjects == 0) {
467                                 beaconSensorObject0 = metaData['name']
468                                 this[beaconSensorObject0] = new BeaconSensors({}, 1)
469                         } else if (beaconSensorObjects == 1) {
470                                 beaconSensorObject1 = metaData['name']
471                                 this[beaconSensorObject1] = new BeaconSensors({}, 1)
472                         } else if (beaconSensorObjects == 2) {
473                                 beaconSensorObject2 = metaData['name']
474                                 this[beaconSensorObject2] = new BeaconSensors({}, 1)
475                         }
476
477                         beaconSensorObjects=beaconSensorObjects+1
478
479                         settings.put(metaData['name'], new BeaconSensors({}, 1))
480
481                         if (App == "App1") {
482                                 extractedObjectsApp1.append("//Object for class beacon sensor!\n")
483                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
484                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.beaconSensorObject\n")          
485                         } else {
486                                 extractedObjectsApp2.append("//Object for class beacon sensor!\n")
487                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
488                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.beaconSensorObject\n")
489                         }
490                         break
491                 case "capability.carbonMonoxideDetector":
492                         if (carbonMonoxideDetectorObjects == 0) {
493                                 carbonMonoxideDetectorObject0 = metaData['name']
494                                 this[carbonMonoxideDetectorObject0] = new CarbonMonoxideDetectors({}, 1)
495                         } else if (carbonMonoxideDetectorObjects == 1) {
496                                 carbonMonoxideDetectorObject1 = metaData['name']
497                                 this[carbonMonoxideDetectorObject1] = new CarbonMonoxideDetectors({}, 1)
498                         } else if (carbonMonoxideDetectorObjects == 2) {
499                                 carbonMonoxideDetectorObject2 = metaData['name']
500                                 this[carbonMonoxideDetectorObject2] = new CarbonMonoxideDetectors({}, 1)
501                         }
502
503                         carbonMonoxideDetectorObjects=carbonMonoxideDetectorObjects+1
504                         
505                         settings.put(metaData['name'], new CarbonMonoxideDetectors({}, 1))
506
507                         if (App == "App1") {
508                                 extractedObjectsApp1.append("//Object for class carbon monoxide detector!\n")
509                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
510                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")                
511                         } else {
512                                 extractedObjectsApp2.append("//Object for class carbon monoxide detector!\n")
513                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
514                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")
515                         }
516                         break
517                 case "capability.colorControl":
518                         if (colorControlObjects == 0) {
519                                 colorControlObject0 = metaData['name']
520                                 this[colorControlObject0] = new ColorControls({}, 1)
521                         } else if (colorControlObjects == 1) {
522                                 colorControlObject1 = metaData['name']
523                                 this[colorControlObject1] = new ColorControls({}, 1)
524                         } else if (colorControlObjects == 2) {
525                                 colorControlObject2 = metaData['name']
526                                 this[colorControlObject2] = new ColorControls({}, 1)
527                         }
528
529                         colorControlObjects=colorControlObjects+1
530
531                         settings.put(metaData['name'], new ColorControls({}, 1))
532
533                         if (App == "App1") {
534                                 extractedObjectsApp1.append("//Object for class color control!\n")
535                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
536                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.colorControlObject\n")          
537                         } else {
538                                 extractedObjectsApp2.append("//Object for class color control!\n")
539                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
540                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.colorControlObject\n")
541                         }
542                         break
543                 case "capability.contactSensor":
544                         if (contactObjects == 0) {
545                                 contactObject0 = metaData['name']
546                                 this[contactObject0] = new ContactSensors({}, 1)
547                         } else if (contactObjects == 1) {
548                                 contactObject1 = metaData['name']
549                                 this[contactObject1] = new ContactSensors({}, 1)
550                         } else if (contactObjects == 2) {
551                                 contactObject2 = metaData['name']
552                                 this[contactObject2] = new ContactSensors({}, 1)
553                         }
554
555                         contactObjects=contactObjects+1
556
557                         settings.put(metaData['name'], new ContactSensors({}, 1))
558
559                         if (App == "App1") {
560                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
561                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
562                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")               
563                         } else {
564                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
565                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
566                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
567                         }
568                         break
569                 case "capability.doorControl":
570                         if (doorControlObjects == 0) {
571                                 doorControlObject0 = metaData['name']
572                                 this[doorControlObject0] = new DoorControls({}, 1)
573                         } else if (doorControlObjects == 1) {
574                                 doorControlObject1 = metaData['name']
575                                 this[doorControlObject1] = new DoorControls({}, 1)
576                         } else if (doorControlObjects == 2) {
577                                 doorControlObject2 = metaData['name']
578                                 this[doorControlObject2] = new DoorControls({}, 1)
579                         }
580
581                         doorControlObjects=doorControlObjects+1
582
583                         settings.put(metaData['name'], new DoorControls({}, 1))
584
585                         if (App == "App1") {
586                                 extractedObjectsApp1.append("//Object for class door control!\n")
587                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
588                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")           
589                         } else {
590                                 extractedObjectsApp2.append("//Object for class door control!\n")
591                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
592                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
593                         }
594                         break
595                 case "capability.energyMeter":
596                         if (energyMeterObjects == 0) {
597                                 energyMeterObject0 = metaData['name']
598                                 this[energyMeterObject0] = new EnergyMeters({}, 1)
599                         } else if (energyMeterObjects == 1) {
600                                 energyMeterObject1 = metaData['name']
601                                 this[energyMeterObject1] = new EnergyMeters({}, 1)
602                         } else if (energyMeterObjects == 2) {
603                                 energyMeterObject2 = metaData['name']
604                                 this[energyMeterObject2] = new EnergyMeters({}, 1)
605                         }
606
607                         energyMeterObjects=energyMeterObjects+1
608
609                         settings.put(metaData['name'], new EnergyMeters({}, 1))
610
611                         if (App == "App1") {
612                                 extractedObjectsApp1.append("//Object for class energy meter!\n")
613                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
614                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.energyMeterObject\n")           
615                         } else {
616                                 extractedObjectsApp2.append("//Object for class energy meter!\n")
617                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
618                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.energyMeterObject\n")
619                         }
620                         break
621                 case "capability.illuminanceMeasurement":
622                         if (illuminanceMeasurementObjects == 0) {
623                                 illuminanceMeasurementObject0 = metaData['name']
624                                 this[illuminanceMeasurementObject0] = new IlluminanceMeasurements({}, 1)
625                         } else if (illuminanceMeasurementObjects == 1) {
626                                 illuminanceMeasurementObject1 = metaData['name']
627                                 this[illuminanceMeasurementObject1] = new IlluminanceMeasurements({}, 1)
628                         } else if (illuminanceMeasurementObjects == 2) {
629                                 illuminanceMeasurementObject2 = metaData['name']
630                                 this[illuminanceMeasurementObject2] = new IlluminanceMeasurements({}, 1)
631                         }
632
633                         illuminanceMeasurementObjects=illuminanceMeasurementObjects+1
634
635                         settings.put(metaData['name'], new IlluminanceMeasurements({}, 1))
636
637                         if (App == "App1") {
638                                 extractedObjectsApp1.append("//Object for class illuminance measurement!\n")
639                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
640                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")                
641                         } else {
642                                 extractedObjectsApp2.append("//Object for class illuminance measurement!\n")
643                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
644                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")
645                         }
646                         break
647                 case "capability.accelerationSensor":
648                         if (accelerationSensorObjects == 0) {
649                                 accelerationSensorObject0 = metaData['name']
650                                 this[accelerationSensorObject0] = new AccelerationSensors({}, 1)
651                         } else if (accelerationSensorObjects == 1) {
652                                 accelerationSensorObject1 = metaData['name']
653                                 this[accelerationSensorObject1] = new AccelerationSensors({}, 1)
654                         } else if (accelerationSensorObjects == 2) {
655                                 accelerationSensorObject2 = metaData['name']
656                                 this[accelerationSensorObject2] = new AccelerationSensors({}, 1)
657                         }
658
659                         accelerationSensorObjects=accelerationSensorObjects+1
660
661                         settings.put(metaData['name'], new AccelerationSensors({}, 1))
662
663                         if (App == "App1") {
664                                 extractedObjectsApp1.append("//Object for class Acceleration Sensor!\n")
665                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
666                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.accelerationSensorObject\n")            
667                         } else {
668                                 extractedObjectsApp2.append("//Object for class Acceleration Sensor!\n")
669                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
670                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.accelerationSensorObject\n")
671                         }
672                         break
673                 case "capability.motionSensor":
674                         if (motionSensorObjects == 0) {
675                                 motionSensorObject0 = metaData['name']
676                                 this[motionSensorObject0] = new MotionSensors({}, 1)
677                         } else if (motionSensorObjects == 1) {
678                                 motionSensorObject1 = metaData['name']
679                                 this[motionSensorObject1] = new MotionSensors({}, 1)
680                         } else if (motionSensorObjects == 2) {
681                                 motionSensorObject2 = metaData['name']
682                                 this[motionSensorObject2] = new MotionSensors({}, 1)
683                         }
684
685                         motionSensorObjects=motionSensorObjects+1
686
687                         settings.put(metaData['name'], new MotionSensors({}, 1))
688
689                         if (App == "App1") {
690                                 extractedObjectsApp1.append("//Object for class Motion Sensor!\n")
691                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
692                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.motionSensorObject\n")          
693                         } else {
694                                 extractedObjectsApp2.append("//Object for class Motion Sensor!\n")
695                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
696                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.motionSensorObject\n")
697                         }
698                         break
699                 case "capability.musicPlayer":
700                         if (musicPlayerObjects == 0) {
701                                 musicPlayerObject0 = metaData['name']
702                                 this[musicPlayerObject0] = new MusicPlayers({}, 1)
703                         } else if (musicPlayerObjects == 1) {
704                                 musicPlayerObject1 = metaData['name']
705                                 this[musicPlayerObject1] = new MusicPlayers({}, 1)
706                         } else if (musicPlayerObjects == 2) {
707                                 musicPlayerObject2 = metaData['name']
708                                 this[musicPlayerObject2] = new MusicPlayers({}, 1)
709                         }
710
711                         musicPlayerObjects=musicPlayerObjects+1
712
713                         settings.put(metaData['name'], new MusicPlayers({}, 1)) 
714
715                         if (App == "App1") {
716                                 extractedObjectsApp1.append("//Object for class music player!\n")
717                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
718                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")           
719                         } else {
720                                 extractedObjectsApp2.append("//Object for class music player!\n")
721                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
722                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
723                         }
724                         break
725                 case "capability.powerMeter":
726                         if (powerMeterObjects == 0) {
727                                 powerMeterObject0 = metaData['name']
728                                 this[powerMeterObject0] = new PowerMeters({}, 1)
729                         } else if (powerMeterObjects == 1) {
730                                 powerMeterObject1 = metaData['name']
731                                 this[powerMeterObject1] = new PowerMeters({}, 1)
732                         } else if (powerMeterObjects == 2) {
733                                 powerMeterObject2 = metaData['name']
734                                 this[powerMeterObject2] = new PowerMeters({}, 1)
735                         }
736
737                         powerMeterObjects=powerMeterObjects+1
738
739                         settings.put(metaData['name'], new PowerMeters({}, 1))
740
741                         if (App == "App1") {
742                                 extractedObjectsApp1.append("//Object for class power meter!\n")
743                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
744                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.powerMeterObject\n")            
745                         } else {
746                                 extractedObjectsApp2.append("//Object for class power meter!\n")
747                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
748                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.powerMeterObject\n")
749                         }
750                         break
751                 case "capability.presenceSensor":
752                         if (presenceSensorObjects == 0) {
753                                 presenceSensorObject0 = metaData['name']
754                                 this[presenceSensorObject0] = new PresenceSensors({}, 1)
755                         } else if (presenceSensorObjects == 1) {
756                                 presenceSensorObject1 = metaData['name']
757                                 this[presenceSensorObject1] = new PresenceSensors({}, 1)
758                         } else if (presenceSensorObjects == 2) {
759                                 presenceSensorObject2 = metaData['name']
760                                 this[presenceSensorObject2] = new PresenceSensors({}, 1)
761                         }
762
763                         presenceSensorObjects=presenceSensorObjects+1
764
765                         settings.put(metaData['name'], new PresenceSensors({}, 1))
766
767                         if (App == "App1") {
768                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
769                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
770                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")                
771                         } else {
772                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
773                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
774                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
775                         }
776                         break
777                 case "capability.relativeHumidityMeasurement":
778                         if (humidityMeasurementObjects == 0) {
779                                 humidityMeasurementObject0 = metaData['name']
780                                 this[humidityMeasurementObject0] = new RelativeHumidityMeasurements({}, 1)
781                         } else if (humidityMeasurementObjects == 1) {
782                                 humidityMeasurementObject1 = metaData['name']
783                                 this[humidityMeasurementObject1] = new RelativeHumidityMeasurements({}, 1)
784                         } else if (humidityMeasurementObjects == 2) {
785                                 humidityMeasurementObject2 = metaData['name']
786                                 this[humidityMeasurementObject2] = new RelativeHumidityMeasurements({}, 1)
787                         }
788
789                         humidityMeasurementObjects=humidityMeasurementObjects+1
790
791                         settings.put(metaData['name'], new RelativeHumidityMeasurements({}, 1))
792
793                         if (App == "App1") {
794                                 extractedObjectsApp1.append("//Object for class humidity measurement!\n")
795                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
796                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.humidityMeasurementObject\n")           
797                         } else {
798                                 extractedObjectsApp2.append("//Object for class humidity measurement!\n")
799                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
800                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.humidityMeasurementObject\n")
801                         }
802                         break
803                 case "capability.relaySwitch":
804                         if (relaySwitchObjects == 0) {
805                                 relaySwitchObject0 = metaData['name']
806                                 this[relaySwitchObject0] = new RelaySwitches({}, 1)
807                         } else if (relaySwitchObjects == 1) {
808                                 relaySwitchObject1 = metaData['name']
809                                 this[relaySwitchObject1] = new RelaySwitches({}, 1)
810                         } else if (relaySwitchObjects == 2) {
811                                 relaySwitchObject2 = metaData['name']
812                                 this[relaySwitchObject2] = new RelaySwitches({}, 1)
813                         }
814
815                         relaySwitchObjects=relaySwitchObjects+1
816                         
817                         settings.put(metaData['name'], new RelaySwitches({}, 1))
818
819                         if (App == "App1") {
820                                 extractedObjectsApp1.append("//Object for class relay switch!\n")
821                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
822                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.relaySwitchObject\n")           
823                         } else {
824                                 extractedObjectsApp2.append("//Object for class relay switch!\n")
825                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
826                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.relaySwitchObject\n")
827                         }
828                         break
829                 case "capability.sleepSensor":
830                         if (sleepSensorObjects == 0) {
831                                 sleepSensorObject0 = metaData['name']
832                                 this[sleepSensorObject0] = new SleepSensors({}, 1)
833                         } else if (sleepSensorObjects == 1) {
834                                 sleepSensorObject1 = metaData['name']
835                                 this[sleepSensorObject1] = new SleepSensors({}, 1)
836                         } else if (sleepSensorObjects == 2) {
837                                 sleepSensorObject2 = metaData['name']
838                                 this[sleepSensorObject2] = new SleepSensors({}, 1)
839                         }
840
841                         sleepSensorObjects=sleepSensorObjects+1
842                         
843                         settings.put(metaData['name'], new SleepSensors({}, 1))
844
845                         if (App == "App1") {
846                                 extractedObjectsApp1.append("//Object for class sleep sensor!\n")
847                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
848                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.sleepSensorObject\n")           
849                         } else {
850                                 extractedObjectsApp2.append("//Object for class sleep sensor!\n")
851                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
852                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.sleepSensorObject\n")
853                         }
854                         break
855                 case "capability.smokeDetector":
856                         if (smokeDetectorObjects == 0) {
857                                 smokeDetectorObject0 = metaData['name']
858                                 this[smokeDetectorObject0] = new SmokeDetectors({}, 1)
859                         } else if (smokeDetectorObjects == 1) {
860                                 smokeDetectorObject1 = metaData['name']
861                                 this[smokeDetectorObject1] = new SmokeDetectors({}, 1)
862                         } else if (smokeDetectorObjects == 2) {
863                                 smokeDetectorObject2 = metaData['name']
864                                 this[smokeDetectorObject2] = new SmokeDetectors({}, 1)
865                         }
866
867                         smokeDetectorObjects=smokeDetectorObjects+1
868                         
869                         settings.put(metaData['name'], new SmokeDetectors({}, 1))
870
871                         if (App == "App1") {
872                                 extractedObjectsApp1.append("//Object for class smoke detector!\n")
873                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
874                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.smokeDetectorObject\n")         
875                         } else {
876                                 extractedObjectsApp2.append("//Object for class smoke detector!\n")
877                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
878                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.smokeDetectorObject\n")
879                         }
880                         break
881                 case "capability.stepSensor":
882                         if (stepSensorObjects == 0) {
883                                 stepSensorObject0 = metaData['name']
884                                 this[stepSensorObject0] = new StepSensors({}, 1)
885                         } else if (stepSensorObjects == 1) {
886                                 stepSensorObject1 = metaData['name']
887                                 this[stepSensorObject1] = new StepSensors({}, 1)
888                         } else if (stepSensorObjects == 2) {
889                                 stepSensorObject2 = metaData['name']
890                                 this[stepSensorObject2] = new StepSensors({}, 1)
891                         }
892
893                         stepSensorObjects=stepSensorObjects+1
894                         
895                         settings.put(metaData['name'], new StepSensors({}, 1))
896
897                         if (App == "App1") {
898                                 extractedObjectsApp1.append("//Object for class step sensor!\n")
899                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
900                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.stepSensorObject\n")            
901                         } else {
902                                 extractedObjectsApp2.append("//Object for class step sensor!\n")
903                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
904                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.stepSensorObject\n")
905                         }
906                         break
907                 case "capability.switch":
908                         if (switchObjects == 0) {
909                                 switchObject0 = metaData['name']
910                                 this[switchObject0] = new Switches({}, 1)
911                         } else if (switchObjects == 1) {
912                                 switchObject1 = metaData['name']
913                                 this[switchObject1] = new Switches({}, 1)
914                         } else if (switchObjects == 2) {
915                                 switchObject2 = metaData['name']
916                                 this[switchObject2] = new Switches({}, 1)
917                         }
918
919                         switchObjects=switchObjects+1
920                         
921                         settings.put(metaData['name'], new Switches({}, 1))
922
923                         if (App == "App1") {
924                                 extractedObjectsApp1.append("//Object for class switch!\n")
925                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
926                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")                
927                         } else {
928                                 extractedObjectsApp2.append("//Object for class switch!\n")
929                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
930                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
931                         }
932                         break
933                 case "capability.switchLevel":
934                         if (switchLevelObjects == 0) {
935                                 switchLevelObject0 = metaData['name']
936                                 this[switchLevelObject0] = new SwitchLevels({}, 1)
937                         } else if (switchLevelObjects == 1) {
938                                 switchLevelObject1 = metaData['name']
939                                 this[switchLevelObject1] = new SwitchLevels({}, 1)
940                         } else if (switchLevelObjects == 2) {
941                                 switchLevelObject2 = metaData['name']
942                                 this[switchLevelObject2] = new SwitchLevels({}, 1)
943                         }
944
945                         switchLevelObjects=switchLevelObjects+1
946
947                         settings.put(metaData['name'], new SwitchLevels({}, 1))
948
949                         if (App == "App1") {
950                                 extractedObjectsApp1.append("//Object for class switch level!\n")
951                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
952                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchLevelObject\n")           
953                         } else {
954                                 extractedObjectsApp2.append("//Object for class switch level!\n")
955                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
956                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchLevelObject\n")
957                         }
958                         break
959                 case "capability.temperatureMeasurement":
960                         if (temperatureMeasurementObjects == 0) {
961                                 temperatureMeasurementObject0 = metaData['name']
962                                 this[temperatureMeasurementObject0] = new TemperatureMeasurements({}, 1)
963                         } else if (temperatureMeasurementObjects == 1) {
964                                 temperatureMeasurementObject1 = metaData['name']
965                                 this[temperatureMeasurementObject1] = new TemperatureMeasurements({}, 1)
966                         } else if (temperatureMeasurementObjects == 2) {
967                                 temperatureMeasurementObject2 = metaData['name']
968                                 this[temperatureMeasurementObject2] = new TemperatureMeasurements({}, 1)
969                         }
970
971                         temperatureMeasurementObjects=temperatureMeasurementObjects+1
972
973                         settings.put(metaData['name'], new TemperatureMeasurements({}, 1))
974
975                         if (App == "App1") {
976                                 extractedObjectsApp1.append("//Object for class temperature measurement!\n")
977                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
978                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.temperatureMeasurementObject\n")                
979                         } else {
980                                 extractedObjectsApp2.append("//Object for class temperature measurement!\n")
981                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
982                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.temperatureMeasurementObject\n")
983                         }
984                         break
985                 case "capability.thermostat":
986                         if (thermostatObjects == 0) {
987                                 thermostatObject0 = metaData['name']
988                                 this[thermostatObject0] = new Thermostats({}, 1)
989                         } else if (thermostatObjects == 1) {
990                                 thermostatObject1 = metaData['name']
991                                 this[thermostatObject1] = new Thermostats({}, 1)
992                         } else if (thermostatObjects == 2) {
993                                 thermostatObject2 = metaData['name']
994                                 this[thermostatObject2] = new Thermostats({}, 1)
995                         }
996
997                         thermostatObjects=thermostatObjects+1
998
999                         settings.put(metaData['name'], new Thermostats({}, 1))
1000
1001                         if (App == "App1") {
1002                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
1003                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1004                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")            
1005                         } else {
1006                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
1007                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1008                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
1009                         }
1010                         break
1011                 case "capability.valve":
1012                         if (valveObjects == 0) {
1013                                 valveObject0 = metaData['name']
1014                                 this[valveObject0] = new Valves({}, 1)
1015                         } else if (valveObjects == 1) {
1016                                 valveObject1 = metaData['name']
1017                                 this[valveObject1] = new Valves({}, 1)
1018                         } else if (valveObjects == 2) {
1019                                 valveObject2 = metaData['name']
1020                                 this[valveObject2] = new Valves({}, 1)
1021                         }
1022
1023                         valveObjects=valveObjects+1
1024
1025                         settings.put(metaData['name'], new Valves({}, 1))
1026
1027                         if (App == "App1") {
1028                                 extractedObjectsApp1.append("//Object for class valve!\n")
1029                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1030                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.valveObject\n")         
1031                         } else {
1032                                 extractedObjectsApp2.append("//Object for class valve!\n")
1033                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1034                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.valveObject\n")
1035                         }
1036                         break
1037                 case "capability.speechSynthesis":
1038                         if (speechSynthesisObjects == 0) {
1039                                 speechSynthesisObject0 = metaData['name']
1040                                 this[speechSynthesisObject0] = new SpeechSynthesises({}, 1)
1041                         } else if (speechSynthesisObjects == 1) {
1042                                 speechSynthesisObject1 = metaData['name']
1043                                 this[speechSynthesisObject1] = new SpeechSynthesises({}, 1)
1044                         } else if (speechSynthesisObjects == 2) {
1045                                 speechSynthesisObject2 = metaData['name']
1046                                 this[speechSynthesisObject2] = new SpeechSynthesises({}, 1)
1047                         }
1048
1049                         speechSynthesisObjects=speechSynthesisObjects+1
1050
1051                         settings.put(metaData['name'], new SpeechSynthesises({}, 1))
1052
1053                         if (App == "App1") {
1054                                 extractedObjectsApp1.append("//Object for class speech synthesis!\n")
1055                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1056                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.speechSynthesisObject\n")               
1057                         } else {
1058                                 extractedObjectsApp2.append("//Object for class speech synthesis!\n")
1059                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1060                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.speechSynthesisObject\n")
1061                         }
1062                         break
1063                 case "capability.waterSensor":
1064                         if (waterSensorObjects == 0) {
1065                                 waterSensorObject0 = metaData['name']
1066                                 this[waterSensorObject0] = new WaterSensors({}, 1)
1067                         } else if (waterSensorObjects == 1) {
1068                                 waterSensorObject1 = metaData['name']
1069                                 this[waterSensorObject1] = new WaterSensors({}, 1)
1070                         } else if (waterSensorObjects == 2) {
1071                                 waterSensorObject2 = metaData['name']
1072                                 this[waterSensorObject2] = new WaterSensors({}, 1)
1073                         }
1074
1075                         waterSensorObjects=waterSensorObjects+1
1076
1077                         settings.put(metaData['name'], new WaterSensors({}, 1))
1078
1079                         if (App == "App1") {
1080                                 extractedObjectsApp1.append("//Object for class water sensor!\n")
1081                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1082                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.waterSensorObject\n")           
1083                         } else {
1084                                 extractedObjectsApp2.append("//Object for class water sensor!\n")
1085                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1086                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.waterSensorObject\n")
1087                         }
1088                         break
1089                 case "capability.touchSensor":
1090                         if (touchSensorObjects == 0) {
1091                                 touchSensorObject0 = metaData['name']
1092                                 this[touchSensorObject0] = new NfcTouch({}, 1)
1093                         } else if (touchSensorObjects == 1) {
1094                                 touchSensorObject1 = metaData['name']
1095                                 this[touchSensorObject1] = new NfcTouch({}, 1)
1096                         } else if (touchSensorObjects == 2) {
1097                                 touchSensorObject2 = metaData['name']
1098                                 this[touchSensorObject2] = new NfcTouch({}, 1)
1099                         }
1100
1101                         touchSensorObjects=touchSensorObjects+1
1102
1103                         settings.put(metaData['name'], new NfcTouch({}, 1))
1104
1105                         if (App == "App1") {
1106                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
1107                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1108                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")           
1109                         } else {
1110                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
1111                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1112                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
1113                         }
1114                         break
1115                 case "capability.imageCapture":
1116                         if (imageCaptureObjects == 0) {
1117                                 imageCaptureObject0 = metaData['name']
1118                                 this[imageCaptureObject0] = new ImageCaptures({}, 1)
1119                         } else if (imageCaptureObjects == 1) {
1120                                 imageCaptureObject1 = metaData['name']
1121                                 this[imageCaptureObject1] = new ImageCaptures({}, 1)
1122                         } else if (imageCaptureObjects == 2) {
1123                                 imageCaptureObject2 = metaData['name']
1124                                 this[imageCaptureObject2] = new ImageCaptures({}, 1)
1125                         }
1126
1127                         imageCaptureObjects=imageCaptureObjects+1
1128
1129                         settings.put(metaData['name'], new ImageCaptures({}, 1))
1130
1131                         if (App == "App1") {
1132                                 extractedObjectsApp1.append("//Object for class Image Capture!\n")
1133                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1134                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.imageCaptureObject\n")          
1135                         } else {
1136                                 extractedObjectsApp2.append("//Object for class Image Capture!\n")
1137                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1138                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.imageCaptureObject\n")
1139                         }
1140                         break
1141                 case "device.mobilePresence":
1142                         if (mobilePresenceObjects == 0) {
1143                                 mobilePresenceObject0 = metaData['name']
1144                                 this[mobilePresenceObject0] = new MobilePresences({}, 1)
1145                         } else if (mobilePresenceObjects == 1) {
1146                                 mobilePresenceObject1 = metaData['name']
1147                                 this[mobilePresenceObject1] = new MobilePresences({}, 1)
1148                         } else if (mobilePresenceObjects == 2) {
1149                                 mobilePresenceObject2 = metaData['name']
1150                                 this[mobilePresenceObject2] = new MobilePresences({}, 1)
1151                         }
1152
1153                         mobilePresenceObjects=mobilePresenceObjects+1
1154
1155                         settings.put(metaData['name'], new MobilePresences({}, 1))
1156
1157                         if (App == "App1") {
1158                                 extractedObjectsApp1.append("//Object for class mobile presence!\n")
1159                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1160                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.mobilePresenceObject\n")                
1161                         } else {
1162                                 extractedObjectsApp2.append("//Object for class mobile presence!\n")
1163                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1164                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.mobilePresenceObject\n")
1165                         }
1166                         break
1167                 case "device.aeonKeyFob":
1168                         if (aeonKeyFobObjects == 0) {
1169                                 aeonKeyFobObject0 = metaData['name']
1170                                 this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
1171                         } else if (aeonKeyFobObjects == 1) {
1172                                 aeonKeyFobObject1 = metaData['name']
1173                                 this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
1174                         } else if (aeonKeyFobObjects == 2) {
1175                                 aeonKeyFobObject2 = metaData['name']
1176                                 this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
1177                         }
1178
1179                         aeonKeyFobObjects=aeonKeyFobObjects+1
1180
1181                         settings.put(metaData['name'], new AeonKeyFobs({}, 1)) 
1182
1183                         if (App == "App1") {
1184                                 extractedObjectsApp1.append("//Object for class aeon key fob!\n")
1185                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1186                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")            
1187                         } else {
1188                                 extractedObjectsApp2.append("//Object for class aeon key fob!\n")
1189                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1190                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
1191                         }
1192                         break
1193                 case "mode":
1194                         def randomVariable = Math.abs(new Random().nextInt() % 3)
1195                         def modes = ["away", "home", "night"]
1196                         def userInput = modes[randomVariable]
1197
1198                         if (modeVariables == 0) {
1199                                 mode0 = metaData['name']
1200                                 this[mode0] = userInput
1201                         } else if (modeVariables == 1) {
1202                                 mode1 = metaData['name']
1203                                 this[mode1] = userInput
1204                         } else if (modeVariables == 2) {
1205                                 mode2 = metaData['name']
1206                                 this[mode2] = userInput
1207                         } else if (modeVariables == 3) {
1208                                 mode3 = metaData['name']
1209                                 this[mode3] = userInput
1210                         } else if (modeVariables == 4) {
1211                                 mode4 = metaData['name']
1212                                 this[mode4] = userInput
1213                         } else if (modeVariables == 5) {
1214                                 mode5 = metaData['name']
1215                                 this[mode5] = userInput
1216                         }
1217
1218                         if (modeVariables != 5)
1219                                 modeVariables=modeVariables+1
1220                         else
1221                                 modeVariables=0
1222
1223
1224                         settings.put(metaData['name'], metaData['name'])
1225
1226                         if (App == "App1") {                    
1227                                 extractedObjectsApp1.append("//Global variable for mode!\n")
1228                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1229                         } else {
1230                                 extractedObjectsApp2.append("//Global variable for mode!\n")
1231                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1232                         }
1233                         break
1234                 case "decimal":
1235                         def userInput = Math.abs(new Random().nextInt() % 60) + 40
1236                         
1237                         if (decimalVariables == 0) {
1238                                 decimal0 = metaData['name']
1239                                 this[decimal0] = userInput
1240                         } else if (decimalVariables == 1) {
1241                                 decimal1 = metaData['name']
1242                                 this[decimal1] = userInput
1243                         } else if (decimalVariables == 2) {
1244                                 decimal2 = metaData['name']
1245                                 this[decimal2] = userInput
1246                         } else if (decimalVariables == 3) {
1247                                 decimal3 = metaData['name']
1248                                 this[decimal3] = userInput
1249                         } else if (decimalVariables == 4) {
1250                                 decimal4 = metaData['name']
1251                                 this[decimal4] = userInput
1252                         } else if (decimalVariables == 5) {
1253                                 decimal5 = metaData['name']
1254                                 this[decimal5] = userInput
1255                         }
1256
1257                         if (decimalVariables != 5)
1258                                 decimalVariables=decimalVariables+1
1259                         else
1260                                 decimalVariables=0
1261
1262                         settings.put(metaData['name'], metaData['name'])
1263
1264                         if (App == "App1") {                    
1265                                 extractedObjectsApp1.append("//Global variable for decimal number!\n")
1266                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1267                         } else {
1268                                 extractedObjectsApp2.append("//Global variable for decimal number!\n")
1269                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1270                         }
1271                         break
1272                 case "text":
1273                         def userInput = "This is just a text!"
1274         
1275                         if (textVariables == 0) {
1276                                 text0 = metaData['name']
1277                                 this[text0] = userInput
1278                         } else if (textVariables == 1) {
1279                                 text1 = metaData['name']
1280                                 this[text1] = userInput
1281                         } else if (textVariables == 2) {
1282                                 text2 = metaData['name']
1283                                 this[text2] = userInput
1284                         } else if (textVariables == 3) {
1285                                 text3 = metaData['name']
1286                                 this[text3] = userInput
1287                         } else if (textVariables == 4) {
1288                                 text4 = metaData['name']
1289                                 this[text4] = userInput
1290                         } else if (textVariables == 5) {
1291                                 text5 = metaData['name']
1292                                 this[text5] = userInput
1293                         }
1294
1295                         if (textVariables != 5)
1296                                 textVariables=textVariables+1
1297                         else
1298                                 textVariables=0
1299
1300
1301                         settings.put(metaData['name'], metaData['name'])
1302
1303                         if (App == "App1") {                    
1304                                 extractedObjectsApp1.append("//Global variable for text!\n")
1305                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1306                         } else {
1307                                 extractedObjectsApp2.append("//Global variable for text!\n")
1308                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1309                         }
1310                         break
1311                 case "number":
1312                         def userInput = Math.abs(new Random().nextInt() % 60) + 40
1313                         
1314                         if (numberVariables == 0) {
1315                                 number0 = metaData['name']
1316                                 this[number0] = userInput
1317                         } else if (numberVariables == 1) {
1318                                 number1 = metaData['name']
1319                                 this[number1] = userInput
1320                         } else if (numberVariables == 2) {
1321                                 number2 = metaData['name']
1322                                 this[number2] = userInput
1323                         } else if (numberVariables == 3) {
1324                                 number3 = metaData['name']
1325                                 this[number3] = userInput
1326                         } else if (numberVariables == 4) {
1327                                 number4 = metaData['name']
1328                                 this[number4] = userInput
1329                         } else if (numberVariables == 5) {
1330                                 number5 = metaData['name']
1331                                 this[number5] = userInput
1332                         }
1333
1334
1335                         if (numberVariables != 5)
1336                                 numberVariables=numberVariables+1
1337                         else
1338                                 numberVariables=0
1339                         
1340
1341                         settings.put(metaData['name'], metaData['name'])
1342
1343                         if (App == "App1") {                    
1344                                 extractedObjectsApp1.append("//Global variable for number!\n")
1345                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1346                         } else {
1347                                 extractedObjectsApp2.append("//Global variable for number!\n")
1348                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1349                         }
1350                         break
1351                 case "time":
1352                         def userInput = "15:00"
1353                         
1354                         if (timeVariables == 0) {
1355                                 time0 = metaData['name']
1356                                 this[time0] = userInput
1357                         } else if (timeVariables == 1) {
1358                                 time1 = metaData['name']
1359                                 this[time1] = userInput
1360                         } else if (timeVariables == 2) {
1361                                 time2 = metaData['name']
1362                                 this[time2] = userInput
1363                         } else if (timeVariables == 3) {
1364                                 time3 = metaData['name']
1365                                 this[time3] = userInput
1366                         } else if (timeVariables == 4) {
1367                                 time4 = metaData['name']
1368                                 this[time4] = userInput
1369                         } else if (timeVariables == 5) {
1370                                 time5 = metaData['name']
1371                                 this[time5] = userInput
1372                         }
1373
1374                         if (timeVariables != 5)
1375                                 timeVariables=timeVariables+1
1376                         else
1377                                 timeVariables=0
1378
1379                         settings.put(metaData['name'], metaData['name'])
1380
1381                         if (App == "App1") {                    
1382                                 extractedObjectsApp1.append("//Global variable for time!\n")
1383                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1384                         } else {
1385                                 extractedObjectsApp2.append("//Global variable for time!\n")
1386                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1387                         }
1388                         break
1389                 case "enum":
1390                         if (metaData['options'] != null)
1391                                 modes = metaData['options']
1392                         else if (metaData['metadata'] != null) { // If it is not named 'options' then it is captured as 'metadata'
1393                                 modes = metaData['metadata']
1394                                 modes = modes['values']
1395                         }
1396                         def userInput = modes[0]
1397         
1398                         if (enumVariables == 0) {
1399                                 enum0 = metaData['name']
1400                                 this[enum0] = userInput
1401                         } else if (enumVariables == 1) {
1402                                 enum1 = metaData['name']
1403                                 this[enum1] = userInput
1404                         } else if (enumVariables == 2) {
1405                                 enum2 = metaData['name']
1406                                 this[enum2] = userInput
1407                         } else if (enumVariables == 3) {
1408                                 enum3 = metaData['name']
1409                                 this[enum3] = userInput
1410                         } else if (enumVariables == 4) {
1411                                 enum4 = metaData['name']
1412                                 this[enum4] = userInput
1413                         } else if (enumVariables == 5) {
1414                                 enum5 = metaData['name']
1415                                 this[enum5] = userInput
1416                         }
1417
1418                         if (enumVariables != 5)
1419                                 enumVariables=enumVariables+1
1420                         else
1421                                 enumVariables=0                 
1422
1423
1424                         settings.put(metaData['name'], metaData['name'])
1425
1426                         if (App == "App1") {                    
1427                                 extractedObjectsApp1.append("//Global variable for enum!\n")
1428                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1429                         } else {
1430                                 extractedObjectsApp2.append("//Global variable for enum!\n")
1431                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1432                         }
1433                         break
1434                 case "bool":
1435                         def userInput = Math.abs(new Random().nextInt() % 2)
1436         
1437                         if (boolVariables == 0) {
1438                                 bool0 = metaData['name']
1439                                 this[bool0] = userInput
1440                         } else if (boolVariables == 1) {
1441                                 bool1 = metaData['name']
1442                                 this[bool1] = userInput
1443                         } else if (boolVariables == 2) {
1444                                 bool2 = metaData['name']
1445                                 this[bool2] = userInput
1446                         } else if (boolVariables == 3) {
1447                                 bool3 = metaData['name']
1448                                 this[bool3] = userInput
1449                         } else if (boolVariables == 4) {
1450                                 bool4 = metaData['name']
1451                                 this[bool4] = userInput
1452                         } else if (boolVariables == 5) {
1453                                 bool5 = metaData['name']
1454                                 this[bool5] = userInput
1455                         }
1456
1457                         if (boolVariables != 5)
1458                                 boolVariables=boolVariables+1
1459                         else
1460                                 boolVariables=0
1461
1462
1463                         settings.put(metaData['name'], metaData['name'])
1464
1465                         if (App == "App1") {                    
1466                                 extractedObjectsApp1.append("//Global variable for boolean!\n")
1467                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1468                         } else {
1469                                 extractedObjectsApp2.append("//Global variable for boolean!\n")
1470                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1471                         }
1472                         break
1473                 case "phone":
1474                         def userInput = 9495379373
1475
1476                         if (phoneVariables == 0) {
1477                                 phone0 = metaData['name']
1478                                 this[phone0] = userInput
1479                         } else if (phoneVariables == 1) {
1480                                 phone1 = metaData['name']
1481                                 this[phone1] = userInput
1482                         } else if (phoneVariables == 2) {
1483                                 phone2 = metaData['name']
1484                                 this[phone2] = userInput
1485                         } else if (phoneVariables == 3) {
1486                                 phone3 = metaData['name']
1487                                 this[phone3] = userInput
1488                         } else if (phoneVariables == 4) {
1489                                 phone4 = metaData['name']
1490                                 this[phone4] = userInput
1491                         } else if (phoneVariables == 5) {
1492                                 phone5 = metaData['name']
1493                                 this[phone5] = userInput
1494                         }
1495
1496                         if (phoneVariables != 5)
1497                                 phoneVariables=phoneVariables+1
1498                         else
1499                                 phoneVariables=0
1500
1501                         settings.put(metaData['name'], metaData['name'])
1502
1503                         if (App == "App1") {                    
1504                                 extractedObjectsApp1.append("//Global variable for phone!\n")
1505                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1506                         } else {
1507                                 extractedObjectsApp2.append("//Global variable for phone!\n")
1508                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1509                         }
1510                         break
1511                 case "contact":
1512                         def userInput = "AJ"
1513         
1514                         if (contactVariables == 0) {
1515                                 contact0 = metaData['name']
1516                                 this[contact0] = userInput
1517                         } else if (contactVariables == 1) {
1518                                 contact1 = metaData['name']
1519                                 this[contact1] = userInput
1520                         } else if (contactVariables == 2) {
1521                                 contact2 = metaData['name']
1522                                 this[contact2] = userInput
1523                         } else if (contactVariables == 3) {
1524                                 contact3 = metaData['name']
1525                                 this[contact3] = userInput
1526                         } else if (contactVariables == 4) {
1527                                 contact4 = metaData['name']
1528                                 this[contact4] = userInput
1529                         } else if (contactVariables == 5) {
1530                                 contact5 = metaData['name']
1531                                 this[contact5] = userInput
1532                         }
1533
1534                         if (contactVariables != 5)
1535                                 contactVariables=contactVariables+1
1536                         else
1537                                 contactVariables=0
1538
1539                         settings.put(metaData['name'], metaData['name'])
1540
1541                         if (App == "App1") {                    
1542                                 extractedObjectsApp1.append("//Global variable for contact!\n")
1543                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1544                         } else {
1545                                 extractedObjectsApp2.append("//Global variable for contact!\n")
1546                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1547                         }
1548                         break
1549                 default:
1550                         break
1551         }
1552 }
1553
1554 def label(LinkedHashMap metaData) {
1555         if (metaData.containsKey('title')) {
1556                 println metaData['title']
1557         }
1558         if (metaData.containsKey('options')) {
1559                 println "Options: "+metaData['options']
1560         }
1561
1562         println("//IGNORE--ForMobileUse//")
1563 }
1564
1565 def mode(LinkedHashMap metaData) {
1566         if (metaData.containsKey('title')) {
1567                 println metaData['title']
1568         }
1569         if (metaData.containsKey('options')) {
1570                 println "Options: "+metaData['options']
1571         }
1572
1573         println("//IGNORE--ForMobileUse//")
1574 }
1575
1576 def href(LinkedHashMap metaData) {
1577         println("//IGNORE--some data//")
1578 }
1579
1580 def href(LinkedHashMap metaData, String name) {
1581         println("//IGNORE--some data//")
1582 }
1583 /////Input Methods/////
1584
1585
1586 /////MethodsForExtraction/////
1587 def definition(LinkedHashMap metaData) {
1588         println("///Just some information///")
1589 }
1590
1591 def preferences(Closure inputData) {
1592         find(inputData) //Run the closure to extract pages/sections/inputMethods
1593         settings.put("END", "END")
1594         if (App == "App1") {            
1595                 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
1596                 extractedObjectsConstructorApp1.append("settings = [")
1597                 settings.each{
1598                         key, value ->
1599                         if (value != "END")
1600                                 extractedObjectsConstructorApp1.append("$key: $key, ")
1601                         else
1602                                 extractedObjectsConstructorApp1.append("END: \"END\"]\n")
1603                 }
1604         } else {
1605                 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
1606                 extractedObjectsConstructorApp2.append("settings = [")
1607                 settings.each{
1608                         key, value ->
1609                         if (value != "END")
1610                                 extractedObjectsConstructorApp2.append("$key: $key, ")
1611                         else
1612                                 extractedObjectsConstructorApp2.append("END: \"END\"]\n")
1613                 }
1614         }
1615 }
1616
1617 def page(LinkedHashMap metaData, Closure inputData) {
1618         if (metaData.containsKey('name'))
1619                 println(metaData['name'])
1620         if (metaData.containsKey('title'))
1621                 println(metaData['title'])
1622
1623         find(inputData) //Run the closure to extract sections/inputMethods
1624 }
1625
1626 def page(LinkedHashMap metaData) {
1627         def nameOfFunction = metaData['name']
1628         "$nameOfFunction"() //Call the page     
1629 }
1630
1631 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
1632         if (metaData.containsKey('name'))
1633                 println(metaData['name'])
1634         if (metaData.containsKey('title'))
1635                 println(metaData['title'])
1636
1637         find(inputData) //Run the closure to extract sections/inputMethods
1638 }
1639
1640 def paragraph(String paragraphText) {
1641         println(paragraphText)
1642 }
1643
1644 def section(String title, Closure inputData) {
1645         println(title)
1646         find(inputData) //Run the closure to extract inputMethods
1647 }
1648
1649 def section(Closure inputData) {
1650         find(inputData) //Run the closure to extract inputMethods
1651 }
1652
1653 def section(LinkedHashMap metaData, Closure inputData) {
1654         find(inputData) //Run the closure to extract inputMethods
1655 }
1656
1657 def section(LinkedHashMap metaData, String data, Closure inputData) {
1658         find(inputData)
1659 }
1660
1661 def mappings(Closure inputData) {
1662         println("//IGNORE--some data//")
1663 }
1664 /////MethodsForExtraction/////
1665