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.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
import pm.action.Action;
|
||||
import pm.applicatie.voorbeeld.Voorbeeld;
|
||||
import pm.application.Application;
|
||||
import pm.device.Device;
|
||||
import pm.device.example.Example;
|
||||
import pm.event.Event;
|
||||
import pm.event.ApplicationEvent;
|
||||
import pm.exception.ActionException;
|
||||
import pm.exception.ActionNotImplementedException;
|
||||
import pm.exception.EventException;
|
||||
|
||||
public class Main {
|
||||
public static final int SLEEP = 100;
|
||||
public class Main extends Application {
|
||||
protected static final int SLEEP = 100;
|
||||
|
||||
ArrayList<Application> applicationList;
|
||||
ArrayList<Device> deviceList;
|
||||
Queue<Event> eventQueue;
|
||||
|
||||
boolean run;
|
||||
Application currentApplication;
|
||||
|
||||
public Main() {
|
||||
@@ -42,33 +46,51 @@ public class Main {
|
||||
return deviceList.remove(device);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
public void start() throws Exception {
|
||||
addDevice(new Example(eventQueue));
|
||||
Application application = new Voorbeeld();
|
||||
addApplication(application);
|
||||
currentApplication = application;
|
||||
run();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
while (true) {
|
||||
public void run() throws ActionException, EventException {
|
||||
run = true;
|
||||
while (run) {
|
||||
if (eventQueue.isEmpty()) {
|
||||
try {
|
||||
Thread.sleep(SLEEP);
|
||||
} catch (InterruptedException e) {}
|
||||
} else {
|
||||
Event event = eventQueue.poll();
|
||||
if (event instanceof ApplicationEvent) {
|
||||
try {
|
||||
currentApplication.invoke(event.getAction());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Action action = event.getAction();
|
||||
switch (event.getType()) {
|
||||
case MAIN:
|
||||
invoke(action);
|
||||
break;
|
||||
case APPLICATION:
|
||||
try {
|
||||
currentApplication.invoke(action);
|
||||
} catch (ActionNotImplementedException e) {
|
||||
// Todo: log.write(...)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new EventException("Unknown event type");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void exit() {
|
||||
run = false;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new Main().start();
|
||||
try {
|
||||
new Main().start();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,12 @@ package pm.action;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import pm.exception.ActionNotImplementedException;
|
||||
|
||||
public enum Action {
|
||||
START ("start"),
|
||||
TEST ("test");
|
||||
TEST ("test"),
|
||||
EXIT ("exit");
|
||||
|
||||
protected String action;
|
||||
|
||||
@@ -12,7 +15,11 @@ public enum Action {
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public Method getMethod(Object object) throws Exception {
|
||||
return object.getClass().getMethod(action);
|
||||
public Method getMethod(Object object) throws ActionNotImplementedException {
|
||||
try {
|
||||
return object.getClass().getMethod(action);
|
||||
} catch (SecurityException e) {
|
||||
} catch (NoSuchMethodException e) {}
|
||||
throw new ActionNotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,11 @@
|
||||
package pm.applicatie.voorbeeld;
|
||||
|
||||
import pm.action.Action;
|
||||
import pm.application.Application;
|
||||
|
||||
public class Voorbeeld extends Application {
|
||||
public Voorbeeld() {
|
||||
try {
|
||||
invoke(Action.TEST);
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
public void start() throws Exception {
|
||||
System.out.println("jeheee!");
|
||||
//throw new Exception("GEK");
|
||||
}
|
||||
|
||||
public void test() {
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
package pm.application;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import pm.action.Action;
|
||||
import pm.exception.ActionException;
|
||||
import pm.exception.ActionInvokeException;
|
||||
|
||||
public abstract class Application {
|
||||
public void invoke(Action action) throws Exception {
|
||||
public void invoke(Action action) throws ActionException {
|
||||
try {
|
||||
action.getMethod(this).invoke(this);
|
||||
} catch (Exception e) {
|
||||
throw new Exception("Failed to invoke action");
|
||||
}
|
||||
return;
|
||||
} 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.device.Device;
|
||||
import pm.event.ApplicationEvent;
|
||||
import pm.event.Event;
|
||||
import pm.event.Type;
|
||||
|
||||
public class Example extends Device {
|
||||
public Example(Queue<Event> eventQueue) {
|
||||
@@ -13,7 +13,8 @@ public class Example extends Device {
|
||||
}
|
||||
|
||||
public void initialise() {
|
||||
Event event = new ApplicationEvent(Action.START);
|
||||
eventQueue.add(event);
|
||||
eventQueue.add(new Event(Type.APPLICATION, Action.START));
|
||||
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;
|
||||
|
||||
public abstract class Event {
|
||||
public class Event {
|
||||
protected Type type;
|
||||
protected Action action;
|
||||
|
||||
public Event(Action action) {
|
||||
public Event(Type type, Action action) {
|
||||
this.type = type;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Action getAction() {
|
||||
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