diff --git a/java/src/com/dt/iTunesController/iTunes.java b/java/src/com/dt/iTunesController/iTunes.java index 016c29d..4f1a3ae 100644 --- a/java/src/com/dt/iTunesController/iTunes.java +++ b/java/src/com/dt/iTunesController/iTunes.java @@ -334,7 +334,14 @@ public class iTunes { public boolean getMute() { return iTunes.getPropertyAsBoolean("Mute"); } - + + /** + * Toggle the mute state. + */ + public void toggleMute() { + setMute(!getMute()); + } + /** * Returns the current player state. * @return Returns the current player state. diff --git a/java/src/pm/Action.java b/java/src/pm/Action.java index 4d68e1f..fdebcc7 100644 --- a/java/src/pm/Action.java +++ b/java/src/pm/Action.java @@ -1,11 +1,5 @@ package pm; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import pm.exception.ActionException; -import pm.exception.action.InvokeActionException; -import pm.exception.action.NotImplementedActionException; import pm.exception.action.TargetNotSetException; public enum Action { @@ -21,7 +15,7 @@ public enum Action { REWIND ("rewind"), MUTE ("mute"), VOLUME_UP ("volumeUp"), - VULUME_DOWN ("volumeDown"); + VOLUME_DOWN ("volumeDown"); protected String action; @@ -42,27 +36,4 @@ public enum Action { } return target; } - - public Method getMethod(Object object) throws NotImplementedActionException { - try { - return object.getClass().getMethod(action); - } catch (SecurityException e) { - } catch (NoSuchMethodException e) {} - throw new NotImplementedActionException(); - } - - public void invoke(Object object) throws ActionException { - try { - getMethod(object).invoke(object); - return; - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - throw new InvokeActionException(); - // Todo: informatie doorgeven over wat er precies is foutgegaan - } } diff --git a/java/src/pm/Application.java b/java/src/pm/Application.java new file mode 100644 index 0000000..68aae34 --- /dev/null +++ b/java/src/pm/Application.java @@ -0,0 +1,7 @@ +package pm; + +import pm.listener.ActionListener; + +public abstract class Application extends ActionListener { + public void exit() {} +} \ No newline at end of file diff --git a/java/src/pm/Main.java b/java/src/pm/Main.java index 80763e8..0621d79 100644 --- a/java/src/pm/Main.java +++ b/java/src/pm/Main.java @@ -1,54 +1,26 @@ package pm; import java.util.ArrayList; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - -import pm.application.Application; -import pm.application.Winamp.WinampApplication; +import pm.application.example.ExampleApplication; import pm.application.iTunes.iTunesApplication; -import pm.application.voorbeeld.VoorbeeldApplication; import pm.device.Device; -import pm.device.javainput.extreme3d.Extreme3DDevice; import pm.device.javainput.rumblepad.RumblepadDevice; -import pm.device.jintellitype.JIntellitypeDevice; -import pm.device.wiimote.WiimoteDevice; -import pm.exception.ActionException; -import pm.exception.action.NotImplementedActionException; -import pm.exception.action.UnknownTargetException; +import pm.exception.action.TargetNotSetException; import pm.listener.ActionListener; +import pm.listener.ActionProvider; import pm.util.ArrayCycle; -public class Main { - protected static final int SLEEP = 100; - +public class Main extends ActionListener { ArrayCycle applicationCycle; ArrayList deviceList; - Queue actionQueue; boolean run; public Main() { + super(); applicationCycle = new ArrayCycle(); deviceList = new ArrayList(); - actionQueue = new ConcurrentLinkedQueue(); - ActionListener.initialise(actionQueue); - } - - public void add(Application application) { - applicationCycle.add(application); - } - - public boolean remove(Application application) { - return applicationCycle.remove(application); - } - - public void add(Device device) { - deviceList.add(device); - } - - public boolean remove(Device device) { - return deviceList.remove(device); + ActionProvider.initialise(actionQueue); } public void start() throws Exception { @@ -60,10 +32,10 @@ public class Main { for (Device device : deviceList) { device.start(); } - - add(new VoorbeeldApplication()); + + add(new ExampleApplication()); add(new iTunesApplication()); - add(new WinampApplication()); + //add(new WinampApplication()); applicationCycle.next(); for (Application application : applicationCycle) { application.start(); @@ -71,38 +43,6 @@ public class Main { run(); } - public void run() throws ActionException { - run = true; - while (run) { - if (actionQueue.isEmpty()) { - try { - Thread.sleep(SLEEP); - } catch (InterruptedException e) {} - } else { - Action action = actionQueue.poll(); - Object object; - System.out.println("Action: " + action + " Target: " + action.getTarget()); - switch (action.getTarget()) { - case MAIN: - object = this; - break; - case APPLICATION: - object = applicationCycle.current(); - System.out.println("Current application: " + object.getClass()); - break; - default: - throw new UnknownTargetException(); - } - try { - action.invoke(object); - } catch (NotImplementedActionException e) { - e.printStackTrace(); - // Todo: log.write(...) - } - } - } - } - public void exit() { run = false; for (Device device : deviceList) { @@ -114,6 +54,45 @@ public class Main { System.out.println("Main exit..."); } + protected void action(Action action) { + try { + System.out.println("Action: " + action + " Target: " + action.getTarget()); + switch (action.getTarget()) { + case MAIN: + switch (action) { + case EXIT: + exit(); + break; + default: + break; + } + break; + case APPLICATION: + applicationCycle.current().add(action); + break; + default: + //throw new UnknownTargetException(); + } + } catch (TargetNotSetException e) {} + } + + /* Add / remove methods */ + protected void add(Application application) { + applicationCycle.add(application); + } + + protected boolean remove(Application application) { + return applicationCycle.remove(application); + } + + protected void add(Device device) { + deviceList.add(device); + } + + protected boolean remove(Device device) { + return deviceList.remove(device); + } + public static void main(String[] args) { try { new Main().start(); diff --git a/java/src/pm/application/Application.java b/java/src/pm/application/Application.java deleted file mode 100644 index bd12ed8..0000000 --- a/java/src/pm/application/Application.java +++ /dev/null @@ -1,17 +0,0 @@ -package pm.application; - -import java.util.LinkedList; -import java.util.Queue; - -import pm.Action; - -public abstract class Application { //WinampController. - Queue actionQueue; - - public Application() { - actionQueue = new LinkedList(); - } - - public void start() {} - public void exit() {} -} \ No newline at end of file diff --git a/java/src/pm/application/Winamp/WinampApplication.java b/java/src/pm/application/Winamp/WinampApplication.java index 9d79485..5004ae8 100644 --- a/java/src/pm/application/Winamp/WinampApplication.java +++ b/java/src/pm/application/Winamp/WinampApplication.java @@ -1,102 +1,69 @@ package pm.application.Winamp; -import pm.application.Application; +import pm.Action; +import pm.Application; +import pm.exception.ApplicationException; +import pm.exception.application.ApplicationStartException; import com.qotsa.exception.InvalidHandle; import com.qotsa.exception.InvalidParameter; import com.qotsa.jni.controller.WinampController; public class WinampApplication extends Application { - - protected boolean connected; - protected boolean muted; protected int volume; - public WinampApplication() { - connected = false; - } - - public void start() throws Exception { - if (!connected) { + public void start() throws ApplicationException { + try { WinampController.run(); - connected = true; + volume = WinampController.getVolume(); + muted = volume == 0; + } catch (Exception e) { + throw new ApplicationStartException(); } } - public void exit() throws InvalidHandle { - if (connected) { + public void exit() { + try { WinampController.exit(); - connected = false; - } + } catch (InvalidHandle e) {} } - /* Actions */ - public void play() throws InvalidHandle { - if (connected) { - WinampController.play(); - } - } - - public void pause() throws InvalidHandle { - if (connected) { - WinampController.pause(); - } - } - - public void resume() throws InvalidHandle { - if (connected) { - WinampController.resume(); - } - } - - public void next() throws InvalidHandle { - if (connected) { - WinampController.nextTrack(); - } - } - - public void previous() throws InvalidHandle { - if (connected) { - WinampController.previousTrack(); - } - } - - public void forward() throws InvalidHandle { - if (connected) { - WinampController.fwd5Secs(); - } - } - - public void rewind() throws InvalidHandle { - if (connected) { - WinampController.rew5Secs(); - } - } - - - public void mute() throws InvalidHandle, InvalidParameter { - if (connected) { - if(muted) { - WinampController.setVolume(volume); - muted = false; - } else { - volume = WinampController.getVolume(); - WinampController.setVolume(0); - muted = true; + protected void action(Action action) { + System.out.println("WinampApplication: " + action); + try { + switch (action) { + case PLAY: + WinampController.play(); + case NEXT: + WinampController.nextTrack(); + break; + case PREVIOUS: + WinampController.previousTrack(); + break; + case FORWARD: + WinampController.fwd5Secs(); + break; + case REWIND: + WinampController.rew5Secs(); + break; + case MUTE: + if(muted) { + WinampController.setVolume(volume); + } else { + volume = WinampController.getVolume(); + WinampController.setVolume(0); + } + muted = !muted; + break; + case VOLUME_UP: + WinampController.increaseVolume(); + break; + case VOLUME_DOWN: + WinampController.decreaseVolume(); + break; } - } - } - - public void volumeUp() throws InvalidHandle { - if (connected) { - WinampController.increaseVolume(); - } - } - - public void volumeDown() throws InvalidHandle { - if (connected) { - WinampController.decreaseVolume(); - } + } catch (InvalidHandle e) { + } catch (InvalidParameter e) {} } } diff --git a/java/src/pm/application/example/ExampleApplication.java b/java/src/pm/application/example/ExampleApplication.java new file mode 100644 index 0000000..2c8e426 --- /dev/null +++ b/java/src/pm/application/example/ExampleApplication.java @@ -0,0 +1,15 @@ +package pm.application.example; + +import pm.Action; +import pm.Application; + +public class ExampleApplication extends Application { + protected void action(Action action) { + System.out.println("ExampleApplication: " + action); + switch (action) { + case TEST: + System.out.println("test"); + break; + } + } +} \ No newline at end of file diff --git a/java/src/pm/application/iTunes/iTunesApplication.java b/java/src/pm/application/iTunes/iTunesApplication.java index 783b7fc..9dc5a95 100644 --- a/java/src/pm/application/iTunes/iTunesApplication.java +++ b/java/src/pm/application/iTunes/iTunesApplication.java @@ -1,6 +1,7 @@ package pm.application.iTunes; -import pm.application.Application; +import pm.Action; +import pm.Application; import com.dt.iTunesController.ITCOMDisabledReason; import com.dt.iTunesController.ITTrack; @@ -8,168 +9,68 @@ import com.dt.iTunesController.iTunes; import com.dt.iTunesController.iTunesEventsInterface; public class iTunesApplication extends Application implements iTunesEventsInterface { - - protected final int VOLUME_CHANGE_RATE = 5; - protected final int SEEK_TIME = 1000; - + protected static final int POSTION_CHANGE_RATE = 5; + protected static final int VOLUME_CHANGE_RATE = 5; + protected static final int SEEK_TIME = 1000; + protected iTunes iTunes; - protected boolean connected; public iTunesApplication() { + super(); iTunes = new iTunes(); - connected = false; } - - public void start() { - if (!connected) { - iTunes.connect(); - iTunes.addEventHandler(this); - connected = true; - } + + public void start() throws Exception { + iTunes.connect(); + iTunes.addEventHandler(this); + super.start(); } public void exit() { - if (connected) { - iTunes.quit(); - } + iTunes.quit(); + } + + protected void action(Action action) { + System.out.println("iTunesApplication: " + action); + switch (action) { + case PLAY: + iTunes.playPause(); + case NEXT: + iTunes.nextTrack(); + break; + case PREVIOUS: + iTunes.previousTrack(); + break; + case FORWARD: + iTunes.setPlayerPosition(iTunes.getPlayerPosition() + POSTION_CHANGE_RATE); + break; + case REWIND: + iTunes.setPlayerPosition(iTunes.getPlayerPosition() - POSTION_CHANGE_RATE); + break; + case MUTE: + iTunes.toggleMute(); + break; + case VOLUME_UP: + iTunes.setSoundVolume(getVolume() + VOLUME_CHANGE_RATE); + break; + case VOLUME_DOWN: + iTunes.setSoundVolume(getVolume() - VOLUME_CHANGE_RATE); + break; + } } - /* Actions */ - public void play() { - if (connected) { - iTunes.playPause(); - } + protected int getVolume() { + return iTunes.getSoundVolume(); } - public void pause() { - if (connected) { - iTunes.playPause(); - } - } - - public void resume() { - if (connected) { - iTunes.resume(); - } - } - - public void next() { - if (connected) { - iTunes.nextTrack(); - } - } - - public void previous() { - if (connected) { - iTunes.previousTrack(); - } - } - - public void forward() { - if (connected) { - iTunes.fastForward(); - //sleep(SEEK_TIME); - resume(); - } - } - - public void rewind() { - if (connected) { - iTunes.rewind(); - //sleep(SEEK_TIME); - resume(); - } - } - - protected void sleep(int time) { - try { - Thread.sleep(time); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - public void mute() { - if (connected) { - iTunes.setMute(iTunes.getMute()); - } - } - - protected int volume() { - if (connected) { - return iTunes.getSoundVolume(); - } else { - return 0; - } - } - - public void volumeUp() { - if (connected) { - iTunes.setSoundVolume(volume() + VOLUME_CHANGE_RATE); - } - } - - public void volumeDown() { - if (connected) { - iTunes.setSoundVolume(volume() - VOLUME_CHANGE_RATE); - } - } - - - /* iTunesEventInterface => naar eigen class? */ - @Override - public void onDatabaseChangedEvent(int[][] deletedObjectIDs, - int[][] changedObjectIDs) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerPlayEvent(ITTrack iTrack) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerStopEvent(ITTrack iTrack) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) { - // TODO Auto-generated method stub - - } - - @Override - public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) { - // TODO Auto-generated method stub - - } - - @Override - public void onCOMCallsEnabledEvent() { - // TODO Auto-generated method stub - - } - - @Override - public void onQuittingEvent() { - // TODO Auto-generated method stub - - } - - @Override - public void onAboutToPromptUserToQuitEvent() { - // TODO Auto-generated method stub - - } - - @Override - public void onSoundVolumeChangedEvent(int newVolume) { - // TODO Auto-generated method stub - - } + public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {} + public void onPlayerPlayEvent(ITTrack iTrack) {} + public void onPlayerStopEvent(ITTrack iTrack) {} + public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {} + public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {} + public void onCOMCallsEnabledEvent() {} + public void onQuittingEvent() {} + public void onAboutToPromptUserToQuitEvent() {} + public void onSoundVolumeChangedEvent(int newVolume) {} } \ No newline at end of file diff --git a/java/src/pm/application/voorbeeld/VoorbeeldApplication.java b/java/src/pm/application/voorbeeld/VoorbeeldApplication.java deleted file mode 100644 index e9884fa..0000000 --- a/java/src/pm/application/voorbeeld/VoorbeeldApplication.java +++ /dev/null @@ -1,16 +0,0 @@ -package pm.application.voorbeeld; - -import pm.application.Application; - -public class VoorbeeldApplication extends Application { - public void start() { - } - - public void stop() { - System.out.println("stop"); - } - - public void test() { - System.out.println("test"); - } -} diff --git a/java/src/pm/device/Device.java b/java/src/pm/device/Device.java index e0a52f5..a5ff283 100644 --- a/java/src/pm/device/Device.java +++ b/java/src/pm/device/Device.java @@ -3,11 +3,11 @@ package pm.device; import pm.Action; import pm.Macro; import pm.exception.MacroException; -import pm.listener.ActionListener; +import pm.listener.ActionProvider; import pm.listener.MacroListener; import pm.macro.Event; -public abstract class Device extends ActionListener { +public abstract class Device extends ActionProvider { protected MacroListener macroListener; public Device() { diff --git a/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java b/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java index 926cb03..eacf8c3 100644 --- a/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java +++ b/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java @@ -48,7 +48,7 @@ public class RumblepadDevice extends JavaInputDevice { Action.REWIND.setTarget(Target.APPLICATION)); add( new Press(RumblepadButton.NINE), - Action.VULUME_DOWN.setTarget(Target.APPLICATION)); + Action.VOLUME_DOWN.setTarget(Target.APPLICATION)); add( new Press(RumblepadButton.TEN), Action.VOLUME_UP.setTarget(Target.APPLICATION)); diff --git a/java/src/pm/exception/ApplicationException.java b/java/src/pm/exception/ApplicationException.java new file mode 100644 index 0000000..31b3c00 --- /dev/null +++ b/java/src/pm/exception/ApplicationException.java @@ -0,0 +1,5 @@ +package pm.exception; + +public class ApplicationException extends Exception { + protected static final long serialVersionUID = 1L; +} diff --git a/java/src/pm/exception/application/ApplicationStartException.java b/java/src/pm/exception/application/ApplicationStartException.java new file mode 100644 index 0000000..21fb949 --- /dev/null +++ b/java/src/pm/exception/application/ApplicationStartException.java @@ -0,0 +1,7 @@ +package pm.exception.application; + +import pm.exception.ApplicationException; + +public class ApplicationStartException extends ApplicationException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/src/pm/listener/ActionListener.java b/java/src/pm/listener/ActionListener.java index 3ad4507..1bbc9d9 100644 --- a/java/src/pm/listener/ActionListener.java +++ b/java/src/pm/listener/ActionListener.java @@ -1,17 +1,45 @@ package pm.listener; import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; import pm.Action; -public class ActionListener { - protected static Queue actionQueue; +public abstract class ActionListener implements Runnable { + protected static final int SLEEP = 100; - public static void initialise(Queue actionQueue) { - ActionListener.actionQueue = actionQueue; + protected Queue actionQueue; + protected boolean run; + + public ActionListener() { + actionQueue = new ConcurrentLinkedQueue(); + } + + public void start() throws Exception { + new Thread(this).start(); + } + + public void run() { + run = true; + while (run) { + if (actionQueue.isEmpty()) { + sleep(SLEEP); + } else { + Action action = actionQueue.poll(); + action(action); + } + } } public void add(Action action) { actionQueue.add(action); } + + protected void sleep(int time) { + try { + Thread.sleep(time); + } catch (InterruptedException e) {} + } + + abstract protected void action(Action action); } diff --git a/java/src/pm/listener/ActionProvider.java b/java/src/pm/listener/ActionProvider.java new file mode 100644 index 0000000..39b0d2a --- /dev/null +++ b/java/src/pm/listener/ActionProvider.java @@ -0,0 +1,18 @@ +package pm.listener; + +import java.util.Queue; + +import pm.Action; + +public class ActionProvider { + protected static Queue actionQueue; + + public static void initialise(Queue actionQueue) { + ActionProvider.actionQueue = actionQueue; + } + + public void add(Action action) { + System.out.println(action); + actionQueue.add(action); + } +} diff --git a/java/src/pm/listener/MacroListener.java b/java/src/pm/listener/MacroListener.java index b8de44d..f3123c9 100644 --- a/java/src/pm/listener/MacroListener.java +++ b/java/src/pm/listener/MacroListener.java @@ -9,7 +9,7 @@ import pm.exception.MacroException; import pm.macro.Active; import pm.macro.Event; -public class MacroListener extends ActionListener { +public class MacroListener extends ActionProvider { public ArrayList macroList; public HashMap actionMap; public ArrayList activeList;