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