Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Дз № 4 + исправления по дз № 3 + spring + ДЗ № 5 #6

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 26 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,28 @@
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>

<properties>
<java-version>1.8</java-version>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<encoding>${file.encoding}</encoding>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

<dependencies>
Expand Down Expand Up @@ -96,5 +106,10 @@
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
</dependencies>
</project>
29 changes: 29 additions & 0 deletions src/main/java/com/coolcompany/smarthome/events/CCSensorEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.coolcompany.smarthome.events;

/**
* Available event types in library v3.7.1:
* "LightIsOn", "LightIsOff", "DoorIsOpen", "DoorIsClosed", "DoorIsLocked", "DoorIsUnlocked"
*/
public class CCSensorEvent {
private final String eventType;
private final String objectId;

/**
* Default constructor
* @param eventType - defines type of event.
* @param objectId - id of the object which fired the event (door/lightswitch)
*/
public CCSensorEvent(String eventType, String objectId) {
this.eventType = eventType;
this.objectId = objectId;
}

public String getEventType() {
return eventType;
}

public String getObjectId() {
return objectId;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.coolcompany.smarthome.events;

public interface EventHandler {

void handleEvent(CCSensorEvent event);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.coolcompany.smarthome.events;

import java.util.ArrayList;
import java.util.Collection;

public class SensorEventsManager {
private final String[] eventTypes = new String[] { "LightIsOn", "LightIsOff", "DoorIsOpen", "DoorIsClosed", "DoorIsLocked", "DoorIsUnlocked" };

private Collection<EventHandler> handlers = new ArrayList<>();

public void registerEventHandler(EventHandler handler) {
this.handlers.add(handler);
}

public void start() {
CCSensorEvent event = getNextSensorEvent();
while (event != null) {
for (EventHandler handler : handlers) {
handler.handleEvent(event);
}
event = getNextSensorEvent();
}
}

private CCSensorEvent getNextSensorEvent() {
// pretend like we're getting the events from physical world, but here we're going to just generate some random events
if (Math.random() < 0.05) return null; // null means end of event stream
String sensorEventType = eventTypes[(int) (6 * Math.random())];
String objectId = "" + ((int) (10 * Math.random()));
return new CCSensorEvent(sensorEventType, objectId);
}


}
14 changes: 14 additions & 0 deletions src/main/java/com/coolcompany/smarthome/sample/Sample.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.coolcompany.smarthome.sample;

import com.coolcompany.smarthome.events.SensorEventsManager;

public class Sample {

public static void main(String[] args) {
SensorEventsManager sensorEventsManager = new SensorEventsManager();
sensorEventsManager.registerEventHandler(event -> {
System.out.println("Event type [" + event.getEventType() + "] from object with id=" + event.getObjectId() + "]");
});
sensorEventsManager.start();
}
}
10 changes: 10 additions & 0 deletions src/main/java/rc/RemoteControl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package rc;

public interface RemoteControl {
/**
* This method will be called when a button buttonCode is pressed on a remote control with id rcId
* @param buttonCode button letter: “A”, “B”, “C”, “D”, “1”, “2”, “3”, “4”
* @param rcId remote control id
*/
void onButtonPressed(String buttonCode, String rcId);
}
15 changes: 15 additions & 0 deletions src/main/java/rc/RemoteControlRegistry.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package rc;

public class RemoteControlRegistry {

/**
* Register remote control with id rcId.
* When button on a real remote control device is pressed this library will call remoteControl.onButtonPressed(...).
* @param remoteControl
* @param rcId
*/
public void registerRemoteControl(RemoteControl remoteControl, String rcId) {
// here goes some library code which registers our remote control with given ID (rcId)
}

}
22 changes: 22 additions & 0 deletions src/main/java/ru/sbt/mipt/oop/Adapter/EventProcessorAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.sbt.mipt.oop.Adapter;

import com.coolcompany.smarthome.events.CCSensorEvent;
import com.coolcompany.smarthome.events.EventHandler;
import ru.sbt.mipt.oop.EventProcessors.SensorEventProcessor;
import ru.sbt.mipt.oop.SensorEvent;

public class EventProcessorAdapter implements EventHandler {

private SensorEventProcessor eventProcessor;

public EventProcessorAdapter(SensorEventProcessor sensorEventProcessor) {
this.eventProcessor = sensorEventProcessor;
}

@Override
public void handleEvent(CCSensorEvent stringEvent){
SensorEventAdapter eventAdapter = new SensorEventAdapter();
SensorEvent sensorEvent = eventAdapter.getEventTypeFromString(stringEvent);
eventProcessor.processor(sensorEvent);
}
}
8 changes: 8 additions & 0 deletions src/main/java/ru/sbt/mipt/oop/Adapter/EventsManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.sbt.mipt.oop.Adapter;

import ru.sbt.mipt.oop.EventProcessors.SensorEventProcessor;

public interface EventsManager {
void start();
void registerEventProcessor(SensorEventProcessor eventProcessor);
}
69 changes: 69 additions & 0 deletions src/main/java/ru/sbt/mipt/oop/Adapter/SensorEventAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package ru.sbt.mipt.oop.Adapter;

import com.coolcompany.smarthome.events.CCSensorEvent;
import ru.sbt.mipt.oop.SensorEvent;
import ru.sbt.mipt.oop.SensorEventType;

import java.util.HashMap;
import java.util.Map;

public class SensorEventAdapter {

private static HashMap<String, SensorEventType> eventAccordance = new HashMap<>();

private final String[] eventTypes = new String[] { "LightIsOn", "LightIsOff",
"DoorIsOpen", "DoorIsClosed", "DoorIsLocked", "DoorIsUnlocked" };

private static SensorEventType determineType(String event){
SensorEventType eventType = null;

switch (event){
case "LightIsOn":
eventType = SensorEventType.LIGHT_ON;
return eventType;
case "LightIsOff":
eventType = SensorEventType.LIGHT_OFF;
return eventType;
case "DoorIsOpen":
eventType = SensorEventType.DOOR_OPEN;
return eventType;
case "DoorIsClosed":
eventType = SensorEventType.DOOR_CLOSED;
return eventType;
case "DoorIsLocked":
eventType = SensorEventType.DOOR_LOCKED;
return eventType;
case "DoorIsUnlocked":
eventType = SensorEventType.DOOR_UNLOCKED;
return eventType;
}

return eventType;
}

private void convertVocab(){
for (String stringEvent : eventTypes) {
eventAccordance.put(stringEvent, determineType(stringEvent));
}
}

public String getStringType(SensorEventType eventType){
convertVocab();
String stringEventType = null;

for (Map.Entry<String, SensorEventType> eventTypes : eventAccordance.entrySet()) {
if (eventTypes.getValue() == eventType){
stringEventType = eventTypes.getKey();
}
}

return stringEventType;
}

public SensorEvent getEventTypeFromString(CCSensorEvent stringEventType){
convertVocab();
SensorEventType eventType = eventAccordance.get(stringEventType);
SensorEvent sensorEvent = new SensorEvent(eventType, stringEventType.getObjectId());
return sensorEvent;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package ru.sbt.mipt.oop.Adapter;

import com.coolcompany.smarthome.events.EventHandler;
import com.coolcompany.smarthome.events.SensorEventsManager;

import ru.sbt.mipt.oop.EventProcessors.SensorEventProcessor;
import java.util.List;

public class SensorEventsManagerAdapter implements EventsManager {

final private SensorEventsManager eventsManager;

public SensorEventsManagerAdapter(List<SensorEventProcessor> eventProcessors) {
this.eventsManager = new SensorEventsManager();

eventProcessors.forEach(processor -> registerEventProcessor(processor));
}

@Override
public void start() {
this.eventsManager.registerEventHandler(
stringEvent -> {
System.out.println("Event type [" + stringEvent.getEventType() +
"] from object with id=" + stringEvent.getObjectId() + "]");
});
this.eventsManager.start();
}

@Override
public void registerEventProcessor(SensorEventProcessor eventProcessor) {
EventHandler handler = new EventProcessorAdapter(eventProcessor);
this.eventsManager.registerEventHandler(handler);
}
}
39 changes: 7 additions & 32 deletions src/main/java/ru/sbt/mipt/oop/Application.java
Original file line number Diff line number Diff line change
@@ -1,39 +1,14 @@
package ru.sbt.mipt.oop;

import ru.sbt.mipt.oop.EventCreators.RandomSensorEventCreator;
import ru.sbt.mipt.oop.EventCreators.SensorEventCreator;
import ru.sbt.mipt.oop.EventProcessors.SensorEventProcessor;

import java.io.IOException;
import java.util.Collection;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import ru.sbt.mipt.oop.Adapter.EventsManager;

public class Application {

public static void main(String... args) throws IOException {

HomeInitializer homeInitializer = new HomeJsonInitializer();

// creating a smartHome
SmartHome smartHome = homeInitializer.initializeHome();

//цикл обработки событий
processEvents(smartHome);
}

private static void processEvents(SmartHome smartHome) {
SensorEventCreator eventCreator = new RandomSensorEventCreator();
SensorEvent event = eventCreator.getNextSensorEvent();

Collection<SensorEventProcessor> eventProcessors = EventProcessorCreator.getNewEventProcessors(smartHome);

while (event != null) {
System.out.println("Got event: " + event);

for (SensorEventProcessor oneProcessor : eventProcessors) {
oneProcessor.processor(event);
}

event = eventCreator.getNextSensorEvent();
}
public static void main(String[] args) {
AbstractApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
EventsManager eventsManager = context.getBean(EventsManager.class);
eventsManager.start();
}
}
37 changes: 37 additions & 0 deletions src/main/java/ru/sbt/mipt/oop/HomeManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ru.sbt.mipt.oop;

import ru.sbt.mipt.oop.Adapter.EventsManager;
import ru.sbt.mipt.oop.EventCreators.RandomSensorEventCreator;
import ru.sbt.mipt.oop.EventCreators.SensorEventCreator;
import ru.sbt.mipt.oop.EventProcessors.SensorEventProcessor;

import java.util.List;

public class HomeManager implements EventsManager {
private List<SensorEventProcessor> eventProcessors;

public HomeManager(List<SensorEventProcessor> eventProcessors) {
this.eventProcessors = eventProcessors;
}

@Override
public void start() {
SensorEventCreator eventCreator = new RandomSensorEventCreator();
SensorEvent event = eventCreator.getNextSensorEvent();

while (event != null) {
System.out.println("Got event: " + event);

for (SensorEventProcessor oneProcessor : eventProcessors) {
oneProcessor.processor(event);
}

event = eventCreator.getNextSensorEvent();
}
}

@Override
public void registerEventProcessor(SensorEventProcessor eventProcessor) {
eventProcessors.add(eventProcessor);
}
}
Loading