+////////////////////@Field App
+App = "App2"
////////////////////////////////////////
+//import libraries
import groovy.transform.Field
-@Field File outGlobal = new File("Extractor/outGlobal.groovy")
+
+
+//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
-outGlobal.write("")
-extractedObjectsApp1.write("")
-extractedObjectsApp2.write("")
-extractedObjectsConstructorApp1.write("")
-extractedObjectsConstructorApp2.write("")
+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
-@Field lockIsSet = 0
-@Field contactIsSet = 0
-@Field switchIsSet = 0
+
+/////Input Methods/////
//input "",""
-def input(String name, String type, String App) {
+def input(String name, String type) {
switch(type) {
case "capability.lock":
- if (lockIsSet != 1) {
- lockIsSet = 1
- outGlobal.append("//Global Object for class lock!\n")
- outGlobal.append("@Field def lockObject = new Locking(sendEvent,1)\n")
- }
+ lockObject = name
+ this[lockObject] = new Locks({}, 1)
if (App == "App1") {
extractedObjectsApp1.append("//Object for class lock!\n")
extractedObjectsApp1.append("def "+name+"\n")
case "capability.colorControl":
break
case "capability.contactSensor":
- if (contactIsSet != 1) {
- contactIsSet = 1
- outGlobal.append("//Global Object for class contactSensor!\n")
- outGlobal.append("@Field def contactObject = new Contacting(sendEvent,1)\n")
- }
+ contactObject = name
+ this[contactObject] = new ContactSensors({}, 1)
if (App == "App1") {
extractedObjectsApp1.append("//Object for class contactSensor!\n")
extractedObjectsApp1.append("def "+name+"\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.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.stepSensor":
break
case "capability.switch":
- if (switchIsSet != 1) {
- switchIsSet = 1
- outGlobal.append("//Global Object for class switch!\n")
- outGlobal.append("@Field def switchObject = new Switching(sendEvent,1)\n")
- }
+ switchObject = name
+ this[switchObject] = new Switches({}, 1)
if (App == "App1") {
extractedObjectsApp1.append("//Object for class switch!\n")
extractedObjectsApp1.append("def "+name+"\n")
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
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")
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")
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")
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")
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")
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")
}
//input "","",linkedHashMap
-def input(LinkedHashMap metaData, String name, String type, String App) {
+def input(LinkedHashMap metaData, String name, String type) {
switch(type) {
case "capability.lock":
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (lockIsSet != 1) {
- lockIsSet = 1
- def count = System.console().readLine 'Enter the number of locks to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class lock!\n")
- outGlobal.append("@Field def lockObject = new Locking(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (lockIsSet != 1) {
- lockIsSet = 1
- outGlobal.append("//Global Object for class lock!\n")
- outGlobal.append("@Field def lockObject = new Locking(sendEvent,1)\n")
+ 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")
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (contactIsSet != 1) {
- contactIsSet = 1
- def count = System.console().readLine 'Enter the number of contact sensors to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class contactSensor!\n")
- outGlobal.append("@Field def contactObject = new Contacting(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (contactIsSet != 1) {
- contactIsSet = 1
- outGlobal.append("//Global Object for class contactSensor!\n")
- outGlobal.append("@Field def contactObject = new Contacting(sendEvent,1)\n")
+ 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")
}
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.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
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (switchIsSet != 1) {
- switchIsSet = 1
- def count = System.console().readLine 'Enter the number of switches to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class switch!\n")
- outGlobal.append("@Field def switchObject = new Switching(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (switchIsSet != 1) {
- switchIsSet = 1
- outGlobal.append("//Global Object for class switch!\n")
- outGlobal.append("@Field def switchObject = new Switching(sendEvent,1)\n")
+ 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")
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
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")
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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")
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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")
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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")
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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")
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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")
}
}
//input linkedHashMap
-def input(LinkedHashMap metaData, String App) {
+def input(LinkedHashMap metaData) {
switch(metaData['type']) {
case "capability.lock":
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (lockIsSet != 1) {
- lockIsSet = 1
- def count = System.console().readLine 'Enter the number of locks to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class lock!\n")
- outGlobal.append("@Field def lockObject = new Locking(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (lockIsSet != 1) {
- lockIsSet = 1
- outGlobal.append("//Global Object for class lock!\n")
- outGlobal.append("@Field def lockObject = new Locking(sendEvent,1)\n")
+ 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['input']+"\n")
- extractedObjectsConstructorApp1.append(metaData['input']+" = obj.lockObject\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['input']+"\n")
- extractedObjectsConstructorApp2.append(metaData['input']+" = obj.lockObject\n")
+ extractedObjectsApp2.append("def "+metaData['name']+"\n")
+ extractedObjectsConstructorApp2.append(metaData['name']+" = obj.lockObject\n")
}
break
case "capability.alarm":
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (contactIsSet != 1) {
- contactIsSet = 1
- def count = System.console().readLine 'Enter the number of contact sensors to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class contactSensor!\n")
- outGlobal.append("@Field def contactObject = new Contacting(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (contactIsSet != 1) {
- contactIsSet = 1
- outGlobal.append("//Global Object for class contactSensor!\n")
- outGlobal.append("@Field def contactObject = new Contacting(sendEvent,1)\n")
+ 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['input']+"\n")
- extractedObjectsConstructorApp1.append(metaData['input']+" = obj.contactObject\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['input']+"\n")
- extractedObjectsConstructorApp2.append(metaData['input']+" = obj.contactObject\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.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
if (metaData.containsKey('title')) {
println metaData['title']
}
- if (metaData.containsKey('multiple')) {
- if (metaData['multiple'] == true) {
- if (switchIsSet != 1) {
- switchIsSet = 1
- def count = System.console().readLine 'Enter the number of switches to control?(1,2, or 3)'
- outGlobal.append("//Global Object for class switch!\n")
- outGlobal.append("@Field def switchObject = new Switching(sendEvent, ")
- outGlobal.append(count+")\n")
- }
- }
- }
- if (switchIsSet != 1) {
- switchIsSet = 1
- outGlobal.append("//Global Object for class switch!\n")
- outGlobal.append("@Field def switchObject = new Switching(sendEvent,1)\n")
+ 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['input']+"\n")
- extractedObjectsConstructorApp1.append(metaData['input']+" = obj.switchObject\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['input']+"\n")
- extractedObjectsConstructorApp2.append(metaData['input']+" = obj.switchObject\n")
+ extractedObjectsApp2.append("def "+metaData['name']+"\n")
+ extractedObjectsConstructorApp2.append(metaData['name']+" = obj.switchObject\n")
}
break
case "capability.switchLevel":
break
case "capability.temperatureMeasurement":
- break
+ 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
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
} else {
extractedObjectsApp2.append("//Global variable for mode!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
}
break
case "decimal":
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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['input']+" = "+userInput+"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
} else {
extractedObjectsApp2.append("//Global variable for number!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = "+userInput+"\n")
+ extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
}
break
case "time":
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
} else {
extractedObjectsApp2.append("//Global variable for time!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
}
break
case "enum":
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
} else {
extractedObjectsApp2.append("//Global variable for enum!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
}
break
case "bool":
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
- }
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['input']+" = "+userInput+"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
} else {
extractedObjectsApp2.append("//Global variable for phone!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = "+userInput+"\n")
+ extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
}
break
case "contact":
if (metaData.containsKey('options')) {
println "Options: "+metaData['options']
}
- if (metaData.containsKey('metadata')) {
- println "metaData: "+metaData['metadata']
+ 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
}
- def userInput = System.console().readLine 'Enter the name of the contact:'
+
if (App == "App1") {
extractedObjectsApp1.append("//Global variable for contact!\n")
- extractedObjectsApp1.append("def "+metaData['input']+" = \""+userInput+"\"\n")
+ extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
} else {
extractedObjectsApp2.append("//Global variable for contact!\n")
- extractedObjectsApp2.append("def "+metaData['input']+" = \""+userInput+"\"\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
+}
-input"lock1","capability.lock",required:true,"App1"
-input"contact","capability.contactSensor",required:true,"App1"
-input"minutesLater","number",title:"Delay(inminutes):",required:true,"App1"
-input"secondsLater","number",title:"Delay(inseconds):",required:true,"App1"
-input("recipients","contact",title:"Sendnotificationsto",required:false,"App1")
-input"phoneNumber","phone",title:"Warnwithtextmessage(optional)",description:"PhoneNumber",required:false,"App1"
-input"switchesoff","capability.switch",multiple:true,required:true,"App2"
-input"switcheson","capability.switch",multiple:true,required:false,"App2"
-input"lock1","capability.lock",multiple:true,"App2"
-input"newMode","mode",title:"Mode?","App2"
-input"waitfor","number",title:"Offafter(default120)",required:true,"App2"
+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/////
+
+
+
+/////
+definition(
+ name: "Good Night House",
+ namespace: "charette.joseph@gmail.com",
+ author: "Joseph Charette",
+ description: "Some on, some off with delay for bedtime, Lock The Doors",
+ category: "Convenience",
+ iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
+ iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png"
+/**
+* Borrowed code from
+* Walk Gentle Into That Good Night
+*
+* Author: oneaccttorulethehouse@gmail.com
+* Date: 2014-02-01
+ */
+ )
+preferences {
+ section("When I touch the app turn these lights off…"){
+ input "switchesoff", "capability.switch", multiple: true, required:true
+ }
+ section("When I touch the app turn these lights on…"){
+ input "switcheson", "capability.switch", multiple: true, required:false
+ }
+ section("Lock theses locks...") {
+ input "lock1","capability.lock", multiple: true
+ }
+ section("And change to this mode...") {
+ input "newMode", "mode", title: "Mode?"
+ }
+ section("After so many seconds (optional)"){
+ input "waitfor", "number", title: "Off after (default 120)", required: true
+ }
+}
+
+
+def installed()
+{
+ log.debug "Installed with settings: ${settings}"
+ log.debug "Current mode = ${location.mode}"
+ subscribe(app, appTouch)
+}
+
+
+def updated()
+{
+ log.debug "Updated with settings: ${settings}"
+ log.debug "Current mode = ${location.mode}"
+ unsubscribe()
+ subscribe(app, appTouch)
+}
+
+def appTouch(evt) {
+ log.debug "changeMode, location.mode = $location.mode, newMode = $newMode, location.modes = $location.modes"
+ if (location.mode != newMode) {
+ setLocationMode(newMode)
+ log.debug "Changed the mode to '${newMode}'"
+ } else {
+ log.debug "New mode is the same as the old mode, leaving it be"
+ }
+ log.debug "appTouch: $evt"
+ lock1.lock()
+ switcheson.on()
+ def delay = (waitfor != null && waitfor != "") ? waitfor * 1000 : 120000
+ switchesoff.off(delay: delay)
+}