Action invoke systeem verbeterd en nette exceptions geintroduceerd.

This commit is contained in:
2011-02-03 14:41:12 +00:00
parent 76fdef60be
commit e9a3cd661f
12 changed files with 100 additions and 48 deletions

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}

View File

@@ -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() {

View File

@@ -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();
}

View File

@@ -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));
}
}

View File

@@ -1,9 +0,0 @@
package pm.event;
import pm.action.Action;
public class ApplicationEvent extends Event {
public ApplicationEvent(Action action) {
super(action);
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,5 @@
package pm.event;
public enum Type {
MAIN, APPLICATION;
}

View File

@@ -0,0 +1,5 @@
package pm.exception;
public class ActionException extends Exception {
protected static final long serialVersionUID = 1L;
}

View File

@@ -0,0 +1,5 @@
package pm.exception;
public class ActionInvokeException extends ActionException {
protected static final long serialVersionUID = 1L;
}

View File

@@ -0,0 +1,5 @@
package pm.exception;
public class ActionNotImplementedException extends ActionException {
protected static final long serialVersionUID = 1L;
}

View 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;
}