Continuous systeem afgemaakt, rollen van verschillende listeners en gatherers gecontroleerd en nutteloze exceptions verwijderd. Het nieuwe actions systeem moet nog worden doorgevoerd in de devices.

This commit is contained in:
2011-02-12 19:06:55 +00:00
parent 6550062bc1
commit 8092b678cf
18 changed files with 158 additions and 105 deletions

View File

@@ -1,23 +1,18 @@
package pm; package pm;
public enum Action { public enum Action {
START ("start"), EXIT,
TEST ("test"), FORWARD,
EXIT ("exit"), MUTE,
PLAY ("play"), NEXT,
PAUSE ("pause"), PAUSE,
RESUME ("resume"), PLAY,
NEXT ("next"), PREVIOUS,
PREVIOUS ("previous"), REPEAT,
FORWARD ("forward"), RESUME,
REWIND ("rewind"), REWIND,
MUTE ("mute"), START,
VOLUME_UP ("volumeUp"), TEST,
VOLUME_DOWN ("volumeDown"); VOLUME_DOWN,
VOLUME_UP;
protected String action;
private Action(String action) {
this.action = action;
}
} }

View File

@@ -2,6 +2,7 @@ package pm;
import pm.exception.application.ApplicationExitException; import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException; import pm.exception.application.ApplicationInitialiseException;
import pm.task.Continuous;
import pm.task.TaskListener; import pm.task.TaskListener;
public abstract class Application extends TaskListener { public abstract class Application extends TaskListener {
@@ -21,7 +22,18 @@ public abstract class Application extends TaskListener {
} }
protected void task(Task task) { protected void task(Task task) {
action(task.getAction()); Action action = task.getAction();
if (task instanceof Continuous) {
Continuous continuous = (Continuous) task;
int sleep = continuous.getSleep();
do {
action(action);
sleep(sleep);
} while (run && !continuous.getStop());
continuous.reset();
} else {
action(action);
}
} }
protected abstract void action(Action action); protected abstract void action(Action action);

View File

@@ -1,11 +1,14 @@
package pm; package pm;
import pm.exception.MacroException;
import pm.exception.device.DeviceExitException; import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException; import pm.exception.device.DeviceInitialiseException;
import pm.macro.Event; import pm.macro.Event;
import pm.macro.MacroListener; import pm.macro.MacroListener;
import pm.task.TaskProvider; import pm.macro.event.Hold;
import pm.macro.event.Press;
import pm.macro.event.Release;
import pm.task.Continuous;
import pm.task.Stopper;
public abstract class Device { public abstract class Device {
protected MacroListener macroListener; protected MacroListener macroListener;
@@ -14,22 +17,36 @@ public abstract class Device {
macroListener = new MacroListener(); macroListener = new MacroListener();
} }
public void add(Macro macro, Task task) { /* Register macro's */
protected void add(Macro macro, Task task) {
macroListener.add(macro, task); macroListener.add(macro, task);
} }
public void add(Event event, Task task) throws MacroException { protected void add(Event event, Task task) {
macroListener.add(event, task); add(new Macro(event), task);
} }
public void add(Event event) { protected void add(Macro startMacro, Macro stopMacro, Continuous continuous) {
add(startMacro, continuous);
add(stopMacro, new Stopper(continuous));
}
protected void add(Event startEvent, Event stopEvent, Continuous continuous) {
add(startEvent, continuous);
add(stopEvent, new Stopper(continuous));
}
protected void add(Hold hold, Continuous continuous) {
Button button = hold.getButton();
add(new Press(button), new Release(button), continuous);
}
/* Recognize events */
protected void add(Event event) {
macroListener.add(event); macroListener.add(event);
} }
public void add(Task task) { /* Device default methods */
TaskProvider.add(task);
}
public void initialise() throws DeviceInitialiseException {} public void initialise() throws DeviceInitialiseException {}
public void exit() throws DeviceExitException {} public void exit() throws DeviceExitException {}
} }

View File

@@ -12,6 +12,10 @@ import pm.macro.event.Release;
public class Macro { public class Macro {
protected Event[] eventArray; protected Event[] eventArray;
public Macro(Event event) {
eventArray = new Event[]{event};
}
public Macro(Event... eventArray) throws MacroException { public Macro(Event... eventArray) throws MacroException {
ArrayList<Button> holdList = new ArrayList<Button>(); ArrayList<Button> holdList = new ArrayList<Button>();
ArrayList<Event> eventList = new ArrayList<Event>(); ArrayList<Event> eventList = new ArrayList<Event>();

View File

@@ -7,10 +7,10 @@ import pm.application.example.ExampleApplication;
import pm.application.iTunes.iTunesApplication; import pm.application.iTunes.iTunesApplication;
import pm.device.gui.GUIDevice; import pm.device.gui.GUIDevice;
import pm.device.jintellitype.JIntellitypeDevice; import pm.device.jintellitype.JIntellitypeDevice;
import pm.exception.action.TargetNotSetException;
import pm.exception.application.ApplicationExitException; import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException; import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException; import pm.exception.device.DeviceInitialiseException;
import pm.task.TaskGatherer;
import pm.task.TaskListener; import pm.task.TaskListener;
import pm.util.ArrayCycle; import pm.util.ArrayCycle;
@@ -28,6 +28,7 @@ public class Main extends TaskListener {
"pm.device.wiimote.WiimoteDevice"};*/ "pm.device.wiimote.WiimoteDevice"};*/
applicationCycle = new ArrayCycle<Application>(); applicationCycle = new ArrayCycle<Application>();
deviceList = new ArrayList<Device>(); deviceList = new ArrayList<Device>();
TaskGatherer.initialise(taskQueue);
} }
public void initialise() throws DeviceInitialiseException { public void initialise() throws DeviceInitialiseException {
@@ -66,11 +67,15 @@ public class Main extends TaskListener {
protected void action(Action action) { protected void action(Action action) {
System.out.println("Main: " + action); System.out.println("Main: " + action);
switch (action) { switch (action) {
case NEXT:
applicationCycle.next();
break;
case PREVIOUS:
applicationCycle.previous();
break;
case EXIT: case EXIT:
exit(); exit();
break; break;
default:
break;
} }
} }

View File

@@ -1,8 +1,8 @@
package pm; package pm;
public class Task { public class Task {
Action action; protected Action action;
Target target; protected Target target;
public Task(Action action, Target target) { public Task(Action action, Target target) {
this.action = action; this.action = action;

View File

@@ -11,10 +11,10 @@ import pm.Device;
import pm.Target; import pm.Target;
import pm.Task; import pm.Task;
import pm.exception.EventException; import pm.exception.EventException;
import pm.exception.MacroException;
import pm.exception.device.DeviceInitialiseException; import pm.exception.device.DeviceInitialiseException;
import pm.macro.event.Press; import pm.macro.event.Press;
import pm.macro.event.Release; import pm.macro.event.Release;
import pm.task.Continuous;
public class JIntellitypeDevice extends Device implements HotkeyListener, IntellitypeListener { public class JIntellitypeDevice extends Device implements HotkeyListener, IntellitypeListener {
protected ArrayList<Hotkey> hotkeyList; protected ArrayList<Hotkey> hotkeyList;
@@ -29,16 +29,16 @@ public class JIntellitypeDevice extends Device implements HotkeyListener, Intell
public void initialise() throws DeviceInitialiseException { public void initialise() throws DeviceInitialiseException {
jit.addHotKeyListener(this); jit.addHotKeyListener(this);
jit.addIntellitypeListener(this); jit.addIntellitypeListener(this);
try { add(
add( new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'x'),
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'x'), new Task(Action.EXIT, Target.MAIN));
new Task(Action.EXIT, Target.MAIN)); add(
add( new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 't'),
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 't'), new Task(Action.TEST, Target.MAIN));
new Task(Action.TEST, Target.MAIN)); add(
} catch (MacroException e) { new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'r'),
e.printStackTrace(); new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 's'),
} new Continuous(Action.REPEAT, Target.APPLICATION, 500));
} }
public void onIntellitype(int command) { public void onIntellitype(int command) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,8 +5,7 @@ import java.util.HashMap;
import pm.Macro; import pm.Macro;
import pm.Task; import pm.Task;
import pm.exception.MacroException; import pm.task.TaskGatherer;
import pm.task.TaskProvider;
public class MacroListener { public class MacroListener {
public ArrayList<Macro> macroList; public ArrayList<Macro> macroList;
@@ -24,10 +23,6 @@ public class MacroListener {
taskMap.put(macro, task); taskMap.put(macro, task);
} }
public void add(Event event, Task task) throws MacroException {
add(new Macro(event), task);
}
public void add(Event event) { public void add(Event event) {
for (Macro macro : macroList) { for (Macro macro : macroList) {
activeList.add(new Active(macro)); activeList.add(new Active(macro));
@@ -36,7 +31,8 @@ public class MacroListener {
for (Active active : activeList) { for (Active active : activeList) {
if (active.next(event)) { if (active.next(event)) {
if (active.last()) { if (active.last()) {
TaskProvider.add(taskMap.get(active.getMacro())); Task task = taskMap.get(active.getMacro());
TaskGatherer.add(task);
removeList.add(active); removeList.add(active);
} }
} else { } else {

View File

@@ -0,0 +1,36 @@
package pm.task;
import pm.Action;
import pm.Target;
import pm.Task;
public class Continuous extends Task {
protected int sleep;
protected boolean stop;
public Continuous(Action action, Target target, int sleep) {
super(action, target);
this.sleep = sleep;
reset();
}
public Continuous(Action action, Target target) {
this(action, target, 0);
}
public void stop() {
stop = true;
}
public void reset() {
stop = false;
}
public int getSleep() {
return sleep;
}
public boolean getStop() {
return stop;
}
}

View File

@@ -0,0 +1,16 @@
package pm.task;
import pm.Task;
public class Stopper extends Task {
protected Continuous continuous;
public Stopper(Continuous continuous) {
super(null, null);
this.continuous = continuous;
}
public void stop() {
continuous.stop(); // Todo: check if the task is really started?
}
}

View File

@@ -0,0 +1,22 @@
package pm.task;
import java.util.Queue;
import pm.Task;
public class TaskGatherer {
protected static Queue<Task> taskQueue;
public static void initialise(Queue<Task> taskQueue) {
TaskGatherer.taskQueue = taskQueue;
}
public static void add(Task task) {
if (task instanceof Stopper) {
Stopper stopper = (Stopper) task;
stopper.stop();
} else {
taskQueue.add(task);
}
}
}

View File

@@ -13,8 +13,7 @@ public abstract class TaskListener implements Runnable {
public TaskListener() { public TaskListener() {
taskQueue = new ConcurrentLinkedQueue<Task>(); taskQueue = new ConcurrentLinkedQueue<Task>();
TaskProvider.initialise(taskQueue); run = false;
run = true;
} }
public void start() { public void start() {
@@ -22,6 +21,7 @@ public abstract class TaskListener implements Runnable {
} }
public void run() { public void run() {
run = true;
while (run) { while (run) {
if (taskQueue.isEmpty()) { if (taskQueue.isEmpty()) {
sleep(SLEEP); sleep(SLEEP);

View File

@@ -1,17 +0,0 @@
package pm.task;
import java.util.Queue;
import pm.Task;
public class TaskProvider {
protected static Queue<Task> taskQueue;
public static void initialise(Queue<Task> taskQueue) {
TaskProvider.taskQueue = taskQueue;
}
public static void add(Task task) {
taskQueue.add(task);
}
}