From e9a3cd661f94751fdcf78af56e0d934993f774e1 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 3 Feb 2011 14:41:12 +0000 Subject: [PATCH] Action invoke systeem verbeterd en nette exceptions geintroduceerd. --- java/src/pm/Main.java | 48 ++++++++++++++----- java/src/pm/action/Action.java | 13 +++-- .../pm/applicatie/voorbeeld/Voorbeeld.java | 13 +---- java/src/pm/application/Application.java | 17 ++++--- java/src/pm/device/example/Example.java | 7 +-- java/src/pm/event/ApplicationEvent.java | 9 ---- java/src/pm/event/Event.java | 12 +++-- java/src/pm/event/Type.java | 5 ++ java/src/pm/exception/ActionException.java | 5 ++ .../pm/exception/ActionInvokeException.java | 5 ++ .../ActionNotImplementedException.java | 5 ++ java/src/pm/exception/EventException.java | 9 ++++ 12 files changed, 100 insertions(+), 48 deletions(-) delete mode 100644 java/src/pm/event/ApplicationEvent.java create mode 100644 java/src/pm/event/Type.java create mode 100644 java/src/pm/exception/ActionException.java create mode 100644 java/src/pm/exception/ActionInvokeException.java create mode 100644 java/src/pm/exception/ActionNotImplementedException.java create mode 100644 java/src/pm/exception/EventException.java diff --git a/java/src/pm/Main.java b/java/src/pm/Main.java index 1d2538c..3bdb493 100644 --- a/java/src/pm/Main.java +++ b/java/src/pm/Main.java @@ -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 applicationList; ArrayList deviceList; Queue 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(); + } } } \ No newline at end of file diff --git a/java/src/pm/action/Action.java b/java/src/pm/action/Action.java index 0f7dfe6..edfebf7 100644 --- a/java/src/pm/action/Action.java +++ b/java/src/pm/action/Action.java @@ -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(); } } diff --git a/java/src/pm/applicatie/voorbeeld/Voorbeeld.java b/java/src/pm/applicatie/voorbeeld/Voorbeeld.java index c322fd7..2cf5ca0 100644 --- a/java/src/pm/applicatie/voorbeeld/Voorbeeld.java +++ b/java/src/pm/applicatie/voorbeeld/Voorbeeld.java @@ -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() { diff --git a/java/src/pm/application/Application.java b/java/src/pm/application/Application.java index f248e94..f9a9040 100644 --- a/java/src/pm/application/Application.java +++ b/java/src/pm/application/Application.java @@ -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(); } diff --git a/java/src/pm/device/example/Example.java b/java/src/pm/device/example/Example.java index b407a8c..146e67a 100644 --- a/java/src/pm/device/example/Example.java +++ b/java/src/pm/device/example/Example.java @@ -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 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)); } } diff --git a/java/src/pm/event/ApplicationEvent.java b/java/src/pm/event/ApplicationEvent.java deleted file mode 100644 index 39665cc..0000000 --- a/java/src/pm/event/ApplicationEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package pm.event; - -import pm.action.Action; - -public class ApplicationEvent extends Event { - public ApplicationEvent(Action action) { - super(action); - } -} diff --git a/java/src/pm/event/Event.java b/java/src/pm/event/Event.java index 260fd6f..f79b438 100644 --- a/java/src/pm/event/Event.java +++ b/java/src/pm/event/Event.java @@ -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; } diff --git a/java/src/pm/event/Type.java b/java/src/pm/event/Type.java new file mode 100644 index 0000000..ceb118a --- /dev/null +++ b/java/src/pm/event/Type.java @@ -0,0 +1,5 @@ +package pm.event; + +public enum Type { + MAIN, APPLICATION; +} diff --git a/java/src/pm/exception/ActionException.java b/java/src/pm/exception/ActionException.java new file mode 100644 index 0000000..307a368 --- /dev/null +++ b/java/src/pm/exception/ActionException.java @@ -0,0 +1,5 @@ +package pm.exception; + +public class ActionException extends Exception { + protected static final long serialVersionUID = 1L; +} diff --git a/java/src/pm/exception/ActionInvokeException.java b/java/src/pm/exception/ActionInvokeException.java new file mode 100644 index 0000000..3bc4653 --- /dev/null +++ b/java/src/pm/exception/ActionInvokeException.java @@ -0,0 +1,5 @@ +package pm.exception; + +public class ActionInvokeException extends ActionException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/src/pm/exception/ActionNotImplementedException.java b/java/src/pm/exception/ActionNotImplementedException.java new file mode 100644 index 0000000..a9791fa --- /dev/null +++ b/java/src/pm/exception/ActionNotImplementedException.java @@ -0,0 +1,5 @@ +package pm.exception; + +public class ActionNotImplementedException extends ActionException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/src/pm/exception/EventException.java b/java/src/pm/exception/EventException.java new file mode 100644 index 0000000..932d7a5 --- /dev/null +++ b/java/src/pm/exception/EventException.java @@ -0,0 +1,9 @@ +package pm.exception; + +public class EventException extends Exception { + public EventException(String string) { + super(string); + } + + protected static final long serialVersionUID = 1L; +}