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