Action invoke systeem verbeterd en nette exceptions geintroduceerd.
This commit is contained in:
@@ -4,20 +4,24 @@ import java.util.ArrayList;
|
|||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
||||||
|
import pm.action.Action;
|
||||||
import pm.applicatie.voorbeeld.Voorbeeld;
|
import pm.applicatie.voorbeeld.Voorbeeld;
|
||||||
import pm.application.Application;
|
import pm.application.Application;
|
||||||
import pm.device.Device;
|
import pm.device.Device;
|
||||||
import pm.device.example.Example;
|
import pm.device.example.Example;
|
||||||
import pm.event.Event;
|
import pm.event.Event;
|
||||||
import pm.event.ApplicationEvent;
|
import pm.exception.ActionException;
|
||||||
|
import pm.exception.ActionNotImplementedException;
|
||||||
|
import pm.exception.EventException;
|
||||||
|
|
||||||
public class Main {
|
public class Main extends Application {
|
||||||
public static final int SLEEP = 100;
|
protected static final int SLEEP = 100;
|
||||||
|
|
||||||
ArrayList<Application> applicationList;
|
ArrayList<Application> applicationList;
|
||||||
ArrayList<Device> deviceList;
|
ArrayList<Device> deviceList;
|
||||||
Queue<Event> eventQueue;
|
Queue<Event> eventQueue;
|
||||||
|
|
||||||
|
boolean run;
|
||||||
Application currentApplication;
|
Application currentApplication;
|
||||||
|
|
||||||
public Main() {
|
public Main() {
|
||||||
@@ -42,33 +46,51 @@ public class Main {
|
|||||||
return deviceList.remove(device);
|
return deviceList.remove(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() throws Exception {
|
||||||
addDevice(new Example(eventQueue));
|
addDevice(new Example(eventQueue));
|
||||||
Application application = new Voorbeeld();
|
Application application = new Voorbeeld();
|
||||||
addApplication(application);
|
addApplication(application);
|
||||||
currentApplication = application;
|
currentApplication = application;
|
||||||
|
run();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() throws ActionException, EventException {
|
||||||
while (true) {
|
run = true;
|
||||||
|
while (run) {
|
||||||
if (eventQueue.isEmpty()) {
|
if (eventQueue.isEmpty()) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(SLEEP);
|
Thread.sleep(SLEEP);
|
||||||
} catch (InterruptedException e) {}
|
} catch (InterruptedException e) {}
|
||||||
} else {
|
} else {
|
||||||
Event event = eventQueue.poll();
|
Event event = eventQueue.poll();
|
||||||
if (event instanceof ApplicationEvent) {
|
Action action = event.getAction();
|
||||||
|
switch (event.getType()) {
|
||||||
|
case MAIN:
|
||||||
|
invoke(action);
|
||||||
|
break;
|
||||||
|
case APPLICATION:
|
||||||
try {
|
try {
|
||||||
currentApplication.invoke(event.getAction());
|
currentApplication.invoke(action);
|
||||||
} catch (Exception e) {
|
} catch (ActionNotImplementedException e) {
|
||||||
e.printStackTrace();
|
// Todo: log.write(...)
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new EventException("Unknown event type");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void exit() {
|
||||||
|
run = false;
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
new Main().start();
|
new Main().start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,9 +2,12 @@ package pm.action;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import pm.exception.ActionNotImplementedException;
|
||||||
|
|
||||||
public enum Action {
|
public enum Action {
|
||||||
START ("start"),
|
START ("start"),
|
||||||
TEST ("test");
|
TEST ("test"),
|
||||||
|
EXIT ("exit");
|
||||||
|
|
||||||
protected String action;
|
protected String action;
|
||||||
|
|
||||||
@@ -12,7 +15,11 @@ public enum Action {
|
|||||||
this.action = action;
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Method getMethod(Object object) throws Exception {
|
public Method getMethod(Object object) throws ActionNotImplementedException {
|
||||||
|
try {
|
||||||
return object.getClass().getMethod(action);
|
return object.getClass().getMethod(action);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
} catch (NoSuchMethodException e) {}
|
||||||
|
throw new ActionNotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,11 @@
|
|||||||
package pm.applicatie.voorbeeld;
|
package pm.applicatie.voorbeeld;
|
||||||
|
|
||||||
import pm.action.Action;
|
|
||||||
import pm.application.Application;
|
import pm.application.Application;
|
||||||
|
|
||||||
public class Voorbeeld extends Application {
|
public class Voorbeeld extends Application {
|
||||||
public Voorbeeld() {
|
public void start() throws Exception {
|
||||||
try {
|
|
||||||
invoke(Action.TEST);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
System.out.println("jeheee!");
|
System.out.println("jeheee!");
|
||||||
|
//throw new Exception("GEK");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
package pm.application;
|
package pm.application;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
import pm.action.Action;
|
import pm.action.Action;
|
||||||
|
import pm.exception.ActionException;
|
||||||
|
import pm.exception.ActionInvokeException;
|
||||||
|
|
||||||
public abstract class Application {
|
public abstract class Application {
|
||||||
public void invoke(Action action) throws Exception {
|
public void invoke(Action action) throws ActionException {
|
||||||
try {
|
try {
|
||||||
action.getMethod(this).invoke(this);
|
action.getMethod(this).invoke(this);
|
||||||
} catch (Exception e) {
|
return;
|
||||||
throw new Exception("Failed to invoke action");
|
} catch (IllegalArgumentException e) {
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
} catch (InvocationTargetException e) {}
|
||||||
|
throw new ActionInvokeException();
|
||||||
|
// Todo: informatie doorgeven over wat er precies is foutgegaan
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void start();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import java.util.Queue;
|
|||||||
|
|
||||||
import pm.action.Action;
|
import pm.action.Action;
|
||||||
import pm.device.Device;
|
import pm.device.Device;
|
||||||
import pm.event.ApplicationEvent;
|
|
||||||
import pm.event.Event;
|
import pm.event.Event;
|
||||||
|
import pm.event.Type;
|
||||||
|
|
||||||
public class Example extends Device {
|
public class Example extends Device {
|
||||||
public Example(Queue<Event> eventQueue) {
|
public Example(Queue<Event> eventQueue) {
|
||||||
@@ -13,7 +13,8 @@ public class Example extends Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void initialise() {
|
public void initialise() {
|
||||||
Event event = new ApplicationEvent(Action.START);
|
eventQueue.add(new Event(Type.APPLICATION, Action.START));
|
||||||
eventQueue.add(event);
|
eventQueue.add(new Event(Type.APPLICATION, Action.TEST));
|
||||||
|
eventQueue.add(new Event(Type.MAIN, Action.EXIT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package pm.event;
|
|
||||||
|
|
||||||
import pm.action.Action;
|
|
||||||
|
|
||||||
public class ApplicationEvent extends Event {
|
|
||||||
public ApplicationEvent(Action action) {
|
|
||||||
super(action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,13 +2,19 @@ package pm.event;
|
|||||||
|
|
||||||
import pm.action.Action;
|
import pm.action.Action;
|
||||||
|
|
||||||
public abstract class Event {
|
public class Event {
|
||||||
|
protected Type type;
|
||||||
protected Action action;
|
protected Action action;
|
||||||
|
|
||||||
public Event(Action action) {
|
public Event(Type type, Action action) {
|
||||||
|
this.type = type;
|
||||||
this.action = action;
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Type getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
public Action getAction() {
|
public Action getAction() {
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|||||||
5
java/src/pm/event/Type.java
Normal file
5
java/src/pm/event/Type.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package pm.event;
|
||||||
|
|
||||||
|
public enum Type {
|
||||||
|
MAIN, APPLICATION;
|
||||||
|
}
|
||||||
5
java/src/pm/exception/ActionException.java
Normal file
5
java/src/pm/exception/ActionException.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package pm.exception;
|
||||||
|
|
||||||
|
public class ActionException extends Exception {
|
||||||
|
protected static final long serialVersionUID = 1L;
|
||||||
|
}
|
||||||
5
java/src/pm/exception/ActionInvokeException.java
Normal file
5
java/src/pm/exception/ActionInvokeException.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package pm.exception;
|
||||||
|
|
||||||
|
public class ActionInvokeException extends ActionException {
|
||||||
|
protected static final long serialVersionUID = 1L;
|
||||||
|
}
|
||||||
5
java/src/pm/exception/ActionNotImplementedException.java
Normal file
5
java/src/pm/exception/ActionNotImplementedException.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package pm.exception;
|
||||||
|
|
||||||
|
public class ActionNotImplementedException extends ActionException {
|
||||||
|
protected static final long serialVersionUID = 1L;
|
||||||
|
}
|
||||||
9
java/src/pm/exception/EventException.java
Normal file
9
java/src/pm/exception/EventException.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package pm.exception;
|
||||||
|
|
||||||
|
public class EventException extends Exception {
|
||||||
|
public EventException(String string) {
|
||||||
|
super(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static final long serialVersionUID = 1L;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user