Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Joy2013-03-28 17:31:10 +0000
committerGerrit Code Review @ Eclipse.org2013-04-01 21:35:57 +0000
commit36632cf6930fd06657e218464958d96a7576970e (patch)
treee79b98e152b00f1651f658de32883b638600e879
parent1500bdedcec98ea89060eae2312c2c8dc4839584 (diff)
downloadorg.eclipse.osee-36632cf6930fd06657e218464958d96a7576970e.tar.gz
org.eclipse.osee-36632cf6930fd06657e218464958d96a7576970e.tar.xz
org.eclipse.osee-36632cf6930fd06657e218464958d96a7576970e.zip
bug[ats_TGGYW]: Goal page resizing causes horizontal scrollbar to disappear
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java39
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java424
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAMembersTab.java256
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java13
-rw-r--r--plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java5
5 files changed, 243 insertions, 494 deletions
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java
index 6ddd70e76f2..87c3f6e17d9 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAEditor.java
@@ -42,6 +42,8 @@ import org.eclipse.osee.ats.task.TaskTabXWidgetActionPage;
import org.eclipse.osee.ats.util.AtsUtil;
import org.eclipse.osee.ats.world.AtsMetricsComposite;
import org.eclipse.osee.ats.world.IAtsMetricsProvider;
+import org.eclipse.osee.ats.world.IWorldEditor;
+import org.eclipse.osee.ats.world.IWorldEditorProvider;
import org.eclipse.osee.framework.access.AccessControlManager;
import org.eclipse.osee.framework.core.enums.PermissionEnum;
import org.eclipse.osee.framework.core.exception.OseeArgumentException;
@@ -74,6 +76,7 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
@@ -89,7 +92,7 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
/**
* @author Donald G. Dunne
*/
-public class SMAEditor extends AbstractArtifactEditor implements IDirtyReportable, ISMAEditorEventHandler, ISelectedAtsArtifacts, IAtsMetricsProvider, IXTaskViewer {
+public class SMAEditor extends AbstractArtifactEditor implements IWorldEditor, IDirtyReportable, ISMAEditorEventHandler, ISelectedAtsArtifacts, IAtsMetricsProvider, IXTaskViewer {
public static final String EDITOR_ID = "org.eclipse.osee.ats.editor.SMAEditor";
private AbstractWorkflowArtifact awa;
private SMAWorkFlowTab workFlowTab;
@@ -678,8 +681,8 @@ public class SMAEditor extends AbstractArtifactEditor implements IDirtyReportabl
if (page.equals(workFlowTab)) {
provider = getDefaultSelectionProvider();
} else if (page.equals(membersTab)) {
- if (membersTab != null && membersTab.getSmaGoalMembersSection() != null) {
- provider = membersTab.getSmaGoalMembersSection().getWorldComposite().getWorldXViewer();
+ if (membersTab != null && membersTab.getGoalMembersSection() != null) {
+ provider = membersTab.getWorldXViewer();
}
} else if (page.equals(taskTabXWidgetActionPage)) {
provider = taskTabXWidgetActionPage.getTaskComposite().getTaskXViewer();
@@ -704,4 +707,34 @@ public class SMAEditor extends AbstractArtifactEditor implements IDirtyReportabl
return java.util.Collections.emptyList();
}
+ @Override
+ public void reflow() {
+ // do nothing
+ }
+
+ @Override
+ public void setTableTitle(String title, boolean warning) {
+ // do nothing
+ }
+
+ @Override
+ public void reSearch() {
+ // do nothing
+ }
+
+ @Override
+ public IWorldEditorProvider getWorldEditorProvider() {
+ return null;
+ }
+
+ @Override
+ public void createToolBarPulldown(Menu menu) {
+ // do nothing
+ }
+
+ @Override
+ public String getCurrentTitleLabel() {
+ return null;
+ }
+
} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java
deleted file mode 100644
index 76e530faedb..00000000000
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAGoalMembersSection.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*******************************************************************************
- * 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.editor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
-import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
-import org.eclipse.osee.ats.api.data.AtsRelationTypes;
-import org.eclipse.osee.ats.core.client.actions.ISelectedAtsArtifacts;
-import org.eclipse.osee.ats.core.client.artifact.GoalArtifact;
-import org.eclipse.osee.ats.core.client.task.TaskArtifact;
-import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact;
-import org.eclipse.osee.ats.goal.GoalXViewerFactory;
-import org.eclipse.osee.ats.goal.RemoveFromGoalAction;
-import org.eclipse.osee.ats.goal.RemoveFromGoalAction.RemovedFromGoalHandler;
-import org.eclipse.osee.ats.goal.SetGoalOrderAction;
-import org.eclipse.osee.ats.internal.Activator;
-import org.eclipse.osee.ats.world.IMenuActionProvider;
-import org.eclipse.osee.ats.world.IWorldEditor;
-import org.eclipse.osee.ats.world.IWorldEditorProvider;
-import org.eclipse.osee.ats.world.WorldComposite;
-import org.eclipse.osee.ats.world.WorldLabelProvider;
-import org.eclipse.osee.ats.world.WorldViewDragAndDrop;
-import org.eclipse.osee.ats.world.WorldXViewer;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.util.Jobs;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
-import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
-import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
-import org.eclipse.osee.framework.ui.skynet.action.RefreshAction.IRefreshActionHandler;
-import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactTransfer;
-import org.eclipse.osee.framework.ui.swt.ALayout;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ToolBar;
-
-/**
- * @author Roberto E. Escobar
- * @author Donald G. Dunne
- */
-public class SMAGoalMembersSection extends Composite implements ISelectedAtsArtifacts, IWorldEditor, IMenuActionProvider, IRefreshActionHandler {
-
- private final SMAEditor editor;
- private WorldComposite worldComposite;
- private static final Map<String, CustomizeData> editorToCustDataMap = new HashMap<String, CustomizeData>(20);
- private final String id;
- private final GoalArtifact goalArtifact;
-
- public SMAGoalMembersSection(String id, SMAEditor editor, Composite parent, int style, Integer defaultTableWidth, GoalArtifact goalArtifact) {
- super(parent, style);
- this.id = id;
- this.editor = editor;
- this.goalArtifact = goalArtifact;
-
- setLayout(new GridLayout(2, true));
- setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- ToolBar toolBar = createToolBar();
-
- createWorldComposite(defaultTableWidth);
- createActions();
- setupListenersForCustomizeDataCaching();
- fillActionBar(toolBar);
- editor.getToolkit().adapt(this);
- }
-
- private ToolBar createToolBar() {
- Composite actionComp = new Composite(this, SWT.NONE);
- actionComp.setLayout(ALayout.getZeroMarginLayout());
- GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false);
- gd.horizontalSpan = 2;
- actionComp.setLayoutData(gd);
-
- ToolBar toolBar = new ToolBar(actionComp, SWT.FLAT | SWT.RIGHT);
- gd = new GridData(GridData.FILL_HORIZONTAL);
- toolBar.setLayoutData(gd);
-
- editor.getToolkit().adapt(actionComp);
- editor.getToolkit().adapt(toolBar);
- return toolBar;
- }
-
- private void fillActionBar(ToolBar toolBar) {
-
- new ActionContributionItem(worldComposite.getXViewer().getCustomizeAction()).fill(toolBar, -1);
- new ActionContributionItem(new RefreshAction(this)).fill(toolBar, -1);
- }
-
- private void createWorldComposite(Integer defaultTableWidth) {
- worldComposite =
- new WorldComposite(id, this, new GoalXViewerFactory((GoalArtifact) editor.getAwa()), this, SWT.BORDER, false);
-
- new GoalDragAndDrop(worldComposite, SMAEditor.EDITOR_ID);
-
- CustomizeData customizeData = editorToCustDataMap.get(getTableExpandKey());
- if (customizeData == null) {
- customizeData = worldComposite.getCustomizeDataCopy();
- }
- WorldLabelProvider labelProvider = (WorldLabelProvider) worldComposite.getXViewer().getLabelProvider();
- labelProvider.setParentGoal((GoalArtifact) editor.getAwa());
-
- worldComposite.getWorldXViewer().addMenuActionProvider(this);
-
- GridData gd = null;
- if (defaultTableWidth != null && defaultTableWidth > 0) {
- gd = new GridData(SWT.FILL, SWT.NONE, true, false);
- gd.heightHint = defaultTableWidth;
- } else {
- gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- }
- gd.widthHint = 200;
- gd.horizontalSpan = 2;
- worldComposite.setLayoutData(gd);
- worldComposite.layout(true);
-
- customizeData = null;
- reload();
- }
-
- public void reload() {
- if (isTableDisposed()) {
- return;
- }
- Job job = new Job("Load Goal Members") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- if (isTableDisposed()) {
- return Status.OK_STATUS;
- }
- try {
- final List<Artifact> artifacts = goalArtifact.getMembers();
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- if (isTableDisposed()) {
- return;
- }
- worldComposite.load("Members", artifacts, (CustomizeData) null, TableLoadOption.None);
- }
-
- });
- } catch (OseeCoreException ex) {
- OseeLog.log(Activator.class, Level.SEVERE, ex);
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Exception loading Goal Members", ex);
- }
- return Status.OK_STATUS;
- }
- };
- Jobs.startJob(job, false);
- }
-
- private boolean isTableDisposed() {
- return worldComposite == null || worldComposite.getXViewer() == null || worldComposite.getXViewer().getTree() == null || worldComposite.getXViewer().getTree().isDisposed();
- }
-
- private String getTableExpandKey() {
- return editor.getAwa().getHumanReadableId() + id;
- }
-
- private void setupListenersForCustomizeDataCaching() {
- worldComposite.addDisposeListener(new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- editorToCustDataMap.put(getTableExpandKey(), worldComposite.getCustomizeDataCopy());
- }
- });
- editor.addEditorListeners(new ISMAEditorListener() {
-
- @Override
- public void editorDisposing() {
- editorToCustDataMap.remove(getTableExpandKey());
- }
- });
- }
-
- public void refresh() {
- Displays.ensureInDisplayThread(new Runnable() {
-
- @Override
- public void run() {
- if (Widgets.isAccessible(worldComposite)) {
- updateShown();
- worldComposite.update();
- worldComposite.getXViewer().refresh();
- }
- }
- });
- }
-
- private void updateShown() {
- List<Artifact> members;
- try {
- members = goalArtifact.getMembers();
- } catch (OseeCoreException ex) {
- OseeLog.log(Activator.class, Level.SEVERE, ex);
- return;
- }
- List<Artifact> loadedArtifacts = worldComposite.getLoadedArtifacts();
- List<Artifact> toRemoveFromLoaded = new LinkedList<Artifact>(members);
- members.removeAll(loadedArtifacts);
- for (Artifact art : members) {
- worldComposite.insert(art, -1);
- }
- loadedArtifacts.removeAll(toRemoveFromLoaded);
- worldComposite.getXViewer().remove(loadedArtifacts);
- }
-
- @Override
- public void dispose() {
- if (Widgets.isAccessible(worldComposite)) {
- worldComposite.dispose();
- }
- super.dispose();
- }
-
- @Override
- public void createToolBarPulldown(Menu menu) {
- // do nothing
- }
-
- @Override
- public String getCurrentTitleLabel() {
- return "";
- }
-
- @Override
- public IWorldEditorProvider getWorldEditorProvider() {
- return null;
- }
-
- @Override
- public void reSearch() {
- // do nothing
- }
-
- @Override
- public void reflow() {
- // do nothing
- }
-
- @Override
- public void setTableTitle(String title, boolean warning) {
- // do nothing
- }
-
- Action setGoalOrderAction, removeFromGoalAction;
-
- public void createActions() {
- setGoalOrderAction = new SetGoalOrderAction((GoalArtifact) editor.getAwa(), this);
- RemovedFromGoalHandler handler = new RemovedFromGoalHandler() {
-
- @Override
- public void removedFromGoal(Collection<? extends Artifact> removed) {
- worldComposite.removeItems(removed);
- worldComposite.getXViewer().remove(removed);
- worldComposite.getXViewer().refresh(goalArtifact);
- }
-
- };
- removeFromGoalAction = new RemoveFromGoalAction((GoalArtifact) editor.getAwa(), this, handler);
- }
-
- @Override
- public void updateMenuActionsForTable() {
- MenuManager mm = worldComposite.getXViewer().getMenuManager();
-
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, setGoalOrderAction);
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, removeFromGoalAction);
- mm.insertBefore(WorldXViewer.MENU_GROUP_ATS_WORLD_EDIT, new Separator());
- }
-
- @Override
- public Set<Artifact> getSelectedSMAArtifacts() {
- Set<Artifact> artifacts = new HashSet<Artifact>();
- for (Artifact art : worldComposite.getSelectedArtifacts()) {
- if (art instanceof AbstractWorkflowArtifact) {
- artifacts.add(art);
- }
- }
- return artifacts;
- }
-
- @Override
- public List<Artifact> getSelectedAtsArtifacts() {
- List<Artifact> artifacts = new ArrayList<Artifact>();
- for (Artifact art : worldComposite.getSelectedArtifacts()) {
- if (art.isOfType(AtsArtifactTypes.AtsArtifact)) {
- artifacts.add(art);
- }
- }
- return artifacts;
- }
-
- @Override
- public List<TaskArtifact> getSelectedTaskArtifacts() {
- List<TaskArtifact> tasks = new ArrayList<TaskArtifact>();
- for (Artifact art : worldComposite.getSelectedArtifacts()) {
- if (art instanceof TaskArtifact) {
- tasks.add((TaskArtifact) art);
- }
- }
- return tasks;
- }
-
- public WorldComposite getWorldComposite() {
- return worldComposite;
- }
-
- @Override
- public void refreshActionHandler() {
- refresh();
- }
-
- private class GoalDragAndDrop extends WorldViewDragAndDrop {
-
- private boolean isFeedbackAfter = false;
-
- public GoalDragAndDrop(WorldComposite worldComposite, String viewId) {
- super(worldComposite, viewId);
- }
-
- private Artifact getSelectedArtifact(DropTargetEvent event) {
- if (event.item != null && event.item.getData() instanceof Artifact) {
- return (Artifact) event.item.getData();
- }
- return null;
- }
-
- @Override
- public void operationChanged(DropTargetEvent event) {
- if (!(event.detail == 1)) {
- isFeedbackAfter = false;
- } else {
- isFeedbackAfter = true;
- }
- }
-
- @Override
- public void performDragOver(DropTargetEvent event) {
- if (isValidForArtifactDrop(event)) {
- event.detail = DND.DROP_MOVE;
- Artifact selectedArtifact = getSelectedArtifact(event);
- if (selectedArtifact != null) {
- if (isFeedbackAfter) {
- event.feedback = DND.FEEDBACK_INSERT_AFTER | DND.FEEDBACK_SCROLL;
- } else {
- event.feedback = DND.FEEDBACK_INSERT_BEFORE | DND.FEEDBACK_SCROLL;
- }
- }
- }
- }
-
- @Override
- public void performDrop(final DropTargetEvent event) {
- final ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
- final List<Artifact> droppedArtifacts = Arrays.asList(artData.getArtifacts());
- final Artifact dropTarget = getSelectedArtifact(event);
- if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
- try {
- Collections.reverse(droppedArtifacts);
- List<Artifact> members = goalArtifact.getMembers();
- for (Artifact dropped : droppedArtifacts) {
- if (!members.contains(dropped)) {
- goalArtifact.addMember(dropped);
- int index = isFeedbackAfter ? members.indexOf(dropTarget) + 1 : members.indexOf(dropTarget);
- worldComposite.insert(dropped, index);
- worldComposite.update();
- }
- if (dropTarget != null) {
- goalArtifact.setRelationOrder(AtsRelationTypes.Goal_Member, dropTarget, isFeedbackAfter, dropped);
- }
- }
- goalArtifact.persist(SMAGoalMembersSection.class.getSimpleName());
- worldComposite.getXViewer().refresh(goalArtifact);
- worldComposite.getXViewer().update(dropTarget, null);
- } catch (OseeCoreException ex) {
- OseeLog.log(Activator.class, Level.WARNING, Lib.exceptionToString(ex));
- }
- }
- }
-
- }
-
-}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAMembersTab.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAMembersTab.java
index 6e7fbcba751..f9443af0e96 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAMembersTab.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAMembersTab.java
@@ -11,8 +11,11 @@
package org.eclipse.osee.ats.editor;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -22,22 +25,34 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData;
+import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.core.client.artifact.GoalArtifact;
import org.eclipse.osee.ats.core.client.config.AtsBulkLoad;
+import org.eclipse.osee.ats.goal.GoalXViewerFactory;
import org.eclipse.osee.ats.internal.Activator;
import org.eclipse.osee.ats.world.IWorldViewerEventHandler;
+import org.eclipse.osee.ats.world.WorldComposite;
+import org.eclipse.osee.ats.world.WorldLabelProvider;
+import org.eclipse.osee.ats.world.WorldViewDragAndDrop;
import org.eclipse.osee.ats.world.WorldXViewer;
import org.eclipse.osee.ats.world.WorldXViewerEventManager;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.operation.CompositeOperation;
import org.eclipse.osee.framework.core.operation.IOperation;
import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactData;
import org.eclipse.osee.framework.skynet.core.event.model.EventBasicGuidArtifact;
import org.eclipse.osee.framework.skynet.core.event.model.EventModType;
+import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
+import org.eclipse.osee.framework.ui.skynet.action.RefreshAction;
+import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactTransfer;
import org.eclipse.osee.framework.ui.skynet.util.FormsUtil;
import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite;
import org.eclipse.osee.framework.ui.swt.Displays;
@@ -45,17 +60,17 @@ import org.eclipse.osee.framework.ui.swt.ExceptionComposite;
import org.eclipse.osee.framework.ui.swt.Widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
-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.Event;
-import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.progress.UIJob;
/**
@@ -65,7 +80,8 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
private final GoalArtifact goalArtifact;
private IManagedForm managedForm;
private Composite bodyComp;
- private SMAGoalMembersSection smaGoalMembersSection;
+ private ScrolledForm scrolledForm;
+ private WorldComposite worldComposite;
private LoadingComposite loadingComposite;
public final static String ID = "ats.members.tab";
private final SMAEditor editor;
@@ -84,8 +100,9 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
super.createFormContent(managedForm);
this.managedForm = managedForm;
+ scrolledForm = managedForm.getForm();
try {
- managedForm.getForm().addDisposeListener(new DisposeListener() {
+ scrolledForm.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
storeScrollLocation();
@@ -93,10 +110,10 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
});
updateTitleBar();
- bodyComp = managedForm.getForm().getBody();
- GridLayout gridLayout = new GridLayout(1, false);
+ bodyComp = scrolledForm.getBody();
+ GridLayout gridLayout = new GridLayout(1, true);
bodyComp.setLayout(gridLayout);
- GridData gd = new GridData(SWT.LEFT, SWT.LEFT, true, true);
+ GridData gd = new GridData(SWT.LEFT, SWT.LEFT, false, false);
bodyComp.setLayoutData(gd);
setLoading(true);
@@ -108,14 +125,14 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
}
private void updateTitleBar() throws OseeCoreException {
- if (managedForm != null && Widgets.isAccessible(managedForm.getForm())) {
+ if (Widgets.isAccessible(scrolledForm)) {
String titleString = editor.getTitleStr();
String displayableTitle = Strings.escapeAmpersands(titleString);
- if (!managedForm.getForm().getText().equals(displayableTitle)) {
- managedForm.getForm().getForm().setText(displayableTitle);
+ if (!scrolledForm.getText().equals(displayableTitle)) {
+ scrolledForm.setText(displayableTitle);
}
- if (!ArtifactImageManager.getImage(goalArtifact).equals(managedForm.getForm().getImage())) {
- managedForm.getForm().setImage(ArtifactImageManager.getImage(goalArtifact));
+ if (!ArtifactImageManager.getImage(goalArtifact).equals(scrolledForm.getImage())) {
+ scrolledForm.setImage(ArtifactImageManager.getImage(goalArtifact));
}
}
}
@@ -131,10 +148,11 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
public void refreshData() {
if (Widgets.isAccessible(bodyComp)) {
List<IOperation> ops = AtsBulkLoad.getConfigLoadingOperations();
- IOperation operation = new CompositeOperation("Load Members Tab", Activator.PLUGIN_ID, ops);
+ IOperation operation = Operations.createBuilder("Load Members Tab").addAll(ops).build();
Operations.executeAsJob(operation, false, Job.LONG, reloadAdapter);
}
}
+
private final class ReloadJobChangeAdapter extends JobChangeAdapter {
private final SMAEditor editor;
@@ -154,15 +172,16 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
public IStatus runInUIThread(IProgressMonitor monitor) {
if (firstTime) {
try {
- if (managedForm != null && Widgets.isAccessible(managedForm.getForm())) {
+ if (Widgets.isAccessible(scrolledForm)) {
updateTitleBar();
setLoading(false);
boolean createdAndLoaded = createMembersBody();
if (!createdAndLoaded) {
- smaGoalMembersSection.reload();
+ reload();
}
jumptoScrollLocation();
- FormsUtil.addHeadingGradient(editor.getToolkit(), managedForm.getForm(), true);
+ FormsUtil.addHeadingGradient(editor.getToolkit(), scrolledForm, true);
+ refreshToolbar();
editor.onDirtied();
}
firstTime = false;
@@ -180,7 +199,7 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
showBusy(false);
}
if (managedForm != null && Widgets.isAccessible(managedForm.getForm())) {
- smaGoalMembersSection.refresh();
+ refresh();
}
}
return Status.OK_STATUS;
@@ -192,8 +211,8 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
private void handleException(Exception ex) {
setLoading(false);
- if (Widgets.isAccessible(smaGoalMembersSection)) {
- smaGoalMembersSection.dispose();
+ if (Widgets.isAccessible(worldComposite)) {
+ worldComposite.dispose();
}
OseeLog.log(Activator.class, Level.SEVERE, ex);
new ExceptionComposite(bodyComp, ex);
@@ -216,30 +235,64 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
* @return true if created; false if skipped
*/
private boolean createMembersBody() {
- if (!Widgets.isAccessible(smaGoalMembersSection)) {
-
- smaGoalMembersSection =
- new SMAGoalMembersSection("workflow.edtor.members.tab", editor, bodyComp, SWT.NONE, null, goalArtifact);
- smaGoalMembersSection.layout();
- smaGoalMembersSection.setFocus();
-
- smaGoalMembersSection.getWorldComposite().getWorldXViewer().getTree().addListener(SWT.MouseWheel,
- new Listener() {
-
- @Override
- public void handleEvent(Event event) {
- ScrolledComposite sc = managedForm.getForm();
- Point origin = sc.getOrigin();
- origin.y -= event.count * 16;
- sc.setOrigin(origin);
- }
- });
- getSite().setSelectionProvider(smaGoalMembersSection.getWorldComposite().getWorldXViewer());
+ if (!Widgets.isAccessible(worldComposite)) {
+ worldComposite =
+ new WorldComposite("workflow.edtor.members.tab", editor, new GoalXViewerFactory(
+ (GoalArtifact) editor.getAwa()), bodyComp, SWT.BORDER, false);
+
+ new GoalDragAndDrop(worldComposite, SMAEditor.EDITOR_ID);
+
+ WorldLabelProvider labelProvider = (WorldLabelProvider) worldComposite.getXViewer().getLabelProvider();
+ labelProvider.setParentGoal((GoalArtifact) editor.getAwa());
+
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd.widthHint = 100;
+ gd.heightHint = 100;
+ worldComposite.setLayoutData(gd);
+
+ reload();
return true;
}
return false;
}
+ public void reload() {
+ if (isTableDisposed()) {
+ return;
+ }
+ Job job = new Job("Load Goal Members") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ if (isTableDisposed()) {
+ return Status.OK_STATUS;
+ }
+ try {
+ final List<Artifact> artifacts = goalArtifact.getMembers();
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ if (isTableDisposed()) {
+ return;
+ }
+ worldComposite.load("Members", artifacts, (CustomizeData) null, TableLoadOption.None);
+ }
+
+ });
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Exception loading Goal Members", ex);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(job, false);
+ }
+
+ private boolean isTableDisposed() {
+ return worldComposite == null || worldComposite.getXViewer() == null || worldComposite.getXViewer().getTree() == null || worldComposite.getXViewer().getTree().isDisposed();
+ }
+
private void jumptoScrollLocation() {
// Jump to scroll location if set
Integer selection = guidToScrollLocation.get(goalArtifact.getGuid());
@@ -251,8 +304,8 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
@Override
public void dispose() {
- if (smaGoalMembersSection != null) {
- smaGoalMembersSection.dispose();
+ if (worldComposite != null) {
+ worldComposite.dispose();
}
if (editor.getToolkit() != null) {
editor.getToolkit().dispose();
@@ -264,7 +317,6 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
private void storeScrollLocation() {
if (managedForm != null && managedForm.getForm() != null) {
Integer selection = managedForm.getForm().getVerticalBar().getSelection();
- // System.out.println("Storing selection => " + selection);
guidToScrollLocation.put(goalArtifact.getGuid(), selection);
}
}
@@ -280,7 +332,6 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
@Override
public void run() {
Integer selection = guidToScrollLocation.get(goalArtifact.getGuid());
- // System.out.println("Restoring selection => " + selection);
// Find the ScrolledComposite operating on the control.
ScrolledComposite sComp = null;
@@ -307,19 +358,52 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
}
public void refresh() {
- if (editor != null && !goalArtifact.isInTransition()) {
- // add pages back
- refreshData();
+ Displays.ensureInDisplayThread(new Runnable() {
+
+ @Override
+ public void run() {
+ if (Widgets.isAccessible(worldComposite)) {
+ updateShown();
+ worldComposite.update();
+ worldComposite.getXViewer().refresh();
+ }
+ }
+ });
+ }
+
+ private void updateShown() {
+ List<Artifact> members;
+ try {
+ members = goalArtifact.getMembers();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ return;
}
+ List<Artifact> loadedArtifacts = worldComposite.getLoadedArtifacts();
+ List<Artifact> toRemoveFromLoaded = new LinkedList<Artifact>(members);
+ members.removeAll(loadedArtifacts);
+ for (Artifact art : members) {
+ worldComposite.insert(art, -1);
+ }
+ loadedArtifacts.removeAll(toRemoveFromLoaded);
+ worldComposite.getXViewer().remove(loadedArtifacts);
+ }
+
+ private void refreshToolbar() {
+ IToolBarManager toolBarMgr = scrolledForm.getToolBarManager();
+ toolBarMgr.removeAll();
+ toolBarMgr.add(getWorldXViewer().getCustomizeAction());
+ toolBarMgr.add(new RefreshAction(worldComposite));
+ scrolledForm.updateToolBar();
}
- public SMAGoalMembersSection getSmaGoalMembersSection() {
- return smaGoalMembersSection;
+ public WorldComposite getGoalMembersSection() {
+ return worldComposite;
}
@Override
public WorldXViewer getWorldXViewer() {
- return smaGoalMembersSection.getWorldComposite().getWorldXViewer();
+ return worldComposite.getWorldXViewer();
}
@Override
@@ -347,4 +431,74 @@ public class SMAMembersTab extends FormPage implements IWorldViewerEventHandler
return editor.isDisposed();
}
-} \ No newline at end of file
+ private class GoalDragAndDrop extends WorldViewDragAndDrop {
+
+ private boolean isFeedbackAfter = false;
+
+ public GoalDragAndDrop(WorldComposite worldComposite, String viewId) {
+ super(worldComposite, viewId);
+ }
+
+ private Artifact getSelectedArtifact(DropTargetEvent event) {
+ if (event.item != null && event.item.getData() instanceof Artifact) {
+ return (Artifact) event.item.getData();
+ }
+ return null;
+ }
+
+ @Override
+ public void operationChanged(DropTargetEvent event) {
+ if (!(event.detail == 1)) {
+ isFeedbackAfter = false;
+ } else {
+ isFeedbackAfter = true;
+ }
+ }
+
+ @Override
+ public void performDragOver(DropTargetEvent event) {
+ if (isValidForArtifactDrop(event)) {
+ event.detail = DND.DROP_MOVE;
+ Artifact selectedArtifact = getSelectedArtifact(event);
+ if (selectedArtifact != null) {
+ if (isFeedbackAfter) {
+ event.feedback = DND.FEEDBACK_INSERT_AFTER | DND.FEEDBACK_SCROLL;
+ } else {
+ event.feedback = DND.FEEDBACK_INSERT_BEFORE | DND.FEEDBACK_SCROLL;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void performDrop(final DropTargetEvent event) {
+ final ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
+ final List<Artifact> droppedArtifacts = Arrays.asList(artData.getArtifacts());
+ final Artifact dropTarget = getSelectedArtifact(event);
+ if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ try {
+ Collections.reverse(droppedArtifacts);
+ List<Artifact> members = goalArtifact.getMembers();
+ for (Artifact dropped : droppedArtifacts) {
+ if (!members.contains(dropped)) {
+ goalArtifact.addMember(dropped);
+ int index = isFeedbackAfter ? members.indexOf(dropTarget) + 1 : members.indexOf(dropTarget);
+ worldComposite.insert(dropped, index);
+ worldComposite.update();
+ }
+ if (dropTarget != null) {
+ goalArtifact.setRelationOrder(AtsRelationTypes.Goal_Member, dropTarget, isFeedbackAfter, dropped);
+ }
+ }
+ goalArtifact.persist(SMAMembersTab.class.getSimpleName());
+ worldComposite.getXViewer().refresh(goalArtifact);
+ worldComposite.getXViewer().update(dropTarget, null);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.WARNING, Lib.exceptionToString(ex));
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java
index 4f1e897f520..f054441aba5 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/editor/SMAWorkFlowTab.java
@@ -57,7 +57,6 @@ import org.eclipse.osee.ats.world.IWorldViewerEventHandler;
import org.eclipse.osee.ats.world.WorldXViewer;
import org.eclipse.osee.ats.world.WorldXViewerEventManager;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.operation.CompositeOperation;
import org.eclipse.osee.framework.core.operation.IOperation;
import org.eclipse.osee.framework.core.operation.Operations;
import org.eclipse.osee.framework.core.util.Result;
@@ -120,7 +119,6 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
private SMAWorkflowMetricsHeader workflowMetricsHeader;
private SMADetailsSection smaDetailsSection;
private SMARelationsSection smaRelationsSection;
- private SMAGoalMembersSection smaGoalMembersSection;
private SMAHistorySection smaHistorySection;
private LoadingComposite loadingComposite;
public final static String ID = "ats.workflow.tab";
@@ -195,7 +193,7 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
public void refreshData() {
List<IOperation> ops = new ArrayList<IOperation>();
ops.addAll(AtsBulkLoad.getConfigLoadingOperations());
- IOperation operation = new CompositeOperation("Load Workflow Tab", Activator.PLUGIN_ID, ops);
+ IOperation operation = Operations.createBuilder("Load Workflow Tab").addAll(ops).build();
Operations.executeAsJob(operation, false, Job.LONG, new ReloadJobChangeAdapter(editor));
}
private final class ReloadJobChangeAdapter extends JobChangeAdapter {
@@ -375,7 +373,6 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
gd.widthHint = 100;
headerComp.setLayoutData(gd);
headerComp.setLayout(ALayout.getZeroMarginLayout(1, false));
- // mainComp.setBackground(Displays.getSystemColor(SWT.COLOR_RED));
// Display relations
try {
@@ -545,9 +542,6 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
if (smaRelationsSection != null) {
smaRelationsSection.dispose();
}
- if (smaGoalMembersSection != null) {
- smaGoalMembersSection.dispose();
- }
for (SMAWorkFlowSection section : sections) {
section.dispose();
}
@@ -577,7 +571,6 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
@Override
public void run() {
Integer selection = guidToScrollLocation.get(awa.getGuid());
- // System.out.println("Restoring selection => " + selection);
// Find the ScrolledComposite operating on the control.
ScrolledComposite sComp = null;
@@ -727,9 +720,7 @@ public class SMAWorkFlowTab extends FormPage implements IWorldViewerEventHandler
@Override
public WorldXViewer getWorldXViewer() {
- if (smaGoalMembersSection != null && Widgets.isAccessible(smaGoalMembersSection.getWorldComposite())) {
- return smaGoalMembersSection.getWorldComposite().getWorldXViewer();
- }
+ // do nothing
return null;
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java
index 0c10241b10b..c5e82ac8441 100644
--- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java
+++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/goal/GoalXViewerFactory.java
@@ -122,9 +122,4 @@ public class GoalXViewerFactory extends SkynetXViewerFactory {
this.soleGoalArtifact = soleGoalArtifact;
}
- @Override
- public boolean isSearhTop() {
- return true;
- }
-
}

Back to the top