/idea-plugin/src/com/google/jstestdriver/idea/ui/MainUI.java
Java | 178 lines | 135 code | 17 blank | 26 comment | 0 complexity | 82c6ffd60c4e0d5ec200e1c9e0bbef02 MD5 | raw file
- /*
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.google.jstestdriver.idea.ui;
- import static com.google.inject.multibindings.Multibinder.newSetBinder;
- import static java.awt.BorderLayout.CENTER;
- import static java.awt.BorderLayout.NORTH;
- import static java.awt.BorderLayout.SOUTH;
- import com.google.common.collect.Lists;
- import com.google.inject.Binder;
- import com.google.inject.Guice;
- import com.google.inject.Injector;
- import com.google.inject.Module;
- import com.google.inject.multibindings.Multibinder;
- import com.google.jstestdriver.ActionFactory;
- import com.google.jstestdriver.ActionRunner;
- import com.google.jstestdriver.Args4jFlagsParser;
- import com.google.jstestdriver.CapturedBrowsers;
- import com.google.jstestdriver.Flags;
- import com.google.jstestdriver.JsTestDriver;
- import com.google.jstestdriver.PluginLoader;
- import com.google.jstestdriver.ServerStartupAction;
- import com.google.jstestdriver.config.CmdFlags;
- import com.google.jstestdriver.config.CmdLineFlagsFactory;
- import com.google.jstestdriver.config.Configuration;
- import com.google.jstestdriver.config.InitializeModule;
- import com.google.jstestdriver.config.Initializer;
- import com.google.jstestdriver.config.YamlParser;
- import com.google.jstestdriver.guice.TestResultPrintingModule.TestResultPrintingInitializer;
- import com.google.jstestdriver.hooks.PluginInitializer;
- import org.apache.commons.logging.LogFactory;
- import org.mortbay.log.Slf4jLog;
- import java.awt.BorderLayout;
- import java.util.Collections;
- import java.util.List;
- import java.util.ResourceBundle;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JSplitPane;
- /**
- * This class provides an entry point for the Swing GUI of JSTestDriver, independent of running
- * as an IDEA plugin. Right now, this is not released in a form that anyone uses.
- * TODO(alexeagle): should we delete this, or document that it can be used?
- *
- * @author alexeagle@google.com (Alex Eagle)
- */
- public class MainUI {
- private final class UiInitializer implements PluginInitializer {
- @Override
- public Module initializeModule(Flags flags, Configuration config) {
- return new Module() {
- @Override
- public void configure(Binder binder) {
- binder.bind(ResourceBundle.class).toInstance(messageBundle);
- binder.bind(StatusBar.Status.class).toInstance(StatusBar.Status.NOT_RUNNING);
- }
- };
- }
- }
- private static final String JCL_LOG_CONFIG_ATTR = "org.apache.commons.logging.Log";
- private static final String JETTY_LOG_CLASS_PROP = "org.mortbay.log.class";
- private static final String JCL_SIMPLELOG_SHOWLOGNAME = "org.apache.commons.logging.simplelog.showlogname";
- private static final String JCL_SIMPLELOG_SHOW_SHORT_LOGNAME = "org.apache.commons.logging.simplelog.showShortLogname";
- private final ResourceBundle messageBundle;
- private LogPanel logPanel;
- private StatusBar statusBar;
- private CapturedBrowsersPanel capturedBrowsersPanel;
- private JPanel infoPanel;
- private final Logger logger = Logger.getLogger(MainUI.class.getCanonicalName());
- private final CmdFlags preparsedFlags;
- public MainUI(CmdFlags preparsedFlags, ResourceBundle bundle) {
- this.preparsedFlags = preparsedFlags;
- this.messageBundle = bundle;
- }
- public static void main(String[] args) {
- CmdFlags preparsedFlags = new CmdLineFlagsFactory().create(args);
- configureLogging();
- ResourceBundle bundle = ResourceBundle.getBundle("com.google.jstestdriver.ui.messages");
- new MainUI(preparsedFlags, bundle).startUI();
- }
- private static void configureLogging() {
- // Configure commons logging to log to the Swing log panel logger
- LogFactory.getFactory().setAttribute(JCL_LOG_CONFIG_ATTR, LogPanelLog.class.getName());
- // Configure Jetty to log to SLF4J. Since slf4j-jcl.jar is in the classpath, SLF4J will be
- // configured to delegate logging to commons logging.
- System.setProperty(JETTY_LOG_CLASS_PROP, Slf4jLog.class.getName());
- System.setProperty(JCL_SIMPLELOG_SHOW_SHORT_LOGNAME, "false");
- System.setProperty(JCL_SIMPLELOG_SHOWLOGNAME, "false");
- }
- private void startUI() {
- try {
- // TODO(corysmith): Fix the set up to have an injection class and proper arrangements for listening.
- final Configuration configuration = preparsedFlags.getConfigurationSource().parse(
- preparsedFlags.getBasePath(), new YamlParser());
- List<Module> initializeModules = Lists.newLinkedList();
- initializeModules.add(
- new InitializeModule(new PluginLoader(),
- preparsedFlags.getBasePath(),
- new Args4jFlagsParser(),
- preparsedFlags.getRunnerMode()));
- initializeModules.add(new Module() {
- public void configure(Binder binder) {
- final Multibinder<PluginInitializer> initBinder = newSetBinder(binder, PluginInitializer.class);
- initBinder.addBinding().to(TestResultPrintingInitializer.class);
- initBinder.addBinding().toInstance(new UiInitializer());
- }
- });
- final Injector initializeInjector = Guice.createInjector(initializeModules);
- final List<Module> actionRunnerModules =
- initializeInjector.getInstance(Initializer.class)
- .initialize(Collections.<Module>emptyList(), configuration, preparsedFlags.getRunnerMode(),
- preparsedFlags.getUnusedFlagsAsArgs());
- final Injector injector = Guice.createInjector(actionRunnerModules);
- statusBar = injector.getInstance(StatusBar.class);
- logPanel = injector.getInstance(LogPanel.class);
- capturedBrowsersPanel = injector.getInstance(CapturedBrowsersPanel.class);
- LogPanelLog.LogPanelHolder.setLogPanel(logPanel);
- infoPanel =injector.getInstance(InfoPanel.class);
- ActionFactory actionFactory = injector.getInstance(ActionFactory.class);
- actionFactory.registerListener(ServerStartupAction.class, statusBar);
- actionFactory.registerListener(CapturedBrowsers.class, statusBar);
- actionFactory.registerListener(CapturedBrowsers.class, capturedBrowsersPanel);
- injector.getInstance(ActionRunner.class).runActions();
- JFrame appFrame = buildMainAppFrame();
- appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- appFrame.pack();
- appFrame.setVisible(true);
- } catch (Exception e) {
- logger.log(Level.SEVERE, "Failed to start the server: ", e);
- }
- }
- @SuppressWarnings("serial")
- private JFrame buildMainAppFrame() {
- return new JFrame("JSTestDriver Browser Manager") {{
- add(new JSplitPane(JSplitPane.VERTICAL_SPLIT) {{
- setTopComponent(new JPanel(new BorderLayout()) {{
- add(new JPanel(new BorderLayout()) {{
- add(statusBar, NORTH);
- add(infoPanel, CENTER);
- add(capturedBrowsersPanel, SOUTH);
- }}, SOUTH);
- }});
- setBottomComponent(logPanel);
- }});
- }};
- }
- }