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