diff --git a/build.gradle b/build.gradle index 506a83b..930d2b6 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,7 @@ dependencies { providedRuntime("javax.servlet:jstl") compile 'com.google.code.gson:gson:2.2.4' compile "org.mockito:mockito-core:1.+" + compile "org.reflections:reflections:0.9.9-RC1" diff --git a/src/main/java/application/events/EventManager.java b/src/main/java/application/events/EventManager.java new file mode 100644 index 0000000..3f75a81 --- /dev/null +++ b/src/main/java/application/events/EventManager.java @@ -0,0 +1,53 @@ +package application.events; + +import org.reflections.Reflections; +import org.springframework.stereotype.Component; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by lukasgol on 01.02.15. + */ +@Component +public class EventManager { + + Set> eventClassSet; + Set eventsSet; + public EventManager() { + eventClassSet = findEventClasses(); + eventsSet = instantiateEvents(eventClassSet); + System.out.println("Class EventManagerCreated"); + } + + public Set> findEventClasses(){ + System.out.println("Class Finder started..."); + Reflections reflections = new Reflections("application.events.impl"); + Set> classes = reflections.getSubTypesOf(EventObject.class); + System.out.println("Class Finder stoped"); + return classes; + } + + public Set instantiateEvents(Set> classes){ + Set eventObjectSet = new HashSet<>(); + for (Class c : classes) { + try { + EventObject obj=c.newInstance(); + System.out.println("Crated new Event: "+c.getName()); + eventObjectSet.add(obj); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return eventObjectSet; + } + + public void startEvents(){ + for(EventObject e:eventsSet){ + e.validEvent(); + if(e.isValid())e.handleEvent(); + } + } +} diff --git a/src/main/java/application/events/EventObject.java b/src/main/java/application/events/EventObject.java new file mode 100644 index 0000000..87359a8 --- /dev/null +++ b/src/main/java/application/events/EventObject.java @@ -0,0 +1,10 @@ +package application.events; + +/** + * Created by lukasgol on 01.02.15. + */ +public interface EventObject { + public void validEvent(); + public void handleEvent(); + public boolean isValid(); +} diff --git a/src/main/java/application/events/impl/EventObjectImpl.java b/src/main/java/application/events/impl/EventObjectImpl.java new file mode 100644 index 0000000..9133782 --- /dev/null +++ b/src/main/java/application/events/impl/EventObjectImpl.java @@ -0,0 +1,23 @@ +package application.events.impl; + +import application.events.EventObject; + +/** + * Created by lukasgol on 01.02.15. + */ +public class EventObjectImpl implements EventObject { + @Override + public void validEvent() { + System.out.println("Chceking event: "+this.getClass().getName()); + } + + @Override + public void handleEvent() { + System.out.println("sending notification for event: "+this.getClass().getName()); + } + + @Override + public boolean isValid() { + return true; + } +}