source: trunk/quest-runner/src/main/java/de/ugoe/cs/quest/ui/Runner.java @ 733

Last change on this file since 733 was 733, checked in by sherbold, 12 years ago
  • refactored command packages in quest-ui-core
  • Property svn:mime-type set to text/plain
File size: 5.1 KB
Line 
1
2package de.ugoe.cs.quest.ui;
3
4import java.io.File;
5import java.io.IOException;
6import java.util.List;
7import java.util.logging.Level;
8
9import joptsimple.OptionException;
10import joptsimple.OptionParser;
11import joptsimple.OptionSet;
12import joptsimple.OptionSpec;
13import de.ugoe.cs.quest.log4j.Log4JLogger;
14import de.ugoe.cs.quest.plugin.PluginLoader;
15import de.ugoe.cs.quest.plugin.QuestPlugin;
16import de.ugoe.cs.quest.ui.swt.MainWindow;
17import de.ugoe.cs.util.console.CommandExecuter;
18import de.ugoe.cs.util.console.Console;
19import de.ugoe.cs.util.console.TextConsole;
20
21/**
22 * <p>
23 * Start-up class of the application.
24 * </p>
25 * <p>
26 * It sets up and starts the {@link Console}.
27 * </p>
28 *
29 * @author Steffen Herbold
30 * @version 1.0
31 */
32public class Runner {
33
34    public enum UITYPE {
35        text, swt
36    };
37   
38    public enum LEVELENUM {
39        OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL;
40       
41        public Level getLevel() {
42            switch (this)
43            {
44                case OFF:
45                    return Level.OFF;
46                case SEVERE:
47                    return Level.SEVERE;
48                case ALL:
49                    return Level.ALL;
50                case CONFIG:
51                    return Level.CONFIG;
52                case FINE:
53                    return Level.FINE;
54                case FINER:
55                    return Level.FINER;
56                case FINEST:
57                    return Level.FINEST;
58                case INFO:
59                    return Level.INFO;
60                case WARNING:
61                    return Level.WARNING;
62                default:
63                    throw new AssertionError("reached source code that should be unreachable");
64            }
65        }
66    }
67
68    /**
69     * <p>
70     * Main method of the application.
71     * </p>
72     *
73     * @param args
74     *            if parameters are defined, they are interpreted as commands for the
75     *            {@link Console} and executed before the user can use the console; can be used to
76     *            perform batch operations
77     */
78    public static void main(String[] args) {
79
80        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.ui.commands");
81        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.commands.misc");
82        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.commands.sequences");
83        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.commands.usability");
84        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.commands.usage");
85        CommandExecuter.getInstance().addCommandPackage("de.ugoe.cs.quest.ui.swt.commands");
86
87        PluginLoader pluginLoader = new PluginLoader(new File("lib"));
88        pluginLoader.load();
89
90        for (QuestPlugin plugin : pluginLoader.getPlugins()) {
91            for (String commandPackage : plugin.getCommandPackages()) {
92                CommandExecuter.getInstance().addCommandPackage(commandPackage);
93            }
94        }
95
96        OptionParser parser = new OptionParser();
97        OptionSpec<LEVELENUM> log4j =
98            parser.accepts("log4j", "Allowed values: OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL").withRequiredArg()
99                .ofType(LEVELENUM.class).defaultsTo(LEVELENUM.INFO);
100        OptionSpec<UITYPE> ui =
101            parser.accepts("ui", "Allowed values: text, swt").withRequiredArg()
102                .ofType(UITYPE.class).defaultsTo(UITYPE.text);
103        OptionSpec<LEVELENUM> trace =
104            parser.accepts("trace", "Allowed values: OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL").withRequiredArg()
105                .ofType(LEVELENUM.class).defaultsTo(LEVELENUM.WARNING);
106        OptionSet options = parser.parse(args);
107
108        List<String> startupCommands = options.nonOptionArguments();
109        try {
110            if(options.valueOf(log4j)!=LEVELENUM.OFF) {
111                new Log4JLogger(options.valueOf(log4j).getLevel());
112            }
113
114            switch (options.valueOf(ui))
115            {
116                case text:
117                    TextConsole textConsole = new TextConsole(options.valueOf(trace).getLevel());
118                    for (String command : startupCommands) {
119                        CommandExecuter.getInstance().exec(command);
120                    }
121                    textConsole.run();
122                    break;
123                case swt:
124                    MainWindow mainWindow = new MainWindow(startupCommands, options.valueOf(trace).getLevel());
125                    mainWindow.open();
126                    break;
127                default:
128                    throw new AssertionError("reached source code that should be unreachable");
129            }
130        }
131        catch (OptionException e) {
132            System.err.println("Invalid Parameters: " + e.getMessage());
133            try {
134                parser.printHelpOn(System.out);
135            }
136            catch (IOException e1) {
137                // ignore exception.
138            }
139        }
140    }
141
142}
Note: See TracBrowser for help on using the repository browser.