Files
mimis/java/src/pm/Main.java

195 lines
6.6 KiB
Java

package pm;
import java.util.ArrayList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import pm.application.ApplicationCycle;
import pm.application.cmd.windows.gomplayer.GomPlayerApplication;
import pm.application.cmd.windows.wmp.WMPApplication;
import pm.application.example.ExampleApplication;
import pm.application.itunes.iTunesApplication;
import pm.application.mpc.MPCApplication;
import pm.application.vlc.VLCApplication;
import pm.application.windows.winamp.WinampApplication;
import pm.device.gui.GUIDevice;
import pm.device.javainput.extreme3d.Extreme3DDevice;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.panel.PanelDevice;
import pm.device.player.PlayerDevice;
import pm.device.text.TextDevice;
import pm.device.text.lan.LanTextDevice;
import pm.device.wiimote.WiimoteDevice;
import pm.event.EventListener;
import pm.event.EventManager;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.Active;
import pm.value.Action;
public class Main extends EventListener {
protected Log log = LogFactory.getLog(Main.class);
//protected String[] deviceClassArray;
protected ApplicationCycle applicationCycle;
protected ArrayList<Device> deviceList;
public Main() {
super();
/*deviceClassArray = new String[] {
"pm.device.jintellitype.JIntellitypeDevice",
"pm.device.javainput.rumblepad.RumblepadDevice",
"pm.device.javainput.extreme3d.Extreme3DDevice",
"pm.device.wiimote.WiimoteDevice"};*/
applicationCycle = new ApplicationCycle();
deviceList = new ArrayList<Device>();
EventManager.initialise(applicationCycle);
EventManager.add(this);
}
public void initialise() throws DeviceInitialiseException {
add(new JIntellitypeDevice());
//add(new PlayerDevice());
//add(new RumblepadDevice());
add(new WiimoteDevice());
//add(new GUIDevice());
//add(new TextDevice());
//add(new PanelDevice());
//add(new LanTextDevice());
//add(new Extreme3DDevice());
startDevices();
//add(new ExampleApplication());
//add(new WMPApplication());
//add(new GomPlayerApplication());
add(new WinampApplication());
//add(new iTunesApplication());
//add(new VLCApplication());
//add(new MPCApplication());
startApplications();
}
protected void startApplications() {
ArrayList<Application> removeList = new ArrayList<Application>();
for (Application application : applicationCycle) {
try {
application.initialise();
application.start();
} catch (ApplicationInitialiseException e) {
removeList.add(application);
}
}
for (Application application : removeList) {
remove(application);
}
}
protected void startDevices() {
ArrayList<Device> removeList = new ArrayList<Device>();
for (Device device : deviceList) {
try {
device.initialise();
device.start();
log.info("Device started: " + device);
} catch (DeviceInitialiseException e) {
removeList.add(device);
}
}
for (Device device : removeList) {
remove(device);
}
}
public void exit() {
System.out.println("Exit devices...");
for (Device device : deviceList) {
try {
device.exit();
} catch (DeviceExitException e) {
e.printStackTrace();
}
}
System.out.println("Exit applications...");
for (Application application : applicationCycle) {
try {
application.exit();
} catch (ApplicationExitException e) {
e.printStackTrace();
}
}
System.out.println("Exit main...");
stop();
}
protected void action(Action action) {
System.out.println("Main: " + action);
switch (action) {
case NEXT:
applicationCycle.next();
System.out.println(applicationCycle.current());
break;
case PREVIOUS:
applicationCycle.previous();
System.out.println(applicationCycle.current());
break;
case EXIT:
exit();
break;
}
}
/*protected void addDevices() throws DeviceInitialiseException {
for (String deviceClass : deviceClassArray) {
try {
Object object = Class.forName(deviceClass).getConstructor((Class[]) null).newInstance();
if (object instanceof Application) {
Device device = (Device) object;
add(device);
try {
device.initialise();
} catch (DeviceNotFoundException e) {}
}
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
} catch (ClassNotFoundException e) {}
}
}*/
/* Add / remove methods */
protected void add(Application application) {
EventManager.add(application);
applicationCycle.add(application);
}
protected void remove(Application application) {
EventManager.remove(application);
applicationCycle.remove(application);
}
protected void add(Device device) {
EventManager.add(device);
deviceList.add(device);
}
protected void remove(Device device) {
EventManager.remove(device);
deviceList.remove(device);
}
public static void main(String[] args) {
try {
Main main = new Main();
main.initialise();
main.start(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}