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