Commit #8: New version of extractor with running the preferences method make things...
[smartthings-infrastructure.git] / Extractor / extractorFile.groovy
1 ////////////////////@Field App
2 App = "App2"
3 ////////////////////////////////////////
4 //import libraries
5 import groovy.transform.Field
6
7
8 //import classes
9 //Importing Classes
10 import ContactSensor.ContactSensor
11 import ContactSensor.ContactSensors
12 import DoorControl.DoorControl
13 import DoorControl.DoorControls
14 import Lock.Lock
15 import Lock.Locks
16 import Thermostat.Thermostat
17 import Thermostat.Thermostats
18 import Switch.Switch
19 import Switch.Switches
20 import PresenceSensor.PresenceSensor
21 import PresenceSensor.PresenceSensors
22 import Logger.Logger
23 import Location.LocationVar
24 import Location.Phrase
25 import appTouch.Touched
26 import NfcTouch.NfcTouch
27 import Timer.SimulatedTimer
28
29
30 @Field App //Default
31
32
33 //Global variables for files
34 @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy")
35 @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy")
36 @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy")
37 @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy")
38
39
40 //Empty the files
41 if (App == "App1") {
42         extractedObjectsApp1.write("")
43         extractedObjectsConstructorApp1.write("")
44 } else if (App == "App2") {
45         extractedObjectsApp2.write("")
46         extractedObjectsConstructorApp2.write("")
47 }
48
49
50
51
52
53 //Global objects
54 //Global Object for class Touch Sensor!
55 @Field def touchSensorObject
56 //Global Object for class switch!
57 @Field def switchObject
58 //Global Object for class lock!
59 @Field def lockObject
60 //Global Object for class door control!
61 @Field def doorControlObject
62 //Global Object for class contact sensor!
63 @Field def contactObject
64 //Global Object for class presence sensor!
65 @Field def presenceSensorObject
66 //Global Object for class thermostat!
67 @Field def thermostatObject
68
69
70 //Global variables
71 //For mode
72 @Field modeVariables = 0
73 @Field mode0
74 @Field mode1
75 @Field mode2
76 @Field mode3
77 @Field mode4
78 @Field mode5
79 //For number
80 @Field numberVariables = 0
81 @Field number0
82 @Field number1
83 @Field number2
84 @Field number3
85 @Field number4
86 @Field number5
87 //For time
88 @Field timeVariables = 0
89 @Field time0
90 @Field time1
91 @Field time2
92 @Field time3
93 @Field time4
94 @Field time5
95 //For enum
96 @Field enumVariables = 0
97 @Field enum0
98 @Field enum1
99 @Field enum2
100 @Field enum3
101 @Field enum4
102 @Field enum5
103 //For phone
104 @Field phoneVariables = 0
105 @Field phone0
106 @Field phone1
107 @Field phone2
108 @Field phone3
109 @Field phone4
110 @Field phone5
111 //For contact
112 @Field contactVariables = 0
113 @Field contact0
114 @Field contact1
115 @Field contact2
116 @Field contact3
117 @Field contact4
118 @Field contact5
119
120
121
122 /////Input Methods/////
123 //input "",""
124 def input(String name, String type) {
125         switch(type) {
126                 case "capability.lock":
127                         lockObject = name
128                         this[lockObject] = new Locks({}, 1)
129                         if (App == "App1") {
130                                 extractedObjectsApp1.append("//Object for class lock!\n")
131                                 extractedObjectsApp1.append("def "+name+"\n")
132                                 extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n")              
133                         } else {
134                                 extractedObjectsApp2.append("//Object for class lock!\n")
135                                 extractedObjectsApp2.append("def "+name+"\n")
136                                 extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n")
137                         }
138                         break
139                 case "capability.alarm":
140                         break
141                 case "capability.battery":
142                         break
143                 case "capability.beacon":
144                         break
145                 case "capability.carbonMonoxideDetector":
146                         break
147                 case "capability.colorControl":
148                         break
149                 case "capability.contactSensor":
150                         contactObject = name
151                         this[contactObject] = new ContactSensors({}, 1)
152                         if (App == "App1") {
153                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
154                                 extractedObjectsApp1.append("def "+name+"\n")
155                                 extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n")           
156                         } else {
157                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
158                                 extractedObjectsApp2.append("def "+name+"\n")
159                                 extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n")
160                         }
161                         break
162                 case "capability.doorControl":
163                         doorControlObject = name
164                         this[doorControlObject] = new DoorControls({}, 1)
165                         if (App == "App1") {
166                                 extractedObjectsApp1.append("//Object for class door control!\n")
167                                 extractedObjectsApp1.append("def "+name+"\n")
168                                 extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n")               
169                         } else {
170                                 extractedObjectsApp2.append("//Object for class door control!\n")
171                                 extractedObjectsApp2.append("def "+name+"\n")
172                                 extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n")
173                         }
174                         break
175                 case "capability.energyMeter":
176                         break
177                 case "capability.illuminanceMeasurement":
178                         break
179                 case "capability.accelerationSensor":
180                         break
181                 case "capability.motionSensor":
182                         break
183                 case "capability.musicPlayer":
184                         break
185                 case "capability.powerMeter":
186                         break
187                 case "capability.presenceSensor":
188                         presenceSensorObject = name
189                         this[presenceSensorObject] = new PresenceSensors({}, 1)
190                         if (App == "App1") {
191                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
192                                 extractedObjectsApp1.append("def "+name+"\n")
193                                 extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n")            
194                         } else {
195                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
196                                 extractedObjectsApp2.append("def "+name+"\n")
197                                 extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n")
198                         }
199                         break
200                 case "capability.relativeHumidityMeasurement":
201                         break
202                 case "capability.relaySwitch":
203                         break
204                 case "capability.sleepSensor":
205                         break
206                 case "capability.smokeDetector":
207                         break
208                 case "capability.stepSensor":
209                         break
210                 case "capability.switch":
211                         switchObject = name
212                         this[switchObject] = new Switches({}, 1)
213                         if (App == "App1") {
214                                 extractedObjectsApp1.append("//Object for class switch!\n")
215                                 extractedObjectsApp1.append("def "+name+"\n")
216                                 extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n")            
217                         } else {
218                                 extractedObjectsApp2.append("//Object for class switch!\n")
219                                 extractedObjectsApp2.append("def "+name+"\n")
220                                 extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n")
221                         }
222                         break
223                 case "capability.switchLevel":
224                         break
225                 case "capability.temperatureMeasurement":
226                         break
227                 case "capability.thermostat":
228                         thermostatObject = name
229                         this[thermostatObject] = new Thermostats({}, 1)
230                         if (App == "App1") {
231                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
232                                 extractedObjectsApp1.append("def "+name+"\n")
233                                 extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n")                
234                         } else {
235                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
236                                 extractedObjectsApp2.append("def "+name+"\n")
237                                 extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n")
238                         }
239                         break
240                 case "capability.valve":
241                         break
242                 case "capability.waterSensor":
243                         break
244                 case "capability.touchSensor":
245                         touchSensorObject = name
246                         this[touchSensorObject] = new NfcTouch({}, 1)
247                         if (App == "App1") {
248                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
249                                 extractedObjectsApp1.append("def "+name+"\n")
250                                 extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n")               
251                         } else {
252                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
253                                 extractedObjectsApp2.append("def "+name+"\n")
254                                 extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n")
255                         }
256                         break
257                 case "capability.imageCapture":
258                         break
259                 case "device.mobilePresence":
260                         break
261                 case "device.aeonKeyFob":
262                         break
263                 case "mode":
264                         def userInput = System.console().readLine 'Enter the mode:'
265
266                         if (modeVariables == 0) {
267                                 mode0 = name
268                                 this[mode0] = userInput
269                         } else if (modeVariables == 1) {
270                                 mode1 = name
271                                 this[mode1] = userInput
272                         } else if (modeVariables == 2) {
273                                 mode2 = name
274                                 this[mode2] = userInput
275                         } else if (modeVariables == 3) {
276                                 mode3 = name
277                                 this[mode3] = userInput
278                         } else if (modeVariables == 4) {
279                                 mode4 = name
280                                 this[mode4] = userInput
281                         } else if (modeVariables == 5) {
282                                 mode5 = name
283                                 this[mode5] = userInput
284                         }
285
286                         if (App == "App1") {                    
287                                 extractedObjectsApp1.append("//Global variable for mode!\n")
288                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
289                         } else {
290                                 extractedObjectsApp2.append("//Global variable for mode!\n")
291                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
292                         }
293                         break
294                 case "decimal":
295                         break
296                 case "text":
297                         break
298                 case "number":
299                         def userInput = System.console().readLine 'Enter the number:'
300                         
301                         if (numberVariables == 0) {
302                                 number0 = name
303                                 this[number0] = userInput
304                         } else if (numberVariables == 1) {
305                                 number1 = name
306                                 this[number1] = userInput
307                         } else if (numberVariables == 2) {
308                                 number2 = name
309                                 this[number2] = userInput
310                         } else if (numberVariables == 3) {
311                                 number3 = name
312                                 this[number3] = userInput
313                         } else if (numberVariables == 4) {
314                                 number4 = name
315                                 this[number4] = userInput
316                         } else if (numberVariables == 5) {
317                                 number5 = name
318                                 this[number5] = userInput
319                         }
320
321                         if (App == "App1") {                    
322                                 extractedObjectsApp1.append("//Global variable for number!\n")
323                                 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
324                         } else {
325                                 extractedObjectsApp2.append("//Global variable for number!\n")
326                                 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
327                         }
328                         break
329                 case "time":
330                         def userInput = System.console().readLine 'Enter the time:'
331                         
332                         if (timeVariables == 0) {
333                                 time0 = name
334                                 this[time0] = userInput
335                         } else if (timeVariables == 1) {
336                                 time1 = name
337                                 this[time1] = userInput
338                         } else if (timeVariables == 2) {
339                                 time2 = name
340                                 this[time2] = userInput
341                         } else if (timeVariables == 3) {
342                                 time3 = name
343                                 this[time3] = userInput
344                         } else if (timeVariables == 4) {
345                                 time4 = name
346                                 this[time4] = userInput
347                         } else if (timeVariables == 5) {
348                                 time5 = name
349                                 this[time5] = userInput
350                         }
351
352                         if (App == "App1") {                    
353                                 extractedObjectsApp1.append("//Global variable for time!\n")
354                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
355                         } else {
356                                 extractedObjectsApp2.append("//Global variable for time!\n")
357                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
358                         }
359                         break
360                 case "enum":
361                         def userInput = System.console().readLine 'Enter the enum:'
362         
363                         if (enumVariables == 0) {
364                                 enum0 = name
365                                 this[enum0] = userInput
366                         } else if (enumVariables == 1) {
367                                 enum1 = name
368                                 this[enum1] = userInput
369                         } else if (enumVariables == 2) {
370                                 enum2 = name
371                                 this[enum2] = userInput
372                         } else if (enumVariables == 3) {
373                                 enum3 = name
374                                 this[enum3] = userInput
375                         } else if (enumVariables == 4) {
376                                 enum4 = name
377                                 this[enum4] = userInput
378                         } else if (enumVariables == 5) {
379                                 enum5 = name
380                                 this[enum5] = userInput
381                         }
382
383                         if (App == "App1") {                    
384                                 extractedObjectsApp1.append("//Global variable for enum!\n")
385                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
386                         } else {
387                                 extractedObjectsApp2.append("//Global variable for enum!\n")
388                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
389                         }
390                         break
391                 case "bool":
392                         break
393                 case "phone":
394                         def userInput = System.console().readLine 'Enter the phone:'
395
396                         if (phoneVariables == 0) {
397                                 phone0 = name
398                                 this[phone0] = userInput
399                         } else if (phoneVariables == 1) {
400                                 phone1 = name
401                                 this[phone1] = userInput
402                         } else if (phoneVariables == 2) {
403                                 phone2 = name
404                                 this[phone2] = userInput
405                         } else if (phoneVariables == 3) {
406                                 phone3 = name
407                                 this[phone3] = userInput
408                         } else if (phoneVariables == 4) {
409                                 phone4 = name
410                                 this[phone4] = userInput
411                         } else if (phoneVariables == 5) {
412                                 phone5 = name
413                                 this[phone5] = userInput
414                         }
415
416                         if (App == "App1") {                    
417                                 extractedObjectsApp1.append("//Global variable for phone!\n")
418                                 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
419                         } else {
420                                 extractedObjectsApp2.append("//Global variable for phone!\n")
421                                 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
422                         }
423                         break
424                 case "contact":
425                         def userInput = System.console().readLine 'Enter the name of the contact:'
426         
427                         if (contactVariables == 0) {
428                                 contact0 = name
429                                 this[contact0] = userInput
430                         } else if (contactVariables == 1) {
431                                 contact1 = name
432                                 this[contact1] = userInput
433                         } else if (contactVariables == 2) {
434                                 contact2 = name
435                                 this[contact2] = userInput
436                         } else if (contactVariables == 3) {
437                                 contact3 = name
438                                 this[contact3] = userInput
439                         } else if (contactVariables == 4) {
440                                 contact4 = name
441                                 this[contact4] = userInput
442                         } else if (contactVariables == 5) {
443                                 contact5 = name
444                                 this[contact5] = userInput
445                         }
446
447                         if (App == "App1") {                    
448                                 extractedObjectsApp1.append("//Global variable for contact!\n")
449                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
450                         } else {
451                                 extractedObjectsApp2.append("//Global variable for contact!\n")
452                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
453                         }
454                         break
455                 default:
456                         break
457         }
458 }
459
460 //input "","",linkedHashMap
461 def input(LinkedHashMap metaData, String name, String type) {
462         switch(type) {
463                 case "capability.lock":
464                         if (metaData.containsKey('title')) {
465                                 println metaData['title']
466                         }
467                         if (metaData.containsKey('options')) {
468                                 println "Options: "+metaData['options']
469                         }
470                         lockObject = name
471                         this[lockObject] = new Locks({}, 1)
472                         if (App == "App1") {
473                                 extractedObjectsApp1.append("//Object for class lock!\n")
474                                 extractedObjectsApp1.append("def "+name+"\n")
475                                 extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n")              
476                         } else {
477                                 extractedObjectsApp2.append("//Object for class lock!\n")
478                                 extractedObjectsApp2.append("def "+name+"\n")
479                                 extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n")
480                         }
481                         break
482                 case "capability.alarm":
483                         break
484                 case "capability.battery":
485                         break
486                 case "capability.beacon":
487                         break
488                 case "capability.carbonMonoxideDetector":
489                         break
490                 case "capability.colorControl":
491                         break
492                 case "capability.contactSensor":
493                         if (metaData.containsKey('title')) {
494                                 println metaData['title']
495                         }
496                         if (metaData.containsKey('options')) {
497                                 println "Options: "+metaData['options']
498                         }
499                         contactObject = name
500                         this[contactObject] = new ContactSensors({}, 1)
501                         if (App == "App1") {
502                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
503                                 extractedObjectsApp1.append("def "+name+"\n")
504                                 extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n")           
505                         } else {
506                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
507                                 extractedObjectsApp2.append("def "+name+"\n")
508                                 extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n")
509                         }
510                         break
511                 case "capability.doorControl":
512                         if (metaData.containsKey('title')) {
513                                 println metaData['title']
514                         }
515                         if (metaData.containsKey('options')) {
516                                 println "Options: "+metaData['options']
517                         }
518                         doorControlObject = name
519                         this[doorControlObject] = new DoorControls({}, 1)
520                         if (App == "App1") {
521                                 extractedObjectsApp1.append("//Object for class door control!\n")
522                                 extractedObjectsApp1.append("def "+name+"\n")
523                                 extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n")               
524                         } else {
525                                 extractedObjectsApp2.append("//Object for class door control!\n")
526                                 extractedObjectsApp2.append("def "+name+"\n")
527                                 extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n")
528                         }
529                         break
530                 case "capability.energyMeter":
531                         break
532                 case "capability.illuminanceMeasurement":
533                         break
534                 case "capability.accelerationSensor":
535                         break
536                 case "capability.motionSensor":
537                         break
538                 case "capability.musicPlayer":
539                         break
540                 case "capability.powerMeter":
541                         break
542                 case "capability.presenceSensor":
543                         if (metaData.containsKey('title')) {
544                                 println metaData['title']
545                         }
546                         if (metaData.containsKey('options')) {
547                                 println "Options: "+metaData['options']
548                         }
549                         presenceSensorObject = name
550                         this[presenceSensorObject] = new PresenceSensors({}, 1)
551                         if (App == "App1") {
552                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
553                                 extractedObjectsApp1.append("def "+name+"\n")
554                                 extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n")            
555                         } else {
556                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
557                                 extractedObjectsApp2.append("def "+name+"\n")
558                                 extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n")
559                         }
560                         break
561                 case "capability.relativeHumidityMeasurement":
562                         break
563                 case "capability.relaySwitch":
564                         break
565                 case "capability.sleepSensor":
566                         break
567                 case "capability.smokeDetector":
568                         break
569                 case "capability.stepSensor":
570                         break
571                 case "capability.switch":
572                         if (metaData.containsKey('title')) {
573                                 println metaData['title']
574                         }
575                         if (metaData.containsKey('options')) {
576                                 println "Options: "+metaData['options']
577                         }
578                         switchObject = name
579                         this[switchObject] = new Switches({}, 1)
580                         if (App == "App1") {
581                                 extractedObjectsApp1.append("//Object for class switch!\n")
582                                 extractedObjectsApp1.append("def "+name+"\n")
583                                 extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n")            
584                         } else {
585                                 extractedObjectsApp2.append("//Object for class switch!\n")
586                                 extractedObjectsApp2.append("def "+name+"\n")
587                                 extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n")
588                         }
589                         break
590                 case "capability.switchLevel":
591                         break
592                 case "capability.temperatureMeasurement":
593                         break
594                 case "capability.thermostat":
595                         if (metaData.containsKey('title')) {
596                                 println metaData['title']
597                         }
598                         if (metaData.containsKey('options')) {
599                                 println "Options: "+metaData['options']
600                         }
601                         thermostatObject = name
602                         this[thermostatObject] = new Thermostats({}, 1)
603                         if (App == "App1") {
604                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
605                                 extractedObjectsApp1.append("def "+name+"\n")
606                                 extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n")                
607                         } else {
608                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
609                                 extractedObjectsApp2.append("def "+name+"\n")
610                                 extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n")
611                         }
612                         break
613                 case "capability.valve":
614                         break
615                 case "capability.waterSensor":
616                         break
617                 case "capability.touchSensor":
618                         if (metaData.containsKey('title')) {
619                                 println metaData['title']
620                         }
621                         if (metaData.containsKey('options')) {
622                                 println "Options: "+metaData['options']
623                         }
624                         touchSensorObject = name
625                         this[touchSensorObject] = new NfcTouch({}, 1)
626                         if (App == "App1") {
627                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
628                                 extractedObjectsApp1.append("def "+name+"\n")
629                                 extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n")               
630                         } else {
631                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
632                                 extractedObjectsApp2.append("def "+name+"\n")
633                                 extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n")
634                         }
635                         break
636                 case "capability.imageCapture":
637                         break
638                 case "device.mobilePresence":
639                         break
640                 case "device.aeonKeyFob":
641                         break
642                 case "mode":
643                         if (metaData.containsKey('title')) {
644                                 println metaData['title']
645                         }
646                         if (metaData.containsKey('options')) {
647                                 println "Options: "+metaData['options']
648                         }
649                         def userInput = System.console().readLine 'Enter the mode:'
650
651                         if (modeVariables == 0) {
652                                 mode0 = name
653                                 this[mode0] = userInput
654                         } else if (modeVariables == 1) {
655                                 mode1 = name
656                                 this[mode1] = userInput
657                         } else if (modeVariables == 2) {
658                                 mode2 = name
659                                 this[mode2] = userInput
660                         } else if (modeVariables == 3) {
661                                 mode3 = name
662                                 this[mode3] = userInput
663                         } else if (modeVariables == 4) {
664                                 mode4 = name
665                                 this[mode4] = userInput
666                         } else if (modeVariables == 5) {
667                                 mode5 = name
668                                 this[mode5] = userInput
669                         }
670                 
671                         modeVariables=modeVariables+1
672
673                         if (App == "App1") {                    
674                                 extractedObjectsApp1.append("//Global variable for mode!\n")
675                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
676                         } else {
677                                 extractedObjectsApp2.append("//Global variable for mode!\n")
678                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
679                         }
680                         break
681                 case "decimal":
682                         break
683                 case "text":
684                         break
685                 case "number":
686                         if (metaData.containsKey('title')) {
687                                 println metaData['title']
688                         }
689                         if (metaData.containsKey('options')) {
690                                 println "Options: "+metaData['options']
691                         }
692                         def userInput = System.console().readLine 'Enter the number:'
693                         
694                         if (numberVariables == 0) {
695                                 number0 = name
696                                 this[number0] = userInput
697                         } else if (numberVariables == 1) {
698                                 number1 = name
699                                 this[number1] = userInput
700                         } else if (numberVariables == 2) {
701                                 number2 = name
702                                 this[number2] = userInput
703                         } else if (numberVariables == 3) {
704                                 number3 = name
705                                 this[number3] = userInput
706                         } else if (numberVariables == 4) {
707                                 number4 = name
708                                 this[number4] = userInput
709                         } else if (numberVariables == 5) {
710                                 number5 = name
711                                 this[number5] = userInput
712                         }
713
714                         numberVariables=numberVariables+1
715
716                         if (App == "App1") {                    
717                                 extractedObjectsApp1.append("//Global variable for number!\n")
718                                 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
719                         } else {
720                                 extractedObjectsApp2.append("//Global variable for number!\n")
721                                 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
722                         }
723                         break
724                 case "time":
725                         if (metaData.containsKey('title')) {
726                                 println metaData['title']
727                         }
728                         if (metaData.containsKey('options')) {
729                                 println "Options: "+metaData['options']
730                         }
731                         def userInput = System.console().readLine 'Enter the time:'
732                         
733                         if (timeVariables == 0) {
734                                 time0 = name
735                                 this[time0] = userInput
736                         } else if (timeVariables == 1) {
737                                 time1 = name
738                                 this[time1] = userInput
739                         } else if (timeVariables == 2) {
740                                 time2 = name
741                                 this[time2] = userInput
742                         } else if (timeVariables == 3) {
743                                 time3 = name
744                                 this[time3] = userInput
745                         } else if (timeVariables == 4) {
746                                 time4 = name
747                                 this[time4] = userInput
748                         } else if (timeVariables == 5) {
749                                 time5 = name
750                                 this[time5] = userInput
751                         }
752
753                         timeVariables=timeVariables+1
754
755                         if (App == "App1") {                    
756                                 extractedObjectsApp1.append("//Global variable for time!\n")
757                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
758                         } else {
759                                 extractedObjectsApp2.append("//Global variable for time!\n")
760                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
761                         }
762                         break
763                 case "enum":
764                         if (metaData.containsKey('title')) {
765                                 println metaData['title']
766                         }
767                         if (metaData.containsKey('options')) {
768                                 println "Options: "+metaData['options']
769                         }
770                         def userInput = System.console().readLine 'Enter the enum:'
771         
772                         if (enumVariables == 0) {
773                                 enum0 = name
774                                 this[enum0] = userInput
775                         } else if (enumVariables == 1) {
776                                 enum1 = name
777                                 this[enum1] = userInput
778                         } else if (enumVariables == 2) {
779                                 enum2 = name
780                                 this[enum2] = userInput
781                         } else if (enumVariables == 3) {
782                                 enum3 = name
783                                 this[enum3] = userInput
784                         } else if (enumVariables == 4) {
785                                 enum4 = name
786                                 this[enum4] = userInput
787                         } else if (enumVariables == 5) {
788                                 enum5 = name
789                                 this[enum5] = userInput
790                         }
791
792                         enumVariables=enumVariables+1
793
794                         if (App == "App1") {                    
795                                 extractedObjectsApp1.append("//Global variable for enum!\n")
796                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
797                         } else {
798                                 extractedObjectsApp2.append("//Global variable for enum!\n")
799                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
800                         }
801                         break
802                 case "bool":
803                         break
804                 case "phone":
805                         if (metaData.containsKey('title')) {
806                                 println metaData['title']
807                         }
808                         if (metaData.containsKey('options')) {
809                                 println "Options: "+metaData['options']
810                         }
811                         def userInput = System.console().readLine 'Enter the phone:'
812
813                         if (phoneVariables == 0) {
814                                 phone0 = name
815                                 this[phone0] = userInput
816                         } else if (phoneVariables == 1) {
817                                 phone1 = name
818                                 this[phone1] = userInput
819                         } else if (phoneVariables == 2) {
820                                 phone2 = name
821                                 this[phone2] = userInput
822                         } else if (phoneVariables == 3) {
823                                 phone3 = name
824                                 this[phone3] = userInput
825                         } else if (phoneVariables == 4) {
826                                 phone4 = name
827                                 this[phone4] = userInput
828                         } else if (phoneVariables == 5) {
829                                 phone5 = name
830                                 this[phone5] = userInput
831                         }
832
833                         phoneVariables=phoneVariables+1
834
835                         if (App == "App1") {                    
836                                 extractedObjectsApp1.append("//Global variable for phone!\n")
837                                 extractedObjectsApp1.append("def "+name+" = "+userInput+"\n")
838                         } else {
839                                 extractedObjectsApp2.append("//Global variable for phone!\n")
840                                 extractedObjectsApp2.append("def "+name+" = "+userInput+"\n")
841                         }
842                         break
843                 case "contact":
844                         if (metaData.containsKey('title')) {
845                                 println metaData['title']
846                         }
847                         if (metaData.containsKey('options')) {
848                                 println "Options: "+metaData['options']
849                         }
850                         def userInput = System.console().readLine 'Enter the name of the contact:'
851         
852                         if (contactVariables == 0) {
853                                 contact0 = name
854                                 this[contact0] = userInput
855                         } else if (contactVariables == 1) {
856                                 contact1 = name
857                                 this[contact1] = userInput
858                         } else if (contactVariables == 2) {
859                                 contact2 = name
860                                 this[contact2] = userInput
861                         } else if (contactVariables == 3) {
862                                 contact3 = name
863                                 this[contact3] = userInput
864                         } else if (contactVariables == 4) {
865                                 contact4 = name
866                                 this[contact4] = userInput
867                         } else if (contactVariables == 5) {
868                                 contact5 = name
869                                 this[contact5] = userInput
870                         }
871
872                         contactVariables=contactVariables+1
873
874                         if (App == "App1") {                    
875                                 extractedObjectsApp1.append("//Global variable for contact!\n")
876                                 extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n")
877                         } else {
878                                 extractedObjectsApp2.append("//Global variable for contact!\n")
879                                 extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n")
880                         }
881                         break
882                 default:
883                         break
884         }
885 }
886 //input linkedHashMap
887 def input(LinkedHashMap metaData) {
888         switch(metaData['type']) {
889                 case "capability.lock":
890                         if (metaData.containsKey('title')) {
891                                 println metaData['title']
892                         }
893                         if (metaData.containsKey('options')) {
894                                 println "Options: "+metaData['options']
895                         }
896                         lockObject = metaData['name']
897                         this[lockObject] = new Locks({}, 1)
898                         if (App == "App1") {
899                                 extractedObjectsApp1.append("//Object for class lock!\n")
900                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
901                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")          
902                         } else {
903                                 extractedObjectsApp2.append("//Object for class lock!\n")
904                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
905                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
906                         }
907                         break
908                 case "capability.alarm":
909                         break
910                 case "capability.battery":
911                         break
912                 case "capability.beacon":
913                         break
914                 case "capability.carbonMonoxideDetector":
915                         break
916                 case "capability.colorControl":
917                         break
918                 case "capability.contactSensor":
919                         if (metaData.containsKey('title')) {
920                                 println metaData['title']
921                         }
922                         if (metaData.containsKey('options')) {
923                                 println "Options: "+metaData['options']
924                         }
925                         contactObject = metaData['name']
926                         this[contactObject] = new ContactSensors({}, 1)
927                         if (App == "App1") {
928                                 extractedObjectsApp1.append("//Object for class contactSensor!\n")
929                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
930                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")               
931                         } else {
932                                 extractedObjectsApp2.append("//Object for class contactSensor!\n")
933                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
934                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
935                         }
936                         break
937                 case "capability.doorControl":
938                         doorControlObject = metaData['name']
939                         this[doorControlObject] = new DoorControls({}, 1)
940                         if (App == "App1") {
941                                 extractedObjectsApp1.append("//Object for class door control!\n")
942                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
943                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")           
944                         } else {
945                                 extractedObjectsApp2.append("//Object for class door control!\n")
946                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
947                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
948                         }
949                         break
950                 case "capability.energyMeter":
951                         break
952                 case "capability.illuminanceMeasurement":
953                         break
954                 case "capability.accelerationSensor":
955                         break
956                 case "capability.motionSensor":
957                         break
958                 case "capability.musicPlayer":
959                         break
960                 case "capability.powerMeter":
961                         break
962                 case "capability.presenceSensor":
963                         if (metaData.containsKey('title')) {
964                                 println metaData['title']
965                         }
966                         if (metaData.containsKey('options')) {
967                                 println "Options: "+metaData['options']
968                         }
969                         presenceSensorObject = metaData['name']
970                         this[presenceSensorObject] = new PresenceSensors({}, 1)
971                         if (App == "App1") {
972                                 extractedObjectsApp1.append("//Object for class presence sensor!\n")
973                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
974                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")                
975                         } else {
976                                 extractedObjectsApp2.append("//Object for class presence sensor!\n")
977                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
978                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
979                         }
980                         break
981                 case "capability.relativeHumidityMeasurement":
982                         break
983                 case "capability.relaySwitch":
984                         break
985                 case "capability.sleepSensor":
986                         break
987                 case "capability.smokeDetector":
988                         break
989                 case "capability.stepSensor":
990                         break
991                 case "capability.switch":
992                         if (metaData.containsKey('title')) {
993                                 println metaData['title']
994                         }
995                         if (metaData.containsKey('options')) {
996                                 println "Options: "+metaData['options']
997                         }
998                         switchObject = metaData['name']
999                         this[switchObject] = new Switches({}, 1)
1000                         if (App == "App1") {
1001                                 extractedObjectsApp1.append("//Object for class switch!\n")
1002                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1003                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")                
1004                         } else {
1005                                 extractedObjectsApp2.append("//Object for class switch!\n")
1006                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1007                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
1008                         }
1009                         break
1010                 case "capability.switchLevel":
1011                         break
1012                 case "capability.temperatureMeasurement":
1013                         break
1014                 case "capability.thermostat":
1015                         if (metaData.containsKey('title')) {
1016                                 println metaData['title']
1017                         }
1018                         if (metaData.containsKey('options')) {
1019                                 println "Options: "+metaData['options']
1020                         }
1021                         thermostatObject = metaData['name']
1022                         this[thermostatObject] = new Thermostats({}, 1)
1023                         if (App == "App1") {
1024                                 extractedObjectsApp1.append("//Object for class thermostat!\n")
1025                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1026                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")            
1027                         } else {
1028                                 extractedObjectsApp2.append("//Object for class thermostat!\n")
1029                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1030                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
1031                         }
1032                         break
1033                 case "capability.valve":
1034                         break
1035                 case "capability.waterSensor":
1036                         break
1037                 case "capability.touchSensor":
1038                         if (metaData.containsKey('title')) {
1039                                 println metaData['title']
1040                         }
1041                         if (metaData.containsKey('options')) {
1042                                 println "Options: "+metaData['options']
1043                         }
1044                         touchSensorObject = metaData['name']
1045                         this[touchSensorObject] = new NfcTouch({}, 1)
1046                         if (App == "App1") {
1047                                 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
1048                                 extractedObjectsApp1.append("def "+metaData['name']+"\n")
1049                                 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")           
1050                         } else {
1051                                 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
1052                                 extractedObjectsApp2.append("def "+metaData['name']+"\n")
1053                                 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
1054                         }
1055                         break
1056                 case "capability.imageCapture":
1057                         break
1058                 case "device.mobilePresence":
1059                         break
1060                 case "device.aeonKeyFob":
1061                         break
1062                 case "mode":
1063                         if (metaData.containsKey('title')) {
1064                                 println metaData['title']
1065                         }
1066                         if (metaData.containsKey('options')) {
1067                                 println "Options: "+metaData['options']
1068                         }
1069                         def userInput = System.console().readLine 'Enter the mode:'
1070
1071                         if (modeVariables == 0) {
1072                                 mode0 = metaData['name']
1073                                 this[mode0] = userInput
1074                         } else if (modeVariables == 1) {
1075                                 mode1 = metaData['name']
1076                                 this[mode1] = userInput
1077                         } else if (modeVariables == 2) {
1078                                 mode2 = metaData['name']
1079                                 this[mode2] = userInput
1080                         } else if (modeVariables == 3) {
1081                                 mode3 = metaData['name']
1082                                 this[mode3] = userInput
1083                         } else if (modeVariables == 4) {
1084                                 mode4 = metaData['name']
1085                                 this[mode4] = userInput
1086                         } else if (modeVariables == 5) {
1087                                 mode5 = metaData['name']
1088                                 this[mode5] = userInput
1089                         }
1090
1091                         if (App == "App1") {                    
1092                                 extractedObjectsApp1.append("//Global variable for mode!\n")
1093                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1094                         } else {
1095                                 extractedObjectsApp2.append("//Global variable for mode!\n")
1096                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1097                         }
1098                         break
1099                 case "decimal":
1100                         break
1101                 case "text":
1102                         break
1103                 case "number":
1104                         if (metaData.containsKey('title')) {
1105                                 println metaData['title']
1106                         }
1107                         if (metaData.containsKey('options')) {
1108                                 println "Options: "+metaData['options']
1109                         }
1110                         def userInput = System.console().readLine 'Enter the number:'
1111                         
1112                         if (numberVariables == 0) {
1113                                 number0 = metaData['name']
1114                                 this[number0] = userInput
1115                         } else if (numberVariables == 1) {
1116                                 number1 = metaData['name']
1117                                 this[number1] = userInput
1118                         } else if (numberVariables == 2) {
1119                                 number2 = metaData['name']
1120                                 this[number2] = userInput
1121                         } else if (numberVariables == 3) {
1122                                 number3 = metaData['name']
1123                                 this[number3] = userInput
1124                         } else if (numberVariables == 4) {
1125                                 number4 = metaData['name']
1126                                 this[number4] = userInput
1127                         } else if (numberVariables == 5) {
1128                                 number5 = metaData['name']
1129                                 this[number5] = userInput
1130                         }
1131
1132                         if (App == "App1") {                    
1133                                 extractedObjectsApp1.append("//Global variable for number!\n")
1134                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1135                         } else {
1136                                 extractedObjectsApp2.append("//Global variable for number!\n")
1137                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1138                         }
1139                         break
1140                 case "time":
1141                         if (metaData.containsKey('title')) {
1142                                 println metaData['title']
1143                         }
1144                         if (metaData.containsKey('options')) {
1145                                 println "Options: "+metaData['options']
1146                         }
1147                         def userInput = System.console().readLine 'Enter the time:'
1148                         
1149                         if (timeVariables == 0) {
1150                                 time0 = metaData['name']
1151                                 this[time0] = userInput
1152                         } else if (timeVariables == 1) {
1153                                 time1 = metaData['name']
1154                                 this[time1] = userInput
1155                         } else if (timeVariables == 2) {
1156                                 time2 = metaData['name']
1157                                 this[time2] = userInput
1158                         } else if (timeVariables == 3) {
1159                                 time3 = metaData['name']
1160                                 this[time3] = userInput
1161                         } else if (timeVariables == 4) {
1162                                 time4 = metaData['name']
1163                                 this[time4] = userInput
1164                         } else if (timeVariables == 5) {
1165                                 time5 = metaData['name']
1166                                 this[time5] = userInput
1167                         }
1168
1169                         if (App == "App1") {                    
1170                                 extractedObjectsApp1.append("//Global variable for time!\n")
1171                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1172                         } else {
1173                                 extractedObjectsApp2.append("//Global variable for time!\n")
1174                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1175                         }
1176                         break
1177                 case "enum":
1178                         if (metaData.containsKey('title')) {
1179                                 println metaData['title']
1180                         }
1181                         if (metaData.containsKey('options')) {
1182                                 println "Options: "+metaData['options']
1183                         }
1184                         def userInput = System.console().readLine 'Enter the enum:'
1185         
1186                         if (enumVariables == 0) {
1187                                 enum0 = metaData['name']
1188                                 this[enum0] = userInput
1189                         } else if (enumVariables == 1) {
1190                                 enum1 = metaData['name']
1191                                 this[enum1] = userInput
1192                         } else if (enumVariables == 2) {
1193                                 enum2 = metaData['name']
1194                                 this[enum2] = userInput
1195                         } else if (enumVariables == 3) {
1196                                 enum3 = metaData['name']
1197                                 this[enum3] = userInput
1198                         } else if (enumVariables == 4) {
1199                                 enum4 = metaData['name']
1200                                 this[enum4] = userInput
1201                         } else if (enumVariables == 5) {
1202                                 enum5 = metaData['name']
1203                                 this[enum5] = userInput
1204                         }
1205
1206                         if (App == "App1") {                    
1207                                 extractedObjectsApp1.append("//Global variable for enum!\n")
1208                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1209                         } else {
1210                                 extractedObjectsApp2.append("//Global variable for enum!\n")
1211                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1212                         }
1213                         break
1214                 case "bool":
1215                         break
1216                 case "phone":
1217                         if (metaData.containsKey('title')) {
1218                                 println metaData['title']
1219                         }
1220                         if (metaData.containsKey('options')) {
1221                                 println "Options: "+metaData['options']
1222                         }
1223                         def userInput = System.console().readLine 'Enter the phone:'
1224
1225                         if (phoneVariables == 0) {
1226                                 phone0 = metaData['name']
1227                                 this[phone0] = userInput
1228                         } else if (phoneVariables == 1) {
1229                                 phone1 = metaData['name']
1230                                 this[phone1] = userInput
1231                         } else if (phoneVariables == 2) {
1232                                 phone2 = metaData['name']
1233                                 this[phone2] = userInput
1234                         } else if (phoneVariables == 3) {
1235                                 phone3 = metaData['name']
1236                                 this[phone3] = userInput
1237                         } else if (phoneVariables == 4) {
1238                                 phone4 = metaData['name']
1239                                 this[phone4] = userInput
1240                         } else if (phoneVariables == 5) {
1241                                 phone5 = metaData['name']
1242                                 this[phone5] = userInput
1243                         }
1244
1245                         if (App == "App1") {                    
1246                                 extractedObjectsApp1.append("//Global variable for phone!\n")
1247                                 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
1248                         } else {
1249                                 extractedObjectsApp2.append("//Global variable for phone!\n")
1250                                 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
1251                         }
1252                         break
1253                 case "contact":
1254                         if (metaData.containsKey('title')) {
1255                                 println metaData['title']
1256                         }
1257                         if (metaData.containsKey('options')) {
1258                                 println "Options: "+metaData['options']
1259                         }
1260                         def userInput = System.console().readLine 'Enter the metaData['name'] of the contact:'
1261         
1262                         if (contactVariables == 0) {
1263                                 contact0 = metaData['name']
1264                                 this[contact0] = userInput
1265                         } else if (contactVariables == 1) {
1266                                 contact1 = metaData['name']
1267                                 this[contact1] = userInput
1268                         } else if (contactVariables == 2) {
1269                                 contact2 = metaData['name']
1270                                 this[contact2] = userInput
1271                         } else if (contactVariables == 3) {
1272                                 contact3 = metaData['name']
1273                                 this[contact3] = userInput
1274                         } else if (contactVariables == 4) {
1275                                 contact4 = metaData['name']
1276                                 this[contact4] = userInput
1277                         } else if (contactVariables == 5) {
1278                                 contact5 = metaData['name']
1279                                 this[contact5] = userInput
1280                         }
1281
1282                         if (App == "App1") {                    
1283                                 extractedObjectsApp1.append("//Global variable for contact!\n")
1284                                 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1285                         } else {
1286                                 extractedObjectsApp2.append("//Global variable for contact!\n")
1287                                 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
1288                         }
1289                         break
1290                 default:
1291                         break
1292         }
1293 }
1294
1295 def label(LinkedHashMap metaData) {
1296         if (metaData.containsKey('title')) {
1297                 println metaData['title']
1298         }
1299         if (metaData.containsKey('options')) {
1300                 println "Options: "+metaData['options']
1301         }
1302
1303         println("//IGNORE--ForMobileUse//")
1304 }
1305
1306 def mode(LinkedHashMap metaData) {
1307         if (metaData.containsKey('title')) {
1308                 println metaData['title']
1309         }
1310         if (metaData.containsKey('options')) {
1311                 println "Options: "+metaData['options']
1312         }
1313
1314         println("//IGNORE--ForMobileUse//")
1315 }
1316 /////Input Methods/////
1317
1318
1319 /////MethodsForExtraction/////
1320 def definition(LinkedHashMap metaData) {
1321         println("///Just some information///")
1322 }
1323
1324 def preferences(Closure inputData) {
1325         find(inputData) //Run the closure to extract pages/sections/inputMethods
1326 }
1327
1328 def page(LinkedHashMap metaData, Closure inputData) {
1329         if (metaData.containsKey('name'))
1330                 println(metaData['name'])
1331         if (metaData.containsKey('title'))
1332                 println(metaData['title'])
1333
1334         find(inputData) //Run the closure to extract sections/inputMethods
1335 }
1336
1337 def page(LinkedHashMap metaData) {
1338         def nameOfFunction = metaData['name']
1339         "$nameOfFunction"() //Call the page     
1340 }
1341
1342 def dynamicPage(LinkedHashMap metaData, Closure inputData) {
1343         if (metaData.containsKey('name'))
1344                 println(metaData['name'])
1345         if (metaData.containsKey('title'))
1346                 println(metaData['title'])
1347
1348         find(inputData) //Run the closure to extract sections/inputMethods
1349 }
1350
1351 def section(String title, Closure inputData) {
1352         println(title)
1353         find(inputData) //Run the closure to extract inputMethods
1354 }
1355
1356 def section(LinkedHashMap metaData, Closure inputData) {
1357         find(inputData) //Run the closure to extract inputMethods
1358 }
1359 /////MethodsForExtraction/////
1360
1361
1362
1363 /////
1364 definition(
1365     name: "Good Night House",
1366     namespace: "charette.joseph@gmail.com",
1367     author: "Joseph Charette",
1368     description: "Some on, some off with delay for bedtime, Lock The Doors",
1369     category: "Convenience",
1370     iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
1371     iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png"
1372 /**
1373 *  Borrowed code from
1374 *  Walk Gentle Into That Good Night
1375 *
1376 *  Author: oneaccttorulethehouse@gmail.com
1377 *  Date: 2014-02-01
1378  */
1379  )
1380 preferences {
1381         section("When I touch the app turn these lights off…"){
1382                 input "switchesoff", "capability.switch", multiple: true, required:true
1383         }
1384     section("When I touch the app turn these lights on…"){
1385                 input "switcheson", "capability.switch", multiple: true, required:false
1386         }
1387     section("Lock theses locks...") {
1388                 input "lock1","capability.lock", multiple: true
1389     }
1390         section("And change to this mode...") {
1391                 input "newMode", "mode", title: "Mode?"
1392         }
1393    section("After so many seconds (optional)"){
1394                 input "waitfor", "number", title: "Off after (default 120)", required: true
1395         }
1396 }
1397
1398
1399 def installed()
1400 {
1401         log.debug "Installed with settings: ${settings}"
1402         log.debug "Current mode = ${location.mode}"
1403         subscribe(app, appTouch)
1404 }
1405
1406
1407 def updated()
1408 {
1409         log.debug "Updated with settings: ${settings}"
1410         log.debug "Current mode = ${location.mode}"
1411         unsubscribe()
1412         subscribe(app, appTouch)
1413 }
1414
1415 def appTouch(evt) {
1416         log.debug "changeMode, location.mode = $location.mode, newMode = $newMode, location.modes = $location.modes"
1417     if (location.mode != newMode) {
1418                         setLocationMode(newMode)
1419                         log.debug "Changed the mode to '${newMode}'"
1420     }   else {
1421         log.debug "New mode is the same as the old mode, leaving it be"
1422         }
1423     log.debug "appTouch: $evt"
1424     lock1.lock()
1425     switcheson.on()
1426     def delay = (waitfor != null && waitfor != "") ? waitfor * 1000 : 120000
1427         switchesoff.off(delay: delay)
1428 }