blob: 4b683224e488cc72c6968851befe5eacf7d1fb16 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ats.task;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.osee.ats.AtsImage;
import org.eclipse.osee.ats.actions.ImportTasksViaSimpleList;
import org.eclipse.osee.ats.actions.ImportTasksViaSpreadsheet;
import org.eclipse.osee.ats.actions.NewAction;
import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorAction;
import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorSelected;
import org.eclipse.osee.ats.core.task.AbstractTaskableArtifact;
import org.eclipse.osee.ats.export.AtsExportManager;
import org.eclipse.osee.ats.help.ui.AtsHelpContext;
import org.eclipse.osee.ats.internal.Activator;
import org.eclipse.osee.ats.util.WorkflowMetrics;
import org.eclipse.osee.ats.world.AtsXWidgetActionFormPage;
import org.eclipse.osee.ats.world.WorldAssigneeFilter;
import org.eclipse.osee.ats.world.WorldCompletedFilter;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.util.Result;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.plugin.util.HelpUtil;
import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
import org.eclipse.osee.framework.ui.skynet.widgets.util.IDynamicWidgetLayoutListener;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author Donald G. Dunne
*/
public class TaskEditorXWidgetActionPage extends AtsXWidgetActionFormPage {
private final TaskEditor taskEditor;
private TaskComposite taskComposite;
private final WorldCompletedFilter worldCompletedFilter = new WorldCompletedFilter();
private WorldAssigneeFilter worldAssigneeFilter = null;
private Action filterCompletedAction, filterMyAssigneeAction, selectionMetricsAction;
public TaskEditorXWidgetActionPage(TaskEditor taskEditor) {
super(taskEditor, "org.eclipse.osee.ats.actionPage", "Actions");
this.taskEditor = taskEditor;
}
@Override
public Section createResultsSection(Composite body) {
resultsSection = toolkit.createSection(body, ExpandableComposite.NO_TITLE);
resultsSection.setText("Results");
resultsSection.setLayoutData(new GridData(GridData.FILL_BOTH));
resultsContainer = toolkit.createClientContainer(resultsSection, 1);
taskComposite = new TaskComposite(taskEditor, resultsContainer, SWT.BORDER);
HelpUtil.setHelp(taskComposite, AtsHelpContext.WORKFLOW_EDITOR__TASK_TAB);
return resultsSection;
}
public TaskComposite getTaskComposite() {
return taskComposite;
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
scrolledForm.setImage(ImageManager.getImage(AtsImage.TASK));
Result result = OseeUiActivator.areOSEEServicesAvailable();
if (result.isFalse()) {
AWorkbench.popup("ERROR", "DB Relation Unavailable");
return;
}
}
@Override
public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() {
if (taskEditor.getTaskEditorProvider() instanceof TaskEditorParameterSearchItemProvider) {
return ((TaskEditorParameterSearchItemProvider) taskEditor.getTaskEditorProvider()).getWorldSearchItem();
}
return null;
}
@Override
public Result isResearchSearchValid() {
return taskEditor.isDirty() ? new Result("Changes un-saved. Save first.") : Result.TrueResult;
}
public void reSearch() throws OseeCoreException {
Result result = isResearchSearchValid();
if (result.isFalse()) {
AWorkbench.popup(result);
return;
}
taskEditor.handleRefreshAction();
}
@Override
public String getXWidgetsXml() throws OseeCoreException {
if (taskEditor.getTaskEditorProvider() instanceof TaskEditorParameterSearchItemProvider) {
return ((TaskEditorParameterSearchItemProvider) taskEditor.getTaskEditorProvider()).getWorldSearchItem().getParameterXWidgetXml();
}
return null;
}
@Override
public void handleSearchButtonPressed() {
try {
reSearch();
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
@Override
protected void createToolBar(IToolBarManager toolBarManager) {
super.createToolBar(toolBarManager);
toolBarManager.add(taskComposite.getTaskXViewer().getCustomizeAction());
toolBarManager.add(new Separator());
toolBarManager.add(new OpenNewAtsTaskEditorAction(taskComposite));
toolBarManager.add(new OpenNewAtsTaskEditorSelected(taskComposite));
toolBarManager.add(new Separator());
toolBarManager.add(new RefreshAction(taskComposite));
toolBarManager.add(new Separator());
toolBarManager.add(new NewAction());
toolBarManager.add(new Separator());
createDropDownMenuActions();
toolBarManager.add(new DropDownAction());
}
public class DropDownAction extends Action implements IMenuCreator {
private Menu fMenu;
public DropDownAction() {
setText("Other");
setMenuCreator(this);
setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.GEAR));
addKeyListener();
addSelectionListener();
}
@Override
public Menu getMenu(Control parent) {
if (fMenu != null) {
fMenu.dispose();
}
fMenu = new Menu(parent);
addActionToMenu(fMenu, selectionMetricsAction);
addActionToMenu(fMenu, filterCompletedAction);
addActionToMenu(fMenu, filterMyAssigneeAction);
new MenuItem(fMenu, SWT.SEPARATOR);
addActionToMenu(fMenu, new AtsExportManager(taskComposite.getTaskXViewer()));
try {
if (taskComposite.getIXTaskViewer().isTasksEditable()) {
addActionToMenu(fMenu, new ImportTasksViaSpreadsheet(
(AbstractTaskableArtifact) taskComposite.getIXTaskViewer().getAwa(), new Listener() {
@Override
public void handleEvent(Event event) {
try {
taskComposite.loadTable();
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
}));
addActionToMenu(fMenu, new ImportTasksViaSimpleList(
(AbstractTaskableArtifact) taskComposite.getIXTaskViewer().getAwa(), new Listener() {
@Override
public void handleEvent(Event event) {
try {
taskComposite.loadTable();
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
}));
}
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
return fMenu;
}
@Override
public void dispose() {
if (fMenu != null) {
fMenu.dispose();
fMenu = null;
}
}
@Override
public Menu getMenu(Menu parent) {
return null;
}
protected void addActionToMenu(Menu parent, Action action) {
ActionContributionItem item = new ActionContributionItem(action);
item.fill(parent, -1);
}
void clear() {
dispose();
}
private void addKeyListener() {
taskComposite.getTaskXViewer().getTree().addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent event) {
// do nothing
}
@Override
public void keyReleased(KeyEvent event) {
if ((event.stateMask & SWT.MODIFIER_MASK) == SWT.CTRL) {
if (event.keyCode == 'a') {
taskComposite.getTaskXViewer().getTree().setSelection(
taskComposite.getTaskXViewer().getTree().getItems());
} else if (event.keyCode == 'x') {
selectionMetricsAction.setChecked(!selectionMetricsAction.isChecked());
selectionMetricsAction.run();
} else if (event.keyCode == 'f') {
filterCompletedAction.setChecked(!filterCompletedAction.isChecked());
filterCompletedAction.run();
} else if (event.keyCode == 'g') {
filterMyAssigneeAction.setChecked(!filterMyAssigneeAction.isChecked());
filterMyAssigneeAction.run();
} else if (event.keyCode == 'd') {
filterMyAssigneeAction.setChecked(!filterMyAssigneeAction.isChecked());
filterCompletedAction.setChecked(!filterCompletedAction.isChecked());
filterCompletedAction.run();
filterMyAssigneeAction.run();
}
}
}
});
}
private void addSelectionListener() {
taskComposite.getTaskXViewer().getTree().addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// do nothing
}
@Override
public void widgetSelected(SelectionEvent e) {
if (selectionMetricsAction != null) {
if (selectionMetricsAction.isChecked()) {
selectionMetricsAction.run();
} else {
if (taskComposite != null) {
taskComposite.showReleaseMetricsLabel.setText("");
}
}
}
}
});
}
}
public void updateExtraInfoLine() throws OseeCoreException {
if (selectionMetricsAction != null && selectionMetricsAction.isChecked()) {
if (taskComposite.getTaskXViewer() != null && taskComposite.getTaskXViewer().getSelectedSMAArtifacts() != null && !taskComposite.getTaskXViewer().getSelectedSMAArtifacts().isEmpty()) {
taskComposite.showReleaseMetricsLabel.setText(WorkflowMetrics.getEstRemainMetrics(
taskComposite.getTaskXViewer().getSelectedSMAArtifacts(), null,
taskComposite.getTaskXViewer().getSelectedSMAArtifacts().iterator().next().getManHrsPerDayPreference(),
null));
} else {
taskComposite.showReleaseMetricsLabel.setText("");
}
}
taskComposite.showReleaseMetricsLabel.getParent().layout();
}
public void updateExtendedStatusString() {
taskComposite.getTaskXViewer().setExtendedStatusString(
//
(filterCompletedAction.isChecked() ? "[Complete/Cancel Filter]" : "") +
//
(filterMyAssigneeAction.isChecked() ? "[My Assignee Filter]" : ""));
}
protected void createDropDownMenuActions() {
try {
worldAssigneeFilter = new WorldAssigneeFilter();
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
selectionMetricsAction = new Action("Show Release Metrics by Selection - Ctrl-X", IAction.AS_CHECK_BOX) {
@Override
public void run() {
try {
updateExtraInfoLine();
} catch (Exception ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
};
selectionMetricsAction.setToolTipText("Show Release Metrics by Selection - Ctrl-X");
selectionMetricsAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.PAGE));
filterCompletedAction = new Action("Filter Out Completed/Cancelled - Ctrl-F", IAction.AS_CHECK_BOX) {
@Override
public void run() {
if (filterCompletedAction.isChecked()) {
taskComposite.getTaskXViewer().addFilter(worldCompletedFilter);
} else {
taskComposite.getTaskXViewer().removeFilter(worldCompletedFilter);
}
updateExtendedStatusString();
taskComposite.getTaskXViewer().refresh();
}
};
filterCompletedAction.setToolTipText("Filter Out Completed/Cancelled - Ctrl-F");
filterCompletedAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.GREEN_PLUS));
filterMyAssigneeAction = new Action("Filter My Assignee - Ctrl-G", IAction.AS_CHECK_BOX) {
@Override
public void run() {
if (filterMyAssigneeAction.isChecked()) {
taskComposite.getTaskXViewer().addFilter(worldAssigneeFilter);
} else {
taskComposite.getTaskXViewer().removeFilter(worldAssigneeFilter);
}
updateExtendedStatusString();
taskComposite.getTaskXViewer().refresh();
}
};
filterMyAssigneeAction.setToolTipText("Filter My Assignee - Ctrl-G");
filterMyAssigneeAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.USER));
}
@Override
public void handleSaveButtonPressed() {
// do nothing
}
@Override
public boolean isSaveButtonAvailable() {
return false;
}
}