/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, 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 hydrograph.ui.graph.execution.tracking.windows;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.CoolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import hydrograph.ui.common.util.ImagePathConstant;
import hydrograph.ui.common.util.XMLConfigUtil;
import hydrograph.ui.graph.execution.tracking.constants.MenuConstants;
import hydrograph.ui.graph.execution.tracking.handlers.ActionFactory;
import hydrograph.ui.graph.execution.tracking.handlers.ClearConsoleAction;
import hydrograph.ui.graph.execution.tracking.handlers.ScrollLockAction;
import hydrograph.ui.graph.job.JobManager;
/**
* The Class ExecutionTrackingConsole use to display execution tracking log.
* @author Bitwise
*/
public class ExecutionTrackingConsole extends ApplicationWindow {
/** The styled text. */
private StyledText styledText;
/** The console name. */
public String consoleName;
/** The action factory. */
private ActionFactory actionFactory;
/** The status line manager. */
public StatusLineManager statusLineManager;
private String jobID;
private boolean isScrollEnabled = false;
/**
* Create the application window,.
*
* @param consoleName the console name
*/
public ExecutionTrackingConsole(String consoleName,String jobID) {
super(null);
addCoolBar(SWT.FLAT);
addMenuBar();
addStatusLine();
this.consoleName = consoleName;
this.jobID = jobID;
}
/**
* Create contents of the application window.
*
* @param parent the parent
* @return the control
*/
@Override
protected Control createContents(Composite parent) {
getShell().setText("Execution tracking console - " + consoleName);
getShell().setBounds(50, 250, 450, 500);
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout(1, false));
{
styledText = new StyledText(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
styledText.setEditable(false);
}
statusLineManager.setMessage("Waiting for tracking status from server. Please wait!");
return container;
}
/**
* Create the menu manager.
* @return the menu manager
*/
@Override
protected MenuManager createMenuManager() {
MenuManager menuManager = new MenuManager(MenuConstants.MENU);
menuManager.setVisible(true);
createWindowMenu(menuManager);
return menuManager;
}
/**
* Creates the window menu.
*
* @param menuManager the menu manager
*/
private void createWindowMenu(MenuManager menuManager) {
MenuManager windowMenu = createMenu(menuManager, MenuConstants.WINDOW);
menuManager.add(windowMenu);
windowMenu.setVisible(true);
if (actionFactory == null) {
actionFactory = new ActionFactory(this);
}
windowMenu.add(actionFactory.getAction(ClearConsoleAction.class.getName()));
windowMenu.add(actionFactory.getAction(ScrollLockAction.class.getName()));
}
/**
* Creates the menu.
*
* @param menuManager the menu manager
* @param menuName the menu name
* @return the menu manager
*/
private MenuManager createMenu(MenuManager menuManager, String menuName) {
MenuManager menu = new MenuManager(menuName);
menuManager.add(menu);
menuManager.setVisible(true);
return menu;
}
/**
* Create the coolbar manager.
*
* @param style the style
* @return the coolbar manager
*/
@Override
protected CoolBarManager createCoolBarManager(int style) {
CoolBarManager coolBarManager = new CoolBarManager(style);
actionFactory = new ActionFactory(this);
ToolBarManager toolBarManager = new ToolBarManager();
coolBarManager.add(toolBarManager);
addtoolbarAction(toolBarManager, ImagePathConstant.CLEAR_EXEC_TRACKING_CONSOLE,
actionFactory.getAction(ClearConsoleAction.class.getName()));
addtoolbarAction(toolBarManager, ImagePathConstant.CONSOLE_SCROLL_LOCK,
actionFactory.getAction(ScrollLockAction.class.getName()));
return coolBarManager;
}
/**
* Addtoolbar action.
*
* @param toolBarManager the tool bar manager
* @param imagePath the image path
* @param action the action
*/
private void addtoolbarAction(ToolBarManager toolBarManager, final ImagePathConstant imagePath, Action action) {
ImageDescriptor exportImageDescriptor = new ImageDescriptor() {
@Override
public ImageData getImageData() {
return imagePath.getImageFromRegistry().getImageData();
}
};
action.setImageDescriptor(exportImageDescriptor);
toolBarManager.add(action);
}
/**
* Create the status line manager.
* @return the status line manager
*/
@Override
protected StatusLineManager createStatusLineManager() {
statusLineManager = new StatusLineManager();
return statusLineManager;
}
/**
* Configure the shell.
*
* @param newShell the new shell
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("New Application");
}
/**
* Return the initial size of the window.
*
* @return the initial size
*/
@Override
protected Point getInitialSize() {
return new Point(401, 300);
}
/**
* Sets the status.
*
* @param executionStatus the execution status
*/
public void setStatus(String executionStatus){
statusLineManager.setMessage("");
if(styledText!=null && !styledText.isDisposed()){
styledText.append(executionStatus);
if(isScrollEnabled){
styledText.setTopIndex(0);
}else{
styledText.setTopIndex(styledText.getLineCount() - 1);
}
}
}
/**
* Clear console.
*/
public void clearConsole(){
if(styledText!=null && !styledText.isDisposed()){
styledText.setText("");
}
}
/**
* Lock the scroll bar
*/
public void lockScrollBar(boolean isChecked){
isScrollEnabled = isChecked;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.ApplicationWindow#close()
*/
@Override
public boolean close() {
JobManager.INSTANCE.getExecutionTrackingConsoles().remove(jobID);
return super.close();
}
}