Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Extractor / Extractor.groovy
1 ////////////////////////////////////////
2 //import libraries
3 import groovy.transform.Field
4
5
6 //import classes
7 //Importing Classes
8 import ContactSensor.ContactSensor
9 import ContactSensor.ContactSensors
10 import DoorControl.DoorControl
11 import DoorControl.DoorControls
12 import Lock.Lock
13 import Lock.Locks
14 import Thermostat.Thermostat
15 import Thermostat.Thermostats
16 import Switch.Switch
17 import Switch.Switches
18 import PresenceSensor.PresenceSensor
19 import PresenceSensor.PresenceSensors
20 import Logger.Logger
21 import Location.LocationVar
22 import Location.Phrase
23 import appTouch.Touched
24 import NfcTouch.NfcTouch
25 import AeonKeyFob.AeonKeyFob
26 import AeonKeyFob.AeonKeyFobs
27 import MusicPlayer.MusicPlayer
28 import MusicPlayer.MusicPlayers
29 import MotionSensor.MotionSensor
30 import MotionSensor.MotionSensors
31 import ImageCapture.ImageCapture
32 import ImageCapture.ImageCaptures
33 import SmokeDetector.SmokeDetector
34 import SmokeDetector.SmokeDetectors
35 import Alarm.Alarm
36 import Alarm.Alarms
37 import SpeechSynthesis.SpeechSynthesis
38 import SpeechSynthesis.SpeechSynthesises
39 import Timer.SimulatedTimer
40
41 //GlobalVariables
42 @Field def location = new LocationVar()
43 //Settings variable defined to settings on purpose
44 @Field def settings = [app: "app"]
45 //Global variable for state[mode]
46 @Field def state = [home:[],away:[],night:[]]
47 //Create a global logger object for methods
48 @Field def log = new Logger()
49 //Create a global variable for optional property
50 @Field def optional = false //by default for now
51
52
53 //Global variables for files
54 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
55 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
56 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
57 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
58
59
60 //Empty the files
61 if (App == "App1") {
62         extractedObjectsApp1.write("")
63         extractedObjectsConstructorApp1.write("")
64 } else if (App == "App2") {
65         extractedObjectsApp2.write("")
66         extractedObjectsConstructorApp2.write("")
67 }
68
69
70
71
72
73 //Global objects
74 //Global Object for class Touch Sensor!
75 @Field touchSensorObjects = 0
76 @Field def touchSensorObject0
77 @Field def touchSensorObject1
78 @Field def touchSensorObject2
79 //Global Object for class switch!
80 @Field switchObjects = 0
81 @Field def switchObject0
82 @Field def switchObject1
83 @Field def switchObject2
84 //Global Object for class lock!
85 @Field lockObjects = 0
86 @Field def lockObject0
87 @Field def lockObject1
88 @Field def lockObject2
89 //Global Object for class door control!
90 @Field doorControlObjects = 0
91 @Field def doorControlObject0
92 @Field def doorControlObject1
93 @Field def doorControlObject2
94 //Global Object for class contact sensor!
95 @Field contactObjects = 0
96 @Field def contactObject0
97 @Field def contactObject1
98 @Field def contactObject2
99 //Global Object for class presence sensor!
100 @Field presenceSensorObjects = 0
101 @Field def presenceSensorObject0
102 @Field def presenceSensorObject1
103 @Field def presenceSensorObject2
104 //Global Object for class thermostat!
105 @Field thermostatObjects = 0
106 @Field def thermostatObject0
107 @Field def thermostatObject1
108 @Field def thermostatObject2
109 //Global Object for class music player!
110 @Field musicPlayerObjects = 0
111 @Field def musicPlayerObject0
112 @Field def musicPlayerObject1
113 @Field def musicPlayerObject2
114 //Global Object for class music player!
115 @Field aeonKeyFobObjects = 0
116 @Field def aeonKeyFobObject0
117 @Field def aeonKeyFobObject1
118 @Field def aeonKeyFobObject2
119 //Global Object for class motion sensor!
120 @Field motionSensorObjects = 0
121 @Field def motionSensorObject0
122 @Field def motionSensorObject1
123 @Field def motionSensorObject2
124 //Global Object for class image capture!
125 @Field imageCaptureObjects = 0
126 @Field def imageCaptureObject0
127 @Field def imageCaptureObject1
128 @Field def imageCaptureObject2
129 //Global Object for class smoke detector!
130 @Field smokeDetectorObjects = 0
131 @Field def smokeDetectorObject0
132 @Field def smokeDetectorObject1
133 @Field def smokeDetectorObject2
134 //Global Object for class alarm!
135 @Field alarmObjects = 0
136 @Field def alarmObject0
137 @Field def alarmObject1
138 @Field def alarmObject2
139 //Global Object for class alarm!
140 @Field speechSynthesisObjects = 0
141 @Field def speechSynthesisObject0
142 @Field def speechSynthesisObject1
143 @Field def speechSynthesisObject2
144
145
146 //Global variables
147 //For mode
148 @Field modeVariables = 0
149 @Field mode0
150 @Field mode1
151 @Field mode2
152 @Field mode3
153 @Field mode4
154 @Field mode5
155 //For number
156 @Field numberVariables = 0
157 @Field number0
158 @Field number1
159 @Field number2
160 @Field number3
161 @Field number4
162 @Field number5
163 //For decimal
164 @Field decimalVariables = 0
165 @Field decimal0
166 @Field decimal1
167 @Field decimal2
168 @Field decimal3
169 @Field decimal4
170 @Field decimal5
171 //For time
172 @Field timeVariables = 0
173 @Field time0
174 @Field time1
175 @Field time2
176 @Field time3
177 @Field time4
178 @Field time5
179 //For enum
180 @Field enumVariables = 0
181 @Field enum0
182 @Field enum1
183 @Field enum2
184 @Field enum3
185 @Field enum4
186 @Field enum5
187 //For phone
188 @Field phoneVariables = 0
189 @Field phone0
190 @Field phone1
191 @Field phone2
192 @Field phone3
193 @Field phone4
194 @Field phone5
195 //For contact
196 @Field contactVariables = 0
197 @Field contact0
198 @Field contact1
199 @Field contact2
200 @Field contact3
201 @Field contact4
202 @Field contact5
203 //For text
204 @Field textVariables = 0
205 @Field textVariable0
206 @Field textVariable1
207 @Field textVariable2
208 @Field textVariable3
209 @Field textVariable4
210 @Field textVariable5
211 //For boolean
212 @Field boolVariables = 0
213 @Field boolVariable0
214 @Field boolVariable1
215 @Field boolVariable2
216 @Field boolVariable3
217 @Field boolVariable4
218 @Field boolVariable5
219
220
221 /////Input Methods/////
222 //input "",""
223 def input(String name, String type) {
224         LinkedHashMap metaData = []
225         metaData.put('name',name)
226         metaData.put('type',type)
227         input(metaData)
228 }
229
230 //input "","",linkedHashMap
231 def input(LinkedHashMap metaData, String name, String type) {
232         metaData.put('name',name)
233         metaData.put('type',type)
234         input(metaData)
235 }
236
237 //input "", "", linkedHashMap, Closure
238 def input(LinkedHashMap metaData, String name, String type, Closure Input) {
239         metaData.put('name',name)
240         metaData.put('type',type)
241         input(metaData)
242         find(Input)
243 }
244
245 //input linkedHashMap
246 def input(LinkedHashMap metaData) {
247         if (metaData.containsKey('title')) {
248                 println metaData['title']
249         }
250         if (metaData.containsKey('options')) {
251                 println "Options: "+metaData['options']
252         }
253         switch(metaData['type']) {
254                 case "capability.lock":
255                         if (lockObjects == 0) {
256                                 lockObject0 = metaData['name']
257                                 this[lockObject0] = new Locks({}, 1)
258                         } else if (lockObjects == 1) {
259                                 lockObject1 = metaData['name']
260                                 this[lockObject1] = new Locks({}, 1)
261                         } else if (lockObjects == 2) {
262                                 lockObject2 = metaData['name']
263                                 this[lockObject2] = new Locks({}, 1)
264                         }
265
266                         lockObjects=lockObjects+1
267
268                         settings.put(metaData['name'], metaData['name']) 
269
270                         if (App == "App1") {
271                                 extractedObjectsApp1.append("//Object for class lock!\n")
272                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
273                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")          
274                         } else {
275                                 extractedObjectsApp2.append("//Object for class lock!\n")
276                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
277                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
278                         }
279                         break
280                 case "capability.alarm":
281                         if (alarmObjects == 0) {
282                                 alarmObject0 = metaData['name']
283                                 this[alarmObject0] = new Alarms({}, 1)
284                         } else if (alarmObjects == 1) {
285                                 alarmObject1 = metaData['name']
286                                 this[alarmObject1] = new Alarms({}, 1)
287                         } else if (alarmObjects == 2) {
288                                 alarmObject2 = metaData['name']
289                                 this[alarmObject2] = new Alarms({}, 1)
290                         }
291
292                         alarmObjects=alarmObjects+1
293
294                         settings.put(metaData['name'], metaData['name']) 
295
296                         if (App == "App1") {
297                                 extractedObjectsApp1.append("//Object for class alarm!\n")
298                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
299                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.alarmObject\n")         
300                         } else {
301                                 extractedObjectsApp2.append("//Object for class alarm!\n")
302                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
303                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.alarmObject\n")
304                         }
305                         break
306                 case "capability.battery":
307                         break
308                 case "capability.beacon":
309                         break
310                 case "capability.carbonMonoxideDetector":
311                         break
312                 case "capability.colorControl":
313                         break
314                 case "capability.contactSensor":
315                         if (contactObjects == 0) {
316                                 contactObject0 = metaData['name']
317                                 this[contactObject0] = new ContactSensors({}, 1)
318                         } else if (contactObjects == 1) {
319                                 contactObject1 = metaData['name']
320                                 this[contactObject1] = new ContactSensors({}, 1)
321                         } else if (contactObjects == 2) {
322                                 contactObject2 = metaData['name']
323                                 this[contactObject2] = new ContactSensors({}, 1)
324                         }
325
326                         contactObjects=contactObjects+1
327
328                         settings.put(metaData['name'], metaData['name'])
329
330                         if (App == "App1") {
331                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
332                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
333                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")               
334                         } else {
335                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
336                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
337                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
338                         }
339                         break
340                 case "capability.doorControl":
341                         if (doorControlObjects == 0) {
342                                 doorControlObject0 = metaData['name']
343                                 this[doorControlObject0] = new DoorControls({}, 1)
344                         } else if (doorControlObjects == 1) {
345                                 doorControlObject1 = metaData['name']
346                                 this[doorControlObject1] = new DoorControls({}, 1)
347                         } else if (doorControlObjects == 2) {
348                                 doorControlObject2 = metaData['name']
349                                 this[doorControlObject2] = new DoorControls({}, 1)
350                         }
351
352                         doorControlObjects=doorControlObjects+1
353
354                         settings.put(metaData['name'], metaData['name'])
355
356                         if (App == "App1") {
357                                 extractedObjectsApp1.append("//Object for class door control!\n")
358                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
359                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")           
360                         } else {
361                                 extractedObjectsApp2.append("//Object for class door control!\n")
362                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
363                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
364                         }
365                         break
366                 case "capability.energyMeter":
367                         break
368                 case "capability.illuminanceMeasurement":
369                         break
370                 case "capability.accelerationSensor":
371                         break
372                 case "capability.motionSensor":
373                         if (motionSensorObjects == 0) {
374                                 motionSensorObject0 = metaData['name']
375                                 this[motionSensorObject0] = new MotionSensors({}, 1)
376                         } else if (motionSensorObjects == 1) {
377                                 motionSensorObject1 = metaData['name']
378                                 this[motionSensorObject1] = new MotionSensors({}, 1)
379                         } else if (motionSensorObjects == 2) {
380                                 motionSensorObject2 = metaData['name']
381                                 this[motionSensorObject2] = new MotionSensors({}, 1)
382                         }
383
384                         motionSensorObjects=motionSensorObjects+1
385
386                         settings.put(metaData['name'], metaData['name'])
387
388                         if (App == "App1") {
389                                 extractedObjectsApp1.append("//Object for class Motion Sensor!\n")
390                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
391                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.motionSensorObject\n")          
392                         } else {
393                                 extractedObjectsApp2.append("//Object for class Motion Sensor!\n")
394                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
395                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.motionSensorObject\n")
396                         }
397                         break
398                 case "capability.musicPlayer":
399                         if (musicPlayerObjects == 0) {
400                                 musicPlayerObject0 = metaData['name']
401                                 this[musicPlayerObject0] = new MusicPlayers({}, 1)
402                         } else if (musicPlayerObjects == 1) {
403                                 musicPlayerObject1 = metaData['name']
404                                 this[musicPlayerObject1] = new MusicPlayers({}, 1)
405                         } else if (musicPlayerObjects == 2) {
406                                 musicPlayerObject2 = metaData['name']
407                                 this[musicPlayerObject2] = new MusicPlayers({}, 1)
408                         }
409
410                         musicPlayerObjects=musicPlayerObjects+1
411
412                         settings.put(metaData['name'], metaData['name']) 
413
414                         if (App == "App1") {
415                                 extractedObjectsApp1.append("//Object for class music player!\n")
416                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
417                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")           
418                         } else {
419                                 extractedObjectsApp2.append("//Object for class music player!\n")
420                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
421                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
422                         }
423                         break
424                 case "capability.powerMeter":
425                         break
426                 case "capability.presenceSensor":
427                         if (presenceSensorObjects == 0) {
428                                 presenceSensorObject0 = metaData['name']
429                                 this[presenceSensorObject0] = new PresenceSensors({}, 1)
430                         } else if (presenceSensorObjects == 1) {
431                                 presenceSensorObject1 = metaData['name']
432                                 this[presenceSensorObject1] = new PresenceSensors({}, 1)
433                         } else if (presenceSensorObjects == 2) {
434                                 presenceSensorObject2 = metaData['name']
435                                 this[presenceSensorObject2] = new PresenceSensors({}, 1)
436                         }
437
438                         presenceSensorObjects=presenceSensorObjects+1
439
440                         settings.put(metaData['name'], metaData['name'])
441
442                         if (App == "App1") {
443                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
444                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
445                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")                
446                         } else {
447                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
448                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
449                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
450                         }
451                         break
452                 case "capability.relativeHumidityMeasurement":
453                         break
454                 case "capability.relaySwitch":
455                         break
456                 case "capability.sleepSensor":
457                         break
458                 case "capability.smokeDetector":
459                         if (smokeDetectorObjects == 0) {
460                                 smokeDetectorObject0 = metaData['name']
461                                 this[smokeDetectorObject0] = new SmokeDetectors({}, 1)
462                         } else if (smokeDetectorObjects == 1) {
463                                 smokeDetectorObject1 = metaData['name']
464                                 this[smokeDetectorObject1] = new SmokeDetectors({}, 1)
465                         } else if (smokeDetectorObjects == 2) {
466                                 smokeDetectorObject2 = metaData['name']
467                                 this[smokeDetectorObject2] = new SmokeDetectors({}, 1)
468                         }
469
470                         smokeDetectorObjects=smokeDetectorObjects+1
471                         
472                         settings.put(metaData['name'], metaData['name'])
473
474                         if (App == "App1") {
475                                 extractedObjectsApp1.append("//Object for class smoke detector!\n")
476                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
477                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.smokeDetectorObject\n")         
478                         } else {
479                                 extractedObjectsApp2.append("//Object for class smoke detector!\n")
480                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
481                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.smokeDetectorObject\n")
482                         }
483                         break
484                 case "capability.stepSensor":
485                         break
486                 case "capability.switch":
487                         if (switchObjects == 0) {
488                                 switchObject0 = metaData['name']
489                                 this[switchObject0] = new Switches({}, 1)
490                         } else if (switchObjects == 1) {
491                                 switchObject1 = metaData['name']
492                                 this[switchObject1] = new Switches({}, 1)
493                         } else if (switchObjects == 2) {
494                                 switchObject2 = metaData['name']
495                                 this[switchObject2] = new Switches({}, 1)
496                         }
497
498                         switchObjects=switchObjects+1
499                         
500                         settings.put(metaData['name'], metaData['name'])
501
502                         if (App == "App1") {
503                                 extractedObjectsApp1.append("//Object for class switch!\n")
504                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
505                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")                
506                         } else {
507                                 extractedObjectsApp2.append("//Object for class switch!\n")
508                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
509                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
510                         }
511                         break
512                 case "capability.switchLevel":
513                         break
514                 case "capability.temperatureMeasurement":
515                         break
516                 case "capability.thermostat":
517                         if (thermostatObjects == 0) {
518                                 thermostatObject0 = metaData['name']
519                                 this[thermostatObject0] = new Thermostats({}, 1)
520                         } else if (thermostatObjects == 1) {
521                                 thermostatObject1 = metaData['name']
522                                 this[thermostatObject1] = new Thermostats({}, 1)
523                         } else if (thermostatObjects == 2) {
524                                 thermostatObject2 = metaData['name']
525                                 this[thermostatObject2] = new Thermostats({}, 1)
526                         }
527
528                         thermostatObjects=thermostatObjects+1
529
530                         settings.put(metaData['name'], metaData['name'])
531
532                         if (App == "App1") {
533                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
534                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
535                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")            
536                         } else {
537                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
538                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
539                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
540                         }
541                         break
542                 case "capability.valve":
543                         break
544                 case "capability.speechSynthesis":
545                         if (speechSynthesisObjects == 0) {
546                                 speechSynthesisObject0 = metaData['name']
547                                 this[speechSynthesisObject0] = new SpeechSynthesises({}, 1)
548                         } else if (speechSynthesisObjects == 1) {
549                                 speechSynthesisObject1 = metaData['name']
550                                 this[speechSynthesisObject1] = new SpeechSynthesises({}, 1)
551                         } else if (speechSynthesisObjects == 2) {
552                                 speechSynthesisObject2 = metaData['name']
553                                 this[speechSynthesisObject2] = new SpeechSynthesises({}, 1)
554                         }
555
556                         speechSynthesisObjects=speechSynthesisObjects+1
557
558                         settings.put(metaData['name'], metaData['name'])
559
560                         if (App == "App1") {
561                                 extractedObjectsApp1.append("//Object for class speech synthesis!\n")
562                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
563                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.speechSynthesisObject\n")               
564                         } else {
565                                 extractedObjectsApp2.append("//Object for class speech synthesis!\n")
566                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
567                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.speechSynthesisObject\n")
568                         }
569                         break
570                 case "capability.waterSensor":
571                         break
572                 case "capability.touchSensor":
573                         if (touchSensorObjects == 0) {
574                                 touchSensorObject0 = metaData['name']
575                                 this[touchSensorObject0] = new NfcTouch({}, 1)
576                         } else if (touchSensorObjects == 1) {
577                                 touchSensorObject1 = metaData['name']
578                                 this[touchSensorObject1] = new NfcTouch({}, 1)
579                         } else if (touchSensorObjects == 2) {
580                                 touchSensorObject2 = metaData['name']
581                                 this[touchSensorObject2] = new NfcTouch({}, 1)
582                         }
583
584                         touchSensorObjects=touchSensorObjects+1
585
586                         settings.put(metaData['name'], metaData['name'])
587
588                         if (App == "App1") {
589                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
590                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
591                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")           
592                         } else {
593                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
594                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
595                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
596                         }
597                         break
598                 case "capability.imageCapture":
599                         if (imageCaptureObjects == 0) {
600                                 imageCaptureObject0 = metaData['name']
601                                 this[imageCaptureObject0] = new ImageCaptures({}, 1)
602                         } else if (imageCaptureObjects == 1) {
603                                 imageCaptureObject1 = metaData['name']
604                                 this[imageCaptureObject1] = new ImageCaptures({}, 1)
605                         } else if (imageCaptureObjects == 2) {
606                                 imageCaptureObject2 = metaData['name']
607                                 this[imageCaptureObject2] = new ImageCaptures({}, 1)
608                         }
609
610                         imageCaptureObjects=imageCaptureObjects+1
611
612                         settings.put(metaData['name'], metaData['name'])
613
614                         if (App == "App1") {
615                                 extractedObjectsApp1.append("//Object for class Image Capture!\n")
616                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
617                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.imageCaptureObject\n")          
618                         } else {
619                                 extractedObjectsApp2.append("//Object for class Image Capture!\n")
620                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
621                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.imageCaptureObject\n")
622                         }
623                         break
624                 case "device.mobilePresence":
625                         break
626                 case "device.aeonKeyFob":
627                         if (aeonKeyFobObjects == 0) {
628                                 aeonKeyFobObject0 = metaData['name']
629                                 this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
630                         } else if (aeonKeyFobObjects == 1) {
631                                 aeonKeyFobObject1 = metaData['name']
632                                 this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
633                         } else if (aeonKeyFobObjects == 2) {
634                                 aeonKeyFobObject2 = metaData['name']
635                                 this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
636                         }
637
638                         aeonKeyFobObjects=aeonKeyFobObjects+1
639
640                         settings.put(metaData['name'], metaData['name']) 
641
642                         if (App == "App1") {
643                                 extractedObjectsApp1.append("//Object for class aeon key fob!\n")
644                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
645                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")            
646                         } else {
647                                 extractedObjectsApp2.append("//Object for class aeon key fob!\n")
648                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
649                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
650                         }
651                         break
652                 case "mode":
653                         def randomVariable = Math.abs(new Random().nextInt() % 3)
654                         def modes = ["away", "home", "night"]
655                         def userInput = modes[randomVariable]
656
657                         if (modeVariables == 0) {
658                                 mode0 = metaData['name']
659                                 this[mode0] = userInput
660                         } else if (modeVariables == 1) {
661                                 mode1 = metaData['name']
662                                 this[mode1] = userInput
663                         } else if (modeVariables == 2) {
664                                 mode2 = metaData['name']
665                                 this[mode2] = userInput
666                         } else if (modeVariables == 3) {
667                                 mode3 = metaData['name']
668                                 this[mode3] = userInput
669                         } else if (modeVariables == 4) {
670                                 mode4 = metaData['name']
671                                 this[mode4] = userInput
672                         } else if (modeVariables == 5) {
673                                 mode5 = metaData['name']
674                                 this[mode5] = userInput
675                         }
676
677                         modeVariables=modeVariables+1
678
679                         settings.put(metaData['name'], metaData['name'])
680
681                         if (App == "App1") {                    
682                                 extractedObjectsApp1.append("//Global variable for mode!\n")
683                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
684                         } else {
685                                 extractedObjectsApp2.append("//Global variable for mode!\n")
686                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
687                         }
688                         break
689                 case "decimal":
690                         def userInput = Math.abs(new Random().nextInt() % 60) + 40
691                         
692                         if (decimalVariables == 0) {
693                                 decimal0 = metaData['name']
694                                 this[decimal0] = userInput
695                         } else if (decimalVariables == 1) {
696                                 decimal1 = metaData['name']
697                                 this[decimal1] = userInput
698                         } else if (decimalVariables == 2) {
699                                 decimal2 = metaData['name']
700                                 this[decimal2] = userInput
701                         } else if (decimalVariables == 3) {
702                                 decimal3 = metaData['name']
703                                 this[decimal3] = userInput
704                         } else if (decimalVariables == 4) {
705                                 decimal4 = metaData['name']
706                                 this[decimal4] = userInput
707                         } else if (decimalVariables == 5) {
708                                 decimal5 = metaData['name']
709                                 this[decimal5] = userInput
710                         }
711
712                         decimalVariables=decimalVariables+1
713
714                         settings.put(metaData['name'], metaData['name'])
715
716                         if (App == "App1") {                    
717                                 extractedObjectsApp1.append("//Global variable for decimal number!\n")
718                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
719                         } else {
720                                 extractedObjectsApp2.append("//Global variable for decimal number!\n")
721                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
722                         }
723                         break
724                 case "text":
725                         def userInput = "This is just a text!"
726         
727                         if (textVariables == 0) {
728                                 text0 = metaData['name']
729                                 this[text0] = userInput
730                         } else if (textVariables == 1) {
731                                 text1 = metaData['name']
732                                 this[text1] = userInput
733                         } else if (textVariables == 2) {
734                                 text2 = metaData['name']
735                                 this[text2] = userInput
736                         } else if (textVariables == 3) {
737                                 text3 = metaData['name']
738                                 this[text3] = userInput
739                         } else if (textVariables == 4) {
740                                 text4 = metaData['name']
741                                 this[text4] = userInput
742                         } else if (textVariables == 5) {
743                                 text5 = metaData['name']
744                                 this[text5] = userInput
745                         }
746
747                         textVariables=textVariables+1
748
749                         settings.put(metaData['name'], metaData['name'])
750
751                         if (App == "App1") {                    
752                                 extractedObjectsApp1.append("//Global variable for text!\n")
753                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
754                         } else {
755                                 extractedObjectsApp2.append("//Global variable for text!\n")
756                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
757                         }
758                         break
759                 case "number":
760                         def userInput = Math.abs(new Random().nextInt() % 60) + 40
761                         
762                         if (numberVariables == 0) {
763                                 number0 = metaData['name']
764                                 this[number0] = userInput
765                         } else if (numberVariables == 1) {
766                                 number1 = metaData['name']
767                                 this[number1] = userInput
768                         } else if (numberVariables == 2) {
769                                 number2 = metaData['name']
770                                 this[number2] = userInput
771                         } else if (numberVariables == 3) {
772                                 number3 = metaData['name']
773                                 this[number3] = userInput
774                         } else if (numberVariables == 4) {
775                                 number4 = metaData['name']
776                                 this[number4] = userInput
777                         } else if (numberVariables == 5) {
778                                 number5 = metaData['name']
779                                 this[number5] = userInput
780                         }
781
782                         numberVariables=numberVariables+1
783
784                         settings.put(metaData['name'], metaData['name'])
785
786                         if (App == "App1") {                    
787                                 extractedObjectsApp1.append("//Global variable for number!\n")
788                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
789                         } else {
790                                 extractedObjectsApp2.append("//Global variable for number!\n")
791                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
792                         }
793                         break
794                 case "time":
795                         def userInput = "15:00"
796                         
797                         if (timeVariables == 0) {
798                                 time0 = metaData['name']
799                                 this[time0] = userInput
800                         } else if (timeVariables == 1) {
801                                 time1 = metaData['name']
802                                 this[time1] = userInput
803                         } else if (timeVariables == 2) {
804                                 time2 = metaData['name']
805                                 this[time2] = userInput
806                         } else if (timeVariables == 3) {
807                                 time3 = metaData['name']
808                                 this[time3] = userInput
809                         } else if (timeVariables == 4) {
810                                 time4 = metaData['name']
811                                 this[time4] = userInput
812                         } else if (timeVariables == 5) {
813                                 time5 = metaData['name']
814                                 this[time5] = userInput
815                         }
816
817                         timeVariables=timeVariables+1
818
819                         settings.put(metaData['name'], metaData['name'])
820
821                         if (App == "App1") {                    
822                                 extractedObjectsApp1.append("//Global variable for time!\n")
823                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
824                         } else {
825                                 extractedObjectsApp2.append("//Global variable for time!\n")
826                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
827                         }
828                         break
829                 case "enum":
830                         def randomVariable = Math.abs(new Random().nextInt() % 2)
831                         def modes = ["Yes", "No"]
832                         def userInput = modes[randomVariable]
833         
834                         if (enumVariables == 0) {
835                                 enum0 = metaData['name']
836                                 this[enum0] = userInput
837                         } else if (enumVariables == 1) {
838                                 enum1 = metaData['name']
839                                 this[enum1] = userInput
840                         } else if (enumVariables == 2) {
841                                 enum2 = metaData['name']
842                                 this[enum2] = userInput
843                         } else if (enumVariables == 3) {
844                                 enum3 = metaData['name']
845                                 this[enum3] = userInput
846                         } else if (enumVariables == 4) {
847                                 enum4 = metaData['name']
848                                 this[enum4] = userInput
849                         } else if (enumVariables == 5) {
850                                 enum5 = metaData['name']
851                                 this[enum5] = userInput
852                         }
853
854                         enumVariables=enumVariables+1
855
856                         settings.put(metaData['name'], metaData['name'])
857
858                         if (App == "App1") {                    
859                                 extractedObjectsApp1.append("//Global variable for enum!\n")
860                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
861                         } else {
862                                 extractedObjectsApp2.append("//Global variable for enum!\n")
863                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
864                         }
865                         break
866                 case "bool":
867                         def userInput = Math.abs(new Random().nextInt() % 2)
868         
869                         if (boolVariables == 0) {
870                                 bool0 = metaData['name']
871                                 this[bool0] = userInput
872                         } else if (boolVariables == 1) {
873                                 bool1 = metaData['name']
874                                 this[bool1] = userInput
875                         } else if (boolVariables == 2) {
876                                 bool2 = metaData['name']
877                                 this[bool2] = userInput
878                         } else if (boolVariables == 3) {
879                                 bool3 = metaData['name']
880                                 this[bool3] = userInput
881                         } else if (boolVariables == 4) {
882                                 bool4 = metaData['name']
883                                 this[bool4] = userInput
884                         } else if (boolVariables == 5) {
885                                 bool5 = metaData['name']
886                                 this[bool5] = userInput
887                         }
888
889                         boolVariables=boolVariables+1
890
891                         settings.put(metaData['name'], metaData['name'])
892
893                         if (App == "App1") {                    
894                                 extractedObjectsApp1.append("//Global variable for boolean!\n")
895                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
896                         } else {
897                                 extractedObjectsApp2.append("//Global variable for boolean!\n")
898                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
899                         }
900                         break
901                 case "phone":
902                         def userInput = 9495379373
903
904                         if (phoneVariables == 0) {
905                                 phone0 = metaData['name']
906                                 this[phone0] = userInput
907                         } else if (phoneVariables == 1) {
908                                 phone1 = metaData['name']
909                                 this[phone1] = userInput
910                         } else if (phoneVariables == 2) {
911                                 phone2 = metaData['name']
912                                 this[phone2] = userInput
913                         } else if (phoneVariables == 3) {
914                                 phone3 = metaData['name']
915                                 this[phone3] = userInput
916                         } else if (phoneVariables == 4) {
917                                 phone4 = metaData['name']
918                                 this[phone4] = userInput
919                         } else if (phoneVariables == 5) {
920                                 phone5 = metaData['name']
921                                 this[phone5] = userInput
922                         }
923
924                         phoneVariables=phoneVariables+1
925
926                         settings.put(metaData['name'], metaData['name'])
927
928                         if (App == "App1") {                    
929                                 extractedObjectsApp1.append("//Global variable for phone!\n")
930                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
931                         } else {
932                                 extractedObjectsApp2.append("//Global variable for phone!\n")
933                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
934                         }
935                         break
936                 case "contact":
937                         def userInput = "AJ"
938         
939                         if (contactVariables == 0) {
940                                 contact0 = metaData['name']
941                                 this[contact0] = userInput
942                         } else if (contactVariables == 1) {
943                                 contact1 = metaData['name']
944                                 this[contact1] = userInput
945                         } else if (contactVariables == 2) {
946                                 contact2 = metaData['name']
947                                 this[contact2] = userInput
948                         } else if (contactVariables == 3) {
949                                 contact3 = metaData['name']
950                                 this[contact3] = userInput
951                         } else if (contactVariables == 4) {
952                                 contact4 = metaData['name']
953                                 this[contact4] = userInput
954                         } else if (contactVariables == 5) {
955                                 contact5 = metaData['name']
956                                 this[contact5] = userInput
957                         }
958
959                         contactVariables=contactVariables+1
960
961                         settings.put(metaData['name'], metaData['name'])
962
963                         if (App == "App1") {                    
964                                 extractedObjectsApp1.append("//Global variable for contact!\n")
965                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
966                         } else {
967                                 extractedObjectsApp2.append("//Global variable for contact!\n")
968                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
969                         }
970                         break
971                 default:
972                         break
973         }
974 }
975
976 def label(LinkedHashMap metaData) {
977         if (metaData.containsKey('title')) {
978                 println metaData['title']
979         }
980         if (metaData.containsKey('options')) {
981                 println "Options: "+metaData['options']
982         }
983
984         println("//IGNORE--ForMobileUse//")
985 }
986
987 def mode(LinkedHashMap metaData) {
988         if (metaData.containsKey('title')) {
989                 println metaData['title']
990         }
991         if (metaData.containsKey('options')) {
992                 println "Options: "+metaData['options']
993         }
994
995         println("//IGNORE--ForMobileUse//")
996 }
997
998 def href(LinkedHashMap metaData) {
999         println("//IGNORE--some data//")
1000 }
1001 /////Input Methods/////
1002
1003
1004 /////MethodsForExtraction/////
1005 def definition(LinkedHashMap metaData) {
1006         println("///Just some information///")
1007 }
1008
1009 def preferences(Closure inputData) {
1010         find(inputData) //Run the closure to extract pages/sections/inputMethods
1011         if (App == "App1") {                    
1012                 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
1013                 extractedObjectsConstructorApp1.append("settings = $settings\n")
1014         } else {
1015                 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
1016                 extractedObjectsConstructorApp2.append("settings = $settings\n")
1017         }
1018 }
1019
1020 def page(LinkedHashMap metaData, Closure inputData) {
1021         if (metaData.containsKey('name'))
1022                 println(metaData['name'])
1023         if (metaData.containsKey('title'))
1024                 println(metaData['title'])
1025
1026         find(inputData) //Run the closure to extract sections/inputMethods
1027 }
1028
1029 def page(LinkedHashMap metaData) {
1030         def nameOfFunction = metaData['name']
1031         "$nameOfFunction"() //Call the page     
1032 }
1033
1034 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
1035         if (metaData.containsKey('name'))
1036                 println(metaData['name'])
1037         if (metaData.containsKey('title'))
1038                 println(metaData['title'])
1039
1040         find(inputData) //Run the closure to extract sections/inputMethods
1041 }
1042
1043 def paragraph(String paragraphText) {
1044         println(paragraphText)
1045 }
1046
1047 def section(String title, Closure inputData) {
1048         println(title)
1049         find(inputData) //Run the closure to extract inputMethods
1050 }
1051
1052 def section(Closure inputData) {
1053         find(inputData) //Run the closure to extract inputMethods
1054 }
1055
1056 def section(LinkedHashMap metaData, Closure inputData) {
1057         find(inputData) //Run the closure to extract inputMethods
1058 }
1059 /////MethodsForExtraction/////
1060