Adding mode diversification across apps.
[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 ColorTemperature.ColorTemperature
74 import ColorTemperature.ColorTemperatures
75 import Button.Button
76 import Button.Buttons
77 import ThreeAxis.ThreeAxis
78 import ThreeAxis.ThreeAxises
79 import Momentary.Momentary
80 import Momentary.Momentaries
81 import Timer.SimulatedTimer
82
83 //GlobalVariables
84 @Field def location = new LocationVar({}, true)
85 //Settings variable defined to settings on purpose
86 @Field def settings = [app: "app"]
87 //Global variable for state[mode]
88 @Field def state = [home:[],away:[],night:[]]
89 //Create a global logger object for methods
90 @Field def log = new Logger()
91 //Create a global variable for optional property
92 @Field def optional = false //by default for now
93 //Global Object for class AtomicState!
94 @Field def atomicState = [history: "15:00"]
95
96
97 //Global variables for files
98 @Field File globalObjects = new File("Extractor/globalObjects.groovy")
99 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
100 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
101 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
102 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
103
104 @Field chooseMode = 0
105 //Empty the files
106 if (App == "App1") {
107         globalObjects.write("")
108         extractedObjectsApp1.write("")
109         extractedObjectsConstructorApp1.write("")
110         chooseMode = 0
111 } else if (App == "App2") {
112         extractedObjectsApp2.write("")
113         extractedObjectsConstructorApp2.write("")
114         chooseMode = 1
115 }
116
117
118
119 //Some of methods-May be needed even in install
120 /////////////////////////////////////////////////////////////////////
121 def timeToday(String time, Object timeZone) {
122         def timeOfDay = new Date()
123         def _inputTime = time.split(':')
124         def inputTime = Integer.parseInt(_inputTime[0])*3600+Integer.parseInt(_inputTime[1])*60+1564191100415
125         timeOfDay.time = inputTime
126         return timeOfDay
127 }
128
129
130
131 //Global objects
132 //Global Object for class Touch Sensor!
133 @Field touchSensorObjects = 0
134 @Field def touchSensorObject0
135 @Field def touchSensorObject1
136 @Field def touchSensorObject2
137 //Global Object for class switch!
138 @Field switchObjects = 0
139 @Field def switchObject0
140 @Field def switchObject1
141 @Field def switchObject2
142 //Global Object for class lock!
143 @Field lockObjects = 0
144 @Field def lockObject0
145 @Field def lockObject1
146 @Field def lockObject2
147 //Global Object for class door control!
148 @Field doorControlObjects = 0
149 @Field def doorControlObject0
150 @Field def doorControlObject1
151 @Field def doorControlObject2
152 //Global Object for class contact sensor!
153 @Field contactObjects = 0
154 @Field def contactObject0
155 @Field def contactObject1
156 @Field def contactObject2
157 //Global Object for class presence sensor!
158 @Field presenceSensorObjects = 0
159 @Field def presenceSensorObject0
160 @Field def presenceSensorObject1
161 @Field def presenceSensorObject2
162 //Global Object for class thermostat!
163 @Field thermostatObjects = 0
164 @Field def thermostatObject0
165 @Field def thermostatObject1
166 @Field def thermostatObject2
167 //Global Object for class music player!
168 @Field musicPlayerObjects = 0
169 @Field def musicPlayerObject0
170 @Field def musicPlayerObject1
171 @Field def musicPlayerObject2
172 //Global Object for class aeon key fob!
173 @Field aeonKeyFobObjects = 0
174 @Field def aeonKeyFobObject0
175 @Field def aeonKeyFobObject1
176 @Field def aeonKeyFobObject2
177 //Global Object for class motion sensor!
178 @Field motionSensorObjects = 0
179 @Field def motionSensorObject0
180 @Field def motionSensorObject1
181 @Field def motionSensorObject2
182 //Global Object for class image capture!
183 @Field imageCaptureObjects = 0
184 @Field def imageCaptureObject0
185 @Field def imageCaptureObject1
186 @Field def imageCaptureObject2
187 //Global Object for class smoke detector!
188 @Field smokeDetectorObjects = 0
189 @Field def smokeDetectorObject0
190 @Field def smokeDetectorObject1
191 @Field def smokeDetectorObject2
192 //Global Object for class alarm!
193 @Field alarmObjects = 0
194 @Field def alarmObject0
195 @Field def alarmObject1
196 @Field def alarmObject2
197 //Global Object for class speech synthesis!
198 @Field speechSynthesisObjects = 0
199 @Field def speechSynthesisObject0
200 @Field def speechSynthesisObject1
201 @Field def speechSynthesisObject2
202 //Global Object for class acceleration sensor!
203 @Field accelerationSensorObjects = 0
204 @Field def accelerationSensorObject0
205 @Field def accelerationSensorObject1
206 @Field def accelerationSensorObject2
207 //Global Object for class battery!
208 @Field batteryObjects = 0
209 @Field def batteryObject0
210 @Field def batteryObject1
211 @Field def batteryObject2
212 //Global Object for class beacon sensor!
213 @Field beaconSensorObjects = 0
214 @Field def beaconSensorObject0
215 @Field def beaconSensorObject1
216 @Field def beaconSensorObject2
217 //Global Object for class carbon monoxide detector!
218 @Field carbonMonoxideDetectorObjects = 0
219 @Field def carbonMonoxideDetectorObject0
220 @Field def carbonMonoxideDetectorObject1
221 @Field def carbonMonoxideDetectorObject2
222 //Global Object for class color control!
223 @Field colorControlObjects = 0
224 @Field def colorControlObject0
225 @Field def colorControlObject1
226 @Field def colorControlObject2
227 //Global Object for class energy meter!
228 @Field energyMeterObjects = 0
229 @Field def energyMeterObject0
230 @Field def energyMeterObject1
231 @Field def energyMeterObject2
232 //Global Object for class energy meter!
233 @Field illuminanceMeasurementObjects = 0
234 @Field def illuminanceMeasurementObject0
235 @Field def illuminanceMeasurementObject1
236 @Field def illuminanceMeasurementObject2
237 //Global Object for class power meter!
238 @Field powerMeterObjects = 0
239 @Field def powerMeterObject0
240 @Field def powerMeterObject1
241 @Field def powerMeterObject2
242 //Global Object for class power meter!
243 @Field humidityMeasurementObjects = 0
244 @Field def humidityMeasurementObject0
245 @Field def humidityMeasurementObject1
246 @Field def humidityMeasurementObject2
247 //Global Object for class relay switch!
248 @Field relaySwitchObjects = 0
249 @Field def relaySwitchObject0
250 @Field def relaySwitchObject1
251 @Field def relaySwitchObject2
252 //Global Object for class sleep sensor!
253 @Field sleepSensorObjects = 0
254 @Field def sleepSensorObject0
255 @Field def sleepSensorObject1
256 @Field def sleepSensorObject2
257 //Global Object for class step sensor!
258 @Field stepSensorObjects = 0
259 @Field def stepSensorObject0
260 @Field def stepSensorObject1
261 @Field def stepSensorObject2
262 //Global Object for class switch level!
263 @Field switchLevelObjects = 0
264 @Field def switchLevelObject0
265 @Field def switchLevelObject1
266 @Field def switchLevelObject2
267 //Global Object for class temperature measurement!
268 @Field temperatureMeasurementObjects = 0
269 @Field def temperatureMeasurementObject0
270 @Field def temperatureMeasurementObject1
271 @Field def temperatureMeasurementObject2
272 //Global Object for class water sensor!
273 @Field waterSensorObjects = 0
274 @Field def waterSensorObject0
275 @Field def waterSensorObject1
276 @Field def waterSensorObject2
277 //Global Object for class valve!
278 @Field valveObjects = 0
279 @Field def valveObject0
280 @Field def valveObject1
281 @Field def valveObject2
282 //Global Object for class mobile presence!
283 @Field mobilePresenceObjects = 0
284 @Field def mobilePresenceObject0
285 @Field def mobilePresenceObject1
286 @Field def mobilePresenceObject2
287 //Global Object for class color temperature!
288 @Field colorTemperatureObjects = 0
289 @Field def colorTemperatureObject0
290 @Field def colorTemperatureObject1
291 @Field def colorTemperatureObject2
292 //Global Object for class button!
293 @Field buttonObjects = 0
294 @Field def buttonObject0
295 @Field def buttonObject1
296 @Field def buttonObject2
297 //Global Object for class three axis!
298 @Field threeAxisObjects = 0
299 @Field def threeAxisObject0
300 @Field def threeAxisObject1
301 @Field def threeAxisObject2
302 //Global Object for class momentary switch device!
303 @Field momentaryObjects = 0
304 @Field def momentaryObject0
305 @Field def momentaryObject1
306 @Field def momentaryObject2
307
308
309 //Global variables
310 //For mode
311 @Field modeVariables = 0
312 @Field mode0
313 @Field mode1
314 @Field mode2
315 @Field mode3
316 @Field mode4
317 @Field mode5
318 //For number
319 @Field numberVariables = 0
320 @Field number0
321 @Field number1
322 @Field number2
323 @Field number3
324 @Field number4
325 @Field number5
326 //For decimal
327 @Field decimalVariables = 0
328 @Field decimal0
329 @Field decimal1
330 @Field decimal2
331 @Field decimal3
332 @Field decimal4
333 @Field decimal5
334 //For time
335 @Field timeVariables = 0
336 @Field time0
337 @Field time1
338 @Field time2
339 @Field time3
340 @Field time4
341 @Field time5
342 //For enum
343 @Field enumVariables = 0
344 @Field enum0
345 @Field enum1
346 @Field enum2
347 @Field enum3
348 @Field enum4
349 @Field enum5
350 //For phone
351 @Field phoneVariables = 0
352 @Field phone0
353 @Field phone1
354 @Field phone2
355 @Field phone3
356 @Field phone4
357 @Field phone5
358 //For contact
359 @Field contactVariables = 0
360 @Field contact0
361 @Field contact1
362 @Field contact2
363 @Field contact3
364 @Field contact4
365 @Field contact5
366 //For text
367 @Field textVariables = 0
368 @Field textVariable0
369 @Field textVariable1
370 @Field textVariable2
371 @Field textVariable3
372 @Field textVariable4
373 @Field textVariable5
374 //For boolean
375 @Field boolVariables = 0
376 @Field boolVariable0
377 @Field boolVariable1
378 @Field boolVariable2
379 @Field boolVariable3
380 @Field boolVariable4
381 @Field boolVariable5
382
383 /////Input Methods/////
384 //input "",""
385 def input(String name, String type) {
386         LinkedHashMap metaData = []
387         metaData.put('name',name)
388         metaData.put('type',type)
389         input(metaData)
390 }
391
392 //input "","",linkedHashMap
393 def input(LinkedHashMap metaData, String name, String type) {
394         metaData.put('name',name)
395         metaData.put('type',type)
396         input(metaData)
397 }
398
399 //input "", "", linkedHashMap, Closure
400 def input(LinkedHashMap metaData, String name, String type, Closure Input) {
401         metaData.put('name',name)
402         metaData.put('type',type)
403         input(metaData)
404         find(Input)
405 }
406
407 //input linkedHashMap
408 def input(LinkedHashMap metaData) {
409         if (metaData.containsKey('title')) {
410                 println metaData['title']
411         }
412         if (metaData.containsKey('options')) {
413                 println "Options: "+metaData['options']
414         }
415         def contains = 0
416         switch(metaData['type']) {
417                 case "capability.lock":
418                         globalObjects.eachLine { line ->
419                                 if(line.contains("lockObject")){
420                                         contains = 1
421                             }
422                         }
423
424                         if (contains == 0)
425                                 globalObjects.append("@Field def lockObject = new Locks(sendEvent, 1, init)\n")
426
427                         if (lockObjects == 0) {
428                                 lockObject0 = metaData['name']
429                                 this[lockObject0] = new Locks({}, 1, true)
430                         } else if (lockObjects == 1) {
431                                 lockObject1 = metaData['name']
432                                 this[lockObject1] = new Locks({}, 1, true)
433                         } else if (lockObjects == 2) {
434                                 lockObject2 = metaData['name']
435                                 this[lockObject2] = new Locks({}, 1, true)
436                         }
437
438                         lockObjects=lockObjects+1
439
440                         settings.put(metaData['name'], new Locks({}, 1, true)) 
441
442                         if (App == "App1") {
443                                 extractedObjectsApp1.append("//Object for class lock!\n")
444                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
445                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")          
446                         } else {
447                                 extractedObjectsApp2.append("//Object for class lock!\n")
448                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
449                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
450                         }
451                         break
452                 case "capability.alarm":
453                         globalObjects.eachLine { line ->
454                                 if(line.contains("alarmObject")){
455                                         contains = 1
456                                 }
457                         }
458
459                         if (contains == 0)
460                                 globalObjects.append("@Field def alarmObject = new Alarms(sendEvent, 1, init)\n")
461
462                         if (alarmObjects == 0) {
463                                 alarmObject0 = metaData['name']
464                                 this[alarmObject0] = new Alarms({}, 1, true)
465                         } else if (alarmObjects == 1) {
466                                 alarmObject1 = metaData['name']
467                                 this[alarmObject1] = new Alarms({}, 1, true)
468                         } else if (alarmObjects == 2) {
469                                 alarmObject2 = metaData['name']
470                                 this[alarmObject2] = new Alarms({}, 1, true)
471                         }
472
473                         alarmObjects=alarmObjects+1
474
475                         settings.put(metaData['name'], new Alarms({}, 1, true)) 
476
477                         if (App == "App1") {
478                                 extractedObjectsApp1.append("//Object for class alarm!\n")
479                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
480                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.alarmObject\n")         
481                         } else {
482                                 extractedObjectsApp2.append("//Object for class alarm!\n")
483                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
484                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.alarmObject\n")
485                         }
486                         break
487                 case "capability.button":
488                         globalObjects.eachLine { line ->
489                                 if(line.contains("buttonObject")){
490                                         contains = 1
491                                 }
492                         }
493
494                         if (contains == 0)
495                                 globalObjects.append("@Field def buttonObject = new Buttons(sendEvent, 1, init)\n")
496
497                         if (buttonObjects == 0) {
498                                 buttonObject0 = metaData['name']
499                                 this[buttonObject0] = new Buttons({}, 1, true)
500                         } else if (buttonObjects == 1) {
501                                 buttonObject1 = metaData['name']
502                                 this[buttonObject1] = new Buttons({}, 1, true)
503                         } else if (buttonObjects == 2) {
504                                 buttonObject2 = metaData['name']
505                                 this[buttonObject2] = new Buttons({}, 1, true)
506                         }
507
508                         buttonObjects=buttonObjects+1
509
510                         settings.put(metaData['name'], new Buttons({}, 1, true))
511
512                         if (App == "App1") {
513                                 extractedObjectsApp1.append("//Object for class Button!\n")
514                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
515                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.buttonObject\n")                
516                         } else {
517                                 extractedObjectsApp2.append("//Object for class Button!\n")
518                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
519                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.buttonObject\n")
520                         }
521                         break
522                 case "capability.battery":
523                         globalObjects.eachLine { line ->
524                                 if(line.contains("batteryObject")){
525                                         contains = 1
526                                 }
527                         }
528
529                         if (contains == 0)
530                                 globalObjects.append("@Field def batteryObject = new Batteries(sendEvent, 1, init)\n")
531
532                         if (batteryObjects == 0) {
533                                 batteryObject0 = metaData['name']
534                                 this[batteryObject0] = new Batteries({}, 1, true)
535                         } else if (batteryObjects == 1) {
536                                 batteryObject1 = metaData['name']
537                                 this[batteryObject1] = new Batteries({}, 1, true)
538                         } else if (batteryObjects == 2) {
539                                 batteryObject2 = metaData['name']
540                                 this[batteryObject2] = new Batteries({}, 1, true)
541                         }
542
543                         batteryObjects=batteryObjects+1
544
545                         settings.put(metaData['name'], new Batteries({}, 1, true))
546
547                         if (App == "App1") {
548                                 extractedObjectsApp1.append("//Object for class Battery!\n")
549                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
550                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.batteryObject\n")               
551                         } else {
552                                 extractedObjectsApp2.append("//Object for class Battery!\n")
553                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
554                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.batteryObject\n")
555                         }
556                         break
557                 case "capability.beacon":
558                         globalObjects.eachLine { line ->
559                                 if(line.contains("beaconSensorObject")){
560                                         contains = 1
561                                 }
562                         }
563
564                         if (contains == 0)
565                                 globalObjects.append("@Field def beaconSensorObject = new BeaconSensors(sendEvent, 1, init)\n")
566
567                         if (beaconSensorObjects == 0) {
568                                 beaconSensorObject0 = metaData['name']
569                                 this[beaconSensorObject0] = new BeaconSensors({}, 1, true)
570                         } else if (beaconSensorObjects == 1) {
571                                 beaconSensorObject1 = metaData['name']
572                                 this[beaconSensorObject1] = new BeaconSensors({}, 1, true)
573                         } else if (beaconSensorObjects == 2) {
574                                 beaconSensorObject2 = metaData['name']
575                                 this[beaconSensorObject2] = new BeaconSensors({}, 1, true)
576                         }
577
578                         beaconSensorObjects=beaconSensorObjects+1
579
580                         settings.put(metaData['name'], new BeaconSensors({}, 1, true))
581
582                         if (App == "App1") {
583                                 extractedObjectsApp1.append("//Object for class beacon sensor!\n")
584                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
585                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.beaconSensorObject\n")          
586                         } else {
587                                 extractedObjectsApp2.append("//Object for class beacon sensor!\n")
588                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
589                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.beaconSensorObject\n")
590                         }
591                         break
592                 case "capability.carbonMonoxideDetector":
593                         globalObjects.eachLine { line ->
594                                 if(line.contains("carbonMonoxideDetectorObject")){
595                                         contains = 1
596                                 }
597                         }
598
599                         if (contains == 0)
600                                 globalObjects.append("@Field def carbonMonoxideDetectorObject = new CarbonMonoxideDetectors(sendEvent, 1, init)\n")
601
602                         if (carbonMonoxideDetectorObjects == 0) {
603                                 carbonMonoxideDetectorObject0 = metaData['name']
604                                 this[carbonMonoxideDetectorObject0] = new CarbonMonoxideDetectors({}, 1, true)
605                         } else if (carbonMonoxideDetectorObjects == 1) {
606                                 carbonMonoxideDetectorObject1 = metaData['name']
607                                 this[carbonMonoxideDetectorObject1] = new CarbonMonoxideDetectors({}, 1, true)
608                         } else if (carbonMonoxideDetectorObjects == 2) {
609                                 carbonMonoxideDetectorObject2 = metaData['name']
610                                 this[carbonMonoxideDetectorObject2] = new CarbonMonoxideDetectors({}, 1, true)
611                         }
612
613                         carbonMonoxideDetectorObjects=carbonMonoxideDetectorObjects+1
614                         
615                         settings.put(metaData['name'], new CarbonMonoxideDetectors({}, 1, true))
616
617                         if (App == "App1") {
618                                 extractedObjectsApp1.append("//Object for class carbon monoxide detector!\n")
619                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
620                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")                
621                         } else {
622                                 extractedObjectsApp2.append("//Object for class carbon monoxide detector!\n")
623                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
624                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.carbonMonoxideDetectorObject\n")
625                         }
626                         break
627                 case "capability.colorTemperature":
628                         globalObjects.eachLine { line ->
629                                 if(line.contains("colorTemperatureObject")){
630                                         contains = 1
631                                 }
632                         }
633
634                         if (contains == 0)
635                                 globalObjects.append("@Field def colorTemperatureObject = new ColorTemperatures(sendEvent, 1, init)\n")
636
637                         if (colorTemperatureObjects == 0) {
638                                 colorTemperatureObject0 = metaData['name']
639                                 this[colorTemperatureObject0] = new ColorTemperatures({}, 1, true)
640                         } else if (colorTemperatureObjects == 1) {
641                                 colorTemperatureObject1 = metaData['name']
642                                 this[colorTemperatureObject1] = new ColorTemperatures({}, 1, true)
643                         } else if (colorTemperatureObjects == 2) {
644                                 colorTemperatureObject2 = metaData['name']
645                                 this[colorTemperatureObject2] = new ColorTemperatures({}, 1, true)
646                         }
647
648                         colorTemperatureObjects=colorTemperatureObjects+1
649
650                         settings.put(metaData['name'], new ColorTemperatures({}, 1, true))
651
652                         if (App == "App1") {
653                                 extractedObjectsApp1.append("//Object for class color temperature!\n")
654                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
655                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.colorTemperatureObject\n")              
656                         } else {
657                                 extractedObjectsApp2.append("//Object for class color control!\n")
658                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
659                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.colorTemperatureObject\n")
660                         }
661                         break
662                 case "capability.colorControl":
663                         globalObjects.eachLine { line ->
664                                 if(line.contains("colorControlObject")){
665                                         contains = 1
666                                 }
667                         }
668
669                         if (contains == 0)
670                                 globalObjects.append("@Field def colorControlObject = new ColorControls(sendEvent, 1, init)\n")
671
672                         if (colorControlObjects == 0) {
673                                 colorControlObject0 = metaData['name']
674                                 this[colorControlObject0] = new ColorControls({}, 1, true)
675                         } else if (colorControlObjects == 1) {
676                                 colorControlObject1 = metaData['name']
677                                 this[colorControlObject1] = new ColorControls({}, 1, true)
678                         } else if (colorControlObjects == 2) {
679                                 colorControlObject2 = metaData['name']
680                                 this[colorControlObject2] = new ColorControls({}, 1, true)
681                         }
682
683                         colorControlObjects=colorControlObjects+1
684
685                         settings.put(metaData['name'], new ColorControls({}, 1, true))
686
687                         if (App == "App1") {
688                                 extractedObjectsApp1.append("//Object for class color control!\n")
689                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
690                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.colorControlObject\n")          
691                         } else {
692                                 extractedObjectsApp2.append("//Object for class color control!\n")
693                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
694                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.colorControlObject\n")
695                         }
696                         break
697                 case "capability.contactSensor":
698                         globalObjects.eachLine { line ->
699                                 if(line.contains("contactObject")){
700                                         contains = 1
701                                 }
702                         }
703
704                         if (contains == 0)
705                                 globalObjects.append("@Field def contactObject = new ContactSensors(sendEvent, 1, init)\n")
706
707                         if (contactObjects == 0) {
708                                 contactObject0 = metaData['name']
709                                 this[contactObject0] = new ContactSensors({}, 1, true)
710                         } else if (contactObjects == 1) {
711                                 contactObject1 = metaData['name']
712                                 this[contactObject1] = new ContactSensors({}, 1, true)
713                         } else if (contactObjects == 2) {
714                                 contactObject2 = metaData['name']
715                                 this[contactObject2] = new ContactSensors({}, 1, true)
716                         }
717
718                         contactObjects=contactObjects+1
719
720                         settings.put(metaData['name'], new ContactSensors({}, 1, true))
721
722                         if (App == "App1") {
723                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
724                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
725                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")               
726                         } else {
727                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
728                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
729                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
730                         }
731                         break
732                 case "capability.threeAxis":
733                         globalObjects.eachLine { line ->
734                                 if(line.contains("threeAxisObject")){
735                                         contains = 1
736                                 }
737                         }
738
739                         if (contains == 0)
740                                 globalObjects.append("@Field def threeAxisObject = new ThreeAxises(sendEvent, 1, init)\n")
741
742                         if (threeAxisObjects == 0) {
743                                 threeAxisObject0 = metaData['name']
744                                 this[threeAxisObject0] = new ThreeAxises({}, 1, true)
745                         } else if (threeAxisObjects == 1) {
746                                 threeAxisObject1 = metaData['name']
747                                 this[threeAxisObject1] = new ThreeAxises({}, 1, true)
748                         } else if (threeAxisObjects == 2) {
749                                 threeAxisObject2 = metaData['name']
750                                 this[threeAxisObject2] = new ThreeAxises({}, 1, true)
751                         }
752
753                         threeAxisObjects=threeAxisObjects+1
754
755                         settings.put(metaData['name'], new ThreeAxises({}, 1, true))
756
757                         if (App == "App1") {
758                                 extractedObjectsApp1.append("//Object for class three axis!\n")
759                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
760                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.threeAxisObject\n")             
761                         } else {
762                                 extractedObjectsApp2.append("//Object for class three axis!\n")
763                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
764                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.threeAxisObject\n")
765                         }
766                         break
767                 case "capability.doorControl":
768                         globalObjects.eachLine { line ->
769                                 if(line.contains("doorControlObject")){
770                                         contains = 1
771                                 }
772                         }
773
774                         if (contains == 0)
775                                 globalObjects.append("@Field def doorControlObject = new DoorControls(sendEvent, 1, init)\n")
776
777                         if (doorControlObjects == 0) {
778                                 doorControlObject0 = metaData['name']
779                                 this[doorControlObject0] = new DoorControls({}, 1, true)
780                         } else if (doorControlObjects == 1) {
781                                 doorControlObject1 = metaData['name']
782                                 this[doorControlObject1] = new DoorControls({}, 1, true)
783                         } else if (doorControlObjects == 2) {
784                                 doorControlObject2 = metaData['name']
785                                 this[doorControlObject2] = new DoorControls({}, 1, true)
786                         }
787
788                         doorControlObjects=doorControlObjects+1
789
790                         settings.put(metaData['name'], new DoorControls({}, 1, true))
791
792                         if (App == "App1") {
793                                 extractedObjectsApp1.append("//Object for class door control!\n")
794                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
795                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")           
796                         } else {
797                                 extractedObjectsApp2.append("//Object for class door control!\n")
798                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
799                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
800                         }
801                         break
802                 case "capability.energyMeter":
803                         globalObjects.eachLine { line ->
804                                 if(line.contains("energyMeterObject")){
805                                         contains = 1
806                                 }
807                         }
808
809                         if (contains == 0)
810                                 globalObjects.append("@Field def energyMeterObject = new EnergyMeters(sendEvent, 1, init)\n")
811
812                         if (energyMeterObjects == 0) {
813                                 energyMeterObject0 = metaData['name']
814                                 this[energyMeterObject0] = new EnergyMeters({}, 1, true)
815                         } else if (energyMeterObjects == 1) {
816                                 energyMeterObject1 = metaData['name']
817                                 this[energyMeterObject1] = new EnergyMeters({}, 1, true)
818                         } else if (energyMeterObjects == 2) {
819                                 energyMeterObject2 = metaData['name']
820                                 this[energyMeterObject2] = new EnergyMeters({}, 1, true)
821                         }
822
823                         energyMeterObjects=energyMeterObjects+1
824
825                         settings.put(metaData['name'], new EnergyMeters({}, 1, true))
826
827                         if (App == "App1") {
828                                 extractedObjectsApp1.append("//Object for class energy meter!\n")
829                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
830                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.energyMeterObject\n")           
831                         } else {
832                                 extractedObjectsApp2.append("//Object for class energy meter!\n")
833                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
834                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.energyMeterObject\n")
835                         }
836                         break
837                 case "capability.illuminanceMeasurement":
838                         globalObjects.eachLine { line ->
839                                 if(line.contains("illuminanceMeasurementObject")){
840                                         contains = 1
841                                 }
842                         }
843
844                         if (contains == 0)
845                                 globalObjects.append("@Field def illuminanceMeasurementObject = new IlluminanceMeasurements(sendEvent, 1, init)\n")
846
847                         if (illuminanceMeasurementObjects == 0) {
848                                 illuminanceMeasurementObject0 = metaData['name']
849                                 this[illuminanceMeasurementObject0] = new IlluminanceMeasurements({}, 1, true)
850                         } else if (illuminanceMeasurementObjects == 1) {
851                                 illuminanceMeasurementObject1 = metaData['name']
852                                 this[illuminanceMeasurementObject1] = new IlluminanceMeasurements({}, 1, true)
853                         } else if (illuminanceMeasurementObjects == 2) {
854                                 illuminanceMeasurementObject2 = metaData['name']
855                                 this[illuminanceMeasurementObject2] = new IlluminanceMeasurements({}, 1, true)
856                         }
857
858                         illuminanceMeasurementObjects=illuminanceMeasurementObjects+1
859
860                         settings.put(metaData['name'], new IlluminanceMeasurements({}, 1, true))
861
862                         if (App == "App1") {
863                                 extractedObjectsApp1.append("//Object for class illuminance measurement!\n")
864                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
865                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")                
866                         } else {
867                                 extractedObjectsApp2.append("//Object for class illuminance measurement!\n")
868                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
869                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.illuminanceMeasurementObject\n")
870                         }
871                         break
872                 case "capability.accelerationSensor":
873                         globalObjects.eachLine { line ->
874                                 if(line.contains("accelerationSensorObject")){
875                                         contains = 1
876                                 }
877                         }
878
879                         if (contains == 0)
880                                 globalObjects.append("@Field def accelerationSensorObject = new AccelerationSensors(sendEvent, 1, init)\n")
881
882                         if (accelerationSensorObjects == 0) {
883                                 accelerationSensorObject0 = metaData['name']
884                                 this[accelerationSensorObject0] = new AccelerationSensors({}, 1, true)
885                         } else if (accelerationSensorObjects == 1) {
886                                 accelerationSensorObject1 = metaData['name']
887                                 this[accelerationSensorObject1] = new AccelerationSensors({}, 1, true)
888                         } else if (accelerationSensorObjects == 2) {
889                                 accelerationSensorObject2 = metaData['name']
890                                 this[accelerationSensorObject2] = new AccelerationSensors({}, 1, true)
891                         }
892
893                         accelerationSensorObjects=accelerationSensorObjects+1
894
895                         settings.put(metaData['name'], new AccelerationSensors({}, 1, true))
896
897                         if (App == "App1") {
898                                 extractedObjectsApp1.append("//Object for class Acceleration Sensor!\n")
899                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
900                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.accelerationSensorObject\n")            
901                         } else {
902                                 extractedObjectsApp2.append("//Object for class Acceleration Sensor!\n")
903                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
904                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.accelerationSensorObject\n")
905                         }
906                         break
907                 case "capability.momentary":
908                         globalObjects.eachLine { line ->
909                                 if(line.contains("momentoryObject")){
910                                         contains = 1
911                                 }
912                         }
913
914                         if (contains == 0)
915                                 globalObjects.append("@Field def momentaryObject = new Momentaries(sendEvent, 1)\n")
916
917                         if (momentaryObjects == 0) {
918                                 momentaryObject0 = metaData['name']
919                                 this[momentaryObject0] = new Momentaries({}, 1)
920                         } else if (momentaryObjects == 1) {
921                                 momentaryObject1 = metaData['name']
922                                 this[momentaryObject1] = new Momentaries({}, 1)
923                         } else if (momentaryObjects == 2) {
924                                 momentaryObject2 = metaData['name']
925                                 this[momentaryObject2] = new Momentaries({}, 1)
926                         }
927
928                         momentaryObjects=momentaryObjects+1
929
930                         settings.put(metaData['name'], new Momentaries({}, 1))
931
932                         if (App == "App1") {
933                                 extractedObjectsApp1.append("//Object for class momentory switch class!\n")
934                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
935                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.momentaryObject\n")             
936                         } else {
937                                 extractedObjectsApp2.append("//Object for class momentory Sensor!\n")
938                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
939                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.momentaryObject\n")
940                         }                       
941                         break
942                 case "capability.motionSensor":
943                         globalObjects.eachLine { line ->
944                                 if(line.contains("motionSensorObject")){
945                                         contains = 1
946                                 }
947                         }
948
949                         if (contains == 0)
950                                 globalObjects.append("@Field def motionSensorObject = new MotionSensors(sendEvent, 1, init)\n")
951
952                         if (motionSensorObjects == 0) {
953                                 motionSensorObject0 = metaData['name']
954                                 this[motionSensorObject0] = new MotionSensors({}, 1, true)
955                         } else if (motionSensorObjects == 1) {
956                                 motionSensorObject1 = metaData['name']
957                                 this[motionSensorObject1] = new MotionSensors({}, 1, true)
958                         } else if (motionSensorObjects == 2) {
959                                 motionSensorObject2 = metaData['name']
960                                 this[motionSensorObject2] = new MotionSensors({}, 1, true)
961                         }
962
963                         motionSensorObjects=motionSensorObjects+1
964
965                         settings.put(metaData['name'], new MotionSensors({}, 1, true))
966
967                         if (App == "App1") {
968                                 extractedObjectsApp1.append("//Object for class Motion Sensor!\n")
969                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
970                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.motionSensorObject\n")          
971                         } else {
972                                 extractedObjectsApp2.append("//Object for class Motion Sensor!\n")
973                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
974                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.motionSensorObject\n")
975                         }
976                         break
977                 case "capability.musicPlayer":
978                         globalObjects.eachLine { line ->
979                                 if(line.contains("musicPlayerObject")){
980                                         contains = 1
981                                 }
982                         }
983
984                         if (contains == 0)
985                                 globalObjects.append("@Field def musicPlayerObject = new MusicPlayers(sendEvent, 1, init)\n")
986
987                         if (musicPlayerObjects == 0) {
988                                 musicPlayerObject0 = metaData['name']
989                                 this[musicPlayerObject0] = new MusicPlayers({}, 1, true)
990                         } else if (musicPlayerObjects == 1) {
991                                 musicPlayerObject1 = metaData['name']
992                                 this[musicPlayerObject1] = new MusicPlayers({}, 1, true)
993                         } else if (musicPlayerObjects == 2) {
994                                 musicPlayerObject2 = metaData['name']
995                                 this[musicPlayerObject2] = new MusicPlayers({}, 1, true)
996                         }
997
998                         musicPlayerObjects=musicPlayerObjects+1
999
1000                         settings.put(metaData['name'], new MusicPlayers({}, 1, true)) 
1001
1002                         if (App == "App1") {
1003                                 extractedObjectsApp1.append("//Object for class music player!\n")
1004                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1005                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")           
1006                         } else {
1007                                 extractedObjectsApp2.append("//Object for class music player!\n")
1008                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1009                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
1010                         }
1011                         break
1012                 case "capability.powerMeter":
1013                         globalObjects.eachLine { line ->
1014                                 if(line.contains("powerMeterObject")){
1015                                         contains = 1
1016                                 }
1017                         }
1018
1019                         if (contains == 0)
1020                                 globalObjects.append("@Field def powerMeterObject = new PowerMeters(sendEvent, 1, init)\n")
1021
1022                         if (powerMeterObjects == 0) {
1023                                 powerMeterObject0 = metaData['name']
1024                                 this[powerMeterObject0] = new PowerMeters({}, 1, true)
1025                         } else if (powerMeterObjects == 1) {
1026                                 powerMeterObject1 = metaData['name']
1027                                 this[powerMeterObject1] = new PowerMeters({}, 1, true)
1028                         } else if (powerMeterObjects == 2) {
1029                                 powerMeterObject2 = metaData['name']
1030                                 this[powerMeterObject2] = new PowerMeters({}, 1, true)
1031                         }
1032
1033                         powerMeterObjects=powerMeterObjects+1
1034
1035                         settings.put(metaData['name'], new PowerMeters({}, 1, true))
1036
1037                         if (App == "App1") {
1038                                 extractedObjectsApp1.append("//Object for class power meter!\n")
1039                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1040                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.powerMeterObject\n")            
1041                         } else {
1042                                 extractedObjectsApp2.append("//Object for class power meter!\n")
1043                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1044                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.powerMeterObject\n")
1045                         }
1046                         break
1047                 case "capability.presenceSensor":
1048                         globalObjects.eachLine { line ->
1049                                 if(line.contains("presenceSensorObject")){
1050                                         contains = 1
1051                                 }
1052                         }
1053
1054                         if (contains == 0)
1055                                 globalObjects.append("@Field def presenceSensorObject = new PresenceSensors(sendEvent, 1, init)\n")
1056
1057                         if (presenceSensorObjects == 0) {
1058                                 presenceSensorObject0 = metaData['name']
1059                                 this[presenceSensorObject0] = new PresenceSensors({}, 1, true)
1060                         } else if (presenceSensorObjects == 1) {
1061                                 presenceSensorObject1 = metaData['name']
1062                                 this[presenceSensorObject1] = new PresenceSensors({}, 1, true)
1063                         } else if (presenceSensorObjects == 2) {
1064                                 presenceSensorObject2 = metaData['name']
1065                                 this[presenceSensorObject2] = new PresenceSensors({}, 1, true)
1066                         }
1067
1068                         presenceSensorObjects=presenceSensorObjects+1
1069
1070                         settings.put(metaData['name'], new PresenceSensors({}, 1, true))
1071
1072                         if (App == "App1") {
1073                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
1074                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1075                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")                
1076                         } else {
1077                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
1078                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1079                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
1080                         }
1081                         break
1082                 case "capability.relativeHumidityMeasurement":
1083                         globalObjects.eachLine { line ->
1084                                 if(line.contains("humidityMeasurementObject")){
1085                                         contains = 1
1086                                 }
1087                         }
1088
1089                         if (contains == 0)
1090                                 globalObjects.append("@Field def humidityMeasurementObject = new RelativeHumidityMeasurements(sendEvent, 1, init)\n")
1091
1092                         if (humidityMeasurementObjects == 0) {
1093                                 humidityMeasurementObject0 = metaData['name']
1094                                 this[humidityMeasurementObject0] = new RelativeHumidityMeasurements({}, 1, true)
1095                         } else if (humidityMeasurementObjects == 1) {
1096                                 humidityMeasurementObject1 = metaData['name']
1097                                 this[humidityMeasurementObject1] = new RelativeHumidityMeasurements({}, 1, true)
1098                         } else if (humidityMeasurementObjects == 2) {
1099                                 humidityMeasurementObject2 = metaData['name']
1100                                 this[humidityMeasurementObject2] = new RelativeHumidityMeasurements({}, 1, true)
1101                         }
1102
1103                         humidityMeasurementObjects=humidityMeasurementObjects+1
1104
1105                         settings.put(metaData['name'], new RelativeHumidityMeasurements({}, 1, true))
1106
1107                         if (App == "App1") {
1108                                 extractedObjectsApp1.append("//Object for class humidity measurement!\n")
1109                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1110                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.humidityMeasurementObject\n")           
1111                         } else {
1112                                 extractedObjectsApp2.append("//Object for class humidity measurement!\n")
1113                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1114                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.humidityMeasurementObject\n")
1115                         }
1116                         break
1117                 case "capability.relaySwitch":
1118                         globalObjects.eachLine { line ->
1119                                 if(line.contains("relaySwitchObject")){
1120                                         contains = 1
1121                                 }
1122                         }
1123
1124                         if (contains == 0)
1125                                 globalObjects.append("@Field def relaySwitchObject = new RelaySwitches(sendEvent, 1, init)\n")
1126
1127                         if (relaySwitchObjects == 0) {
1128                                 relaySwitchObject0 = metaData['name']
1129                                 this[relaySwitchObject0] = new RelaySwitches({}, 1, true)
1130                         } else if (relaySwitchObjects == 1) {
1131                                 relaySwitchObject1 = metaData['name']
1132                                 this[relaySwitchObject1] = new RelaySwitches({}, 1, true)
1133                         } else if (relaySwitchObjects == 2) {
1134                                 relaySwitchObject2 = metaData['name']
1135                                 this[relaySwitchObject2] = new RelaySwitches({}, 1, true)
1136                         }
1137
1138                         relaySwitchObjects=relaySwitchObjects+1
1139                         
1140                         settings.put(metaData['name'], new RelaySwitches({}, 1, true))
1141
1142                         if (App == "App1") {
1143                                 extractedObjectsApp1.append("//Object for class relay switch!\n")
1144                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1145                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.relaySwitchObject\n")           
1146                         } else {
1147                                 extractedObjectsApp2.append("//Object for class relay switch!\n")
1148                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1149                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.relaySwitchObject\n")
1150                         }
1151                         break
1152                 case "capability.sleepSensor":
1153                         globalObjects.eachLine { line ->
1154                                 if(line.contains("sleepSensorObject")){
1155                                         contains = 1
1156                                 }
1157                         }
1158
1159                         if (contains == 0)
1160                                 globalObjects.append("@Field def sleepSensorObject = new SleepSensors(sendEvent, 1, init)\n")
1161
1162                         if (sleepSensorObjects == 0) {
1163                                 sleepSensorObject0 = metaData['name']
1164                                 this[sleepSensorObject0] = new SleepSensors({}, 1, true)
1165                         } else if (sleepSensorObjects == 1) {
1166                                 sleepSensorObject1 = metaData['name']
1167                                 this[sleepSensorObject1] = new SleepSensors({}, 1, true)
1168                         } else if (sleepSensorObjects == 2) {
1169                                 sleepSensorObject2 = metaData['name']
1170                                 this[sleepSensorObject2] = new SleepSensors({}, 1, true)
1171                         }
1172
1173                         sleepSensorObjects=sleepSensorObjects+1
1174                         
1175                         settings.put(metaData['name'], new SleepSensors({}, 1, true))
1176
1177                         if (App == "App1") {
1178                                 extractedObjectsApp1.append("//Object for class sleep sensor!\n")
1179                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1180                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.sleepSensorObject\n")           
1181                         } else {
1182                                 extractedObjectsApp2.append("//Object for class sleep sensor!\n")
1183                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1184                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.sleepSensorObject\n")
1185                         }
1186                         break
1187                 case "capability.smokeDetector":
1188                         globalObjects.eachLine { line ->
1189                                 if(line.contains("smokeDetectorObject")){
1190                                         contains = 1
1191                                 }
1192                         }
1193
1194                         if (contains == 0)
1195                                 globalObjects.append("@Field def smokeDetectorObject = new SmokeDetectors(sendEvent, 1, init)\n")
1196
1197                         if (smokeDetectorObjects == 0) {
1198                                 smokeDetectorObject0 = metaData['name']
1199                                 this[smokeDetectorObject0] = new SmokeDetectors({}, 1, true)
1200                         } else if (smokeDetectorObjects == 1) {
1201                                 smokeDetectorObject1 = metaData['name']
1202                                 this[smokeDetectorObject1] = new SmokeDetectors({}, 1, true)
1203                         } else if (smokeDetectorObjects == 2) {
1204                                 smokeDetectorObject2 = metaData['name']
1205                                 this[smokeDetectorObject2] = new SmokeDetectors({}, 1, true)
1206                         }
1207
1208                         smokeDetectorObjects=smokeDetectorObjects+1
1209                         
1210                         settings.put(metaData['name'], new SmokeDetectors({}, 1, true))
1211
1212                         if (App == "App1") {
1213                                 extractedObjectsApp1.append("//Object for class smoke detector!\n")
1214                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1215                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.smokeDetectorObject\n")         
1216                         } else {
1217                                 extractedObjectsApp2.append("//Object for class smoke detector!\n")
1218                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1219                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.smokeDetectorObject\n")
1220                         }
1221                         break
1222                 case "capability.stepSensor":
1223                         globalObjects.eachLine { line ->
1224                                 if(line.contains("stepSensorObject")){
1225                                         contains = 1
1226                                 }
1227                         }
1228
1229                         if (contains == 0)
1230                                 globalObjects.append("@Field def stepSensorObject = new StepSensors(sendEvent, 1, init)\n")
1231
1232                         if (stepSensorObjects == 0) {
1233                                 stepSensorObject0 = metaData['name']
1234                                 this[stepSensorObject0] = new StepSensors({}, 1, true)
1235                         } else if (stepSensorObjects == 1) {
1236                                 stepSensorObject1 = metaData['name']
1237                                 this[stepSensorObject1] = new StepSensors({}, 1, true)
1238                         } else if (stepSensorObjects == 2) {
1239                                 stepSensorObject2 = metaData['name']
1240                                 this[stepSensorObject2] = new StepSensors({}, 1, true)
1241                         }
1242
1243                         stepSensorObjects=stepSensorObjects+1
1244                         
1245                         settings.put(metaData['name'], new StepSensors({}, 1, true))
1246
1247                         if (App == "App1") {
1248                                 extractedObjectsApp1.append("//Object for class step sensor!\n")
1249                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1250                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.stepSensorObject\n")            
1251                         } else {
1252                                 extractedObjectsApp2.append("//Object for class step sensor!\n")
1253                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1254                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.stepSensorObject\n")
1255                         }
1256                         break
1257                 case "capability.switch":               
1258                         globalObjects.eachLine { line ->
1259                                 if(line.contains("switchObject")){
1260                                         contains = 1
1261                                 }
1262                         }
1263
1264                         if (contains == 0)
1265                                 globalObjects.append("@Field def switchObject = new Switches(sendEvent, 1, init)\n")
1266
1267                         if (switchObjects == 0) {
1268                                 switchObject0 = metaData['name']
1269                                 this[switchObject0] = new Switches({}, 1, true)
1270                         } else if (switchObjects == 1) {
1271                                 switchObject1 = metaData['name']
1272                                 this[switchObject1] = new Switches({}, 1, true)
1273                         } else if (switchObjects == 2) {
1274                                 switchObject2 = metaData['name']
1275                                 this[switchObject2] = new Switches({}, 1, true)
1276                         }
1277
1278                         switchObjects=switchObjects+1
1279                         
1280                         settings.put(metaData['name'], new Switches({}, 1, true))
1281
1282                         if (App == "App1") {
1283                                 extractedObjectsApp1.append("//Object for class switch!\n")
1284                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1285                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")                
1286                         } else {
1287                                 extractedObjectsApp2.append("//Object for class switch!\n")
1288                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1289                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
1290                         }
1291                         break
1292                 case "capability.switchLevel":
1293                         globalObjects.eachLine { line ->
1294                                 if(line.contains("switchLevelObject")){
1295                                         contains = 1
1296                                 }
1297                         }
1298
1299                         if (contains == 0)
1300                                 globalObjects.append("@Field def switchLevelObject = new SwitchLevels(sendEvent, 1, init)\n")
1301
1302                         if (switchLevelObjects == 0) {
1303                                 switchLevelObject0 = metaData['name']
1304                                 this[switchLevelObject0] = new SwitchLevels({}, 1, true)
1305                         } else if (switchLevelObjects == 1) {
1306                                 switchLevelObject1 = metaData['name']
1307                                 this[switchLevelObject1] = new SwitchLevels({}, 1, true)
1308                         } else if (switchLevelObjects == 2) {
1309                                 switchLevelObject2 = metaData['name']
1310                                 this[switchLevelObject2] = new SwitchLevels({}, 1, true)
1311                         }
1312
1313                         switchLevelObjects=switchLevelObjects+1
1314
1315                         settings.put(metaData['name'], new SwitchLevels({}, 1, true))
1316
1317                         if (App == "App1") {
1318                                 extractedObjectsApp1.append("//Object for class switch level!\n")
1319                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1320                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchLevelObject\n")           
1321                         } else {
1322                                 extractedObjectsApp2.append("//Object for class switch level!\n")
1323                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1324                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchLevelObject\n")
1325                         }
1326                         break
1327                 case "capability.temperatureMeasurement":
1328                         globalObjects.eachLine { line ->
1329                                 if(line.contains("temperatureMeasurementObject")){
1330                                         contains = 1
1331                                 }
1332                         }
1333
1334                         if (contains == 0)
1335                                 globalObjects.append("@Field def temperatureMeasurementObject = new TemperatureMeasurements(sendEvent, 1, init)\n")
1336
1337                         if (temperatureMeasurementObjects == 0) {
1338                                 temperatureMeasurementObject0 = metaData['name']
1339                                 this[temperatureMeasurementObject0] = new TemperatureMeasurements({}, 1, true)
1340                         } else if (temperatureMeasurementObjects == 1) {
1341                                 temperatureMeasurementObject1 = metaData['name']
1342                                 this[temperatureMeasurementObject1] = new TemperatureMeasurements({}, 1, true)
1343                         } else if (temperatureMeasurementObjects == 2) {
1344                                 temperatureMeasurementObject2 = metaData['name']
1345                                 this[temperatureMeasurementObject2] = new TemperatureMeasurements({}, 1, true)
1346                         }
1347
1348                         temperatureMeasurementObjects=temperatureMeasurementObjects+1
1349
1350                         settings.put(metaData['name'], new TemperatureMeasurements({}, 1, true))
1351
1352                         if (App == "App1") {
1353                                 extractedObjectsApp1.append("//Object for class temperature measurement!\n")
1354                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1355                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.temperatureMeasurementObject\n")                
1356                         } else {
1357                                 extractedObjectsApp2.append("//Object for class temperature measurement!\n")
1358                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1359                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.temperatureMeasurementObject\n")
1360                         }
1361                         break
1362                 case "capability.thermostat":
1363                         globalObjects.eachLine { line ->
1364                                 if(line.contains("thermostatObject")){
1365                                         contains = 1
1366                                 }
1367                         }
1368
1369                         if (contains == 0)
1370                                 globalObjects.append("@Field def thermostatObject = new Thermostats(sendEvent, 1, init)\n")
1371                                 
1372                         if (thermostatObjects == 0) {
1373                                 thermostatObject0 = metaData['name']
1374                                 this[thermostatObject0] = new Thermostats({}, 1, true)
1375                         } else if (thermostatObjects == 1) {
1376                                 thermostatObject1 = metaData['name']
1377                                 this[thermostatObject1] = new Thermostats({}, 1, true)
1378                         } else if (thermostatObjects == 2) {
1379                                 thermostatObject2 = metaData['name']
1380                                 this[thermostatObject2] = new Thermostats({}, 1, true)
1381                         }
1382
1383                         thermostatObjects=thermostatObjects+1
1384
1385                         settings.put(metaData['name'], new Thermostats({}, 1, true))
1386
1387                         if (App == "App1") {
1388                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
1389                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1390                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")            
1391                         } else {
1392                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
1393                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1394                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
1395                         }
1396                         break
1397                 case "capability.valve":
1398                         globalObjects.eachLine { line ->
1399                                 if(line.contains("valveObject")){
1400                                         contains = 1
1401                                 }
1402                         }
1403
1404                         if (contains == 0)
1405                                 globalObjects.append("@Field def valveObject = new Valves(sendEvent, 1, init)\n")
1406
1407                         if (valveObjects == 0) {
1408                                 valveObject0 = metaData['name']
1409                                 this[valveObject0] = new Valves({}, 1, true)
1410                         } else if (valveObjects == 1) {
1411                                 valveObject1 = metaData['name']
1412                                 this[valveObject1] = new Valves({}, 1, true)
1413                         } else if (valveObjects == 2) {
1414                                 valveObject2 = metaData['name']
1415                                 this[valveObject2] = new Valves({}, 1, true)
1416                         }
1417
1418                         valveObjects=valveObjects+1
1419
1420                         settings.put(metaData['name'], new Valves({}, 1, true))
1421
1422                         if (App == "App1") {
1423                                 extractedObjectsApp1.append("//Object for class valve!\n")
1424                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1425                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.valveObject\n")         
1426                         } else {
1427                                 extractedObjectsApp2.append("//Object for class valve!\n")
1428                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1429                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.valveObject\n")
1430                         }
1431                         break
1432                 case "capability.speechSynthesis":
1433                         globalObjects.eachLine { line ->
1434                                 if(line.contains("speechSynthesisObject")){
1435                                         contains = 1
1436                                 }
1437                         }
1438
1439                         if (contains == 0)
1440                                 globalObjects.append("@Field def speechSynthesisObject = new SpeechSynthesises(sendEvent, 1, init)\n")
1441
1442                         if (speechSynthesisObjects == 0) {
1443                                 speechSynthesisObject0 = metaData['name']
1444                                 this[speechSynthesisObject0] = new SpeechSynthesises({}, 1, true)
1445                         } else if (speechSynthesisObjects == 1) {
1446                                 speechSynthesisObject1 = metaData['name']
1447                                 this[speechSynthesisObject1] = new SpeechSynthesises({}, 1, true)
1448                         } else if (speechSynthesisObjects == 2) {
1449                                 speechSynthesisObject2 = metaData['name']
1450                                 this[speechSynthesisObject2] = new SpeechSynthesises({}, 1, true)
1451                         }
1452
1453                         speechSynthesisObjects=speechSynthesisObjects+1
1454
1455                         settings.put(metaData['name'], new SpeechSynthesises({}, 1, true))
1456
1457                         if (App == "App1") {
1458                                 extractedObjectsApp1.append("//Object for class speech synthesis!\n")
1459                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1460                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.speechSynthesisObject\n")               
1461                         } else {
1462                                 extractedObjectsApp2.append("//Object for class speech synthesis!\n")
1463                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1464                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.speechSynthesisObject\n")
1465                         }
1466                         break
1467                 case "capability.waterSensor":
1468                         globalObjects.eachLine { line ->
1469                                 if(line.contains("waterSensorObject")){
1470                                         contains = 1
1471                                 }
1472                         }
1473
1474                         if (contains == 0)
1475                                 globalObjects.append("@Field def waterSensorObject = new WaterSensors(sendEvent, 1, init)\n")
1476
1477                         if (waterSensorObjects == 0) {
1478                                 waterSensorObject0 = metaData['name']
1479                                 this[waterSensorObject0] = new WaterSensors({}, 1, true)
1480                         } else if (waterSensorObjects == 1) {
1481                                 waterSensorObject1 = metaData['name']
1482                                 this[waterSensorObject1] = new WaterSensors({}, 1, true)
1483                         } else if (waterSensorObjects == 2) {
1484                                 waterSensorObject2 = metaData['name']
1485                                 this[waterSensorObject2] = new WaterSensors({}, 1, true)
1486                         }
1487
1488                         waterSensorObjects=waterSensorObjects+1
1489
1490                         settings.put(metaData['name'], new WaterSensors({}, 1, true))
1491
1492                         if (App == "App1") {
1493                                 extractedObjectsApp1.append("//Object for class water sensor!\n")
1494                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1495                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.waterSensorObject\n")           
1496                         } else {
1497                                 extractedObjectsApp2.append("//Object for class water sensor!\n")
1498                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1499                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.waterSensorObject\n")
1500                         }
1501                         break
1502                 case "capability.touchSensor":
1503                         globalObjects.eachLine { line ->
1504                                 if(line.contains("touchSensorObject")){
1505                                         contains = 1
1506                                 }
1507                         }
1508
1509                         if (contains == 0)
1510                                 globalObjects.append("@Field def touchSensorObject = new NfcTouch(sendEvent, 1)\n")
1511
1512                         if (touchSensorObjects == 0) {
1513                                 touchSensorObject0 = metaData['name']
1514                                 this[touchSensorObject0] = new NfcTouch({}, 1)
1515                         } else if (touchSensorObjects == 1) {
1516                                 touchSensorObject1 = metaData['name']
1517                                 this[touchSensorObject1] = new NfcTouch({}, 1)
1518                         } else if (touchSensorObjects == 2) {
1519                                 touchSensorObject2 = metaData['name']
1520                                 this[touchSensorObject2] = new NfcTouch({}, 1)
1521                         }
1522
1523                         touchSensorObjects=touchSensorObjects+1
1524
1525                         settings.put(metaData['name'], new NfcTouch({}, 1))
1526
1527                         if (App == "App1") {
1528                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
1529                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1530                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")           
1531                         } else {
1532                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
1533                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1534                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
1535                         }
1536                         break
1537                 case "capability.imageCapture":
1538                         globalObjects.eachLine { line ->
1539                                 if(line.contains("imageCaptureObject")){
1540                                         contains = 1
1541                                 }
1542                         }
1543
1544                         if (contains == 0)
1545                                 globalObjects.append("@Field def imageCaptureObject = new ImageCaptures(sendEvent, 1, init)\n")
1546
1547                         if (imageCaptureObjects == 0) {
1548                                 imageCaptureObject0 = metaData['name']
1549                                 this[imageCaptureObject0] = new ImageCaptures({}, 1, true)
1550                         } else if (imageCaptureObjects == 1) {
1551                                 imageCaptureObject1 = metaData['name']
1552                                 this[imageCaptureObject1] = new ImageCaptures({}, 1, true)
1553                         } else if (imageCaptureObjects == 2) {
1554                                 imageCaptureObject2 = metaData['name']
1555                                 this[imageCaptureObject2] = new ImageCaptures({}, 1, true)
1556                         }
1557
1558                         imageCaptureObjects=imageCaptureObjects+1
1559
1560                         settings.put(metaData['name'], new ImageCaptures({}, 1, true))
1561
1562                         if (App == "App1") {
1563                                 extractedObjectsApp1.append("//Object for class Image Capture!\n")
1564                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1565                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.imageCaptureObject\n")          
1566                         } else {
1567                                 extractedObjectsApp2.append("//Object for class Image Capture!\n")
1568                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1569                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.imageCaptureObject\n")
1570                         }
1571                         break
1572                 case "device.mobilePresence":
1573                         globalObjects.eachLine { line ->
1574                                 if(line.contains("mobilePresenceObject")){
1575                                         contains = 1
1576                                 }
1577                         }
1578
1579                         if (contains == 0)
1580                                 globalObjects.append("@Field def mobilePresenceObject = new MobilePresences(sendEvent, 1)\n")
1581
1582                         if (mobilePresenceObjects == 0) {
1583                                 mobilePresenceObject0 = metaData['name']
1584                                 this[mobilePresenceObject0] = new MobilePresences({}, 1)
1585                         } else if (mobilePresenceObjects == 1) {
1586                                 mobilePresenceObject1 = metaData['name']
1587                                 this[mobilePresenceObject1] = new MobilePresences({}, 1)
1588                         } else if (mobilePresenceObjects == 2) {
1589                                 mobilePresenceObject2 = metaData['name']
1590                                 this[mobilePresenceObject2] = new MobilePresences({}, 1)
1591                         }
1592
1593                         mobilePresenceObjects=mobilePresenceObjects+1
1594
1595                         settings.put(metaData['name'], new MobilePresences({}, 1))
1596
1597                         if (App == "App1") {
1598                                 extractedObjectsApp1.append("//Object for class mobile presence!\n")
1599                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1600                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.mobilePresenceObject\n")                
1601                         } else {
1602                                 extractedObjectsApp2.append("//Object for class mobile presence!\n")
1603                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1604                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.mobilePresenceObject\n")
1605                         }
1606                         break
1607                 case "device.aeonKeyFob":
1608                         globalObjects.eachLine { line ->
1609                                 if(line.contains("aeonKeyFobObject")){
1610                                         contains = 1
1611                                 }
1612                         }
1613                         if (contains == 0)
1614                                 globalObjects.append("@Field def aeonKeyFobObject = new AeonKeyFobs(sendEvent, 1)\n")
1615
1616                         if (aeonKeyFobObjects == 0) {
1617                                 aeonKeyFobObject0 = metaData['name']
1618                                 this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
1619                         } else if (aeonKeyFobObjects == 1) {
1620                                 aeonKeyFobObject1 = metaData['name']
1621                                 this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
1622                         } else if (aeonKeyFobObjects == 2) {
1623                                 aeonKeyFobObject2 = metaData['name']
1624                                 this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
1625                         }
1626
1627                         aeonKeyFobObjects=aeonKeyFobObjects+1
1628
1629                         settings.put(metaData['name'], new AeonKeyFobs({}, 1)) 
1630
1631                         if (App == "App1") {
1632                                 extractedObjectsApp1.append("//Object for class aeon key fob!\n")
1633                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1634                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")            
1635                         } else {
1636                                 extractedObjectsApp2.append("//Object for class aeon key fob!\n")
1637                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1638                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
1639                         }
1640                         break
1641                 case "mode":
1642                         //def randomVariable = Math.abs(new Random().nextInt() % 3)
1643                         def modes = ["away", "home", "night"]
1644                         // Always assign a different mode to each app
1645                         //def userInput = modes[1]
1646                         def userInput = modes[chooseMode]
1647                         if (chooseMode < 3)
1648                                 chooseMode++;
1649                         else
1650                                 chooseMode = chooseMode%3
1651
1652                         if (modeVariables == 0) {
1653                                 mode0 = metaData['name']
1654                                 this[mode0] = userInput
1655                         } else if (modeVariables == 1) {
1656                                 mode1 = metaData['name']
1657                                 this[mode1] = userInput
1658                         } else if (modeVariables == 2) {
1659                                 mode2 = metaData['name']
1660                                 this[mode2] = userInput
1661                         } else if (modeVariables == 3) {
1662                                 mode3 = metaData['name']
1663                                 this[mode3] = userInput
1664                         } else if (modeVariables == 4) {
1665                                 mode4 = metaData['name']
1666                                 this[mode4] = userInput
1667                         } else if (modeVariables == 5) {
1668                                 mode5 = metaData['name']
1669                                 this[mode5] = userInput
1670                         }
1671
1672                         if (modeVariables != 5)
1673                                 modeVariables=modeVariables+1
1674                         else
1675                                 modeVariables=0
1676
1677
1678                         settings.put(metaData['name'], metaData['name'])
1679
1680                         if (App == "App1") {                    
1681                                 extractedObjectsApp1.append("//Global variable for mode!\n")
1682                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1683                         } else {
1684                                 extractedObjectsApp2.append("//Global variable for mode!\n")
1685                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1686                         }
1687                         break
1688                 case "decimal":
1689                         //def userInput = Math.abs(new Random().nextInt() % 60) + 40
1690                         def userInput = 50
1691
1692                         if (decimalVariables == 0) {
1693                                 decimal0 = metaData['name']
1694                                 this[decimal0] = userInput
1695                         } else if (decimalVariables == 1) {
1696                                 decimal1 = metaData['name']
1697                                 this[decimal1] = userInput
1698                         } else if (decimalVariables == 2) {
1699                                 decimal2 = metaData['name']
1700                                 this[decimal2] = userInput
1701                         } else if (decimalVariables == 3) {
1702                                 decimal3 = metaData['name']
1703                                 this[decimal3] = userInput
1704                         } else if (decimalVariables == 4) {
1705                                 decimal4 = metaData['name']
1706                                 this[decimal4] = userInput
1707                         } else if (decimalVariables == 5) {
1708                                 decimal5 = metaData['name']
1709                                 this[decimal5] = userInput
1710                         }
1711
1712                         if (decimalVariables != 5)
1713                                 decimalVariables=decimalVariables+1
1714                         else
1715                                 decimalVariables=0
1716
1717                         settings.put(metaData['name'], metaData['name'])
1718
1719                         if (App == "App1") {                    
1720                                 extractedObjectsApp1.append("//Global variable for decimal number!\n")
1721                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1722                         } else {
1723                                 extractedObjectsApp2.append("//Global variable for decimal number!\n")
1724                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1725                         }
1726                         break
1727                 case "text":
1728                         def userInput = "This is just a text!"
1729                         
1730                         if (textVariables == 0) {
1731                                 text0 = metaData['name']
1732                                 this[text0] = userInput
1733                         } else if (textVariables == 1) {
1734                                 text1 = metaData['name']
1735                                 this[text1] = userInput
1736                         } else if (textVariables == 2) {
1737                                 text2 = metaData['name']
1738                                 this[text2] = userInput
1739                         } else if (textVariables == 3) {
1740                                 text3 = metaData['name']
1741                                 this[text3] = userInput
1742                         } else if (textVariables == 4) {
1743                                 text4 = metaData['name']
1744                                 this[text4] = userInput
1745                         } else if (textVariables == 5) {
1746                                 text5 = metaData['name']
1747                                 this[text5] = userInput
1748                         }
1749
1750                         if (textVariables != 5)
1751                                 textVariables=textVariables+1
1752                         else
1753                                 textVariables=0
1754
1755
1756                         settings.put(metaData['name'], metaData['name'])
1757
1758                         if (App == "App1") {                    
1759                                 extractedObjectsApp1.append("//Global variable for text!\n")
1760                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1761                         } else {
1762                                 extractedObjectsApp2.append("//Global variable for text!\n")
1763                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1764                         }
1765                         break
1766                 case "number":
1767                         //def userInput = Math.abs(new Random().nextInt() % 60) + 40
1768                         def userInput = 50
1769
1770                         if (numberVariables == 0) {
1771                                 number0 = metaData['name']
1772                                 this[number0] = userInput
1773                         } else if (numberVariables == 1) {
1774                                 number1 = metaData['name']
1775                                 this[number1] = userInput
1776                         } else if (numberVariables == 2) {
1777                                 number2 = metaData['name']
1778                                 this[number2] = userInput
1779                         } else if (numberVariables == 3) {
1780                                 number3 = metaData['name']
1781                                 this[number3] = userInput
1782                         } else if (numberVariables == 4) {
1783                                 number4 = metaData['name']
1784                                 this[number4] = userInput
1785                         } else if (numberVariables == 5) {
1786                                 number5 = metaData['name']
1787                                 this[number5] = userInput
1788                         }
1789
1790
1791                         if (numberVariables != 5)
1792                                 numberVariables=numberVariables+1
1793                         else
1794                                 numberVariables=0
1795                         
1796
1797                         settings.put(metaData['name'], metaData['name'])
1798
1799                         if (App == "App1") {                    
1800                                 extractedObjectsApp1.append("//Global variable for number!\n")
1801                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1802                         } else {
1803                                 extractedObjectsApp2.append("//Global variable for number!\n")
1804                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1805                         }
1806                         break
1807                 case "time":
1808                         def userInput = "15:00"
1809                         
1810                         if (timeVariables == 0) {
1811                                 time0 = metaData['name']
1812                                 this[time0] = userInput
1813                         } else if (timeVariables == 1) {
1814                                 time1 = metaData['name']
1815                                 this[time1] = userInput
1816                         } else if (timeVariables == 2) {
1817                                 time2 = metaData['name']
1818                                 this[time2] = userInput
1819                         } else if (timeVariables == 3) {
1820                                 time3 = metaData['name']
1821                                 this[time3] = userInput
1822                         } else if (timeVariables == 4) {
1823                                 time4 = metaData['name']
1824                                 this[time4] = userInput
1825                         } else if (timeVariables == 5) {
1826                                 time5 = metaData['name']
1827                                 this[time5] = userInput
1828                         }
1829
1830                         if (timeVariables != 5)
1831                                 timeVariables=timeVariables+1
1832                         else
1833                                 timeVariables=0
1834
1835                         settings.put(metaData['name'], metaData['name'])
1836
1837                         if (App == "App1") {                    
1838                                 extractedObjectsApp1.append("//Global variable for time!\n")
1839                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1840                         } else {
1841                                 extractedObjectsApp2.append("//Global variable for time!\n")
1842                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1843                         }
1844                         break
1845                 case "enum":
1846                         if (metaData['options'] != null)
1847                                 modes = metaData['options']
1848                         else if (metaData['metadata'] != null) { // If it is not named 'options' then it is captured as 'metadata'
1849                                 modes = metaData['metadata']
1850                                 modes = modes['values']
1851                         }
1852                         def userInput = modes[0]
1853         
1854                         if (enumVariables == 0) {
1855                                 enum0 = metaData['name']
1856                                 this[enum0] = userInput
1857                         } else if (enumVariables == 1) {
1858                                 enum1 = metaData['name']
1859                                 this[enum1] = userInput
1860                         } else if (enumVariables == 2) {
1861                                 enum2 = metaData['name']
1862                                 this[enum2] = userInput
1863                         } else if (enumVariables == 3) {
1864                                 enum3 = metaData['name']
1865                                 this[enum3] = userInput
1866                         } else if (enumVariables == 4) {
1867                                 enum4 = metaData['name']
1868                                 this[enum4] = userInput
1869                         } else if (enumVariables == 5) {
1870                                 enum5 = metaData['name']
1871                                 this[enum5] = userInput
1872                         }
1873
1874                         if (enumVariables != 5)
1875                                 enumVariables=enumVariables+1
1876                         else
1877                                 enumVariables=0                 
1878
1879
1880                         settings.put(metaData['name'], metaData['name'])
1881
1882                         if (App == "App1") {                    
1883                                 extractedObjectsApp1.append("//Global variable for enum!\n")
1884                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1885                         } else {
1886                                 extractedObjectsApp2.append("//Global variable for enum!\n")
1887                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1888                         }
1889                         break
1890                 case "boolean":
1891                         //def userInput = Math.abs(new Random().nextInt() % 2)
1892                         def userInput = true
1893
1894                         if (boolVariables == 0) {
1895                                 bool0 = metaData['name']
1896                                 this[bool0] = userInput
1897                         } else if (boolVariables == 1) {
1898                                 bool1 = metaData['name']
1899                                 this[bool1] = userInput
1900                         } else if (boolVariables == 2) {
1901                                 bool2 = metaData['name']
1902                                 this[bool2] = userInput
1903                         } else if (boolVariables == 3) {
1904                                 bool3 = metaData['name']
1905                                 this[bool3] = userInput
1906                         } else if (boolVariables == 4) {
1907                                 bool4 = metaData['name']
1908                                 this[bool4] = userInput
1909                         } else if (boolVariables == 5) {
1910                                 bool5 = metaData['name']
1911                                 this[bool5] = userInput
1912                         }
1913
1914                         if (boolVariables != 5)
1915                                 boolVariables=boolVariables+1
1916                         else
1917                                 boolVariables=0
1918
1919
1920                         settings.put(metaData['name'], metaData['name'])
1921
1922                         if (App == "App1") {                    
1923                                 extractedObjectsApp1.append("//Global variable for boolean!\n")
1924                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1925                         } else {
1926                                 extractedObjectsApp2.append("//Global variable for boolean!\n")
1927                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1928                         }
1929                         break
1930                 case "bool":
1931                         //def userInput = Math.abs(new Random().nextInt() % 2)
1932                         def userInput = true
1933
1934                         if (boolVariables == 0) {
1935                                 bool0 = metaData['name']
1936                                 this[bool0] = userInput
1937                         } else if (boolVariables == 1) {
1938                                 bool1 = metaData['name']
1939                                 this[bool1] = userInput
1940                         } else if (boolVariables == 2) {
1941                                 bool2 = metaData['name']
1942                                 this[bool2] = userInput
1943                         } else if (boolVariables == 3) {
1944                                 bool3 = metaData['name']
1945                                 this[bool3] = userInput
1946                         } else if (boolVariables == 4) {
1947                                 bool4 = metaData['name']
1948                                 this[bool4] = userInput
1949                         } else if (boolVariables == 5) {
1950                                 bool5 = metaData['name']
1951                                 this[bool5] = userInput
1952                         }
1953
1954                         if (boolVariables != 5)
1955                                 boolVariables=boolVariables+1
1956                         else
1957                                 boolVariables=0
1958
1959
1960                         settings.put(metaData['name'], metaData['name'])
1961
1962                         if (App == "App1") {                    
1963                                 extractedObjectsApp1.append("//Global variable for boolean!\n")
1964                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1965                         } else {
1966                                 extractedObjectsApp2.append("//Global variable for boolean!\n")
1967                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1968                         }
1969                         break
1970                 case "phone":
1971                         def userInput = 9495379373
1972
1973                         if (phoneVariables == 0) {
1974                                 phone0 = metaData['name']
1975                                 this[phone0] = userInput
1976                         } else if (phoneVariables == 1) {
1977                                 phone1 = metaData['name']
1978                                 this[phone1] = userInput
1979                         } else if (phoneVariables == 2) {
1980                                 phone2 = metaData['name']
1981                                 this[phone2] = userInput
1982                         } else if (phoneVariables == 3) {
1983                                 phone3 = metaData['name']
1984                                 this[phone3] = userInput
1985                         } else if (phoneVariables == 4) {
1986                                 phone4 = metaData['name']
1987                                 this[phone4] = userInput
1988                         } else if (phoneVariables == 5) {
1989                                 phone5 = metaData['name']
1990                                 this[phone5] = userInput
1991                         }
1992
1993                         if (phoneVariables != 5)
1994                                 phoneVariables=phoneVariables+1
1995                         else
1996                                 phoneVariables=0
1997
1998                         settings.put(metaData['name'], metaData['name'])
1999
2000                         if (App == "App1") {                    
2001                                 extractedObjectsApp1.append("//Global variable for phone!\n")
2002                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
2003                         } else {
2004                                 extractedObjectsApp2.append("//Global variable for phone!\n")
2005                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
2006                         }
2007                         break
2008                 case "contact":
2009                         def userInput = "AJ"
2010         
2011                         if (contactVariables == 0) {
2012                                 contact0 = metaData['name']
2013                                 this[contact0] = userInput
2014                         } else if (contactVariables == 1) {
2015                                 contact1 = metaData['name']
2016                                 this[contact1] = userInput
2017                         } else if (contactVariables == 2) {
2018                                 contact2 = metaData['name']
2019                                 this[contact2] = userInput
2020                         } else if (contactVariables == 3) {
2021                                 contact3 = metaData['name']
2022                                 this[contact3] = userInput
2023                         } else if (contactVariables == 4) {
2024                                 contact4 = metaData['name']
2025                                 this[contact4] = userInput
2026                         } else if (contactVariables == 5) {
2027                                 contact5 = metaData['name']
2028                                 this[contact5] = userInput
2029                         }
2030
2031                         if (contactVariables != 5)
2032                                 contactVariables=contactVariables+1
2033                         else
2034                                 contactVariables=0
2035
2036                         settings.put(metaData['name'], metaData['name'])
2037
2038                         if (App == "App1") {                    
2039                                 extractedObjectsApp1.append("//Global variable for contact!\n")
2040                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
2041                         } else {
2042                                 extractedObjectsApp2.append("//Global variable for contact!\n")
2043                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
2044                         }
2045                         break
2046                 default:
2047                         break
2048         }
2049 }
2050
2051 def label(LinkedHashMap metaData) {
2052         if (metaData.containsKey('title')) {
2053                 println metaData['title']
2054         }
2055         if (metaData.containsKey('options')) {
2056                 println "Options: "+metaData['options']
2057         }
2058
2059         println("//IGNORE--ForMobileUse//")
2060 }
2061
2062 def mode(LinkedHashMap metaData) {
2063         if (metaData.containsKey('title')) {
2064                 println metaData['title']
2065         }
2066         if (metaData.containsKey('options')) {
2067                 println "Options: "+metaData['options']
2068         }
2069
2070         println("//IGNORE--ForMobileUse//")
2071 }
2072
2073 def href(LinkedHashMap metaData) {
2074         println("//IGNORE--some data//")
2075 }
2076
2077 def href(LinkedHashMap metaData, String name) {
2078         println("//IGNORE--some data//")
2079 }
2080 /////Input Methods/////
2081
2082
2083 /////MethodsForExtraction/////
2084 def definition(LinkedHashMap metaData) {
2085         println("///Just some information///")
2086 }
2087
2088 def preferences(Closure inputData) {
2089         find(inputData) //Run the closure to extract pages/sections/inputMethods
2090         settings.put("END", "END")
2091         if (App == "App1") {            
2092                 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
2093                 extractedObjectsConstructorApp1.append("settings = [")
2094                 settings.each{
2095                         key, value ->
2096                         if (value != "END")
2097                                 extractedObjectsConstructorApp1.append("$key: $key, ")
2098                         else
2099                                 extractedObjectsConstructorApp1.append("END: \"END\"]\n")
2100                 }
2101         } else {
2102                 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
2103                 extractedObjectsConstructorApp2.append("settings = [")
2104                 settings.each{
2105                         key, value ->
2106                         if (value != "END")
2107                                 extractedObjectsConstructorApp2.append("$key: $key, ")
2108                         else
2109                                 extractedObjectsConstructorApp2.append("END: \"END\"]\n")
2110                 }
2111                 def line
2112                 File GlobalVariablesBothApps = new File("GlobalVariables/GlobalVariablesBothApps.groovy")
2113                 GlobalVariablesBothApps.write("")
2114                 GlobalVariablesBothApps.append("//Creating Global variables for both apps\n")
2115                 GlobalVariablesBothApps.append("@Field def sendEvent = {eventDataMap -> eventHandler(eventDataMap)}\n")
2116                 GlobalVariablesBothApps.append("@Field def locationObject = new LocationVar(sendEvent, init)\n")
2117                 GlobalVariablesBothApps.append("@Field def appObject = new Touched(sendEvent, 0)\n")
2118                 
2119                 globalObjects.withReader { reader ->
2120                         while ((line = reader.readLine()) != null) {
2121                                 GlobalVariablesBothApps.append(line)
2122                                 GlobalVariablesBothApps.append("\n")
2123                         }
2124                  }
2125         }
2126 }
2127
2128 def image(String data) {
2129         println("//IGNORE--some image//")
2130 }
2131
2132 def page(LinkedHashMap metaData, Closure inputData) {
2133         if (metaData.containsKey('name'))
2134                 println(metaData['name'])
2135         if (metaData.containsKey('title'))
2136                 println(metaData['title'])
2137
2138         find(inputData) //Run the closure to extract sections/inputMethods
2139 }
2140
2141 def page(LinkedHashMap metaData) {
2142         def nameOfFunction = metaData['name']
2143         "$nameOfFunction"() //Call the page     
2144 }
2145
2146 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
2147         if (metaData.containsKey('name'))
2148                 println(metaData['name'])
2149         if (metaData.containsKey('title'))
2150                 println(metaData['title'])
2151
2152         find(inputData) //Run the closure to extract sections/inputMethods
2153 }
2154
2155 def paragraph(String paragraphText) {
2156         println(paragraphText)
2157 }
2158
2159 def paragraph(LinkedHashMap metaData, String paragraphText) {
2160         println(paragraphText)
2161 }
2162
2163 def section(String title, Closure inputData) {
2164         println(title)
2165         find(inputData) //Run the closure to extract inputMethods
2166 }
2167
2168 def section(Closure inputData) {
2169         find(inputData) //Run the closure to extract inputMethods
2170 }
2171
2172 def section(LinkedHashMap metaData, Closure inputData) {
2173         find(inputData) //Run the closure to extract inputMethods
2174 }
2175
2176 def section(LinkedHashMap metaData, String data, Closure inputData) {
2177         find(inputData)
2178 }
2179
2180 def mappings(Closure inputData) {
2181         println("//IGNORE--some data//")
2182 }
2183 /////MethodsForExtraction/////
2184