Commit #9: extension to the infrastructure with more devices + minor changes in extra...
[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 Timer.SimulatedTimer
30
31 //GlobalVariables
32 @Field def location = new LocationVar()
33 //Settings variable defined to settings on purpose
34 @Field def settings = [app: "app"]
35 //Global variable for state[mode]
36 @Field def state = [home:[],away:[],night:[]]
37 //Create a global logger object for methods
38 @Field def log = new Logger()
39
40
41 //Global variables for files
42 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
43 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
44 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
45 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
46
47
48 //Empty the files
49 if (App == "App1") {
50         extractedObjectsApp1.write("")
51         extractedObjectsConstructorApp1.write("")
52 } else if (App == "App2") {
53         extractedObjectsApp2.write("")
54         extractedObjectsConstructorApp2.write("")
55 }
56
57
58
59
60
61 //Global objects
62 //Global Object for class Touch Sensor!
63 @Field touchSensorObjects = 0
64 @Field def touchSensorObject0
65 @Field def touchSensorObject1
66 @Field def touchSensorObject2
67 //Global Object for class switch!
68 @Field switchObjects = 0
69 @Field def switchObject0
70 @Field def switchObject1
71 @Field def switchObject2
72 //Global Object for class lock!
73 @Field lockObjects = 0
74 @Field def lockObject0
75 @Field def lockObject1
76 @Field def lockObject2
77 //Global Object for class door control!
78 @Field doorControlObjects = 0
79 @Field def doorControlObject0
80 @Field def doorControlObject1
81 @Field def doorControlObject2
82 //Global Object for class contact sensor!
83 @Field contactObjects = 0
84 @Field def contactObject0
85 @Field def contactObject1
86 @Field def contactObject2
87 //Global Object for class presence sensor!
88 @Field presenceSensorObjects = 0
89 @Field def presenceSensorObject0
90 @Field def presenceSensorObject1
91 @Field def presenceSensorObject2
92 //Global Object for class thermostat!
93 @Field thermostatObjects = 0
94 @Field def thermostatObject0
95 @Field def thermostatObject1
96 @Field def thermostatObject2
97 //Global Object for class music player!
98 @Field musicPlayerObjects = 0
99 @Field def musicPlayerObject0
100 @Field def musicPlayerObject1
101 @Field def musicPlayerObject2
102 //Global Object for class music player!
103 @Field aeonKeyFobObjects = 0
104 @Field def aeonKeyFobObject0
105 @Field def aeonKeyFobObject1
106 @Field def aeonKeyFobObject2
107
108
109 //Global variables
110 //For mode
111 @Field modeVariables = 0
112 @Field mode0
113 @Field mode1
114 @Field mode2
115 @Field mode3
116 @Field mode4
117 @Field mode5
118 //For number
119 @Field numberVariables = 0
120 @Field number0
121 @Field number1
122 @Field number2
123 @Field number3
124 @Field number4
125 @Field number5
126 //For time
127 @Field timeVariables = 0
128 @Field time0
129 @Field time1
130 @Field time2
131 @Field time3
132 @Field time4
133 @Field time5
134 //For enum
135 @Field enumVariables = 0
136 @Field enum0
137 @Field enum1
138 @Field enum2
139 @Field enum3
140 @Field enum4
141 @Field enum5
142 //For phone
143 @Field phoneVariables = 0
144 @Field phone0
145 @Field phone1
146 @Field phone2
147 @Field phone3
148 @Field phone4
149 @Field phone5
150 //For contact
151 @Field contactVariables = 0
152 @Field contact0
153 @Field contact1
154 @Field contact2
155 @Field contact3
156 @Field contact4
157 @Field contact5
158
159
160
161 /////Input Methods/////
162 //input "",""
163 def input(String name, String type) {
164         LinkedHashMap metaData = []
165         metaData.put('name',name)
166         metaData.put('type',type)
167         input(metaData)
168 }
169
170 //input "","",linkedHashMap
171 def input(LinkedHashMap metaData, String name, String type) {
172         metaData.put('name',name)
173         metaData.put('type',type)
174         input(metaData)
175 }
176
177 //input linkedHashMap
178 def input(LinkedHashMap metaData) {
179         if (metaData.containsKey('title')) {
180                 println metaData['title']
181         }
182         if (metaData.containsKey('options')) {
183                 println "Options: "+metaData['options']
184         }
185         switch(metaData['type']) {
186                 case "capability.lock":
187                         if (lockObjects == 0) {
188                                 lockObject0 = metaData['name']
189                                 this[lockObject0] = new Locks({}, 1)
190                         } else if (lockObjects == 1) {
191                                 lockObject1 = metaData['name']
192                                 this[lockObject1] = new Locks({}, 1)
193                         } else if (lockObjects == 2) {
194                                 lockObject2 = metaData['name']
195                                 this[lockObject2] = new Locks({}, 1)
196                         }
197
198                         lockObjects=lockObjects+1
199
200                         settings.put(metaData['name'], metaData['name']) 
201
202                         if (App == "App1") {
203                                 extractedObjectsApp1.append("//Object for class lock!\n")
204                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
205                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")          
206                         } else {
207                                 extractedObjectsApp2.append("//Object for class lock!\n")
208                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
209                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
210                         }
211                         break
212                 case "capability.alarm":
213                         break
214                 case "capability.battery":
215                         break
216                 case "capability.beacon":
217                         break
218                 case "capability.carbonMonoxideDetector":
219                         break
220                 case "capability.colorControl":
221                         break
222                 case "capability.contactSensor":
223                         if (contactObjects == 0) {
224                                 contactObject0 = metaData['name']
225                                 this[contactObject0] = new ContactSensors({}, 1)
226                         } else if (contactObjects == 1) {
227                                 contactObject1 = metaData['name']
228                                 this[contactObject1] = new ContactSensors({}, 1)
229                         } else if (contactObjects == 2) {
230                                 contactObject2 = metaData['name']
231                                 this[contactObject2] = new ContactSensors({}, 1)
232                         }
233
234                         contactObjects=contactObjects+1
235
236                         settings.put(metaData['name'], metaData['name'])
237
238                         if (App == "App1") {
239                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
240                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
241                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")               
242                         } else {
243                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
244                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
245                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
246                         }
247                         break
248                 case "capability.doorControl":
249                         if (doorControlObjects == 0) {
250                                 doorControlObject0 = metaData['name']
251                                 this[doorControlObject0] = new DoorControls({}, 1)
252                         } else if (doorControlObjects == 1) {
253                                 doorControlObject1 = metaData['name']
254                                 this[doorControlObject1] = new DoorControls({}, 1)
255                         } else if (doorControlObjects == 2) {
256                                 doorControlObject2 = metaData['name']
257                                 this[doorControlObject2] = new DoorControls({}, 1)
258                         }
259
260                         doorControlObjects=doorControlObjects+1
261
262                         settings.put(metaData['name'], metaData['name'])
263
264                         if (App == "App1") {
265                                 extractedObjectsApp1.append("//Object for class door control!\n")
266                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
267                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")           
268                         } else {
269                                 extractedObjectsApp2.append("//Object for class door control!\n")
270                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
271                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
272                         }
273                         break
274                 case "capability.energyMeter":
275                         break
276                 case "capability.illuminanceMeasurement":
277                         break
278                 case "capability.accelerationSensor":
279                         break
280                 case "capability.motionSensor":
281                         break
282                 case "capability.musicPlayer":
283                         if (musicPlayerObjects == 0) {
284                                 musicPlayerObject0 = metaData['name']
285                                 this[musicPlayerObject0] = new MusicPlayers({}, 1)
286                         } else if (musicPlayerObjects == 1) {
287                                 musicPlayerObject1 = metaData['name']
288                                 this[musicPlayerObject1] = new MusicPlayers({}, 1)
289                         } else if (musicPlayerObjects == 2) {
290                                 musicPlayerObject2 = metaData['name']
291                                 this[musicPlayerObject2] = new MusicPlayers({}, 1)
292                         }
293
294                         musicPlayerObjects=musicPlayerObjects+1
295
296                         settings.put(metaData['name'], metaData['name']) 
297
298                         if (App == "App1") {
299                                 extractedObjectsApp1.append("//Object for class music player!\n")
300                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
301                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")           
302                         } else {
303                                 extractedObjectsApp2.append("//Object for class music player!\n")
304                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
305                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
306                         }
307                         break
308                 case "capability.powerMeter":
309                         break
310                 case "capability.presenceSensor":
311                         if (presenceSensorObjects == 0) {
312                                 presenceSensorObject0 = metaData['name']
313                                 this[presenceSensorObject0] = new PresenceSensors({}, 1)
314                         } else if (presenceSensorObjects == 1) {
315                                 presenceSensorObject1 = metaData['name']
316                                 this[presenceSensorObject1] = new PresenceSensors({}, 1)
317                         } else if (presenceSensorObjects == 2) {
318                                 presenceSensorObject2 = metaData['name']
319                                 this[presenceSensorObject2] = new PresenceSensors({}, 1)
320                         }
321
322                         presenceSensorObjects=presenceSensorObjects+1
323
324                         settings.put(metaData['name'], metaData['name'])
325
326                         if (App == "App1") {
327                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
328                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
329                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")                
330                         } else {
331                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
332                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
333                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
334                         }
335                         break
336                 case "capability.relativeHumidityMeasurement":
337                         break
338                 case "capability.relaySwitch":
339                         break
340                 case "capability.sleepSensor":
341                         break
342                 case "capability.smokeDetector":
343                         break
344                 case "capability.stepSensor":
345                         break
346                 case "capability.switch":
347                         if (switchObjects == 0) {
348                                 switchObject0 = metaData['name']
349                                 this[switchObject0] = new Switches({}, 1)
350                         } else if (switchObjects == 1) {
351                                 switchObject1 = metaData['name']
352                                 this[switchObject1] = new Switches({}, 1)
353                         } else if (switchObjects == 2) {
354                                 switchObject2 = metaData['name']
355                                 this[switchObject2] = new Switches({}, 1)
356                         }
357
358                         switchObjects=switchObjects+1
359                         
360                         settings.put(metaData['name'], metaData['name'])
361
362                         if (App == "App1") {
363                                 extractedObjectsApp1.append("//Object for class switch!\n")
364                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
365                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")                
366                         } else {
367                                 extractedObjectsApp2.append("//Object for class switch!\n")
368                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
369                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
370                         }
371                         break
372                 case "capability.switchLevel":
373                         break
374                 case "capability.temperatureMeasurement":
375                         break
376                 case "capability.thermostat":
377                         if (thermostatObjects == 0) {
378                                 thermostatObject0 = metaData['name']
379                                 this[thermostatObject0] = new Thermostats({}, 1)
380                         } else if (thermostatObjects == 1) {
381                                 thermostatObject1 = metaData['name']
382                                 this[thermostatObject1] = new Thermostats({}, 1)
383                         } else if (thermostatObjects == 2) {
384                                 thermostatObject2 = metaData['name']
385                                 this[thermostatObject2] = new Thermostats({}, 1)
386                         }
387
388                         thermostatObjects=thermostatObjects+1
389
390                         settings.put(metaData['name'], metaData['name'])
391
392                         if (App == "App1") {
393                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
394                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
395                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")            
396                         } else {
397                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
398                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
399                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
400                         }
401                         break
402                 case "capability.valve":
403                         break
404                 case "capability.waterSensor":
405                         break
406                 case "capability.touchSensor":
407                         if (touchSensorObjects == 0) {
408                                 touchSensorObject0 = metaData['name']
409                                 this[touchSensorObject0] = new NfcTouch({}, 1)
410                         } else if (touchSensorObjects == 1) {
411                                 touchSensorObject1 = metaData['name']
412                                 this[touchSensorObject1] = new NfcTouch({}, 1)
413                         } else if (touchSensorObjects == 2) {
414                                 touchSensorObject2 = metaData['name']
415                                 this[touchSensorObject2] = new NfcTouch({}, 1)
416                         }
417
418                         touchSensorObjects=touchSensorObjects+1
419
420                         settings.put(metaData['name'], metaData['name'])
421
422                         if (App == "App1") {
423                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
424                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
425                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")           
426                         } else {
427                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
428                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
429                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
430                         }
431                         break
432                 case "capability.imageCapture":
433                         break
434                 case "device.mobilePresence":
435                         break
436                 case "device.aeonKeyFob":
437                         if (aeonKeyFobObjects == 0) {
438                                 aeonKeyFobObject0 = metaData['name']
439                                 this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
440                         } else if (aeonKeyFobObjects == 1) {
441                                 aeonKeyFobObject1 = metaData['name']
442                                 this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
443                         } else if (aeonKeyFobObjects == 2) {
444                                 aeonKeyFobObject2 = metaData['name']
445                                 this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
446                         }
447
448                         aeonKeyFobObjects=aeonKeyFobObjects+1
449
450                         settings.put(metaData['name'], metaData['name']) 
451
452                         if (App == "App1") {
453                                 extractedObjectsApp1.append("//Object for class aeon key fob!\n")
454                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
455                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")            
456                         } else {
457                                 extractedObjectsApp2.append("//Object for class aeon key fob!\n")
458                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
459                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
460                         }
461                         break
462                 case "mode":
463                         def userInput = System.console().readLine 'Enter the mode:'
464
465                         if (modeVariables == 0) {
466                                 mode0 = metaData['name']
467                                 this[mode0] = userInput
468                         } else if (modeVariables == 1) {
469                                 mode1 = metaData['name']
470                                 this[mode1] = userInput
471                         } else if (modeVariables == 2) {
472                                 mode2 = metaData['name']
473                                 this[mode2] = userInput
474                         } else if (modeVariables == 3) {
475                                 mode3 = metaData['name']
476                                 this[mode3] = userInput
477                         } else if (modeVariables == 4) {
478                                 mode4 = metaData['name']
479                                 this[mode4] = userInput
480                         } else if (modeVariables == 5) {
481                                 mode5 = metaData['name']
482                                 this[mode5] = userInput
483                         }
484
485                         modeVariables=modeVariables+1
486
487                         settings.put(metaData['name'], metaData['name'])
488
489                         if (App == "App1") {                    
490                                 extractedObjectsApp1.append("//Global variable for mode!\n")
491                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
492                         } else {
493                                 extractedObjectsApp2.append("//Global variable for mode!\n")
494                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
495                         }
496                         break
497                 case "decimal":
498                         break
499                 case "text":
500                         break
501                 case "number":
502                         def userInput = System.console().readLine 'Enter the number:'
503                         
504                         if (numberVariables == 0) {
505                                 number0 = metaData['name']
506                                 this[number0] = userInput
507                         } else if (numberVariables == 1) {
508                                 number1 = metaData['name']
509                                 this[number1] = userInput
510                         } else if (numberVariables == 2) {
511                                 number2 = metaData['name']
512                                 this[number2] = userInput
513                         } else if (numberVariables == 3) {
514                                 number3 = metaData['name']
515                                 this[number3] = userInput
516                         } else if (numberVariables == 4) {
517                                 number4 = metaData['name']
518                                 this[number4] = userInput
519                         } else if (numberVariables == 5) {
520                                 number5 = metaData['name']
521                                 this[number5] = userInput
522                         }
523
524                         numberVariables=numberVariables+1
525
526                         settings.put(metaData['name'], metaData['name'])
527
528                         if (App == "App1") {                    
529                                 extractedObjectsApp1.append("//Global variable for number!\n")
530                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
531                         } else {
532                                 extractedObjectsApp2.append("//Global variable for number!\n")
533                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
534                         }
535                         break
536                 case "time":
537                         def userInput = System.console().readLine 'Enter the time:'
538                         
539                         if (timeVariables == 0) {
540                                 time0 = metaData['name']
541                                 this[time0] = userInput
542                         } else if (timeVariables == 1) {
543                                 time1 = metaData['name']
544                                 this[time1] = userInput
545                         } else if (timeVariables == 2) {
546                                 time2 = metaData['name']
547                                 this[time2] = userInput
548                         } else if (timeVariables == 3) {
549                                 time3 = metaData['name']
550                                 this[time3] = userInput
551                         } else if (timeVariables == 4) {
552                                 time4 = metaData['name']
553                                 this[time4] = userInput
554                         } else if (timeVariables == 5) {
555                                 time5 = metaData['name']
556                                 this[time5] = userInput
557                         }
558
559                         timeVariables=timeVariables+1
560
561                         settings.put(metaData['name'], metaData['name'])
562
563                         if (App == "App1") {                    
564                                 extractedObjectsApp1.append("//Global variable for time!\n")
565                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
566                         } else {
567                                 extractedObjectsApp2.append("//Global variable for time!\n")
568                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
569                         }
570                         break
571                 case "enum":
572                         def userInput = System.console().readLine 'Enter the enum:'
573         
574                         if (enumVariables == 0) {
575                                 enum0 = metaData['name']
576                                 this[enum0] = userInput
577                         } else if (enumVariables == 1) {
578                                 enum1 = metaData['name']
579                                 this[enum1] = userInput
580                         } else if (enumVariables == 2) {
581                                 enum2 = metaData['name']
582                                 this[enum2] = userInput
583                         } else if (enumVariables == 3) {
584                                 enum3 = metaData['name']
585                                 this[enum3] = userInput
586                         } else if (enumVariables == 4) {
587                                 enum4 = metaData['name']
588                                 this[enum4] = userInput
589                         } else if (enumVariables == 5) {
590                                 enum5 = metaData['name']
591                                 this[enum5] = userInput
592                         }
593
594                         enumVariables=enumVariables+1
595
596                         settings.put(metaData['name'], metaData['name'])
597
598                         if (App == "App1") {                    
599                                 extractedObjectsApp1.append("//Global variable for enum!\n")
600                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
601                         } else {
602                                 extractedObjectsApp2.append("//Global variable for enum!\n")
603                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
604                         }
605                         break
606                 case "bool":
607                         break
608                 case "phone":
609                         def userInput = System.console().readLine 'Enter the phone:'
610
611                         if (phoneVariables == 0) {
612                                 phone0 = metaData['name']
613                                 this[phone0] = userInput
614                         } else if (phoneVariables == 1) {
615                                 phone1 = metaData['name']
616                                 this[phone1] = userInput
617                         } else if (phoneVariables == 2) {
618                                 phone2 = metaData['name']
619                                 this[phone2] = userInput
620                         } else if (phoneVariables == 3) {
621                                 phone3 = metaData['name']
622                                 this[phone3] = userInput
623                         } else if (phoneVariables == 4) {
624                                 phone4 = metaData['name']
625                                 this[phone4] = userInput
626                         } else if (phoneVariables == 5) {
627                                 phone5 = metaData['name']
628                                 this[phone5] = userInput
629                         }
630
631                         phoneVariables=phoneVariables+1
632
633                         settings.put(metaData['name'], metaData['name'])
634
635                         if (App == "App1") {                    
636                                 extractedObjectsApp1.append("//Global variable for phone!\n")
637                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
638                         } else {
639                                 extractedObjectsApp2.append("//Global variable for phone!\n")
640                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
641                         }
642                         break
643                 case "contact":
644                         def userInput = System.console().readLine 'Enter the metaData['name'] of the contact:'
645         
646                         if (contactVariables == 0) {
647                                 contact0 = metaData['name']
648                                 this[contact0] = userInput
649                         } else if (contactVariables == 1) {
650                                 contact1 = metaData['name']
651                                 this[contact1] = userInput
652                         } else if (contactVariables == 2) {
653                                 contact2 = metaData['name']
654                                 this[contact2] = userInput
655                         } else if (contactVariables == 3) {
656                                 contact3 = metaData['name']
657                                 this[contact3] = userInput
658                         } else if (contactVariables == 4) {
659                                 contact4 = metaData['name']
660                                 this[contact4] = userInput
661                         } else if (contactVariables == 5) {
662                                 contact5 = metaData['name']
663                                 this[contact5] = userInput
664                         }
665
666                         contactVariables=contactVariables+1
667
668                         settings.put(metaData['name'], metaData['name'])
669
670                         if (App == "App1") {                    
671                                 extractedObjectsApp1.append("//Global variable for contact!\n")
672                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
673                         } else {
674                                 extractedObjectsApp2.append("//Global variable for contact!\n")
675                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
676                         }
677                         break
678                 default:
679                         break
680         }
681 }
682
683 def label(LinkedHashMap metaData) {
684         if (metaData.containsKey('title')) {
685                 println metaData['title']
686         }
687         if (metaData.containsKey('options')) {
688                 println "Options: "+metaData['options']
689         }
690
691         println("//IGNORE--ForMobileUse//")
692 }
693
694 def mode(LinkedHashMap metaData) {
695         if (metaData.containsKey('title')) {
696                 println metaData['title']
697         }
698         if (metaData.containsKey('options')) {
699                 println "Options: "+metaData['options']
700         }
701
702         println("//IGNORE--ForMobileUse//")
703 }
704 /////Input Methods/////
705
706
707 /////MethodsForExtraction/////
708 def definition(LinkedHashMap metaData) {
709         println("///Just some information///")
710 }
711
712 def preferences(Closure inputData) {
713         find(inputData) //Run the closure to extract pages/sections/inputMethods
714         if (App == "App1") {                    
715                 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
716                 extractedObjectsConstructorApp1.append("settings = $settings\n")
717         } else {
718                 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
719                 extractedObjectsConstructorApp2.append("settings = $settings\n")
720         }
721 }
722
723 def page(LinkedHashMap metaData, Closure inputData) {
724         if (metaData.containsKey('name'))
725                 println(metaData['name'])
726         if (metaData.containsKey('title'))
727                 println(metaData['title'])
728
729         find(inputData) //Run the closure to extract sections/inputMethods
730 }
731
732 def page(LinkedHashMap metaData) {
733         def nameOfFunction = metaData['name']
734         "$nameOfFunction"() //Call the page     
735 }
736
737 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
738         if (metaData.containsKey('name'))
739                 println(metaData['name'])
740         if (metaData.containsKey('title'))
741                 println(metaData['title'])
742
743         find(inputData) //Run the closure to extract sections/inputMethods
744 }
745
746 def section(String title, Closure inputData) {
747         println(title)
748         find(inputData) //Run the closure to extract inputMethods
749 }
750
751 def section(Closure inputData) {
752         find(inputData) //Run the closure to extract inputMethods
753 }
754
755 def section(LinkedHashMap metaData, Closure inputData) {
756         find(inputData) //Run the closure to extract inputMethods
757 }
758 /////MethodsForExtraction/////
759