Die Java Swing-GUI wird nach dem Zurücksetzen der Sensoren im Sicherheitssystemprojekt nicht aktualisiertJava

Java-Forum
Anonymous
 Die Java Swing-GUI wird nach dem Zurücksetzen der Sensoren im Sicherheitssystemprojekt nicht aktualisiert

Post by Anonymous »

Ich arbeite an einem Java Swing-Projekt (Udacity UdaSecurity). Geben Sie hier eine Bildbeschreibung ein. Kann mir bitte jemand helfen, dieses Problem so schnell wie möglich zu beheben? Wenn irgendwelche Dateien benötigt werden, werde ich sie teilen. //securityservicetest.java

Code: Select all

package com.udacity.catpoint.service;

import com.udacity.catpoint.data.*;
import com.udacity.catpoint.image.ImageService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.awt.image.BufferedImage;
import java.util.HashSet;
import java.util.Set;

import static org.mockito.Mockito.*;

public class SecurityServiceTest {

@Mock
private SecurityRepository securityRepository;

@Mock
private ImageService imageService;

private SecurityService securityService;

@BeforeEach
void setup() {
MockitoAnnotations.openMocks(this);
securityService = new SecurityService(securityRepository, imageService);
}

@Test
void whenSystemArmedAndSensorActivated_alarmBecomesPending() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.NO_ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository).setAlarmStatus(AlarmStatus.PENDING_ALARM);
}

@Test
void whenPendingAlarmAndAnotherSensorActivated_alarmBecomesAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}

@Test
void whenSensorDeactivatedAndAlarmPending_alarmBecomesNoAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(true);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}

@Test
void whenAlarmAlreadyActive_sensorChangeDoesNotAffectAlarm() {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository, never()).setAlarmStatus(any());
}

@Test
void whenAlarmActive_newSensorActivated_alarmStaysAlarm() {
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
Sensor sensor = new Sensor("S2", SensorType.WINDOW);
securityService.changeSensorActivationStatus(sensor, true);
verify(securityRepository, never()).setAlarmStatus(any());
}

@Test
void whenAlarmActive_sensorDeactivated_alarmStaysAlarm() {
when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM);
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(true);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository, never()).setAlarmStatus(any());
}

@Test
void whenCatDetected_andArmedHome_alarmStaysAlarmRegardlessOfSensors() {
when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true);
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME);
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}

@Test
void whenNoCatDetectedAndSensorsInactive_alarmBecomesNoAlarm() {
when(imageService.imageContainsCat(any(),  anyFloat())).thenReturn(false);
when(securityRepository.getSensors()).thenReturn(new HashSet());
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}

@Test
void whenSystemDisarmed_alarmIsSetToNoAlarm() {
securityService.setArmingStatus(ArmingStatus.DISARMED);
verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM);
}

@ParameterizedTest
@EnumSource(value = ArmingStatus.class, names = {"ARMED_HOME", "ARMED_AWAY"})
void whenSystemArmed_allSensorsAreResetToInactive(ArmingStatus status) {
Set sensors = new HashSet();
Sensor s1 = new Sensor("S1", SensorType.DOOR);
s1.setActive(true);
sensors.add(s1);

when(securityRepository.getSensors()).thenReturn(sensors);
securityService.setArmingStatus(status);

sensors.forEach(s -> {
assert !s.getActive();
});
}

@Test
void whenArmedHomeAndCatDetected_verifyAlarmStatus() {
when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME);
when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true);
securityService.processImage(mock(BufferedImage.class));
verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM);
}

@ParameterizedTest
@EnumSource(AlarmStatus.class)
void whenInactiveSensorDeactivated_alarmStateNeverChanges(AlarmStatus status) {
Sensor sensor = new Sensor("S1", SensorType.DOOR);
sensor.setActive(false);
when(securityRepository.getAlarmStatus()).thenReturn(status);
securityService.changeSensorActivationStatus(sensor, false);
verify(securityRepository, never()).setAlarmStatus(any());
}
}

Code: Select all

   //securityservice.java

Code: Select all

package com.udacity.catpoint.service;

import com.udacity.catpoint.application.StatusListener;
import com.udacity.catpoint.data.AlarmStatus;
import com.udacity.catpoint.data.ArmingStatus;
import com.udacity.catpoint.data.SecurityRepository;
import com.udacity.catpoint.data.Sensor;
import com.udacity.catpoint.image.ImageService;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SecurityService {

private final SecurityRepository securityRepository;
private final ImageService imageService;
private final Set statusListeners = new HashSet();

public SecurityService(SecurityRepository securityRepository, ImageService imageService) {
this.securityRepository = securityRepository;
this.imageService = imageService;
}

public void setArmingStatus(ArmingStatus armingStatus) {
if (armingStatus == ArmingStatus.DISARMED) {
setAlarmStatus(AlarmStatus.NO_ALARM);
} else {
// Requirement 10: Reset all sensors to inactive without crashing
List sensors = new ArrayList(securityRepository.getSensors());
sensors.forEach(sensor -> {
sensor.setActive(false);
securityRepository.updateSensor(sensor);
});
}
securityRepository.setArmingStatus(armingStatus);
}

public void changeSensorActivationStatus(Sensor sensor, Boolean active) {
if (securityRepository.getAlarmStatus() != AlarmStatus.ALARM) {
if (active) {
handleSensorActivated();
} else if (sensor.getActive() &&  !active) {
handleSensorDeactivated();
}
}
sensor.setActive(active);
securityRepository.updateSensor(sensor);
}

private void handleSensorActivated() {
if (securityRepository.getArmingStatus() == ArmingStatus.DISARMED) return;
AlarmStatus currentStatus = securityRepository.getAlarmStatus();
if (currentStatus == AlarmStatus.NO_ALARM) {
setAlarmStatus(AlarmStatus.PENDING_ALARM);
} else if (currentStatus == AlarmStatus.PENDING_ALARM) {
setAlarmStatus(AlarmStatus.ALARM);
}
}

private void handleSensorDeactivated() {
if (securityRepository.getAlarmStatus() == AlarmStatus.PENDING_ALARM) {
setAlarmStatus(AlarmStatus.NO_ALARM);
}
}

public void processImage(BufferedImage image) {
boolean catDetected = imageService.imageContainsCat(image, 50.0f);

// Requirement 11: Set alarm if cat detected while ANY Armed state is active
if (catDetected && (getArmingStatus() == ArmingStatus.ARMED_HOME || getArmingStatus() == ArmingStatus.ARMED_AWAY)) {
setAlarmStatus(AlarmStatus.ALARM);
}
// Requirement 9: Reset to no alarm if no cat and sensors are off
else if (!catDetected && allSensorsInactive()) {
setAlarmStatus(AlarmStatus.NO_ALARM);
}

statusListeners.forEach(listener -> listener.catDetected(catDetected));
}

private boolean allSensorsInactive() {
return securityRepository.getSensors().stream().noneMatch(Sensor::getActive);
}

public void setAlarmStatus(AlarmStatus status) {
securityRepository.setAlarmStatus(status);
statusListeners.forEach(listener -> listener.notify(status));
}

public ArmingStatus getArmingStatus() { return securityRepository.getArmingStatus(); }
public AlarmStatus getAlarmStatus() { return securityRepository.getAlarmStatus(); }
public void addStatusListener(StatusListener listener) { statusListeners.add(listener); }
public void removeStatusListener(StatusListener listener) { statusListeners.remove(listener); }
public Set getSensors() { return securityRepository.getSensors(); }
public void addSensor(Sensor sensor) { securityRepository.addSensor(sensor); }
public void removeSensor(Sensor sensor) { securityRepository.removeSensor(sensor); }
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post