1 ////////////////////////////////////////
3 import groovy.transform.Field
8 import ContactSensor.ContactSensor
9 import ContactSensor.ContactSensors
10 import DoorControl.DoorControl
11 import DoorControl.DoorControls
14 import Thermostat.Thermostat
15 import Thermostat.Thermostats
17 import Switch.Switches
18 import PresenceSensor.PresenceSensor
19 import PresenceSensor.PresenceSensors
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
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()
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")
50 extractedObjectsApp1.write("")
51 extractedObjectsConstructorApp1.write("")
52 } else if (App == "App2") {
53 extractedObjectsApp2.write("")
54 extractedObjectsConstructorApp2.write("")
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
111 @Field modeVariables = 0
119 @Field numberVariables = 0
127 @Field timeVariables = 0
135 @Field enumVariables = 0
143 @Field phoneVariables = 0
151 @Field contactVariables = 0
161 /////Input Methods/////
163 def input(String name, String type) {
164 LinkedHashMap metaData = []
165 metaData.put('name',name)
166 metaData.put('type',type)
170 //input "","",linkedHashMap
171 def input(LinkedHashMap metaData, String name, String type) {
172 metaData.put('name',name)
173 metaData.put('type',type)
177 //input linkedHashMap
178 def input(LinkedHashMap metaData) {
179 if (metaData.containsKey('title')) {
180 println metaData['title']
182 if (metaData.containsKey('options')) {
183 println "Options: "+metaData['options']
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)
198 lockObjects=lockObjects+1
200 settings.put(metaData['name'], metaData['name'])
203 extractedObjectsApp1.append("//Object for class lock!\n")
204 extractedObjectsApp1.append("def "+metaData['name']+"\n")
205 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n")
207 extractedObjectsApp2.append("//Object for class lock!\n")
208 extractedObjectsApp2.append("def "+metaData['name']+"\n")
209 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
212 case "capability.alarm":
214 case "capability.battery":
216 case "capability.beacon":
218 case "capability.carbonMonoxideDetector":
220 case "capability.colorControl":
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)
234 contactObjects=contactObjects+1
236 settings.put(metaData['name'], metaData['name'])
239 extractedObjectsApp1.append("//Object for class contactSensor!\n")
240 extractedObjectsApp1.append("def "+metaData['name']+"\n")
241 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n")
243 extractedObjectsApp2.append("//Object for class contactSensor!\n")
244 extractedObjectsApp2.append("def "+metaData['name']+"\n")
245 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n")
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)
260 doorControlObjects=doorControlObjects+1
262 settings.put(metaData['name'], metaData['name'])
265 extractedObjectsApp1.append("//Object for class door control!\n")
266 extractedObjectsApp1.append("def "+metaData['name']+"\n")
267 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n")
269 extractedObjectsApp2.append("//Object for class door control!\n")
270 extractedObjectsApp2.append("def "+metaData['name']+"\n")
271 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n")
274 case "capability.energyMeter":
276 case "capability.illuminanceMeasurement":
278 case "capability.accelerationSensor":
280 case "capability.motionSensor":
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)
294 musicPlayerObjects=musicPlayerObjects+1
296 settings.put(metaData['name'], metaData['name'])
299 extractedObjectsApp1.append("//Object for class music player!\n")
300 extractedObjectsApp1.append("def "+metaData['name']+"\n")
301 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")
303 extractedObjectsApp2.append("//Object for class music player!\n")
304 extractedObjectsApp2.append("def "+metaData['name']+"\n")
305 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
308 case "capability.powerMeter":
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)
322 presenceSensorObjects=presenceSensorObjects+1
324 settings.put(metaData['name'], metaData['name'])
327 extractedObjectsApp1.append("//Object for class presence sensor!\n")
328 extractedObjectsApp1.append("def "+metaData['name']+"\n")
329 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n")
331 extractedObjectsApp2.append("//Object for class presence sensor!\n")
332 extractedObjectsApp2.append("def "+metaData['name']+"\n")
333 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n")
336 case "capability.relativeHumidityMeasurement":
338 case "capability.relaySwitch":
340 case "capability.sleepSensor":
342 case "capability.smokeDetector":
344 case "capability.stepSensor":
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)
358 switchObjects=switchObjects+1
360 settings.put(metaData['name'], metaData['name'])
363 extractedObjectsApp1.append("//Object for class switch!\n")
364 extractedObjectsApp1.append("def "+metaData['name']+"\n")
365 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n")
367 extractedObjectsApp2.append("//Object for class switch!\n")
368 extractedObjectsApp2.append("def "+metaData['name']+"\n")
369 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
372 case "capability.switchLevel":
374 case "capability.temperatureMeasurement":
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)
388 thermostatObjects=thermostatObjects+1
390 settings.put(metaData['name'], metaData['name'])
393 extractedObjectsApp1.append("//Object for class thermostat!\n")
394 extractedObjectsApp1.append("def "+metaData['name']+"\n")
395 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n")
397 extractedObjectsApp2.append("//Object for class thermostat!\n")
398 extractedObjectsApp2.append("def "+metaData['name']+"\n")
399 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n")
402 case "capability.valve":
404 case "capability.waterSensor":
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)
418 touchSensorObjects=touchSensorObjects+1
420 settings.put(metaData['name'], metaData['name'])
423 extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
424 extractedObjectsApp1.append("def "+metaData['name']+"\n")
425 extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n")
427 extractedObjectsApp2.append("//Object for class Touch Sensor!\n")
428 extractedObjectsApp2.append("def "+metaData['name']+"\n")
429 extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n")
432 case "capability.imageCapture":
434 case "device.mobilePresence":
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)
448 aeonKeyFobObjects=aeonKeyFobObjects+1
450 settings.put(metaData['name'], metaData['name'])
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")
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")
463 def userInput = System.console().readLine 'Enter the mode:'
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
485 modeVariables=modeVariables+1
487 settings.put(metaData['name'], metaData['name'])
490 extractedObjectsApp1.append("//Global variable for mode!\n")
491 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
493 extractedObjectsApp2.append("//Global variable for mode!\n")
494 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
502 def userInput = System.console().readLine 'Enter the number:'
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
524 numberVariables=numberVariables+1
526 settings.put(metaData['name'], metaData['name'])
529 extractedObjectsApp1.append("//Global variable for number!\n")
530 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
532 extractedObjectsApp2.append("//Global variable for number!\n")
533 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
537 def userInput = System.console().readLine 'Enter the time:'
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
559 timeVariables=timeVariables+1
561 settings.put(metaData['name'], metaData['name'])
564 extractedObjectsApp1.append("//Global variable for time!\n")
565 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
567 extractedObjectsApp2.append("//Global variable for time!\n")
568 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
572 def userInput = System.console().readLine 'Enter the enum:'
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
594 enumVariables=enumVariables+1
596 settings.put(metaData['name'], metaData['name'])
599 extractedObjectsApp1.append("//Global variable for enum!\n")
600 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
602 extractedObjectsApp2.append("//Global variable for enum!\n")
603 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
609 def userInput = System.console().readLine 'Enter the phone:'
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
631 phoneVariables=phoneVariables+1
633 settings.put(metaData['name'], metaData['name'])
636 extractedObjectsApp1.append("//Global variable for phone!\n")
637 extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
639 extractedObjectsApp2.append("//Global variable for phone!\n")
640 extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
644 def userInput = System.console().readLine 'Enter the metaData['name'] of the contact:'
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
666 contactVariables=contactVariables+1
668 settings.put(metaData['name'], metaData['name'])
671 extractedObjectsApp1.append("//Global variable for contact!\n")
672 extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
674 extractedObjectsApp2.append("//Global variable for contact!\n")
675 extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
683 def label(LinkedHashMap metaData) {
684 if (metaData.containsKey('title')) {
685 println metaData['title']
687 if (metaData.containsKey('options')) {
688 println "Options: "+metaData['options']
691 println("//IGNORE--ForMobileUse//")
694 def mode(LinkedHashMap metaData) {
695 if (metaData.containsKey('title')) {
696 println metaData['title']
698 if (metaData.containsKey('options')) {
699 println "Options: "+metaData['options']
702 println("//IGNORE--ForMobileUse//")
704 /////Input Methods/////
707 /////MethodsForExtraction/////
708 def definition(LinkedHashMap metaData) {
709 println("///Just some information///")
712 def preferences(Closure inputData) {
713 find(inputData) //Run the closure to extract pages/sections/inputMethods
715 extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
716 extractedObjectsConstructorApp1.append("settings = $settings\n")
718 extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
719 extractedObjectsConstructorApp2.append("settings = $settings\n")
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'])
729 find(inputData) //Run the closure to extract sections/inputMethods
732 def page(LinkedHashMap metaData) {
733 def nameOfFunction = metaData['name']
734 "$nameOfFunction"() //Call the page
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'])
743 find(inputData) //Run the closure to extract sections/inputMethods
746 def section(String title, Closure inputData) {
748 find(inputData) //Run the closure to extract inputMethods
751 def section(Closure inputData) {
752 find(inputData) //Run the closure to extract inputMethods
755 def section(LinkedHashMap metaData, Closure inputData) {
756 find(inputData) //Run the closure to extract inputMethods
758 /////MethodsForExtraction/////