Understand all the code in this message so you can write the java code for the Room Class make sure you utilize the method signatures and there purposes listed for the room class and the device interface

This assignment requires you to write code for a cooling simulation involving rooms and
devices. Three types of devices can be used to cool a room: air conditioners, ceiling fans, and
standing fans. Air conditioners and ceiling fans cannot be removed from a room once they are added.
Standing fans however are portable devices that can be swapped between rooms only if they are not
in use. The table below shows the different properties of each device: portability, breeziness,
noisiness, and cooling power

Heres Table 1 - 
Device - Air Conditioner - Portable = no, Breeziness = 0, Noisiness = 0, Cools by = 5.
Device - Ceiling Fan- Portable = no, Breeziness = 2, Noisiness = 0, Cools by = 3.
Device - Standing Fan- Portable = Yes, Breeziness = 2, Noisiness = 2, Cools by = 1.

Device Interface
The Device interface specifies the following behaviour for a device:
public interface Device {
 
 String getID();
 
 boolean isBreezy();
 
 boolean isNoisy();
 
 boolean isOn();
 
 void turnOn();
 
 void turnOff();
 
 int coolsBy();
 
 int getBreeziness();
 
 int getNoisiness();
 
}

Understand all the code in this message so you can write the java code for the Room Class make sure you utilize the method signatures and there purposes listed for the room class and the device interface

This assignment requires you to write code for a cooling simulation involving rooms and
devices. Three types of devices can be used to cool a room: air conditioners, ceiling fans, and
standing fans. Air conditioners and ceiling fans cannot be removed from a room once they are added.
Standing fans however are portable devices that can be swapped between rooms only if they are not
in use. The table below shows the different properties of each device: portability, breeziness,
noisiness, and cooling power

Heres Table 1 - 
Device - Air Conditioner - Portable = no, Breeziness = 0, Noisiness = 0, Cools by = 5.
Device - Ceiling Fan- Portable = no, Breeziness = 2, Noisiness = 0, Cools by = 3.
Device - Standing Fan- Portable = Yes, Breeziness = 2, Noisiness = 2, Cools by = 1.

Device Interface
The Device interface specifies the following behaviour for a device:
public interface Device {
 
 String getID();
 
 boolean isBreezy();
 
 boolean isNoisy();
 
 boolean isOn();
 
 void turnOn();
 
 void turnOff();
 
 int coolsBy();
 
 int getBreeziness();
 
 int getNoisiness();
 
}
Heres the specification you HAVE to follow for the room class
Room class
Supply attributes of your own for the Room class which must have the following behaviour:
Method Signature - Return Type Purpose
Method Signature - Room(int startingTemperature) Purpose - Constructor
Method Signature - getDevices( ) Return Type - ArrayList Purpose - Returns an ArrayList of devices
Method Signature - addDevice( Device d) Return Type - boolean
Purpose - Return true if a device was successfully
inserted into the devices ArrayList, false if the
device already exists in the collection.
Method Signature - removeDevice(Device d) Return Type - boolean
Purpose - Removes a device from the devices ArrayList
if it is a PortableDevice and returns true, false
otherwise
Method Signature - getTemperatureDrop( ) Return Type - int Purpose - Returns the temperature drop produced by all
of the devices turned on in the room
Method Signature - getTemperature( ) Return Type - int Purpose - Returns the temperature of the room (based
on the devices turned on in the room)
Method Signature - getBreeziness( ) Return Type - int Purpose - Returns the breeziness of the room (produced
by the devices turned on in the room)
Method Signature - getNoisiness( ) Return Type - int Purpose -Returns the noisiness of the room (produced
by the devices turned on in the room)
Method Signature - printState( ) Return Type - void Purpose- Prints the state of the room and the devices.
Heres the test cases for the room class

import static org.junit.Assert.\*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/\*\*
 \* The test class RoomTest.
 \*
 \* @author (your name)
 \* @version (a version number or a date)
 \*/
public class RoomTest
{
 private Device ceilingF1;
 private Device standingF1;
 
 private Device aC1;
 private Room room1;

 Room room4 = new Room(25);
 Room room = new Room(30);
 Room room2 = new Room(35);
 Room room3 = new Room(37);
 /\*\*
 \* Default constructor for test class RoomTest
 \*/
 public RoomTest()
 {
 }

 /\*\*
 \* Sets up the test fixture.
 \*
 \* Called before every test case method.
 \*/
 @Before
 public void setUp()
 {
 ceilingF1 = new CeilingFan();
 standingF1 = new StandingFan();
 aC1 = new AC();
 room1 = new Room(30);
 }

 /\*\*
 \* Tears down the test fixture.
 \*
 \* Called after every test case method.
 \*/
 @After
 public void tearDown()
 {
 }

 @Test
 public void testDeviceArrayList(){
 java.util.ArrayList devices =room1.getDevices();
 assertNotNull(devices); 
 }
 @Test
 public void testAddDevices(){
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 java.util.ArrayList devices =room1.getDevices();
 assertEquals(3,devices.size());
 
 }
 @Test
 public void testRemoveDevices(){
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 assertFalse(room1.removeDevice(ceilingF1));
 assertFalse(room1.removeDevice(aC1));
 assertTrue(room1.removeDevice(standingF1));
 java.util.ArrayList devices =room1.getDevices();
 assertEquals(2,devices.size());
 
 }
 @Test
 public void testGetDevices()
 {
 room1.addDevice(ceilingF1); 
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 java.util.ArrayList devices = room1.getDevices();
 for(Device d: devices){
 if(d instanceof AC){
 assertEquals(0,d.getBreeziness());
 assertEquals(0,d.getNoisiness());
 }
 if(d instanceof CeilingFan){
 assertEquals(2,d.getBreeziness());
 System.out.println(d.toString());
 assertEquals(0,d.getNoisiness()); 
 }
 if(d instanceof StandingFan){
 assertEquals(2,d.getBreeziness());
 assertEquals(2,d.getNoisiness()); 
 }
 }
 }
 @Test
 public void testRoomBreeziness()
 {
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 assertEquals(room1.getBreeziness(), 0);
 standingF1.turnOn();
 assertEquals(room1.getBreeziness(), 2);
 ceilingF1.turnOn();
 assertEquals(room1.getBreeziness(), 4);
 aC1.turnOn();
 assertEquals(room1.getBreeziness(), 4);
 }
 
 @Test
 public void testRoomNoisiness()
 {
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 assertEquals(room1.getNoisiness(), 0);
 standingF1.turnOn();
 assertEquals(room1.getNoisiness(), 2);
 ceilingF1.turnOn();
 assertEquals(room1.getNoisiness(), 2);
 aC1.turnOn();
 assertEquals(room1.getNoisiness(), 2);
 }
 @Test
 public void testTemperatureDrop()
 {
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 assertEquals(room1.getTemperatureDrop(), 0);
 standingF1.turnOn();
 assertEquals(room1.getTemperatureDrop(), 1);
 ceilingF1.turnOn();
 assertEquals(room1.getTemperatureDrop(), 4);
 aC1.turnOn();
 assertEquals(room1.getTemperatureDrop(), 9);
 }
 @Test
 public void testTemperatureRise()
 {
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 standingF1.turnOn();
 ceilingF1.turnOn(); 
 aC1.turnOn();
 assertEquals(room1.getTemperatureDrop(), 9);
 aC1.turnOff();
 assertEquals(room1.getTemperatureDrop(), 4);
 ceilingF1.turnOff();
 assertEquals(room1.getTemperatureDrop(), 1);
 standingF1.turnOff();
 assertEquals(room1.getTemperatureDrop(), 0);
 }
 @Test
 public void testTemperatureRiseAndFall()
 {
 room1.addDevice(ceilingF1);
 room1.addDevice(aC1);
 room1.addDevice(standingF1);
 standingF1.turnOn();
 ceilingF1.turnOn(); 
 assertEquals(room1.getTemperatureDrop(), 4); 
 ceilingF1.turnOff();
 assertEquals(room1.getTemperatureDrop(), 1);
 aC1.turnOn();
 assertEquals(room1.getTemperatureDrop(), 6);
 aC1.turnOff();
 standingF1.turnOff();
 assertEquals(room1.getTemperatureDrop(), 0);
 }
}
이 메시지의 모든 코드를 이해하여 방 클래스에 대한 자바 코드를 작성할 수 있도록 메서드 서명을 활용하고 방 클래스 및 장치 인터페이스에 대해 나열된 목적을 확인하십시오.이 과제에서는 객실 및 장치와 관련된 냉방 시뮬레이션을 위한 코드를 작성해야 합니다.장치. 방을 냉방하는 데 사용할 수 있는 장치는 에어컨, 천장 선풍기, 스탠딩 선풍기의 세 가지 유형이 있습니다.스탠딩 팬. 에어컨과 천장 선풍기는 한 번 추가하면 방에서 제거할 수 없습니다.하지만 스탠딩 선풍기는 휴대용 장치로, 사용하지 않는 경우에만 객실 간에 교체할 수 있습니다.사용 중일 경우에만 교체할 수 있습니다. 아래 표는 각 장치의 다양한 특성을 보여줍니다: 휴대성, 산들산들함,소음 및 냉각 능력표 1 - 장치 - 에어컨 - 휴대용 = 아니요, 산뜻함 = 0, 소음 = 0, 냉방력 = 5.장치 - 천장 선풍기-휴대용 = 아니요, 산들 바람 = 2, 소음 = 0, 냉각 정도 = 3.장치-스탠딩 팬-휴대용 = 예, 산들 바람 = 2, 소음 = 2, 냉각 범위 = 1.장치 인터페이스Device 인터페이스는 장치에 대한 다음 동작을 지정합니다:공용 인터페이스 Device {  String getID();  boolean isBreezy();  boolean isNoisy();  boolean isOn();  void turnOn();  void turnOff();  int coolsBy();  int getBreeziness();  int getNoisiness(); }이 메시지의 모든 코드를 이해하여 방 클래스에 대한 자바 코드를 작성할 수 있도록 메서드 서명을 활용하고 방 클래스 및 장치 인터페이스에 대해 나열된 목적을 확인하십시오.이 과제에서는 방과 관련된 냉방 시뮬레이션을 위한 코드를 작성해야 합니다.장치. 방을 냉방하는 데 사용할 수 있는 장치는 에어컨, 천장 선풍기, 스탠딩 선풍기의 세 가지 유형이 있습니다.스탠딩 팬. 에어컨과 천장 선풍기는 한 번 추가하면 방에서 제거할 수 없습니다.하지만 스탠딩 선풍기는 휴대용 장치로, 사용하지 않는 경우에만 객실 간에 교체할 수 있습니다.사용 중일 경우에만 교체할 수 있습니다. 아래 표는 각 장치의 다양한 특성을 보여줍니다: 휴대성, 산들산들함,소음 및 냉각 능력표 1 - 장치 - 에어컨 - 휴대용 = 아니요, 산뜻함 = 0, 소음 = 0, 냉방력 = 5.장치 - 천장 선풍기-휴대용 = 아니요, 산들 바람 = 2, 소음 = 0, 냉각 정도 = 3.장치-스탠딩 팬-휴대용 = 예, 산들 바람 = 2, 소음 = 2, 냉각 범위 = 1.장치 인터페이스Device 인터페이스는 장치에 대한 다음 동작을 지정합니다:공용 인터페이스 Device {  String getID();  boolean isBreezy();  boolean isNoisy();  boolean isOn();  void turnOn();  void turnOff();  int coolsBy();  int getBreeziness();  int getNoisiness(); }방 클래스에 대해 따라야 하는 사양은 다음과 같습니다.룸 클래스Room 클래스에 다음과 같은 동작을 가져야 하는 자신만의 속성을 제공하세요:메서드 서명 - 반환 유형 목적메서드 시그니처 - Room(int startingTemperature) 목적 - 생성자메서드 시그니처 - getDevices( ) 반환 유형 - ArrayList 목적 - 장치의 ArrayList를 반환합니다.메서드 시그니처 - 추가 디바이스( 디바이스 d) 반환 타입 - 부울목적 - 장치가 성공적으로 삽입되면 참을 반환합니다.장치가 성공적으로 삽입되면 참을 반환하고, 장치가 이미 컬렉션에 있으면디바이스가 컬렉션에 이미 존재하면 거짓을 반환합니다.메서드 서명 - removeDevice(Device d) 반환 유형 - boolean목적 - 장치 ArrayList에서 장치를 제거합니다.인 경우 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.그렇지 않으면메서드 서명 - getTemperatureDrop( ) 반환 유형 - int 목적 - 실내에 켜진 모든 장치에서 생성 된 온도 강하를 반환합니다.모든 장치에서 생성된 온도 강하를 반환합니다.메서드 시그니처 - getTemperature( ) 반환 유형 - int 목적 - 방의 온도를 반환합니다 (방에 켜진 기기 기준)메서드 시그니처 - getBreeziness( ) 반환 유형 - int 목적 - 방의 산들 바람을 반환합니다 (방에 켜진 장치에 의해 생성 된방에 켜진 장치에 의해 생성됨)메서드 시그니처 - getNoisiness( ) 반환 타입 - int 목적 - 방의 소음도를 반환합니다 (방에 켜진 장치에 의해 생성됨)메서드 서명 - printState( ) 반환 유형 - void 목적 - 방과 디바이스의 상태를 출력합니다.방 클래스에 대한 테스트 케이스는 다음과 같습니다.정적 org.junit.Assert.\*를 임포트합니다;import org.junit.After;import org.junit.Before;import org.junit.Test;/\*\* \* 테스트 클래스 RoomTest. \* \* @author (사용자 이름) \* @version (버전 번호 또는 날짜) \*/공용 클래스 RoomTest{ private Device ceilingF1; private Device standingF1;  private Device aC1; private Room room1; 방 room4 = 새로운 방(25); 방 방 = 새로운 방(30); 방 room2 = 새로운 방(35); 방 room3 = 새로운 방(37); /\*\* \* 테스트 클래스 RoomTest의 디폴트 생성자 \*/ public RoomTest() { } /\*\* \* 테스트 픽스처를 설정합니다. \* \* 모든 테스트 케이스 메서드 앞에 호출됩니다. \*/ @Before public void setUp() { ceilingF1 = new CeilingFan(); standingF1 = 새로운 스탠딩팬(); aC1 = new AC(); room1 = new Room(30); } /\*\* \* 테스트 픽스처를 분해합니다. \* \* 모든 테스트 케이스 메서드 뒤에 호출됩니다. \*/ @After public void tearDown() { } @Test public void testDeviceArrayList(){