summaryrefslogtreecommitdiff
path: root/src/net/tuschhcm/routercontrol/SwitcherApp.java
blob: 99d1907d978173e9c865df25590f89f7f8d98786 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package net.tuschhcm.routercontrol;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import gnu.io.CommPortIdentifier;

import net.tuschhcm.routercontrol.router.Router;
import net.tuschhcm.routercontrol.router.ShinyBow5544Router;
import net.tuschhcm.routercontrol.ui.ConsoleUI;
import net.tuschhcm.routercontrol.ui.UserInterface;
import net.tuschhcm.routercontrol.ui.UserInterface.Action;

public class SwitcherApp {
    /**
     * The router I control.
     */
    private final Router mRouter;
    
    /**
     * My user interface.
     */
    private final UserInterface mUI;
    
    /**
     * My list of presets.
     */
    private final Map<Integer, Preset> mPresets;
    
    /**
     * Create a switcher app.
     * @param portName the port name for the router.
     */
    public SwitcherApp(final String portName) {
        mUI = new ConsoleUI();
        mRouter = new ShinyBow5544Router(portName);
        mPresets = new HashMap<Integer, Preset>();
        
        // Setup UI actions
        mUI.setPresetSelectionAction(new Action() {
            public void onAction() {
                handlePresetSelected();
            }
        });
        
        mUI.setToggleControlLockAction(new Action() {
            public void onAction() {
                handleLockToggled();
            }
        });
    }
    
    /**
     * Start the application.
     */
    public void run() {
        // TODO: Load the presets
        // TODO: Send the presets to the UI
        mUI.run();
    }
    
    /**
     * Handles a preset selection.
     */
    private void handlePresetSelected() {
        int selectedPreset = mUI.getSelectedPreset();
        // TODO: What to do when the preset is selected
    }

    /**
     * Locks or unlocks the physical router controls.
     */
    private void handleLockToggled() {
        mRouter.setLockControls(mUI.getControlLockStatus());
    }
    
    /**
     * Entry-point for the application.
     * @param args Command line arguments
     */
    public static void main(String[] args) {
        // Parse command line arguments
        if (args.length != 1) {
            System.err.println("You must pass one these arguments:");
            System.err.println("\t[commport]      The name of the serial port to use.");
            System.err.println("\t--list-ports    List the available serial ports.");
            return;
        }

        if (args[0].equals("--list-ports")) {
            listCommPorts();
            return;
        }

        String comPort = args[0];
        
        SwitcherApp app = new SwitcherApp(comPort);
        app.run();
    }

    private static void listCommPorts() {
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();
    
        if (ports.hasMoreElements()) {
            System.out.println("These ports are available on your system: ");
            while (ports.hasMoreElements()) {
                CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
                if (port.getPortType() == CommPortIdentifier.PORT_SERIAL) {   
                    System.out.println(port.getName());
                }
            } 

        } else {
            System.out.println("There are no serial ports on your system.");
        }
    }
}