use java.util.ServiceLoader to load applications and devices more or

less dynamically.
This commit is contained in:
2013-05-22 21:15:21 +02:00
parent 9d3eabb91c
commit ff4938a323
10 changed files with 434 additions and 412 deletions

View File

@@ -8,6 +8,7 @@
<classpathentry kind="lib" path="lib/jxinput.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.16.jar"/>
<classpathentry kind="lib" path="wiiusej.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.2.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Binary file not shown.

View File

@@ -0,0 +1,8 @@
mimis.application.cmd.windows.gomplayer.GomPlayerApplication
mimis.application.cmd.windows.photoviewer.PhotoViewerApplication
mimis.application.cmd.windows.winamp.WinampApplication
mimis.application.cmd.windows.wmp.WMPApplication
mimis.application.itunes.iTunesApplication
mimis.application.lirc.ipod.iPodApplication
mimis.application.mpc.MPCApplication
mimis.application.vlc.VLCApplication

View File

@@ -0,0 +1,7 @@
mimis.device.javainput.extreme3d.Extreme3DDevice
mimis.device.javainput.rumblepad.RumblepadDevice
mimis.device.jintellitype.JIntellitypeDevice
mimis.device.lirc.LircDevice
mimis.device.network.NetworkDevice
mimis.device.panel.PanelDevice
mimis.device.wiimote.WiimoteDevice

View File

@@ -1,28 +1,19 @@
package mimis;
import java.util.ArrayList;
import java.util.ServiceLoader;
import javax.swing.UIManager;
import mimis.application.cmd.windows.gomplayer.GomPlayerApplication;
import mimis.application.cmd.windows.photoviewer.PhotoViewerApplication;
import mimis.application.cmd.windows.winamp.WinampApplication;
import mimis.application.cmd.windows.wmp.WMPApplication;
import mimis.application.itunes.iTunesApplication;
import mimis.application.lirc.ipod.iPodApplication;
import mimis.application.mpc.MPCApplication;
import mimis.application.vlc.VLCApplication;
import mimis.device.javainput.extreme3d.Extreme3DDevice;
import mimis.device.javainput.rumblepad.RumblepadDevice;
import mimis.device.jintellitype.JIntellitypeDevice;
import mimis.device.lirc.LircDevice;
import mimis.device.network.NetworkDevice;
import mimis.device.panel.PanelDevice;
import mimis.device.wiimote.WiimoteDevice;
import mimis.application.Application;
import mimis.device.Device;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Task;
import mimis.manager.ButtonManager;
import mimis.manager.CurrentButtonManager;
import mimis.value.Action;
import mimis.worker.Component;
public class Main extends Mimis {
protected CurrentButtonManager applicationManager;
@@ -36,19 +27,32 @@ public class Main extends Mimis {
}
public static Component[] getApplications() {
ArrayList<Component> componentList = new ArrayList<Component>();
for (Application application : ServiceLoader.load(mimis.application.Application.class)) {
if (application instanceof Component) {
componentList.add((Component) application);
}
}
return componentList.toArray(new Component[]{});
}
public static Component[] getDevices() {
ArrayList<Component> componentList = new ArrayList<Component>();
for (Device device : ServiceLoader.load(mimis.device.Device.class)) {
if (device instanceof Component) {
componentList.add((Component) device);
}
}
return componentList.toArray(new Component[]{});
}
public Main() {
super(
new WinampApplication(), new GomPlayerApplication(), new WMPApplication(), new MPCApplication(), // WindowsApplication
new VLCApplication(), // CMDApplication
new iPodApplication(), // LircApplication
new PhotoViewerApplication(), // RobotApplication
new iTunesApplication()); // Component
super(getApplications());
/* Create gui from application and device managers */
applicationManager = new CurrentButtonManager(router, componentCycle, "Applications", currentArray);
deviceManager = new ButtonManager("Devices", initialize(false,
new Extreme3DDevice(), new RumblepadDevice(), // JavaInputDevice
new JIntellitypeDevice(), new PanelDevice(), new LircDevice(), new WiimoteDevice(), new NetworkDevice())); // Component
deviceManager = new ButtonManager("Devices", initialize(false, getDevices()));
gui = new Gui(this, applicationManager, deviceManager);
manager.add(initialize(false, gui));
}
@@ -61,7 +65,7 @@ public class Main extends Mimis {
applicationManager.start();
deviceManager.start();
/* Force display of currenct component when gui started */
/* Force display of current component when gui started */
gui.start();
while (!gui.active());
end(Action.CURRENT);

View File

@@ -3,13 +3,14 @@ package mimis.application.cmd;
import java.io.IOException;
import java.util.Map;
import mimis.application.Application;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.util.Native;
import mimis.value.Registry;
import mimis.worker.Component;
public abstract class CMDApplication extends Component {
public abstract class CMDApplication extends Component implements Application {
protected final static Registry REGISTRY = Registry.LOCAL_MACHINE;
protected final static String KEY = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths";

View File

@@ -1,5 +1,6 @@
package mimis.application.lirc;
import mimis.application.Application;
import mimis.device.lirc.LircButton;
import mimis.device.lirc.LircService;
import mimis.device.lirc.remote.WC02IPOButton;
@@ -7,7 +8,7 @@ import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.worker.Component;
public class LircApplication extends Component {
public class LircApplication extends Component implements Application {
protected LircService lircService;
public LircApplication(String title) {