package org.marketcetera.photon;
import java.io.PrintStream;
import java.util.Date;
import org.apache.log4j.Logger;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.internal.WorkbenchWindow;
import org.eclipse.ui.internal.layout.ITrimManager;
import org.eclipse.ui.internal.layout.IWindowTrim;
import org.eclipse.ui.internal.progress.ProgressManager;
import org.marketcetera.core.ClassVersion;
import org.marketcetera.marketdata.AbstractMarketDataFeed;
import org.marketcetera.photon.actions.ReconnectServerJob;
import org.marketcetera.photon.module.ui.ModuleUI;
import org.marketcetera.photon.notification.NotificationConsoleController;
import org.marketcetera.photon.ui.PhotonConsole;
/* $License$ */
/**
* Sets up the workbench UI
*
* @author gmiller
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: ApplicationWorkbenchWindowAdvisor.java 16854 2014-03-12 01:54:42Z colin $
* @since 1.0.0
*/
@SuppressWarnings("restriction")
@ClassVersion("$Id: ApplicationWorkbenchWindowAdvisor.java 16854 2014-03-12 01:54:42Z colin $")
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor implements Messages {
/**
* Constructor.
*
* @param configurer
* an object for configuring the workbench window
*/
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
@Override
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(1024, 768));
configurer.setShowCoolBar(true);
configurer.setShowStatusLine(true);
configurer.setShowMenuBar(true);
configurer.setShowPerspectiveBar(true);
configurer.setShowProgressIndicator(true);
PhotonPlugin.getDefault().initOrderTickets();
}
@Override
public void postWindowOpen() {
PhotonConsole photonConsole =
new PhotonConsole(Messages.MainConsole_Name.getText(),
PhotonPlugin.MAIN_CONSOLE_LOGGER_NAME);
System.setOut(new PrintStream(photonConsole.getInfoMessageStream(), true));
System.setErr(new PrintStream(photonConsole.getErrorMessageStream(), true));
ConsolePlugin.getDefault().getConsoleManager()
.addConsoles(new IConsole[] { photonConsole });
ModuleUI.installSinkConsole();
new NotificationConsoleController().openConsole();
// activate the main console
photonConsole.activate();
// TODO: should remove the console appender during UI shutdown, see EG-711
PhotonPlugin.getMainConsoleLogger().addAppender(new PhotonConsoleAppender(photonConsole));
Logger.getLogger(org.marketcetera.core.Messages.USER_MSG_CATEGORY).addAppender(
new PhotonConsoleAppender(photonConsole));
Logger.getLogger(AbstractMarketDataFeed.DATAFEED_STATUS_MESSAGES).addAppender(
new PhotonConsoleAppender(photonConsole));
PhotonPlugin.getMainConsoleLogger().info(
ApplicationWorkbenchWindowAdvisor_ApplicationInitializing.getText(new Date()));
PhotonPlugin.getDefault().ensureDefaultProject(
ProgressManager.getInstance().getDefaultMonitor());
// The login dialog interferes with testing, this check is to ensure tests are not being run
if (PlatformUI.getTestableObject().getTestHarness() == null) {
startClient();
}
initStatusLine();
}
/**
* Initializes the status line.
*/
private void initStatusLine() {
IStatusLineManager statusline =
getWindowConfigurer().getActionBarConfigurer().getStatusLineManager();
statusline.setMessage(ApplicationWorkbenchWindowAdvisor_OnlineLabel.getText());
}
/**
*
*
*
*/
private void startClient()
{
ReconnectServerJob serverJob = new ReconnectServerJob();
serverJob.setReconnectMarketData(true);
serverJob.schedule();
}
@Override
public void createWindowContents(Shell shell) {
super.createWindowContents(shell);
// Could not do this declaratively due to http://bugs.eclipse.org/253232
ITrimManager trimManager =
((WorkbenchWindow) getWindowConfigurer().getWindow()).getTrimManager();
IWindowTrim trim = trimManager.getTrim("org.marketcetera.photon.statusToolbar"); //$NON-NLS-1$
IWindowTrim beforeMe = trimManager.getTrim("org.eclipse.jface.action.StatusLineManager"); //$NON-NLS-1$
trimManager.addTrim(SWT.BOTTOM, trim, beforeMe);
}
}