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;
public enum Action {
START ("start"),
TEST ("test"),
EXIT ("exit"),
PLAY ("play"),
PAUSE ("pause"),
RESUME ("resume"),
NEXT ("next"),
PREVIOUS ("previous"),
FORWARD ("forward"),
REWIND ("rewind"),
MUTE ("mute"),
VOLUME_UP ("volumeUp"),
VOLUME_DOWN ("volumeDown");
protected String action;
private Action(String action) {
this.action = action;
}
EXIT,
FORWARD,
MUTE,
NEXT,
PAUSE,
PLAY,
PREVIOUS,
REPEAT,
RESUME,
REWIND,
START,
TEST,
VOLUME_DOWN,
VOLUME_UP;
}

View File

@@ -2,6 +2,7 @@ package pm;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.task.Continuous;
import pm.task.TaskListener;
public abstract class Application extends TaskListener {
@@ -21,7 +22,18 @@ public abstract class Application extends TaskListener {
}
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);

View File

@@ -1,11 +1,14 @@
package pm;
import pm.exception.MacroException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.Event;
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 {
protected MacroListener macroListener;
@@ -14,22 +17,36 @@ public abstract class Device {
macroListener = new MacroListener();
}
public void add(Macro macro, Task task) {
/* Register macro's */
protected void add(Macro macro, Task task) {
macroListener.add(macro, task);
}
public void add(Event event, Task task) throws MacroException {
macroListener.add(event, task);
protected void add(Event event, Task 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);
}
public void add(Task task) {
TaskProvider.add(task);
}
/* Device default methods */
public void initialise() throws DeviceInitialiseException {}
public void exit() throws DeviceExitException {}
}

View File

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

View File

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

View File

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

View File

@@ -11,10 +11,10 @@ import pm.Device;
import pm.Target;
import pm.Task;
import pm.exception.EventException;
import pm.exception.MacroException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.event.Press;
import pm.macro.event.Release;
import pm.task.Continuous;
public class JIntellitypeDevice extends Device implements HotkeyListener, IntellitypeListener {
protected ArrayList<Hotkey> hotkeyList;
@@ -29,16 +29,16 @@ public class JIntellitypeDevice extends Device implements HotkeyListener, Intell
public void initialise() throws DeviceInitialiseException {
jit.addHotKeyListener(this);
jit.addIntellitypeListener(this);
try {
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'x'),
new Task(Action.EXIT, Target.MAIN));
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 't'),
new Task(Action.TEST, Target.MAIN));
} catch (MacroException e) {
e.printStackTrace();
}
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'x'),
new Task(Action.EXIT, Target.MAIN));
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 't'),
new Task(Action.TEST, Target.MAIN));
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'r'),
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 's'),
new Continuous(Action.REPEAT, Target.APPLICATION, 500));
}
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.Task;
import pm.exception.MacroException;
import pm.task.TaskProvider;
import pm.task.TaskGatherer;
public class MacroListener {
public ArrayList<Macro> macroList;
@@ -24,10 +23,6 @@ public class MacroListener {
taskMap.put(macro, task);
}
public void add(Event event, Task task) throws MacroException {
add(new Macro(event), task);
}
public void add(Event event) {
for (Macro macro : macroList) {
activeList.add(new Active(macro));
@@ -36,7 +31,8 @@ public class MacroListener {
for (Active active : activeList) {
if (active.next(event)) {
if (active.last()) {
TaskProvider.add(taskMap.get(active.getMacro()));
Task task = taskMap.get(active.getMacro());
TaskGatherer.add(task);
removeList.add(active);
}
} 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() {
taskQueue = new ConcurrentLinkedQueue<Task>();
TaskProvider.initialise(taskQueue);
run = true;
run = false;
}
public void start() {
@@ -22,6 +21,7 @@ public abstract class TaskListener implements Runnable {
}
public void run() {
run = true;
while (run) {
if (taskQueue.isEmpty()) {
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);
}
}