//////////////////////////////////////// //import libraries import groovy.transform.Field //import classes //Importing Classes import ContactSensor.ContactSensor import ContactSensor.ContactSensors import DoorControl.DoorControl import DoorControl.DoorControls import Lock.Lock import Lock.Locks import Thermostat.Thermostat import Thermostat.Thermostats import Switch.Switch import Switch.Switches import PresenceSensor.PresenceSensor import PresenceSensor.PresenceSensors import Logger.Logger import Location.LocationVar import Location.Phrase import appTouch.Touched import NfcTouch.NfcTouch import Timer.SimulatedTimer @Field App //Default //Global variables for files @Field File extractedObjectsApp1 = new File("Extractor/App1/extractedObjectsApp1.groovy") @Field File extractedObjectsApp2 = new File("Extractor/App2/extractedObjectsApp2.groovy") @Field File extractedObjectsConstructorApp1 = new File("Extractor/App1/extractedObjectsConstructorApp1.groovy") @Field File extractedObjectsConstructorApp2 = new File("Extractor/App2/extractedObjectsConstructorApp2.groovy") //Empty the files if (App == "App1") { extractedObjectsApp1.write("") extractedObjectsConstructorApp1.write("") } else if (App == "App2") { extractedObjectsApp2.write("") extractedObjectsConstructorApp2.write("") } //Global objects //Global Object for class Touch Sensor! @Field def touchSensorObject //Global Object for class switch! @Field def switchObject //Global Object for class lock! @Field def lockObject //Global Object for class door control! @Field def doorControlObject //Global Object for class contact sensor! @Field def contactObject //Global Object for class presence sensor! @Field def presenceSensorObject //Global Object for class thermostat! @Field def thermostatObject //Global variables //For mode @Field modeVariables = 0 @Field mode0 @Field mode1 @Field mode2 @Field mode3 @Field mode4 @Field mode5 //For number @Field numberVariables = 0 @Field number0 @Field number1 @Field number2 @Field number3 @Field number4 @Field number5 //For time @Field timeVariables = 0 @Field time0 @Field time1 @Field time2 @Field time3 @Field time4 @Field time5 //For enum @Field enumVariables = 0 @Field enum0 @Field enum1 @Field enum2 @Field enum3 @Field enum4 @Field enum5 //For phone @Field phoneVariables = 0 @Field phone0 @Field phone1 @Field phone2 @Field phone3 @Field phone4 @Field phone5 //For contact @Field contactVariables = 0 @Field contact0 @Field contact1 @Field contact2 @Field contact3 @Field contact4 @Field contact5 /////Input Methods///// //input "","" def input(String name, String type) { switch(type) { case "capability.lock": lockObject = name this[lockObject] = new Locks({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class lock!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n") } else { extractedObjectsApp2.append("//Object for class lock!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n") } break case "capability.alarm": break case "capability.battery": break case "capability.beacon": break case "capability.carbonMonoxideDetector": break case "capability.colorControl": break case "capability.contactSensor": contactObject = name this[contactObject] = new ContactSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class contactSensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n") } else { extractedObjectsApp2.append("//Object for class contactSensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n") } break case "capability.doorControl": doorControlObject = name this[doorControlObject] = new DoorControls({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class door control!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n") } else { extractedObjectsApp2.append("//Object for class door control!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n") } break case "capability.energyMeter": break case "capability.illuminanceMeasurement": break case "capability.accelerationSensor": break case "capability.motionSensor": break case "capability.musicPlayer": break case "capability.powerMeter": break case "capability.presenceSensor": presenceSensorObject = name this[presenceSensorObject] = new PresenceSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class presence sensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n") } else { extractedObjectsApp2.append("//Object for class presence sensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n") } break case "capability.relativeHumidityMeasurement": break case "capability.relaySwitch": break case "capability.sleepSensor": break case "capability.smokeDetector": break case "capability.stepSensor": break case "capability.switch": switchObject = name this[switchObject] = new Switches({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class switch!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n") } else { extractedObjectsApp2.append("//Object for class switch!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n") } break case "capability.switchLevel": break case "capability.temperatureMeasurement": break case "capability.thermostat": thermostatObject = name this[thermostatObject] = new Thermostats({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class thermostat!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n") } else { extractedObjectsApp2.append("//Object for class thermostat!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n") } break case "capability.valve": break case "capability.waterSensor": break case "capability.touchSensor": touchSensorObject = name this[touchSensorObject] = new NfcTouch({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class Touch Sensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n") } else { extractedObjectsApp2.append("//Object for class Touch Sensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n") } break case "capability.imageCapture": break case "device.mobilePresence": break case "device.aeonKeyFob": break case "mode": def userInput = System.console().readLine 'Enter the mode:' if (modeVariables == 0) { mode0 = name this[mode0] = userInput } else if (modeVariables == 1) { mode1 = name this[mode1] = userInput } else if (modeVariables == 2) { mode2 = name this[mode2] = userInput } else if (modeVariables == 3) { mode3 = name this[mode3] = userInput } else if (modeVariables == 4) { mode4 = name this[mode4] = userInput } else if (modeVariables == 5) { mode5 = name this[mode5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for mode!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for mode!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "decimal": break case "text": break case "number": def userInput = System.console().readLine 'Enter the number:' if (numberVariables == 0) { number0 = name this[number0] = userInput } else if (numberVariables == 1) { number1 = name this[number1] = userInput } else if (numberVariables == 2) { number2 = name this[number2] = userInput } else if (numberVariables == 3) { number3 = name this[number3] = userInput } else if (numberVariables == 4) { number4 = name this[number4] = userInput } else if (numberVariables == 5) { number5 = name this[number5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for number!\n") extractedObjectsApp1.append("def "+name+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for number!\n") extractedObjectsApp2.append("def "+name+" = "+userInput+"\n") } break case "time": def userInput = System.console().readLine 'Enter the time:' if (timeVariables == 0) { time0 = name this[time0] = userInput } else if (timeVariables == 1) { time1 = name this[time1] = userInput } else if (timeVariables == 2) { time2 = name this[time2] = userInput } else if (timeVariables == 3) { time3 = name this[time3] = userInput } else if (timeVariables == 4) { time4 = name this[time4] = userInput } else if (timeVariables == 5) { time5 = name this[time5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for time!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for time!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "enum": def userInput = System.console().readLine 'Enter the enum:' if (enumVariables == 0) { enum0 = name this[enum0] = userInput } else if (enumVariables == 1) { enum1 = name this[enum1] = userInput } else if (enumVariables == 2) { enum2 = name this[enum2] = userInput } else if (enumVariables == 3) { enum3 = name this[enum3] = userInput } else if (enumVariables == 4) { enum4 = name this[enum4] = userInput } else if (enumVariables == 5) { enum5 = name this[enum5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for enum!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for enum!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "bool": break case "phone": def userInput = System.console().readLine 'Enter the phone:' if (phoneVariables == 0) { phone0 = name this[phone0] = userInput } else if (phoneVariables == 1) { phone1 = name this[phone1] = userInput } else if (phoneVariables == 2) { phone2 = name this[phone2] = userInput } else if (phoneVariables == 3) { phone3 = name this[phone3] = userInput } else if (phoneVariables == 4) { phone4 = name this[phone4] = userInput } else if (phoneVariables == 5) { phone5 = name this[phone5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for phone!\n") extractedObjectsApp1.append("def "+name+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for phone!\n") extractedObjectsApp2.append("def "+name+" = "+userInput+"\n") } break case "contact": def userInput = System.console().readLine 'Enter the name of the contact:' if (contactVariables == 0) { contact0 = name this[contact0] = userInput } else if (contactVariables == 1) { contact1 = name this[contact1] = userInput } else if (contactVariables == 2) { contact2 = name this[contact2] = userInput } else if (contactVariables == 3) { contact3 = name this[contact3] = userInput } else if (contactVariables == 4) { contact4 = name this[contact4] = userInput } else if (contactVariables == 5) { contact5 = name this[contact5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for contact!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for contact!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break default: break } } //input "","",linkedHashMap def input(LinkedHashMap metaData, String name, String type) { switch(type) { case "capability.lock": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } lockObject = name this[lockObject] = new Locks({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class lock!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.lockObject\n") } else { extractedObjectsApp2.append("//Object for class lock!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.lockObject\n") } break case "capability.alarm": break case "capability.battery": break case "capability.beacon": break case "capability.carbonMonoxideDetector": break case "capability.colorControl": break case "capability.contactSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } contactObject = name this[contactObject] = new ContactSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class contactSensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.contactObject\n") } else { extractedObjectsApp2.append("//Object for class contactSensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.contactObject\n") } break case "capability.doorControl": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } doorControlObject = name this[doorControlObject] = new DoorControls({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class door control!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.doorControlObject\n") } else { extractedObjectsApp2.append("//Object for class door control!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.doorControlObject\n") } break case "capability.energyMeter": break case "capability.illuminanceMeasurement": break case "capability.accelerationSensor": break case "capability.motionSensor": break case "capability.musicPlayer": break case "capability.powerMeter": break case "capability.presenceSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } presenceSensorObject = name this[presenceSensorObject] = new PresenceSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class presence sensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.presenceSensorObject\n") } else { extractedObjectsApp2.append("//Object for class presence sensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.presenceSensorObject\n") } break case "capability.relativeHumidityMeasurement": break case "capability.relaySwitch": break case "capability.sleepSensor": break case "capability.smokeDetector": break case "capability.stepSensor": break case "capability.switch": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } switchObject = name this[switchObject] = new Switches({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class switch!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.switchObject\n") } else { extractedObjectsApp2.append("//Object for class switch!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.switchObject\n") } break case "capability.switchLevel": break case "capability.temperatureMeasurement": break case "capability.thermostat": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } thermostatObject = name this[thermostatObject] = new Thermostats({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class thermostat!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.thermostatObject\n") } else { extractedObjectsApp2.append("//Object for class thermostat!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.thermostatObject\n") } break case "capability.valve": break case "capability.waterSensor": break case "capability.touchSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } touchSensorObject = name this[touchSensorObject] = new NfcTouch({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class Touch Sensor!\n") extractedObjectsApp1.append("def "+name+"\n") extractedObjectsConstructorApp1.append(name+" = obj.touchSensorObject\n") } else { extractedObjectsApp2.append("//Object for class Touch Sensor!\n") extractedObjectsApp2.append("def "+name+"\n") extractedObjectsConstructorApp2.append(name+" = obj.touchSensorObject\n") } break case "capability.imageCapture": break case "device.mobilePresence": break case "device.aeonKeyFob": break case "mode": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the mode:' if (modeVariables == 0) { mode0 = name this[mode0] = userInput } else if (modeVariables == 1) { mode1 = name this[mode1] = userInput } else if (modeVariables == 2) { mode2 = name this[mode2] = userInput } else if (modeVariables == 3) { mode3 = name this[mode3] = userInput } else if (modeVariables == 4) { mode4 = name this[mode4] = userInput } else if (modeVariables == 5) { mode5 = name this[mode5] = userInput } modeVariables=modeVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for mode!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for mode!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "decimal": break case "text": break case "number": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the number:' if (numberVariables == 0) { number0 = name this[number0] = userInput } else if (numberVariables == 1) { number1 = name this[number1] = userInput } else if (numberVariables == 2) { number2 = name this[number2] = userInput } else if (numberVariables == 3) { number3 = name this[number3] = userInput } else if (numberVariables == 4) { number4 = name this[number4] = userInput } else if (numberVariables == 5) { number5 = name this[number5] = userInput } numberVariables=numberVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for number!\n") extractedObjectsApp1.append("def "+name+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for number!\n") extractedObjectsApp2.append("def "+name+" = "+userInput+"\n") } break case "time": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the time:' if (timeVariables == 0) { time0 = name this[time0] = userInput } else if (timeVariables == 1) { time1 = name this[time1] = userInput } else if (timeVariables == 2) { time2 = name this[time2] = userInput } else if (timeVariables == 3) { time3 = name this[time3] = userInput } else if (timeVariables == 4) { time4 = name this[time4] = userInput } else if (timeVariables == 5) { time5 = name this[time5] = userInput } timeVariables=timeVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for time!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for time!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "enum": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the enum:' if (enumVariables == 0) { enum0 = name this[enum0] = userInput } else if (enumVariables == 1) { enum1 = name this[enum1] = userInput } else if (enumVariables == 2) { enum2 = name this[enum2] = userInput } else if (enumVariables == 3) { enum3 = name this[enum3] = userInput } else if (enumVariables == 4) { enum4 = name this[enum4] = userInput } else if (enumVariables == 5) { enum5 = name this[enum5] = userInput } enumVariables=enumVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for enum!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for enum!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break case "bool": break case "phone": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the phone:' if (phoneVariables == 0) { phone0 = name this[phone0] = userInput } else if (phoneVariables == 1) { phone1 = name this[phone1] = userInput } else if (phoneVariables == 2) { phone2 = name this[phone2] = userInput } else if (phoneVariables == 3) { phone3 = name this[phone3] = userInput } else if (phoneVariables == 4) { phone4 = name this[phone4] = userInput } else if (phoneVariables == 5) { phone5 = name this[phone5] = userInput } phoneVariables=phoneVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for phone!\n") extractedObjectsApp1.append("def "+name+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for phone!\n") extractedObjectsApp2.append("def "+name+" = "+userInput+"\n") } break case "contact": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the name of the contact:' if (contactVariables == 0) { contact0 = name this[contact0] = userInput } else if (contactVariables == 1) { contact1 = name this[contact1] = userInput } else if (contactVariables == 2) { contact2 = name this[contact2] = userInput } else if (contactVariables == 3) { contact3 = name this[contact3] = userInput } else if (contactVariables == 4) { contact4 = name this[contact4] = userInput } else if (contactVariables == 5) { contact5 = name this[contact5] = userInput } contactVariables=contactVariables+1 if (App == "App1") { extractedObjectsApp1.append("//Global variable for contact!\n") extractedObjectsApp1.append("def "+name+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for contact!\n") extractedObjectsApp2.append("def "+name+" = \""+userInput+"\"\n") } break default: break } } //input linkedHashMap def input(LinkedHashMap metaData) { switch(metaData['type']) { case "capability.lock": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } lockObject = metaData['name'] this[lockObject] = new Locks({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class lock!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.lockObject\n") } else { extractedObjectsApp2.append("//Object for class lock!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n") } break case "capability.alarm": break case "capability.battery": break case "capability.beacon": break case "capability.carbonMonoxideDetector": break case "capability.colorControl": break case "capability.contactSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } contactObject = metaData['name'] this[contactObject] = new ContactSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class contactSensor!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.contactObject\n") } else { extractedObjectsApp2.append("//Object for class contactSensor!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.contactObject\n") } break case "capability.doorControl": doorControlObject = metaData['name'] this[doorControlObject] = new DoorControls({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class door control!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.doorControlObject\n") } else { extractedObjectsApp2.append("//Object for class door control!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.doorControlObject\n") } break case "capability.energyMeter": break case "capability.illuminanceMeasurement": break case "capability.accelerationSensor": break case "capability.motionSensor": break case "capability.musicPlayer": break case "capability.powerMeter": break case "capability.presenceSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } presenceSensorObject = metaData['name'] this[presenceSensorObject] = new PresenceSensors({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class presence sensor!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.presenceSensorObject\n") } else { extractedObjectsApp2.append("//Object for class presence sensor!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.presenceSensorObject\n") } break case "capability.relativeHumidityMeasurement": break case "capability.relaySwitch": break case "capability.sleepSensor": break case "capability.smokeDetector": break case "capability.stepSensor": break case "capability.switch": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } switchObject = metaData['name'] this[switchObject] = new Switches({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class switch!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.switchObject\n") } else { extractedObjectsApp2.append("//Object for class switch!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n") } break case "capability.switchLevel": break case "capability.temperatureMeasurement": break case "capability.thermostat": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } thermostatObject = metaData['name'] this[thermostatObject] = new Thermostats({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class thermostat!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.thermostatObject\n") } else { extractedObjectsApp2.append("//Object for class thermostat!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.thermostatObject\n") } break case "capability.valve": break case "capability.waterSensor": break case "capability.touchSensor": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } touchSensorObject = metaData['name'] this[touchSensorObject] = new NfcTouch({}, 1) if (App == "App1") { extractedObjectsApp1.append("//Object for class Touch Sensor!\n") extractedObjectsApp1.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp1.append(metaData['name']+" = obj.touchSensorObject\n") } else { extractedObjectsApp2.append("//Object for class Touch Sensor!\n") extractedObjectsApp2.append("def "+metaData['name']+"\n") extractedObjectsConstructorApp2.append(metaData['name']+" = obj.touchSensorObject\n") } break case "capability.imageCapture": break case "device.mobilePresence": break case "device.aeonKeyFob": break case "mode": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the mode:' if (modeVariables == 0) { mode0 = metaData['name'] this[mode0] = userInput } else if (modeVariables == 1) { mode1 = metaData['name'] this[mode1] = userInput } else if (modeVariables == 2) { mode2 = metaData['name'] this[mode2] = userInput } else if (modeVariables == 3) { mode3 = metaData['name'] this[mode3] = userInput } else if (modeVariables == 4) { mode4 = metaData['name'] this[mode4] = userInput } else if (modeVariables == 5) { mode5 = metaData['name'] this[mode5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for mode!\n") extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for mode!\n") extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n") } break case "decimal": break case "text": break case "number": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the number:' if (numberVariables == 0) { number0 = metaData['name'] this[number0] = userInput } else if (numberVariables == 1) { number1 = metaData['name'] this[number1] = userInput } else if (numberVariables == 2) { number2 = metaData['name'] this[number2] = userInput } else if (numberVariables == 3) { number3 = metaData['name'] this[number3] = userInput } else if (numberVariables == 4) { number4 = metaData['name'] this[number4] = userInput } else if (numberVariables == 5) { number5 = metaData['name'] this[number5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for number!\n") extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for number!\n") extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n") } break case "time": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the time:' if (timeVariables == 0) { time0 = metaData['name'] this[time0] = userInput } else if (timeVariables == 1) { time1 = metaData['name'] this[time1] = userInput } else if (timeVariables == 2) { time2 = metaData['name'] this[time2] = userInput } else if (timeVariables == 3) { time3 = metaData['name'] this[time3] = userInput } else if (timeVariables == 4) { time4 = metaData['name'] this[time4] = userInput } else if (timeVariables == 5) { time5 = metaData['name'] this[time5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for time!\n") extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for time!\n") extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n") } break case "enum": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the enum:' if (enumVariables == 0) { enum0 = metaData['name'] this[enum0] = userInput } else if (enumVariables == 1) { enum1 = metaData['name'] this[enum1] = userInput } else if (enumVariables == 2) { enum2 = metaData['name'] this[enum2] = userInput } else if (enumVariables == 3) { enum3 = metaData['name'] this[enum3] = userInput } else if (enumVariables == 4) { enum4 = metaData['name'] this[enum4] = userInput } else if (enumVariables == 5) { enum5 = metaData['name'] this[enum5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for enum!\n") extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for enum!\n") extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n") } break case "bool": break case "phone": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the phone:' if (phoneVariables == 0) { phone0 = metaData['name'] this[phone0] = userInput } else if (phoneVariables == 1) { phone1 = metaData['name'] this[phone1] = userInput } else if (phoneVariables == 2) { phone2 = metaData['name'] this[phone2] = userInput } else if (phoneVariables == 3) { phone3 = metaData['name'] this[phone3] = userInput } else if (phoneVariables == 4) { phone4 = metaData['name'] this[phone4] = userInput } else if (phoneVariables == 5) { phone5 = metaData['name'] this[phone5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for phone!\n") extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n") } else { extractedObjectsApp2.append("//Global variable for phone!\n") extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n") } break case "contact": if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } def userInput = System.console().readLine 'Enter the metaData['name'] of the contact:' if (contactVariables == 0) { contact0 = metaData['name'] this[contact0] = userInput } else if (contactVariables == 1) { contact1 = metaData['name'] this[contact1] = userInput } else if (contactVariables == 2) { contact2 = metaData['name'] this[contact2] = userInput } else if (contactVariables == 3) { contact3 = metaData['name'] this[contact3] = userInput } else if (contactVariables == 4) { contact4 = metaData['name'] this[contact4] = userInput } else if (contactVariables == 5) { contact5 = metaData['name'] this[contact5] = userInput } if (App == "App1") { extractedObjectsApp1.append("//Global variable for contact!\n") extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n") } else { extractedObjectsApp2.append("//Global variable for contact!\n") extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n") } break default: break } } def label(LinkedHashMap metaData) { if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } println("//IGNORE--ForMobileUse//") } def mode(LinkedHashMap metaData) { if (metaData.containsKey('title')) { println metaData['title'] } if (metaData.containsKey('options')) { println "Options: "+metaData['options'] } println("//IGNORE--ForMobileUse//") } /////Input Methods///// /////MethodsForExtraction///// def definition(LinkedHashMap metaData) { println("///Just some information///") } def preferences(Closure inputData) { find(inputData) //Run the closure to extract pages/sections/inputMethods } def page(LinkedHashMap metaData, Closure inputData) { if (metaData.containsKey('name')) println(metaData['name']) if (metaData.containsKey('title')) println(metaData['title']) find(inputData) //Run the closure to extract sections/inputMethods } def page(LinkedHashMap metaData) { def nameOfFunction = metaData['name'] "$nameOfFunction"() //Call the page } def dynamicPage(LinkedHashMap metaData, Closure inputData) { if (metaData.containsKey('name')) println(metaData['name']) if (metaData.containsKey('title')) println(metaData['title']) find(inputData) //Run the closure to extract sections/inputMethods } def section(String title, Closure inputData) { println(title) find(inputData) //Run the closure to extract inputMethods } def section(LinkedHashMap metaData, Closure inputData) { find(inputData) //Run the closure to extract inputMethods } /////MethodsForExtraction/////