diff options
author | ddunne | 2010-04-05 17:30:43 +0000 |
---|---|---|
committer | ddunne | 2010-04-05 17:30:43 +0000 |
commit | a9e2636f1fba74e389fc123fd1204feebd697057 (patch) | |
tree | 9ce5976e578c5ace736561d2246f3d7ffd75e1b6 /plugins | |
parent | 3507c202ff98161e4d8e235746e4e0d951150160 (diff) | |
download | org.eclipse.osee-a9e2636f1fba74e389fc123fd1204feebd697057.tar.gz org.eclipse.osee-a9e2636f1fba74e389fc123fd1204feebd697057.tar.xz org.eclipse.osee-a9e2636f1fba74e389fc123fd1204feebd697057.zip |
goals
Diffstat (limited to 'plugins')
10 files changed, 592 insertions, 56 deletions
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java index 98bbe59ecac..3b256d78b88 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/GoalArtifact.java @@ -11,6 +11,7 @@ package org.eclipse.osee.ats.artifact;
import java.text.NumberFormat;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -23,6 +24,7 @@ import org.eclipse.osee.ats.artifact.ATSLog.LogType; import org.eclipse.osee.ats.util.AtsArtifactTypes;
import org.eclipse.osee.ats.util.AtsRelationTypes;
import org.eclipse.osee.ats.util.AtsUtil;
+import org.eclipse.osee.ats.world.search.GoalSearchItem;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
import org.eclipse.osee.framework.core.model.ArtifactType;
@@ -119,6 +121,11 @@ public class GoalArtifact extends StateMachineArtifact { if (art instanceof GoalArtifact) {
goals.add(art);
}
+ if (art instanceof ActionArtifact) {
+ for (TeamWorkFlowArtifact teamArt : ((ActionArtifact) art).getTeamWorkFlowArtifacts()) {
+ getGoals(teamArt, goals, recurse);
+ }
+ }
goals.addAll(art.getRelatedArtifacts(AtsRelationTypes.Goal_Goal, GoalArtifact.class));
if (recurse && art instanceof StateMachineArtifact && ((StateMachineArtifact) art).getParentSMA() != null) {
getGoals(((StateMachineArtifact) art).getParentSMA(), goals, recurse);
@@ -137,7 +144,7 @@ public class GoalArtifact extends StateMachineArtifact { if (!isHasGoal(artifact)) return "";
Collection<Artifact> goals = GoalArtifact.getGoals(artifact, false);
if (goals.size() > 1) {
- return "duplicate parents";
+ return "unable to resolve duplicate parents";
}
Artifact goal = goals.iterator().next();
return getGoalOrder((GoalArtifact) goal, artifact);
@@ -145,6 +152,7 @@ public class GoalArtifact extends StateMachineArtifact { public static String getGoalOrder(GoalArtifact goalArtifact, Artifact member) throws OseeCoreException {
List<Artifact> members = goalArtifact.getMembers();
+ if (!members.contains(member)) return "";
try {
return String.valueOf(members.indexOf(member) + 1);
} catch (Exception ex) {
@@ -175,10 +183,10 @@ public class GoalArtifact extends StateMachineArtifact { }
}
- public static boolean promptChangeGoalOrder(Artifact artifact) throws OseeCoreException {
+ public static GoalArtifact promptChangeGoalOrder(Artifact artifact) throws OseeCoreException {
if (!isHasGoal(artifact)) {
AWorkbench.popup(String.format("No Goal set for artifact [%s]", artifact));
- return false;
+ return null;
}
Collection<Artifact> goals = getGoals(artifact, false);
GoalArtifact goal = null;
@@ -192,30 +200,40 @@ public class GoalArtifact extends StateMachineArtifact { if (dialog.open() == 0) {
goal = (GoalArtifact) dialog.getSelection();
} else {
- return false;
+ return null;
}
}
List<Artifact> members = goal.getMembers();
String currIndexStr = getGoalOrder(goal, artifact);
EntryDialog ed =
- new EntryDialog("Change Goal Order", String.format(
- "Current Order = %s\n\nEnter New Order Number from 1..%d", currIndexStr, members.size()));
+ new EntryDialog(
+ "Change Goal Order",
+ String.format(
+ "Goal: %s\n\nCurrent Order: %s\n\nEnter New Order Number from 1..%d or %d for last\n\nNote: Goal will be placed before number entered.",
+ goal, currIndexStr, members.size(), members.size() + 1));
ed.setNumberFormat(NumberFormat.getIntegerInstance());
int result = ed.open();
if (result == EntryDialog.OK) {
String newIndexStr = ed.getEntry();
- Integer newIndex = new Integer(newIndexStr) - 1;
- if (newIndex == 0 || newIndex > members.size()) {
+ Integer enteredIndex = new Integer(newIndexStr);
+ boolean insertLast = enteredIndex == members.size() + 1;
+ Integer membersIndex = insertLast ? members.size() - 1 : enteredIndex - 1;
+ if (membersIndex > members.size()) {
AWorkbench.popup(String.format("New Order Number [%s] out of range 1..%d", newIndexStr, members.size()));
- return false;
+ return null;
}
- Artifact insertTarget = members.get(newIndex);
- goal.setRelationOrder(AtsRelationTypes.Goal_Member, insertTarget, false, artifact);
+ Artifact insertTarget = members.get(membersIndex);
+ goal.setRelationOrder(AtsRelationTypes.Goal_Member, insertTarget, insertLast ? true : false, artifact);
goal.persist();
- return true;
+ return goal;
}
- return false;
+ return null;
+ }
+
+ public Collection<GoalArtifact> getInWorkGoals() throws OseeCoreException {
+ GoalSearchItem searchItem = new GoalSearchItem("", new ArrayList<TeamDefinitionArtifact>(), false, null);
+ return org.eclipse.osee.framework.jdk.core.util.Collections.castAll(searchItem.performSearchGetResults());
}
}
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 index afbb60b7cb8..c20e69fc9f9 100644 --- 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 @@ -19,6 +19,7 @@ import org.eclipse.osee.ats.util.AtsRelationTypes; 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.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
@@ -77,7 +78,8 @@ public class SMAGoalMembersSection extends SectionPart implements IWorldEditor { try {
CustomizeData customizeData = worldComposite.getCustomizeDataCopy();
worldComposite.load("Members", editor.getSma().getRelatedArtifacts(AtsRelationTypes.Goal_Member),
- (CustomizeData) null, TableLoadOption.None);
+ customizeData, TableLoadOption.None);
+ ((WorldLabelProvider) worldComposite.getXViewer().getLabelProvider()).setParentGoal((GoalArtifact) editor.getSma());
} catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE, ex);
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java index c898db1e612..5d9cea6529e 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/AtsNavigateViewItems.java @@ -37,8 +37,10 @@ import org.eclipse.osee.ats.util.DoesNotWorkItemAts; import org.eclipse.osee.ats.world.search.ActionableItemWorldSearchItem;
import org.eclipse.osee.ats.world.search.ArtifactTypeSearchItem;
import org.eclipse.osee.ats.world.search.ArtifactTypeWithInheritenceSearchItem;
+import org.eclipse.osee.ats.world.search.GoalSearchItem;
import org.eclipse.osee.ats.world.search.GroupWorldSearchItem;
import org.eclipse.osee.ats.world.search.MultipleHridSearchItem;
+import org.eclipse.osee.ats.world.search.MyFavoritesGoalsSearchItem;
import org.eclipse.osee.ats.world.search.MyFavoritesSearchItem;
import org.eclipse.osee.ats.world.search.MyGoalWorkflowItem;
import org.eclipse.osee.ats.world.search.MyReviewWorkflowItem;
@@ -121,36 +123,10 @@ public class AtsNavigateViewItems extends XNavigateViewItems { items.add(new SearchNavigateItem(null, new ActionableItemWorldSearchItem(null, "Actionable Item Search",
false, false, false)));
- XNavigateItem releaseItems = new XNavigateItem(null, "Versions", FrameworkImage.VERSION);
- new MassEditTeamVersionItem("Team Versions", releaseItems, (TeamDefinitionArtifact) null,
- FrameworkImage.VERSION);
- new SearchNavigateItem(releaseItems, new VersionTargetedForTeamSearchItem(null, null, false,
- LoadView.WorldEditor));
- new SearchNavigateItem(releaseItems, new NextVersionSearchItem(null, LoadView.WorldEditor));
- new ReleaseVersionItem(releaseItems, null);
- new CreateNewVersionItem(releaseItems, null);
- new GenerateVersionReportItem(releaseItems);
- new GenerateFullVersionReportItem(releaseItems);
- items.add(releaseItems);
-
+ createGoalsSection(items);
+ createVersionsSection(items);
addExtensionPointItems(items);
-
- XNavigateItem reviewItem = new XNavigateItem(null, "Reviews", AtsImage.REVIEW);
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Open " + AtsArtifactTypes.DecisionReview.getName() + "s", AtsArtifactTypes.DecisionReview, false,
- false, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Workflows Waiting " + AtsArtifactTypes.DecisionReview.getName() + "s",
- AtsArtifactTypes.DecisionReview, false, true, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Open " + AtsArtifactTypes.PeerToPeerReview.getName() + "s", AtsArtifactTypes.PeerToPeerReview,
- false, false, AtsImage.REVIEW));
- new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
- "Show Workflows Waiting " + AtsArtifactTypes.PeerToPeerReview.getName() + "s",
- AtsArtifactTypes.PeerToPeerReview, false, true, AtsImage.REVIEW));
- new NewPeerToPeerReviewItem(reviewItem);
- new GenerateReviewParticipationReport(reviewItem);
- items.add(reviewItem);
+ createReviewsSection(items);
XNavigateItem stateItems = new XNavigateItem(null, "States", AtsImage.STATE);
new SearchNavigateItem(stateItems, new StateWorldSearchItem());
@@ -248,6 +224,60 @@ public class AtsNavigateViewItems extends XNavigateViewItems { return items;
}
+ public void createReviewsSection(List<XNavigateItem> items) {
+ try {
+ XNavigateItem reviewItem = new XNavigateItem(null, "Reviews", AtsImage.REVIEW);
+ new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
+ "Show Open " + AtsArtifactTypes.DecisionReview.getName() + "s", AtsArtifactTypes.DecisionReview, false,
+ false, AtsImage.REVIEW));
+ new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
+ "Show Workflows Waiting " + AtsArtifactTypes.DecisionReview.getName() + "s",
+ AtsArtifactTypes.DecisionReview, false, true, AtsImage.REVIEW));
+ new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
+ "Show Open " + AtsArtifactTypes.PeerToPeerReview.getName() + "s", AtsArtifactTypes.PeerToPeerReview,
+ false, false, AtsImage.REVIEW));
+ new SearchNavigateItem(reviewItem, new ShowOpenWorkflowsByArtifactType(
+ "Show Workflows Waiting " + AtsArtifactTypes.PeerToPeerReview.getName() + "s",
+ AtsArtifactTypes.PeerToPeerReview, false, true, AtsImage.REVIEW));
+ new NewPeerToPeerReviewItem(reviewItem);
+ new GenerateReviewParticipationReport(reviewItem);
+ items.add(reviewItem);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE, "Can't create Goals section");
+ }
+ }
+
+ public void createVersionsSection(List<XNavigateItem> items) {
+ try {
+ XNavigateItem releaseItems = new XNavigateItem(null, "Versions", FrameworkImage.VERSION);
+ new MassEditTeamVersionItem("Team Versions", releaseItems, (TeamDefinitionArtifact) null,
+ FrameworkImage.VERSION);
+ new SearchNavigateItem(releaseItems, new VersionTargetedForTeamSearchItem(null, null, false,
+ LoadView.WorldEditor));
+ new SearchNavigateItem(releaseItems, new NextVersionSearchItem(null, LoadView.WorldEditor));
+ new ReleaseVersionItem(releaseItems, null);
+ new CreateNewVersionItem(releaseItems, null);
+ new GenerateVersionReportItem(releaseItems);
+ new GenerateFullVersionReportItem(releaseItems);
+ items.add(releaseItems);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE, "Can't create Goals section");
+ }
+ }
+
+ public void createGoalsSection(List<XNavigateItem> items) {
+ try {
+ XNavigateItem goalItem = new XNavigateItem(null, "Goals", AtsImage.GOAL);
+ new SearchNavigateItem(goalItem, new GoalSearchItem("InWork Goals", new ArrayList<TeamDefinitionArtifact>(),
+ false, null));
+ new SearchNavigateItem(goalItem, new GoalSearchWorkflowSearchItem());
+ new SearchNavigateItem(goalItem, new MyFavoritesGoalsSearchItem("Favorites", UserManager.getUser()));
+ items.add(goalItem);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE, "Can't create Goals section");
+ }
+ }
+
public void addExtensionPointItems(List<XNavigateItem> items) {
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.ats.AtsNavigateItem");
if (point == null) {
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java new file mode 100644 index 00000000000..fd2a4b7a207 --- /dev/null +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/GoalSearchWorkflowSearchItem.java @@ -0,0 +1,179 @@ +/*******************************************************************************
+ * 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.navigate;
+
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.osee.ats.AtsImage;
+import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
+import org.eclipse.osee.ats.artifact.VersionArtifact;
+import org.eclipse.osee.ats.internal.AtsPlugin;
+import org.eclipse.osee.ats.util.widgets.XHyperlabelTeamDefinitionSelection;
+import org.eclipse.osee.ats.world.WorldEditor;
+import org.eclipse.osee.ats.world.WorldEditorParameterSearchItem;
+import org.eclipse.osee.ats.world.search.GoalSearchItem;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.User;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.ui.plugin.util.Result;
+import org.eclipse.osee.framework.ui.skynet.widgets.XCheckBox;
+import org.eclipse.osee.framework.ui.skynet.widgets.XMembersCombo;
+import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener;
+import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayout;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
+import org.eclipse.osee.framework.ui.skynet.widgets.workflow.IDynamicWidgetLayoutListener;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class GoalSearchWorkflowSearchItem extends WorldEditorParameterSearchItem {
+
+ private XHyperlabelTeamDefinitionSelection teamCombo = null;
+ private XMembersCombo assigneeCombo;
+ private XCheckBox includeCompletedCancelledCheckbox;
+
+ public GoalSearchWorkflowSearchItem(String name) throws OseeArgumentException {
+ super(name, AtsImage.GOAL);
+ }
+
+ public GoalSearchWorkflowSearchItem() throws OseeArgumentException {
+ this("Goal Search");
+ }
+
+ public GoalSearchWorkflowSearchItem(GoalSearchWorkflowSearchItem goalWorkflowSearchItem) throws OseeArgumentException {
+ super(goalWorkflowSearchItem, AtsImage.GOAL);
+ }
+
+ @Override
+ public GoalSearchWorkflowSearchItem copy() throws OseeArgumentException {
+ return new GoalSearchWorkflowSearchItem(this);
+ }
+
+ public GoalSearchWorkflowSearchItem copyProvider() throws OseeArgumentException {
+ return new GoalSearchWorkflowSearchItem(this);
+ }
+
+ @Override
+ public String getParameterXWidgetXml() throws OseeCoreException {
+ return "<xWidgets>" +
+ //
+ "<XWidget xwidgetType=\"XHyperlabelTeamDefinitionSelection\" displayName=\"Team Definitions(s)\" horizontalLabel=\"true\"/>" +
+ //
+ "<XWidget xwidgetType=\"XMembersCombo\" displayName=\"Assignee\" horizontalLabel=\"true\"/>" +
+ //
+ "<XWidget xwidgetType=\"XCheckBox\" displayName=\"Include Completed/Cancelled\" defaultValue=\"false\" labelAfter=\"true\" horizontalLabel=\"true\"/>" +
+ //
+ "</xWidgets>";
+ }
+
+ @Override
+ public Collection<? extends Artifact> performSearchGetResults(SearchType searchType) throws OseeCoreException {
+ return new GoalSearchItem("", getSelectedTeamDefinitions(), isIncludeCompletedCancelledCheckbox(),
+ getSelectedUser()).performSearchGetResults(false);
+ }
+
+ @Override
+ public String getSelectedName(SearchType searchType) throws OseeCoreException {
+ StringBuffer sb = new StringBuffer();
+ Collection<TeamDefinitionArtifact> teamDefs = getSelectedTeamDefinitions();
+ if (teamDefs.size() > 0) {
+ sb.append(" - Teams: " + org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", teamDefs));
+ }
+ if (getSelectedUser() != null) {
+ sb.append(" - Assignee: " + getSelectedUser());
+ }
+ if (isIncludeCompletedCancelledCheckbox()) {
+ sb.append(" - Include Completed/Cancelled");
+ }
+ return Strings.truncate("Goals" + sb.toString(), WorldEditor.TITLE_MAX_LENGTH, true);
+ }
+
+ @Override
+ public void widgetCreated(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ if (widget.getLabel().equals("Assignee")) {
+ assigneeCombo = (XMembersCombo) widget;
+ }
+ if (widget.getLabel().equals("Include Completed/Cancelled")) {
+ includeCompletedCancelledCheckbox = (XCheckBox) widget;
+ }
+ if (widget.getLabel().equals("Team Definitions(s)")) {
+ teamCombo = (XHyperlabelTeamDefinitionSelection) widget;
+ }
+ }
+
+ private User getSelectedUser() {
+ if (assigneeCombo == null) return null;
+ return assigneeCombo.getUser();
+ }
+
+ public void setSelectedUser(User user) {
+ if (assigneeCombo != null) assigneeCombo.set(user);
+ }
+
+ private boolean isIncludeCompletedCancelledCheckbox() {
+ if (includeCompletedCancelledCheckbox == null) return false;
+ return includeCompletedCancelledCheckbox.isSelected();
+ }
+
+ public void includeCompletedCancelledCheckbox(boolean selected) {
+ if (includeCompletedCancelledCheckbox != null) includeCompletedCancelledCheckbox.set(selected);
+ }
+
+ public Collection<TeamDefinitionArtifact> getSelectedTeamDefinitions() throws OseeCoreException {
+ if (teamCombo == null) return java.util.Collections.emptyList();
+ return teamCombo.getSelectedTeamDefintions();
+ }
+
+ public void setSelectedTeamDefinitions(Collection<TeamDefinitionArtifact> selectedTeamDefs) {
+ if (teamCombo != null) {
+ teamCombo.setSelectedTeamDefs(selectedTeamDefs);
+ teamCombo.notifyXModifiedListeners();
+ }
+ }
+
+ @Override
+ public void createXWidgetLayoutData(DynamicXWidgetLayoutData layoutData, XWidget widget, FormToolkit toolkit, Artifact art, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ @Override
+ public void widgetCreating(XWidget widget, FormToolkit toolkit, Artifact art, DynamicXWidgetLayout dynamicXWidgetLayout, XModifiedListener modListener, boolean isEditable) throws OseeCoreException {
+ }
+
+ @Override
+ public Result isParameterSelectionValid() throws OseeCoreException {
+ try {
+ User user = getSelectedUser();
+ boolean includeCompleted = isIncludeCompletedCancelledCheckbox();
+ if (user != null && includeCompleted) {
+ return new Result("Assignee and Include Completed are not compatible selections.");
+ }
+ return Result.TrueResult;
+ } catch (Exception ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ return new Result("Exception: " + ex.getLocalizedMessage());
+ }
+ }
+
+ @Override
+ public IDynamicWidgetLayoutListener getDynamicWidgetLayoutListener() {
+ return null;
+ }
+
+ public VersionArtifact getTargetedVersionArtifact() throws OseeCoreException {
+ return null;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/SearchNavigateItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/SearchNavigateItem.java index bbe42c40a5b..8af5fa997dd 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/SearchNavigateItem.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/navigate/SearchNavigateItem.java @@ -25,11 +25,6 @@ public class SearchNavigateItem extends XNavigateItem { private final WorldSearchItem wsi; - /** - * @param parent - * @param wsi - * @throws OseeCoreException - */ public SearchNavigateItem(XNavigateItem parent, WorldSearchItem wsi) throws OseeCoreException { super(parent, wsi.getName(), AtsImage.GLOBE); this.wsi = wsi; diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/PromptChangeUtil.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/PromptChangeUtil.java index 21616f20075..9932cbe109c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/PromptChangeUtil.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/PromptChangeUtil.java @@ -5,6 +5,7 @@ */
package org.eclipse.osee.ats.util;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
@@ -19,6 +20,7 @@ import org.eclipse.osee.ats.artifact.VersionArtifact.VersionReleaseType; import org.eclipse.osee.ats.internal.AtsPlugin;
import org.eclipse.osee.ats.util.widgets.dialog.AtsPriorityDialog;
import org.eclipse.osee.ats.util.widgets.dialog.VersionListDialog;
+import org.eclipse.osee.ats.world.search.GoalSearchItem;
import org.eclipse.osee.framework.core.data.SystemUser;
import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
@@ -33,6 +35,7 @@ import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactCheckTreeDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ChangeTypeDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.DateSelectionDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.UserCheckTreeDialog;
@@ -70,6 +73,32 @@ public class PromptChangeUtil { return false;
}
+ public static boolean promptChangeGoals(StateMachineArtifact sma, boolean persist) throws OseeCoreException {
+ return promptChangeGoals(Arrays.asList(sma), persist);
+ }
+
+ public static boolean promptChangeGoals(final Collection<? extends StateMachineArtifact> smas, boolean persist) throws OseeCoreException {
+ Set<Artifact> selected = new HashSet<Artifact>();
+ for (StateMachineArtifact sma : smas) {
+ selected.addAll(sma.getRelatedArtifacts(AtsRelationTypes.Goal_Goal));
+ }
+ Collection<Artifact> allGoals =
+ (new GoalSearchItem("", new ArrayList<TeamDefinitionArtifact>(), false, null)).performSearchGetResults();
+ ArtifactCheckTreeDialog dialog = new ArtifactCheckTreeDialog(allGoals);
+ dialog.setTitle("Select Goals");
+ dialog.setInitialSelections(selected.toArray());
+ if (dialog.open() == 0) {
+ SkynetTransaction transaction = new SkynetTransaction(AtsUtil.getAtsBranch(), "Set Goals");
+ for (StateMachineArtifact sma : smas) {
+ sma.setRelations(AtsRelationTypes.Goal_Goal, dialog.getSelection());
+ sma.persist(transaction);
+ }
+ transaction.execute();
+ return true;
+ }
+ return false;
+ }
+
public static boolean promptChangeAssignees(StateMachineArtifact sma, boolean persist) throws OseeCoreException {
return promptChangeAssignees(Arrays.asList(sma), persist);
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldLabelProvider.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldLabelProvider.java index 90e0cbda9eb..dbc2d15067a 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldLabelProvider.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldLabelProvider.java @@ -15,6 +15,7 @@ import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.nebula.widgets.xviewer.XViewerCells;
import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
import org.eclipse.nebula.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.osee.ats.artifact.GoalArtifact;
import org.eclipse.osee.ats.artifact.TaskArtifact;
import org.eclipse.osee.ats.internal.AtsPlugin;
import org.eclipse.osee.ats.util.AtsUtil;
@@ -32,12 +33,13 @@ import org.eclipse.swt.widgets.Display; public class WorldLabelProvider extends XViewerLabelProvider {
- private final WorldXViewer treeViewer;
+ private final WorldXViewer worldXViewer;
protected Font font;
+ private GoalArtifact parentGoalArtifact;
- public WorldLabelProvider(WorldXViewer treeViewer) {
- super(treeViewer);
- this.treeViewer = treeViewer;
+ public WorldLabelProvider(WorldXViewer worldXViewer) {
+ super(worldXViewer);
+ this.worldXViewer = worldXViewer;
}
@Override
@@ -250,6 +252,9 @@ public class WorldLabelProvider extends XViewerLabelProvider { return wva.getWorldViewGoalOrderVote();
}
if (xCol.equals(WorldXViewerFactory.Goal_Order)) {
+ if (parentGoalArtifact != null) {
+ return GoalArtifact.getGoalOrder(parentGoalArtifact, art);
+ }
return wva.getWorldViewGoalOrder();
}
if (xCol.equals(WorldXViewerFactory.Category_Col)) {
@@ -370,8 +375,15 @@ public class WorldLabelProvider extends XViewerLabelProvider { public void removeListener(ILabelProviderListener listener) {
}
- public WorldXViewer getTreeViewer() {
- return treeViewer;
+ public WorldXViewer getWorldXViewer() {
+ return worldXViewer;
}
+ /**
+ * Value will be set, and changed, as label provider refreshes its elements. This is so the goal members can tell
+ * which parent they belong to.
+ */
+ public void setParentGoal(GoalArtifact parentGoalArtifact) {
+ this.parentGoalArtifact = parentGoalArtifact;
+ }
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewer.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewer.java index 0da13b091cc..1c1ad42133d 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewer.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldXViewer.java @@ -78,10 +78,12 @@ import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPromptChange; import org.eclipse.osee.framework.ui.skynet.results.XResultData;
import org.eclipse.osee.framework.ui.skynet.widgets.xviewer.skynet.column.XViewerAttributeColumn;
import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.Widgets;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPage;
@@ -460,6 +462,20 @@ public class WorldXViewer extends XViewer implements ISelectedAtsArtifacts, IArt } catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
+ } else if (treeColumn.getData().equals(WorldXViewerFactory.Goals_Col)) {
+ try {
+ Set<StateMachineArtifact> smas = new HashSet<StateMachineArtifact>();
+ for (TreeItem item : treeItems) {
+ Artifact art = (Artifact) item.getData();
+ if (art instanceof StateMachineArtifact) {
+ smas.add((StateMachineArtifact) art);
+ }
+ }
+ PromptChangeUtil.promptChangeGoals(smas, true);
+ return;
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
} else if (treeColumn.getData().equals(WorldXViewerFactory.Points_Col)) {
try {
Set<TeamWorkFlowArtifact> smas = new HashSet<TeamWorkFlowArtifact>();
@@ -709,6 +725,18 @@ public class WorldXViewer extends XViewer implements ISelectedAtsArtifacts, IArt return arts;
}
+ public ArrayList<GoalArtifact> getLoadedGoals() {
+ ArrayList<GoalArtifact> arts = new ArrayList<GoalArtifact>();
+ if (getRoot() != null) {
+ for (Object artifact : (Collection<?>) getRoot()) {
+ if (artifact instanceof GoalArtifact) {
+ arts.add((GoalArtifact) artifact);
+ }
+ }
+ }
+ return arts;
+ }
+
public void clear(boolean forcePend) {
((WorldContentProvider) getContentProvider()).clear(forcePend);
}
@@ -943,6 +971,8 @@ public class WorldXViewer extends XViewer implements ISelectedAtsArtifacts, IArt modified = PromptChangeUtil.promptChangeEstimatedReleaseDate(sma);
} else if (xCol.equals(WorldXViewerFactory.Groups_Col)) {
modified = PromptChangeUtil.promptChangeGroups(sma, persist);
+ } else if (xCol.equals(WorldXViewerFactory.Goals_Col)) {
+ modified = PromptChangeUtil.promptChangeGoals(sma, persist);
} else if (xCol.equals(WorldXViewerFactory.Estimated_Completion_Date_Col)) {
modified =
PromptChangeUtil.promptChangeDate(sma, ATSAttributes.ESTIMATED_COMPLETION_DATE_ATTRIBUTE, persist);
@@ -984,8 +1014,11 @@ public class WorldXViewer extends XViewer implements ISelectedAtsArtifacts, IArt } else if (xCol.equals(WorldXViewerFactory.Priority_Col)) {
modified = PromptChangeUtil.promptChangePriority(sma, persist);
} else if (xCol.equals(WorldXViewerFactory.Goal_Order)) {
- GoalArtifact.promptChangeGoalOrder((Artifact) treeItem.getData());
- update(useArt, null);
+ GoalArtifact changedGoal = GoalArtifact.promptChangeGoalOrder((Artifact) treeItem.getData());
+ if (changedGoal != null) {
+ refresh(changedGoal);
+ update(useArt, null);
+ }
return false;
}
if (modified) {
@@ -1033,4 +1066,17 @@ public class WorldXViewer extends XViewer implements ISelectedAtsArtifacts, IArt }
+ /**
+ * store off parent goalItem in label provider so it can determine parent when providing order of goal member
+ */
+ protected void doUpdateItem(Item item, Object element) {
+ if (item instanceof TreeItem) {
+ TreeItem treeItem = (TreeItem) item;
+ if (Widgets.isAccessible(treeItem) && Widgets.isAccessible(treeItem.getParentItem()) && treeItem.getParentItem().getData() instanceof GoalArtifact) {
+ ((WorldLabelProvider) getLabelProvider()).setParentGoal((GoalArtifact) treeItem.getParentItem().getData());
+ }
+ }
+ super.doUpdateItem(item, element);
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/GoalSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/GoalSearchItem.java new file mode 100644 index 00000000000..47791c294b8 --- /dev/null +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/GoalSearchItem.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * 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.world.search; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.ATSAttributes; +import org.eclipse.osee.ats.artifact.AtsAttributeTypes; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.artifact.StateMachineArtifact; +import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact; +import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact.DefaultTeamState; +import org.eclipse.osee.ats.config.AtsCacheManager; +import org.eclipse.osee.ats.util.AtsUtil; +import org.eclipse.osee.framework.core.exception.OseeArgumentException; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.AbstractArtifactSearchCriteria; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.artifact.search.AttributeCriteria; +import org.eclipse.osee.framework.skynet.core.artifact.search.Operator; +import org.eclipse.osee.framework.skynet.core.utility.Artifacts; + +/** + * @author Donald G. Dunne + */ +public class GoalSearchItem extends WorldUISearchItem { + + private Collection<TeamDefinitionArtifact> teamDefs; + private boolean showFinished; + private final Collection<String> teamDefNames; + private final User userArt; + + public GoalSearchItem(String displayName, String[] teamDefNames, boolean showFinished, User userArt) { + super(displayName, AtsImage.GOAL); + this.userArt = userArt; + if (teamDefNames != null) { + this.teamDefNames = Arrays.asList(teamDefNames); + } else { + this.teamDefNames = null; + } + this.showFinished = showFinished; + } + + public GoalSearchItem(String displayName, Collection<TeamDefinitionArtifact> teamDefs, boolean showFinished, User userArt) { + super(displayName, AtsImage.GOAL); + this.userArt = userArt; + this.teamDefNames = null; + this.teamDefs = teamDefs; + this.showFinished = showFinished; + } + + public GoalSearchItem(GoalSearchItem goalWorldUISearchItem) { + super(goalWorldUISearchItem, AtsImage.GOAL); + this.userArt = null; + this.teamDefNames = goalWorldUISearchItem.teamDefNames; + this.teamDefs = goalWorldUISearchItem.teamDefs; + this.showFinished = goalWorldUISearchItem.showFinished; + } + + public String getProductSearchName() { + if (teamDefNames != null && teamDefNames.size() > 0) { + return String.valueOf(teamDefNames); + } else if (teamDefs != null && teamDefs.size() > 0) { + return String.valueOf(Artifacts.artNames(teamDefs)); + } + return ""; + } + + @Override + public String getSelectedName(SearchType searchType) throws OseeCoreException { + String prodName = getProductSearchName(); + if (Strings.isValid(prodName)) return String.format("%s - %s", super.getSelectedName(searchType), prodName); + return super.getSelectedName(searchType); + } + + /** + * Loads all team definitions if specified by name versus by team definition class + * + * @throws OseeArgumentException + */ + public void getTeamDefs() throws OseeCoreException { + if (teamDefNames != null && teamDefs == null) { + teamDefs = new HashSet<TeamDefinitionArtifact>(); + for (String teamDefName : teamDefNames) { + TeamDefinitionArtifact aia = + (TeamDefinitionArtifact) AtsCacheManager.getSoleArtifactByName( + ArtifactTypeManager.getType(TeamDefinitionArtifact.ARTIFACT_NAME), teamDefName); + if (aia != null) { + teamDefs.add(aia); + } + } + } + } + + @Override + public Collection<Artifact> performSearch(SearchType searchType) throws OseeCoreException { + getTeamDefs(); + Set<String> teamDefinitionGuids = new HashSet<String>(teamDefs != null ? teamDefs.size() : 0); + for (TeamDefinitionArtifact teamDef : teamDefs) { + teamDefinitionGuids.add(teamDef.getGuid()); + } + List<AbstractArtifactSearchCriteria> criteria = new ArrayList<AbstractArtifactSearchCriteria>(); + if (teamDefinitionGuids.isEmpty()) { + criteria.add(new AttributeCriteria(AtsAttributeTypes.TeamDefinition)); + } else { + criteria.add(new AttributeCriteria(AtsAttributeTypes.TeamDefinition, teamDefinitionGuids)); + } + + if (!showFinished) { + List<String> cancelOrComplete = new ArrayList<String>(2); + cancelOrComplete.add(DefaultTeamState.Cancelled.name() + ";;;"); + cancelOrComplete.add(DefaultTeamState.Completed.name() + ";;;"); + criteria.add(new AttributeCriteria(ATSAttributes.CURRENT_STATE_ATTRIBUTE.getStoreName(), cancelOrComplete, + Operator.NOT_EQUAL)); + } + + List<Artifact> artifacts = ArtifactQuery.getArtifactListFromCriteria(AtsUtil.getAtsBranch(), 1000, criteria); + + Set<Artifact> resultGoalArtifacts = new HashSet<Artifact>(); + for (Artifact art : artifacts) { + + for (Artifact goalArt : GoalArtifact.getGoals(art, true)) { + StateMachineArtifact sma = (StateMachineArtifact) goalArt; + // don't include if userArt specified and userArt not assignee + if (userArt != null && !sma.getStateMgr().getAssignees().contains(userArt)) { + continue; + } + if (!showFinished && sma.isCancelledOrCompleted()) { + continue; + } + resultGoalArtifacts.add(goalArt); + } + } + return resultGoalArtifacts; + + } + + public void setShowFinished(boolean showFinished) { + this.showFinished = showFinished; + } + + @Override + public WorldUISearchItem copy() { + return new GoalSearchItem(this); + } + +} diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MyFavoritesGoalsSearchItem.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MyFavoritesGoalsSearchItem.java new file mode 100644 index 00000000000..3520fc2170d --- /dev/null +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/search/MyFavoritesGoalsSearchItem.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * 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.world.search; + +import java.util.Collection; +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.artifact.GoalArtifact; +import org.eclipse.osee.ats.util.AtsRelationTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.skynet.core.User; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; + +/** + * @author Donald G. Dunne + */ +public class MyFavoritesGoalsSearchItem extends UserSearchItem { + + public MyFavoritesGoalsSearchItem(String name) { + this(name, null); + } + + public MyFavoritesGoalsSearchItem() { + this("Favorite Goals", null); + } + + public MyFavoritesGoalsSearchItem(String name, User user) { + super(name, user, AtsImage.GOAL); + } + + public MyFavoritesGoalsSearchItem(MyFavoritesGoalsSearchItem myFavoritesSearchItem) { + super(myFavoritesSearchItem, AtsImage.GOAL); + } + + @Override + protected Collection<Artifact> searchIt(User user) throws OseeCoreException { + return Collections.castAll(user.getRelatedArtifactsOfType(AtsRelationTypes.FavoriteUser_Artifact, + GoalArtifact.class)); + } + + @Override + public void performUI(SearchType searchType) throws OseeCoreException { + if (user != null) return; + super.performUI(searchType); + } + + @Override + public WorldUISearchItem copy() { + return new MyFavoritesGoalsSearchItem(this); + } + +} |