Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / Extractor / Extractor.groovy
index 705cee82937d804a1b90fab10b35998cf12133ce..65dcafa20a8dab5fc06e23041f3731f9b413e2fb 100644 (file)
@@ -22,10 +22,32 @@ import Location.LocationVar
 import Location.Phrase
 import appTouch.Touched
 import NfcTouch.NfcTouch
+import AeonKeyFob.AeonKeyFob
+import AeonKeyFob.AeonKeyFobs
+import MusicPlayer.MusicPlayer
+import MusicPlayer.MusicPlayers
+import MotionSensor.MotionSensor
+import MotionSensor.MotionSensors
+import ImageCapture.ImageCapture
+import ImageCapture.ImageCaptures
+import SmokeDetector.SmokeDetector
+import SmokeDetector.SmokeDetectors
+import Alarm.Alarm
+import Alarm.Alarms
+import SpeechSynthesis.SpeechSynthesis
+import SpeechSynthesis.SpeechSynthesises
 import Timer.SimulatedTimer
 
-
-@Field App //Default
+//GlobalVariables
+@Field def location = new LocationVar()
+//Settings variable defined to settings on purpose
+@Field def settings = [app: "app"]
+//Global variable for state[mode]
+@Field def state = [home:[],away:[],night:[]]
+//Create a global logger object for methods
+@Field def log = new Logger()
+//Create a global variable for optional property
+@Field def optional = false //by default for now
 
 
 //Global variables for files
@@ -50,849 +72,201 @@ if (App == "App1") {
 
 //Global objects
 //Global Object for class Touch Sensor!
-@Field def touchSensorObject
+@Field touchSensorObjects = 0
+@Field def touchSensorObject0
+@Field def touchSensorObject1
+@Field def touchSensorObject2
 //Global Object for class switch!
-@Field def switchObject
+@Field switchObjects = 0
+@Field def switchObject0
+@Field def switchObject1
+@Field def switchObject2
 //Global Object for class lock!
-@Field def lockObject
+@Field lockObjects = 0
+@Field def lockObject0
+@Field def lockObject1
+@Field def lockObject2
 //Global Object for class door control!
-@Field def doorControlObject
+@Field doorControlObjects = 0
+@Field def doorControlObject0
+@Field def doorControlObject1
+@Field def doorControlObject2
 //Global Object for class contact sensor!
-@Field def contactObject
+@Field contactObjects = 0
+@Field def contactObject0
+@Field def contactObject1
+@Field def contactObject2
 //Global Object for class presence sensor!
-@Field def presenceSensorObject
+@Field presenceSensorObjects = 0
+@Field def presenceSensorObject0
+@Field def presenceSensorObject1
+@Field def presenceSensorObject2
 //Global Object for class thermostat!
-@Field def thermostatObject
+@Field thermostatObjects = 0
+@Field def thermostatObject0
+@Field def thermostatObject1
+@Field def thermostatObject2
+//Global Object for class music player!
+@Field musicPlayerObjects = 0
+@Field def musicPlayerObject0
+@Field def musicPlayerObject1
+@Field def musicPlayerObject2
+//Global Object for class music player!
+@Field aeonKeyFobObjects = 0
+@Field def aeonKeyFobObject0
+@Field def aeonKeyFobObject1
+@Field def aeonKeyFobObject2
+//Global Object for class motion sensor!
+@Field motionSensorObjects = 0
+@Field def motionSensorObject0
+@Field def motionSensorObject1
+@Field def motionSensorObject2
+//Global Object for class image capture!
+@Field imageCaptureObjects = 0
+@Field def imageCaptureObject0
+@Field def imageCaptureObject1
+@Field def imageCaptureObject2
+//Global Object for class smoke detector!
+@Field smokeDetectorObjects = 0
+@Field def smokeDetectorObject0
+@Field def smokeDetectorObject1
+@Field def smokeDetectorObject2
+//Global Object for class alarm!
+@Field alarmObjects = 0
+@Field def alarmObject0
+@Field def alarmObject1
+@Field def alarmObject2
+//Global Object for class alarm!
+@Field speechSynthesisObjects = 0
+@Field def speechSynthesisObject0
+@Field def speechSynthesisObject1
+@Field def speechSynthesisObject2
 
 
 //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
-                       }
+//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 decimal
+@Field decimalVariables = 0
+@Field decimal0
+@Field decimal1
+@Field decimal2
+@Field decimal3
+@Field decimal4
+@Field decimal5
+//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
+//For text
+@Field textVariables = 0
+@Field textVariable0
+@Field textVariable1
+@Field textVariable2
+@Field textVariable3
+@Field textVariable4
+@Field textVariable5
+//For boolean
+@Field boolVariables = 0
+@Field boolVariable0
+@Field boolVariable1
+@Field boolVariable2
+@Field boolVariable3
+@Field boolVariable4
+@Field boolVariable5
 
-                       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
-                       }
+/////Input Methods/////
+//input "",""
+def input(String name, String type) {
+       LinkedHashMap metaData = []
+       metaData.put('name',name)
+       metaData.put('type',type)
+       input(metaData)
+}
 
-                       contactVariables=contactVariables+1
+//input "","",linkedHashMap
+def input(LinkedHashMap metaData, String name, String type) {
+       metaData.put('name',name)
+       metaData.put('type',type)
+       input(metaData)
+}
 
-                       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, Closure
+def input(LinkedHashMap metaData, String name, String type, Closure Input) {
+       metaData.put('name',name)
+       metaData.put('type',type)
+       input(metaData)
+       find(Input)
 }
+
 //input linkedHashMap
 def input(LinkedHashMap metaData) {
+       if (metaData.containsKey('title')) {
+               println metaData['title']
+       }
+       if (metaData.containsKey('options')) {
+               println "Options: "+metaData['options']
+       }
        switch(metaData['type']) {
                case "capability.lock":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       if (lockObjects == 0) {
+                               lockObject0 = metaData['name']
+                               this[lockObject0] = new Locks({}, 1)
+                       } else if (lockObjects == 1) {
+                               lockObject1 = metaData['name']
+                               this[lockObject1] = new Locks({}, 1)
+                       } else if (lockObjects == 2) {
+                               lockObject2 = metaData['name']
+                               this[lockObject2] = new Locks({}, 1)
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
-                       }
-                       lockObject = metaData['name']
-                       this[lockObject] = new Locks({}, 1)
+
+                       lockObjects=lockObjects+1
+
+                       settings.put(metaData['name'], metaData['name']) 
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class lock!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -904,6 +278,30 @@ def input(LinkedHashMap metaData) {
                        }
                        break
                case "capability.alarm":
+                       if (alarmObjects == 0) {
+                               alarmObject0 = metaData['name']
+                               this[alarmObject0] = new Alarms({}, 1)
+                       } else if (alarmObjects == 1) {
+                               alarmObject1 = metaData['name']
+                               this[alarmObject1] = new Alarms({}, 1)
+                       } else if (alarmObjects == 2) {
+                               alarmObject2 = metaData['name']
+                               this[alarmObject2] = new Alarms({}, 1)
+                       }
+
+                       alarmObjects=alarmObjects+1
+
+                       settings.put(metaData['name'], metaData['name']) 
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class alarm!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.alarmObject\n")         
+                       } else {
+                               extractedObjectsApp2.append("//Object for class alarm!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.alarmObject\n")
+                       }
                        break
                case "capability.battery":
                        break
@@ -914,14 +312,21 @@ def input(LinkedHashMap metaData) {
                case "capability.colorControl":
                        break
                case "capability.contactSensor":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
-                       }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
+                       if (contactObjects == 0) {
+                               contactObject0 = metaData['name']
+                               this[contactObject0] = new ContactSensors({}, 1)
+                       } else if (contactObjects == 1) {
+                               contactObject1 = metaData['name']
+                               this[contactObject1] = new ContactSensors({}, 1)
+                       } else if (contactObjects == 2) {
+                               contactObject2 = metaData['name']
+                               this[contactObject2] = new ContactSensors({}, 1)
                        }
-                       contactObject = metaData['name']
-                       this[contactObject] = new ContactSensors({}, 1)
+
+                       contactObjects=contactObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class contactSensor!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -933,8 +338,21 @@ def input(LinkedHashMap metaData) {
                        }
                        break
                case "capability.doorControl":
-                       doorControlObject = metaData['name']
-                       this[doorControlObject] = new DoorControls({}, 1)
+                       if (doorControlObjects == 0) {
+                               doorControlObject0 = metaData['name']
+                               this[doorControlObject0] = new DoorControls({}, 1)
+                       } else if (doorControlObjects == 1) {
+                               doorControlObject1 = metaData['name']
+                               this[doorControlObject1] = new DoorControls({}, 1)
+                       } else if (doorControlObjects == 2) {
+                               doorControlObject2 = metaData['name']
+                               this[doorControlObject2] = new DoorControls({}, 1)
+                       }
+
+                       doorControlObjects=doorControlObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class door control!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -952,20 +370,75 @@ def input(LinkedHashMap metaData) {
                case "capability.accelerationSensor":
                        break
                case "capability.motionSensor":
+                       if (motionSensorObjects == 0) {
+                               motionSensorObject0 = metaData['name']
+                               this[motionSensorObject0] = new MotionSensors({}, 1)
+                       } else if (motionSensorObjects == 1) {
+                               motionSensorObject1 = metaData['name']
+                               this[motionSensorObject1] = new MotionSensors({}, 1)
+                       } else if (motionSensorObjects == 2) {
+                               motionSensorObject2 = metaData['name']
+                               this[motionSensorObject2] = new MotionSensors({}, 1)
+                       }
+
+                       motionSensorObjects=motionSensorObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class Motion Sensor!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.motionSensorObject\n")          
+                       } else {
+                               extractedObjectsApp2.append("//Object for class Motion Sensor!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.motionSensorObject\n")
+                       }
                        break
                case "capability.musicPlayer":
+                       if (musicPlayerObjects == 0) {
+                               musicPlayerObject0 = metaData['name']
+                               this[musicPlayerObject0] = new MusicPlayers({}, 1)
+                       } else if (musicPlayerObjects == 1) {
+                               musicPlayerObject1 = metaData['name']
+                               this[musicPlayerObject1] = new MusicPlayers({}, 1)
+                       } else if (musicPlayerObjects == 2) {
+                               musicPlayerObject2 = metaData['name']
+                               this[musicPlayerObject2] = new MusicPlayers({}, 1)
+                       }
+
+                       musicPlayerObjects=musicPlayerObjects+1
+
+                       settings.put(metaData['name'], metaData['name']) 
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class music player!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.musicPlayerObject\n")           
+                       } else {
+                               extractedObjectsApp2.append("//Object for class music player!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.musicPlayerObject\n")
+                       }
                        break
                case "capability.powerMeter":
                        break
                case "capability.presenceSensor":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
-                       }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
+                       if (presenceSensorObjects == 0) {
+                               presenceSensorObject0 = metaData['name']
+                               this[presenceSensorObject0] = new PresenceSensors({}, 1)
+                       } else if (presenceSensorObjects == 1) {
+                               presenceSensorObject1 = metaData['name']
+                               this[presenceSensorObject1] = new PresenceSensors({}, 1)
+                       } else if (presenceSensorObjects == 2) {
+                               presenceSensorObject2 = metaData['name']
+                               this[presenceSensorObject2] = new PresenceSensors({}, 1)
                        }
-                       presenceSensorObject = metaData['name']
-                       this[presenceSensorObject] = new PresenceSensors({}, 1)
+
+                       presenceSensorObjects=presenceSensorObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class presence sensor!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -983,18 +456,49 @@ def input(LinkedHashMap metaData) {
                case "capability.sleepSensor":
                        break
                case "capability.smokeDetector":
+                       if (smokeDetectorObjects == 0) {
+                               smokeDetectorObject0 = metaData['name']
+                               this[smokeDetectorObject0] = new SmokeDetectors({}, 1)
+                       } else if (smokeDetectorObjects == 1) {
+                               smokeDetectorObject1 = metaData['name']
+                               this[smokeDetectorObject1] = new SmokeDetectors({}, 1)
+                       } else if (smokeDetectorObjects == 2) {
+                               smokeDetectorObject2 = metaData['name']
+                               this[smokeDetectorObject2] = new SmokeDetectors({}, 1)
+                       }
+
+                       smokeDetectorObjects=smokeDetectorObjects+1
+                       
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class smoke detector!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.smokeDetectorObject\n")         
+                       } else {
+                               extractedObjectsApp2.append("//Object for class smoke detector!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.smokeDetectorObject\n")
+                       }
                        break
                case "capability.stepSensor":
                        break
                case "capability.switch":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       if (switchObjects == 0) {
+                               switchObject0 = metaData['name']
+                               this[switchObject0] = new Switches({}, 1)
+                       } else if (switchObjects == 1) {
+                               switchObject1 = metaData['name']
+                               this[switchObject1] = new Switches({}, 1)
+                       } else if (switchObjects == 2) {
+                               switchObject2 = metaData['name']
+                               this[switchObject2] = new Switches({}, 1)
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
-                       }
-                       switchObject = metaData['name']
-                       this[switchObject] = new Switches({}, 1)
+
+                       switchObjects=switchObjects+1
+                       
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class switch!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -1010,14 +514,21 @@ def input(LinkedHashMap metaData) {
                case "capability.temperatureMeasurement":
                        break
                case "capability.thermostat":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       if (thermostatObjects == 0) {
+                               thermostatObject0 = metaData['name']
+                               this[thermostatObject0] = new Thermostats({}, 1)
+                       } else if (thermostatObjects == 1) {
+                               thermostatObject1 = metaData['name']
+                               this[thermostatObject1] = new Thermostats({}, 1)
+                       } else if (thermostatObjects == 2) {
+                               thermostatObject2 = metaData['name']
+                               this[thermostatObject2] = new Thermostats({}, 1)
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
-                       }
-                       thermostatObject = metaData['name']
-                       this[thermostatObject] = new Thermostats({}, 1)
+
+                       thermostatObjects=thermostatObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class thermostat!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -1030,17 +541,50 @@ def input(LinkedHashMap metaData) {
                        break
                case "capability.valve":
                        break
+               case "capability.speechSynthesis":
+                       if (speechSynthesisObjects == 0) {
+                               speechSynthesisObject0 = metaData['name']
+                               this[speechSynthesisObject0] = new SpeechSynthesises({}, 1)
+                       } else if (speechSynthesisObjects == 1) {
+                               speechSynthesisObject1 = metaData['name']
+                               this[speechSynthesisObject1] = new SpeechSynthesises({}, 1)
+                       } else if (speechSynthesisObjects == 2) {
+                               speechSynthesisObject2 = metaData['name']
+                               this[speechSynthesisObject2] = new SpeechSynthesises({}, 1)
+                       }
+
+                       speechSynthesisObjects=speechSynthesisObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class speech synthesis!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.speechSynthesisObject\n")               
+                       } else {
+                               extractedObjectsApp2.append("//Object for class speech synthesis!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.speechSynthesisObject\n")
+                       }
+                       break
                case "capability.waterSensor":
                        break
                case "capability.touchSensor":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       if (touchSensorObjects == 0) {
+                               touchSensorObject0 = metaData['name']
+                               this[touchSensorObject0] = new NfcTouch({}, 1)
+                       } else if (touchSensorObjects == 1) {
+                               touchSensorObject1 = metaData['name']
+                               this[touchSensorObject1] = new NfcTouch({}, 1)
+                       } else if (touchSensorObjects == 2) {
+                               touchSensorObject2 = metaData['name']
+                               this[touchSensorObject2] = new NfcTouch({}, 1)
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
-                       }
-                       touchSensorObject = metaData['name']
-                       this[touchSensorObject] = new NfcTouch({}, 1)
+
+                       touchSensorObjects=touchSensorObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {
                                extractedObjectsApp1.append("//Object for class Touch Sensor!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+"\n")
@@ -1052,19 +596,63 @@ def input(LinkedHashMap metaData) {
                        }
                        break
                case "capability.imageCapture":
+                       if (imageCaptureObjects == 0) {
+                               imageCaptureObject0 = metaData['name']
+                               this[imageCaptureObject0] = new ImageCaptures({}, 1)
+                       } else if (imageCaptureObjects == 1) {
+                               imageCaptureObject1 = metaData['name']
+                               this[imageCaptureObject1] = new ImageCaptures({}, 1)
+                       } else if (imageCaptureObjects == 2) {
+                               imageCaptureObject2 = metaData['name']
+                               this[imageCaptureObject2] = new ImageCaptures({}, 1)
+                       }
+
+                       imageCaptureObjects=imageCaptureObjects+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class Image Capture!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.imageCaptureObject\n")          
+                       } else {
+                               extractedObjectsApp2.append("//Object for class Image Capture!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.imageCaptureObject\n")
+                       }
                        break
                case "device.mobilePresence":
                        break
                case "device.aeonKeyFob":
-                       break
-               case "mode":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       if (aeonKeyFobObjects == 0) {
+                               aeonKeyFobObject0 = metaData['name']
+                               this[aeonKeyFobObject0] = new AeonKeyFobs({}, 1)
+                       } else if (aeonKeyFobObjects == 1) {
+                               aeonKeyFobObject1 = metaData['name']
+                               this[aeonKeyFobObject1] = new AeonKeyFobs({}, 1)
+                       } else if (aeonKeyFobObjects == 2) {
+                               aeonKeyFobObject2 = metaData['name']
+                               this[aeonKeyFobObject2] = new AeonKeyFobs({}, 1)
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
+
+                       aeonKeyFobObjects=aeonKeyFobObjects+1
+
+                       settings.put(metaData['name'], metaData['name']) 
+
+                       if (App == "App1") {
+                               extractedObjectsApp1.append("//Object for class aeon key fob!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp1.append(metaData['name']+" = obj.aeonKeyFobObject\n")            
+                       } else {
+                               extractedObjectsApp2.append("//Object for class aeon key fob!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+"\n")
+                               extractedObjectsConstructorApp2.append(metaData['name']+" = obj.aeonKeyFobObject\n")
                        }
-                       def userInput = System.console().readLine 'Enter the mode:'
+                       break
+               case "mode":
+                       def randomVariable = Math.abs(new Random().nextInt() % 3)
+                       def modes = ["away", "home", "night"]
+                       def userInput = modes[randomVariable]
 
                        if (modeVariables == 0) {
                                mode0 = metaData['name']
@@ -1086,6 +674,10 @@ def input(LinkedHashMap metaData) {
                                this[mode5] = userInput
                        }
 
+                       modeVariables=modeVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for mode!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
@@ -1095,17 +687,77 @@ def input(LinkedHashMap metaData) {
                        }
                        break
                case "decimal":
+                       def userInput = Math.abs(new Random().nextInt() % 60) + 40
+                       
+                       if (decimalVariables == 0) {
+                               decimal0 = metaData['name']
+                               this[decimal0] = userInput
+                       } else if (decimalVariables == 1) {
+                               decimal1 = metaData['name']
+                               this[decimal1] = userInput
+                       } else if (decimalVariables == 2) {
+                               decimal2 = metaData['name']
+                               this[decimal2] = userInput
+                       } else if (decimalVariables == 3) {
+                               decimal3 = metaData['name']
+                               this[decimal3] = userInput
+                       } else if (decimalVariables == 4) {
+                               decimal4 = metaData['name']
+                               this[decimal4] = userInput
+                       } else if (decimalVariables == 5) {
+                               decimal5 = metaData['name']
+                               this[decimal5] = userInput
+                       }
+
+                       decimalVariables=decimalVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {                    
+                               extractedObjectsApp1.append("//Global variable for decimal number!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
+                       } else {
+                               extractedObjectsApp2.append("//Global variable for decimal number!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+" = "+userInput+"\n")
+                       }
                        break
                case "text":
-                       break
-               case "number":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       def userInput = "This is just a text!"
+       
+                       if (textVariables == 0) {
+                               text0 = metaData['name']
+                               this[text0] = userInput
+                       } else if (textVariables == 1) {
+                               text1 = metaData['name']
+                               this[text1] = userInput
+                       } else if (textVariables == 2) {
+                               text2 = metaData['name']
+                               this[text2] = userInput
+                       } else if (textVariables == 3) {
+                               text3 = metaData['name']
+                               this[text3] = userInput
+                       } else if (textVariables == 4) {
+                               text4 = metaData['name']
+                               this[text4] = userInput
+                       } else if (textVariables == 5) {
+                               text5 = metaData['name']
+                               this[text5] = userInput
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
+
+                       textVariables=textVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {                    
+                               extractedObjectsApp1.append("//Global variable for text!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
+                       } else {
+                               extractedObjectsApp2.append("//Global variable for text!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
                        }
-                       def userInput = System.console().readLine 'Enter the number:'
+                       break
+               case "number":
+                       def userInput = Math.abs(new Random().nextInt() % 60) + 40
                        
                        if (numberVariables == 0) {
                                number0 = metaData['name']
@@ -1127,6 +779,10 @@ def input(LinkedHashMap metaData) {
                                this[number5] = userInput
                        }
 
+                       numberVariables=numberVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for number!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
@@ -1136,13 +792,7 @@ def input(LinkedHashMap metaData) {
                        }
                        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:'
+                       def userInput = "15:00"
                        
                        if (timeVariables == 0) {
                                time0 = metaData['name']
@@ -1164,6 +814,10 @@ def input(LinkedHashMap metaData) {
                                this[time5] = userInput
                        }
 
+                       timeVariables=timeVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for time!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
@@ -1173,13 +827,9 @@ def input(LinkedHashMap metaData) {
                        }
                        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:'
+                       def randomVariable = Math.abs(new Random().nextInt() % 2)
+                       def modes = ["Yes", "No"]
+                       def userInput = modes[randomVariable]
        
                        if (enumVariables == 0) {
                                enum0 = metaData['name']
@@ -1201,6 +851,10 @@ def input(LinkedHashMap metaData) {
                                this[enum5] = userInput
                        }
 
+                       enumVariables=enumVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for enum!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
@@ -1210,15 +864,42 @@ def input(LinkedHashMap metaData) {
                        }
                        break
                case "bool":
-                       break
-               case "phone":
-                       if (metaData.containsKey('title')) {
-                               println metaData['title']
+                       def userInput = Math.abs(new Random().nextInt() % 2)
+       
+                       if (boolVariables == 0) {
+                               bool0 = metaData['name']
+                               this[bool0] = userInput
+                       } else if (boolVariables == 1) {
+                               bool1 = metaData['name']
+                               this[bool1] = userInput
+                       } else if (boolVariables == 2) {
+                               bool2 = metaData['name']
+                               this[bool2] = userInput
+                       } else if (boolVariables == 3) {
+                               bool3 = metaData['name']
+                               this[bool3] = userInput
+                       } else if (boolVariables == 4) {
+                               bool4 = metaData['name']
+                               this[bool4] = userInput
+                       } else if (boolVariables == 5) {
+                               bool5 = metaData['name']
+                               this[bool5] = userInput
                        }
-                       if (metaData.containsKey('options')) {
-                               println "Options: "+metaData['options']
+
+                       boolVariables=boolVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
+                       if (App == "App1") {                    
+                               extractedObjectsApp1.append("//Global variable for boolean!\n")
+                               extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
+                       } else {
+                               extractedObjectsApp2.append("//Global variable for boolean!\n")
+                               extractedObjectsApp2.append("def "+metaData['name']+" = \""+userInput+"\"\n")
                        }
-                       def userInput = System.console().readLine 'Enter the phone:'
+                       break
+               case "phone":
+                       def userInput = 9495379373
 
                        if (phoneVariables == 0) {
                                phone0 = metaData['name']
@@ -1240,6 +921,10 @@ def input(LinkedHashMap metaData) {
                                this[phone5] = userInput
                        }
 
+                       phoneVariables=phoneVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for phone!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = "+userInput+"\n")
@@ -1249,13 +934,7 @@ def input(LinkedHashMap metaData) {
                        }
                        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:'
+                       def userInput = "AJ"
        
                        if (contactVariables == 0) {
                                contact0 = metaData['name']
@@ -1277,6 +956,10 @@ def input(LinkedHashMap metaData) {
                                this[contact5] = userInput
                        }
 
+                       contactVariables=contactVariables+1
+
+                       settings.put(metaData['name'], metaData['name'])
+
                        if (App == "App1") {                    
                                extractedObjectsApp1.append("//Global variable for contact!\n")
                                extractedObjectsApp1.append("def "+metaData['name']+" = \""+userInput+"\"\n")
@@ -1311,6 +994,10 @@ def mode(LinkedHashMap metaData) {
 
        println("//IGNORE--ForMobileUse//")
 }
+
+def href(LinkedHashMap metaData) {
+       println("//IGNORE--some data//")
+}
 /////Input Methods/////
 
 
@@ -1321,6 +1008,13 @@ def definition(LinkedHashMap metaData) {
 
 def preferences(Closure inputData) {
        find(inputData) //Run the closure to extract pages/sections/inputMethods
+       if (App == "App1") {                    
+               extractedObjectsConstructorApp1.append("//Global variable for settings!\n")
+               extractedObjectsConstructorApp1.append("settings = $settings\n")
+       } else {
+               extractedObjectsConstructorApp2.append("//Global variable for settings!\n")
+               extractedObjectsConstructorApp2.append("settings = $settings\n")
+       }
 }
 
 def page(LinkedHashMap metaData, Closure inputData) {
@@ -1346,11 +1040,19 @@ def dynamicPage(LinkedHashMap metaData, Closure inputData) {
        find(inputData) //Run the closure to extract sections/inputMethods
 }
 
+def paragraph(String paragraphText) {
+       println(paragraphText)
+}
+
 def section(String title, Closure inputData) {
        println(title)
        find(inputData) //Run the closure to extract inputMethods
 }
 
+def section(Closure inputData) {
+       find(inputData) //Run the closure to extract inputMethods
+}
+
 def section(LinkedHashMap metaData, Closure inputData) {
        find(inputData) //Run the closure to extract inputMethods
 }