diff --git a/smart-home-simulator/src/main/java/smarthomesimulator/DashboardController.java b/smart-home-simulator/src/main/java/smarthomesimulator/DashboardController.java index b363730..c6cbaf3 100644 --- a/smart-home-simulator/src/main/java/smarthomesimulator/DashboardController.java +++ b/smart-home-simulator/src/main/java/smarthomesimulator/DashboardController.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.ArrayList; @RestController @@ -270,5 +271,12 @@ public String displayConsoleOutput(){ } return messages; } + @PostMapping(value="/HouseParameters") + public ArrayList houseStatus(@Validated @ModelAttribute("profile") final Profile profile, @Validated @ModelAttribute("simulator") final Simulator simulator){ + + return Simulator.roomsOfHouse; + } + + } diff --git a/smart-home-simulator/src/main/java/smarthomesimulator/RoomController.java b/smart-home-simulator/src/main/java/smarthomesimulator/RoomController.java deleted file mode 100644 index 2882833..0000000 --- a/smart-home-simulator/src/main/java/smarthomesimulator/RoomController.java +++ /dev/null @@ -1,64 +0,0 @@ -package smarthomesimulator; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.servlet.ModelAndView; -import smarthomesimulator.model.Simulator; - -@Controller -public class RoomController { - - - @RequestMapping(value = {"/{.*}/editRoom"}) - public ModelAndView showRoom(ModelMap model, HttpServletRequest request) { - - String selectedRoomName = request.getRequestURL().toString() + "?" + request.getQueryString(); - Pattern roomPattern = Pattern.compile("8080/(.*?)/"); - Matcher roomMatch = roomPattern.matcher(selectedRoomName); - roomMatch.find(); - selectedRoomName = roomMatch.group(1); - model.addAttribute("currentRoom",Simulator.getRoom(selectedRoomName)); - model.addAttribute("currentLights",Simulator.getRoom(selectedRoomName).getLights()); - model.addAttribute("currentWindows",Simulator.getRoom(selectedRoomName).getWindows()); - model.addAttribute("currentDoors",Simulator.getRoom(selectedRoomName).getDoors()); - model.addAttribute("roomStatus", Simulator.getRoom(selectedRoomName).Status()); - return new ModelAndView("editRoom"); - } - - @RequestMapping(value = {"/confirmEdit"}, method= {RequestMethod.GET,RequestMethod.POST}) - public ModelAndView confirmEdit(ModelMap model, HttpServletRequest request, - @RequestParam("selectedLights")String lights, @RequestParam("selectedWindows")String windows, - @RequestParam("selectedDoors")String doors, @RequestParam(name="blockedDoors", required=false)String blockedDoors, - @RequestParam(name="blockedWindows", required=false)String blockedWindows, @RequestParam(name="closedLights", required=false)String closedLights, - @RequestParam(name="closedWindows", required=false)String closedWindows, @RequestParam(name="closedDoors", required=false)String closedDoors) { - - - String selectedRoomName = request.getRequestURL().toString() + "?" + request.getQueryString(); - Pattern roomPattern = Pattern.compile("(/.*?/)"); - Matcher roomMatch = roomPattern.matcher(selectedRoomName); - roomMatch.find(); - selectedRoomName = roomMatch.group(1).replaceAll("\\/", ""); - - try { - - Simulator.getRoom(selectedRoomName).setOpenLights(Integer.parseInt(lights)); - Simulator.getRoom(selectedRoomName).setOpenDoors(Integer.parseInt(doors)); - Simulator.getRoom(selectedRoomName).setOpenWindows(Integer.parseInt(windows)); - - }catch(Exception E) { - System.out.println("Null Values"); - } - - model.addAttribute("currentRoom",Simulator.getRoom(selectedRoomName)); - return new ModelAndView("confirmEdit"); - - - } - -} diff --git a/smart-home-simulator/src/main/java/smarthomesimulator/model/Room.java b/smart-home-simulator/src/main/java/smarthomesimulator/model/Room.java index f804990..0261edf 100644 --- a/smart-home-simulator/src/main/java/smarthomesimulator/model/Room.java +++ b/smart-home-simulator/src/main/java/smarthomesimulator/model/Room.java @@ -7,15 +7,15 @@ public class Room { private String roomName; - private List doors = new ArrayList<>(); - private List windows = new ArrayList<>(); - private List lights = new ArrayList<>(); + private final List doors = new ArrayList<>(); + private final List windows = new ArrayList<>(); + private final List lights = new ArrayList<>(); private int blockedWindows; private int blockedDoors; private double temperature; private boolean overridden; private Zone zone; - + public int getOpenLights() { int count = 0; @@ -156,74 +156,6 @@ public void initLights(int numOfLights) { public void setRoomName(String roomName) { this.roomName=roomName; } public String getRoomName() { return this.roomName; } - - public boolean canEnter() { - - boolean canEnter = false; - - for(int i=0; i>=doors.size(); i++) { - if(canEnter == true) { - break; - } - if(doors.get(i).isOpen()) { - canEnter = true; - } - } - - return canEnter; - - } - - public boolean isWindy() { - boolean windy = false; - - for(int i=0; i>=windows.size(); i++) { - if(windy == true) { - break; - } - if(windows.get(i).isOpen()) { - windy = true; - } - } - return windy; - } - - public boolean isBright() { - - boolean bright = false; - - for(int i=0; i>=lights.size(); i++) { - if(bright == true) { - break; - } - if(lights.get(i).isOn()) { - bright = true; - } - } - - return bright; - } - - public boolean findDoors() { - if (doors.size() == 0) { - return false; - }else - return true; - } - - public boolean findLights() { - if (lights.size() == 0) { - return false; - }else - return true; - } - - public boolean findWindows() { - if (windows.size() == 0) { - return false; - }else - return true; - } public List getWindows() { return this.windows; @@ -275,15 +207,6 @@ public void setBlockedWindows(int windowsToBlock) { } } - - public String Status() { - String status = "There are currently "; - String blockStatus = this.getBlockedDoors()+" blocked doors and "+this.getBlockedWindows()+" blocked windows, "; - String closeStatus = this.getClosedDoors()+" closed doors, "+this.getClosedWindows() - +" closed windows, and "+this.getClosedLights()+" closed lights."; - - return status+blockStatus+closeStatus; - } public double getTemperature() { return temperature; diff --git a/smart-home-simulator/src/main/resources/static/css/dashboard.css b/smart-home-simulator/src/main/resources/static/css/dashboard.css index 1a92d2e..cc5a52b 100644 --- a/smart-home-simulator/src/main/resources/static/css/dashboard.css +++ b/smart-home-simulator/src/main/resources/static/css/dashboard.css @@ -117,6 +117,7 @@ input:checked + .slider:before { } .houseLayout { + display: none; width: 100%; height: 725px; } @@ -140,6 +141,3 @@ input:checked + .slider:before { height: 30px; } -.houseSimulatorOnOff{ - display: none; -} \ No newline at end of file diff --git a/smart-home-simulator/src/main/resources/static/js/dashboard.js b/smart-home-simulator/src/main/resources/static/js/dashboard.js index c6322b8..03b09cc 100644 --- a/smart-home-simulator/src/main/resources/static/js/dashboard.js +++ b/smart-home-simulator/src/main/resources/static/js/dashboard.js @@ -1,20 +1,33 @@ var dashboardContext; +var houseParameters; var conOut; var shhTab; var shhRoom; var shhZone; var shhSeason; - window.onload = async function () { + const response = await fetch("/dashboard", {method: "GET"}); let responseData = await response.json(); console.log(responseData); + + const house = await fetch("/dashboard/HouseParameters", {method:'POST'}); + let houseData = await house.json(); + dashboardContext = new Vue({ el: "#dashboardContextContent", data: {date: responseData.date, time: responseData.time, layout: responseData.fileName, tempOut: responseData.tempOut, location: 'Placeholder'} }); + + houseParameters = new Vue({ + el:"#house-layout", + data: { + roomList:{} + } + }); + conOut = new Vue({ el: "#consoleOut", data: {cOut: ''} @@ -33,12 +46,16 @@ window.onload = async function () { }}); } } - }) + }); + initHouse(houseData); loadSHHTab(); - } + + + + function openModule(evt, modName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("tabContent"); @@ -54,7 +71,7 @@ function openModule(evt, modName) { } function shcModule(evt, id){ - + console.log(evt.target); let tabcontent = document.getElementsByClassName("shcTabContent"); for (let i = 0; i < tabcontent.length; i++) { @@ -69,9 +86,10 @@ function shcModule(evt, id){ } function displayLayout() { - var checkBox = document.getElementById("simSwitch"); - let layout = document.getElementsByClassName("houseSimulatorOnOff")[0]; - + + let checkBox = document.getElementById("simSwitch") + let layout = document.getElementById("house-layout") + if (checkBox.checked == true) { layout.style.display = "block"; } @@ -80,10 +98,6 @@ function displayLayout() { } } -function redirectEditForm() { - window.location.href = "/editForm"; -} - function redirectDashboard() { window.location.href = "/dashboard"; } @@ -95,10 +109,10 @@ async function editContext(e){ json.forEach((value, key) => object[key] = value); const data = JSON.stringify(object) const response = await fetch("/dashboard/context", {method: "POST", body: data, headers: { - "Content-Type": "application/json", + "Content-Type": "application/json", }}); - let responseData = await response.json(); - dashboardContext.date = responseData.date; + let responseData = await response.json(); + dashboardContext.date = responseData.date; dashboardContext.time= responseData.time; dashboardContext.layout= responseData.fileName; dashboardContext.tempOut= responseData.tempOut; @@ -111,7 +125,7 @@ async function editProfile(e){ const json = new FormData(e.target); json.forEach((value, key) => object[key] = value); let data = JSON.stringify(object); - + const response = await fetch("/dashboard/addProfileDashboard", {method: "POST", body: data, headers: { "Content-Type": "application/json", }}); @@ -128,13 +142,13 @@ async function changePrivacySettings(e){ let data = JSON.stringify(object); console.log(data); const response = await fetch("/dashboard/shp", {method: "POST", body: data, headers: { - "Content-Type": "application/json", - }}); + "Content-Type": "application/json", + }}); let responseData = await response.json(); console.log(responseData); displayConsoleOut(); } - + function activateAwayMode(){ console.log('/dashboard'); window.location = '/dashboard/awayMode'; @@ -143,71 +157,77 @@ function activateAwayMode(){ async function openWindow(e, room){ e.preventDefault(); - + const response = await fetch("/dashboard/openWindows", {method:'POST', body: room}); let responseData = await response.json(); + houseParameters.roomList[responseData.roomName].isWindy = true; console.log(responseData); } async function closeWindow(e, room){ e.preventDefault(); + const response = await fetch("/dashboard/closeWindows", {method:'POST', body: room}); let responseData = await response.json(); + houseParameters.roomList[responseData.roomName].isWindy = false; console.log(responseData); } async function openDoors(e, room){ e.preventDefault(); - + const response = await fetch("/dashboard/openDoors", {method:'POST', body: room}); - let responseData = await response.json(); + houseParameters.roomList[responseData.roomName].isEnterable = true; console.log(responseData); } async function closeDoors(e, room){ e.preventDefault(); - const response = await fetch("/dashboard/closeDoors", {method:'POST', body: room}); + const response = await fetch("/dashboard/closeDoors", {method:'POST', body: room}); let responseData = await response.json(); - console.log(responseData);} + houseParameters.roomList[responseData.roomName].isEnterable = false; + console.log(responseData); +} async function onLights(e, room){ e.preventDefault(); const response = await fetch("/dashboard/onLights", {method:'POST', body: room}); - let responseData = await response.json(); + houseParameters.roomList[responseData.roomName].isBright = true; console.log(responseData); } async function offLights(e, room){ e.preventDefault(); - const response = await fetch("/dashboard/offLights", {method:'POST', body: room}); + const response = await fetch("/dashboard/offLights", {method:'POST', body: room}); let responseData = await response.json(); + houseParameters.roomList[responseData.roomName].isBright = false; console.log(responseData); } async function displayConsoleOut(){ - + const response = await fetch("/dashboard/consoleOutput", {method: "POST"}); const string = await response.text(); conOut.cOut = string; - + } async function loadSHHTab(){ const getSHH = await fetch("/dashboard/shh", {method: "GET"}); let shhTabResponseData = await getSHH.json(); - + const getRooms = await fetch("/dashboard/shhRooms", {method: "GET"}); let shhRoomResponseData = await getRooms.json(); - + let overriddenRooms =[]; for (let room in shhRoomResponseData){ overriddenRooms.push(room.overridden); } - + shhTab = new Vue({ el: "#shhVariables", data: {selected: "null", zones: shhTabResponseData, selectedZone:{}}, @@ -284,12 +304,50 @@ async function addZone(e){ let object = {name: shhZone.name, setting: shhZone.setting, temperature: shhZone.temperature}; let data = JSON.stringify(object); - + const response = await fetch("/dashboard/shhAddZone", {method: "POST", body: data, headers: { "Content-Type": "application/json", }}); - let responseData = await response.json(); - shhTab.zones = responseData; - shhRoom.zones = responseData; -} - + let responseData = await response.json(); + shhTab.zones = responseData; + shhRoom.zones = responseData; + } + + +initHouse = (houseData) => { + + for ( i = 0; i < Object.keys(houseData).length; i++){ + + let room = {}; + + let roomName = houseData[i].roomName; + room.name = roomName; + + if(houseData[i].closedDoors > 0 || houseData[i].openDoors > 0 || houseData[i].blockedDoors > 0){ + room.hasDoors = true; + } else room.hasDoors = false; + + if(houseData[i].openDoors > 0 || houseData[i].blockedDoors > 0 ){ + room.isEnterable = true; + }else room.isEnterable = false; + + if(houseData[i].closedWindows > 0 || houseData[i].openWindows > 0 || houseData[i].blockedWindows > 0){ + room.hasWindows = true; + } else room.hasWindows = false; + + if(houseData[i].openWindows > 0 || houseData[i].blockedWindows > 0){ + room.isWindy = true; + }else room.isWindy = false; + + if(houseData[i].closedLights > 0 || houseData[i].openLights > 0){ + room.hasLights = true; + } else room.hasLights = false; + + if(houseData[i].openLights > 0 ){ + room.isBright = true; + }else room.isBright = false; + + Vue.set(houseParameters.roomList, roomName, room); + + } +} \ No newline at end of file diff --git a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/confirmEdit.jsp b/smart-home-simulator/src/main/webapp/WEB-INF/jsp/confirmEdit.jsp deleted file mode 100644 index 3c2f01f..0000000 --- a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/confirmEdit.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@taglib prefix="t" tagdir="/WEB-INF/tags" %> -<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> - - - - - Room context - - - -

${currentRoom.getRoomName()}

-


- - \ No newline at end of file diff --git a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/dashboard.jsp b/smart-home-simulator/src/main/webapp/WEB-INF/jsp/dashboard.jsp index dbefcc5..2587598 100644 --- a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/dashboard.jsp +++ b/smart-home-simulator/src/main/webapp/WEB-INF/jsp/dashboard.jsp @@ -18,7 +18,7 @@ ProfilePic - +

Date: {{ date }}

Time: {{ time }}

House Layout: {{ layout }}

@@ -315,20 +315,25 @@
-
+
-
- - - + + +
diff --git a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editForm.jsp b/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editForm.jsp deleted file mode 100644 index 2755428..0000000 --- a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editForm.jsp +++ /dev/null @@ -1,31 +0,0 @@ -<%@page contentType="text/html" pageEncoding="UTF-8" %> -<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@taglib prefix="t" tagdir="/WEB-INF/tags" %> - - - - -

Edit Simulation

- -
-

Select Room:

- - -
-
- -

Block Window Movement

- - -
-
- -
- - -
-
\ No newline at end of file diff --git a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editRoom.jsp b/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editRoom.jsp deleted file mode 100644 index 28396ed..0000000 --- a/smart-home-simulator/src/main/webapp/WEB-INF/jsp/editRoom.jsp +++ /dev/null @@ -1,132 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@taglib prefix="t" tagdir="/WEB-INF/tags" %> -<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> - - - - - Room context - - - -

${currentRoom.getRoomName()}

-
-


- - - - -
- - - - -
- - - - -



- - - - -
- - - - -



- - - - -
- - - - -
- - - - -
- - - - - - - -
-
- -
- - \ No newline at end of file