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