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