blob: 2ff177708158a2d0eda1d6fecaeb45a082e0d947 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2004, 2007 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.ats.ide.editor.tab.workflow.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.team.IAtsTeamDefinition;
import org.eclipse.osee.ats.api.user.AtsUser;
import org.eclipse.osee.ats.api.util.AtsImage;
import org.eclipse.osee.ats.api.workdef.IAtsCompositeLayoutItem;
import org.eclipse.osee.ats.api.workdef.IAtsDecisionReviewDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsDecisionReviewOption;
import org.eclipse.osee.ats.api.workdef.IAtsLayoutItem;
import org.eclipse.osee.ats.api.workdef.IAtsPeerReviewDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsWidgetDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition;
import org.eclipse.osee.ats.api.workdef.WidgetOption;
import org.eclipse.osee.ats.api.workdef.model.HeaderDefinition;
import org.eclipse.osee.ats.api.workflow.hooks.IAtsWorkItemHook;
import org.eclipse.osee.ats.ide.editor.WorkflowEditor;
import org.eclipse.osee.ats.ide.internal.Activator;
import org.eclipse.osee.ats.ide.internal.AtsApiService;
import org.eclipse.osee.ats.ide.workdef.editor.WorkDefinitionViewer;
import org.eclipse.osee.ats.ide.workflow.AbstractWorkflowArtifact;
import org.eclipse.osee.ats.ide.workflow.WorkflowManager;
import org.eclipse.osee.ats.ide.workflow.teamwf.TeamWorkFlowArtifact;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.type.OseeStateException;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.User;
import org.eclipse.osee.framework.ui.plugin.PluginUiImage;
import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager;
import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.osee.framework.ui.swt.Widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
/**
* @author Donald G. Dunne
*/
public class WfeOutlinePage extends ContentOutlinePage {
private WorkflowEditor workflowEditor;
private WorkDefinitionViewer workDefViewer;
private boolean isTeamWf;
@Override
public void createControl(Composite parent) {
super.createControl(parent);
Tree tree = getTreeViewer().getTree();
tree.setLayout(new FillLayout(SWT.VERTICAL));
getTreeViewer().setContentProvider(new InternalContentProvider());
getTreeViewer().setLabelProvider(new InternalLabelProvider());
if (workflowEditor != null) {
setInput(workflowEditor);
} else if (workDefViewer != null) {
setInput(workDefViewer);
} else {
setInput("No Imput Provided");
}
getSite().getActionBars().getToolBarManager().add(
new Action("Refresh", ImageManager.getImageDescriptor(PluginUiImage.REFRESH)) {
@Override
public void run() {
refresh();
}
});
getSite().getActionBars().getToolBarManager().update(true);
}
public void setInput(Object input) {
if (input instanceof WorkflowEditor) {
this.workflowEditor = (WorkflowEditor) input;
if (getTreeViewer() != null) {
if (workflowEditor != null && getTreeViewer() != null && Widgets.isAccessible(getTreeViewer().getTree())) {
getTreeViewer().setInput(workflowEditor);
try {
AbstractWorkflowArtifact awa = workflowEditor.getWorkItem();
if (awa != null) {
IAtsStateDefinition stateDef = WorkflowManager.getCurrentAtsWorkPage(awa).getStateDefinition();
StructuredSelection newSelection = new StructuredSelection(Arrays.asList(stateDef));
getTreeViewer().expandToLevel(awa, 2);
getTreeViewer().expandToLevel(stateDef, 1);
getTreeViewer().setSelection(newSelection);
}
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
}
} else if (input instanceof WorkDefinitionViewer) {
if (getTreeViewer() != null) {
workDefViewer = (WorkDefinitionViewer) input;
getTreeViewer().setInput(workDefViewer);
getTreeViewer().expandToLevel(workDefViewer, 2);
}
}
isTeamWf =
(workflowEditor != null && workflowEditor.getWorkItem() != null && workflowEditor.getWorkItem().isOfType(
AtsArtifactTypes.TeamWorkflow)) || //
(workDefViewer != null && workDefViewer.getWorkDef() != null && workDefViewer.getWorkDef().getName().contains(
"_Team_"));
}
public void refresh() {
TreeViewer viewer = getTreeViewer();
if (viewer != null && Widgets.isAccessible(viewer.getTree())) {
viewer.refresh();
}
}
private class InternalLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
if (element instanceof WorkflowEditor) {
return ((WorkflowEditor) element).getTitle();
} else if (element instanceof WorkDefinitionViewer) {
return ((WorkDefinitionViewer) element).getName();
}
return String.valueOf(element);
}
@Override
public Image getImage(Object element) {
if (element instanceof WorkDefinitionViewer) {
return ImageManager.getImage(AtsImage.WORKFLOW);
} else if (element instanceof WorkflowEditor) {
return ((WorkflowEditor) element).getTitleImage();
} else if (element instanceof AbstractWorkflowArtifact) {
return ArtifactImageManager.getImage((AbstractWorkflowArtifact) element);
} else if (element instanceof IAtsStateDefinition) {
return ImageManager.getImage(AtsImage.STATE_DEFINITION);
} else if (element instanceof IAtsWorkItemHook || element instanceof WrappedStateItems) {
return ImageManager.getImage(AtsImage.STATE_ITEM);
} else if (element instanceof IAtsWorkDefinition) {
return ImageManager.getImage(AtsImage.WORKFLOW);
} else if (element instanceof IAtsWidgetDefinition) {
return ImageManager.getImage(FrameworkImage.GEAR);
} else if (element instanceof IAtsCompositeLayoutItem || element instanceof WrappedLayout) {
return ImageManager.getImage(AtsImage.COMPOSITE_STATE_ITEM);
} else if (element instanceof String || element instanceof WidgetOption || element instanceof WrappedPercentWeight) {
return ImageManager.getImage(AtsImage.RIGHT_ARROW_SM);
} else if (element instanceof WrappedStates || element instanceof WrappedTransitions) {
return ImageManager.getImage(AtsImage.TRANSITION);
} else if (element instanceof WrappedRules || element instanceof RuleAndLocation) {
return ImageManager.getImage(FrameworkImage.RULE);
} else if (element instanceof User) {
return ImageManager.getImage(FrameworkImage.USER);
} else if (element instanceof WrappedPeerReviews || element instanceof IAtsPeerReviewDefinition) {
return ImageManager.getImage(AtsImage.PEER_REVIEW);
} else if (element instanceof WrappedDecisionReviews || element instanceof IAtsDecisionReviewDefinition) {
return ImageManager.getImage(AtsImage.DECISION_REVIEW);
} else if (element instanceof IAtsDecisionReviewOption) {
return ImageManager.getImage(FrameworkImage.QUESTION);
} else if (element instanceof HeaderDefinition) {
return ImageManager.getImage(AtsImage.WORKFLOW_DEFINITION);
}
return null;
}
}
private class InternalContentProvider implements ITreeContentProvider {
@Override
public void dispose() {
// do nothing
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// do nothing
}
@Override
public Object[] getChildren(Object element) {
List<Object> items = new ArrayList<>();
if (element instanceof WorkDefinitionViewer) {
add(items, ((WorkDefinitionViewer) element).getWorkDef());
} else if (element instanceof WorkflowEditor) {
add(items, ((WorkflowEditor) element).getWorkItem());
items.add(new WrappedStateItems(AtsApiService.get().getWorkItemService().getWorkItemHooks()));
} else if (element instanceof AbstractWorkflowArtifact) {
add(items, ((AbstractWorkflowArtifact) element).getWorkDefinition());
} else if (element instanceof WrappedLayout) {
items.addAll(((WrappedLayout) element).getStateItems());
} else if (element instanceof WrappedPercentWeight) {
getChildrenFromWrappedPercentDefinition((WrappedPercentWeight) element, items);
} else if (element instanceof IAtsWorkDefinition) {
getChildrenFromWorkDefinition((IAtsWorkDefinition) element, items);
} else if (element instanceof IAtsStateDefinition) {
getChildrenFromStateDefinition(element, items);
} else if (element instanceof IAtsCompositeLayoutItem) {
items.addAll(((IAtsCompositeLayoutItem) element).getaLayoutItems());
} else if (element instanceof User) {
items.add("Assignee: " + ((User) element).getName());
} else if (element instanceof WrappedStateItems) {
items.addAll(((WrappedStateItems) element).getStateItems());
} else if (element instanceof IAtsWorkItemHook) {
items.add("Description: " + ((IAtsWorkItemHook) element).getDescription());
items.add("Full Name: " + ((IAtsWorkItemHook) element).getFullName());
} else if (element instanceof WrappedTransitions) {
items.addAll(((WrappedTransitions) element).getTransitions());
} else if (element instanceof IAtsDecisionReviewDefinition) {
getChildrenFromDecisionReviewDefinition(element, items);
} else if (element instanceof IAtsPeerReviewDefinition) {
getChildrenFromPeerReviewDefinition(element, items);
} else if (element instanceof IAtsDecisionReviewOption) {
getUsersFromDecisionReviewOpt((IAtsDecisionReviewOption) element, items);
} else if (element instanceof WrappedDecisionReviews) {
items.addAll(((WrappedDecisionReviews) element).getDecisionReviews());
} else if (element instanceof WrappedPeerReviews) {
items.addAll(((WrappedPeerReviews) element).getPeerReviews());
} else if (element instanceof WrappedRules) {
items.addAll(((WrappedRules) element).getRuleAndLocations());
} else if (element instanceof IAtsWidgetDefinition) {
getChildrenFromWidgetDefinition(element, items);
} else if (element instanceof String) {
items.add(element);
} else if (element instanceof WrappedStates) {
items.addAll(((WrappedStates) element).getStates());
} else if (element instanceof HeaderDefinition) {
getChildrentFromHeaderDefinition((HeaderDefinition) element, items);
}
return items.toArray(new Object[items.size()]);
}
private void add(Collection<Object> items, Object toAdd) {
if (toAdd != null) {
items.add(toAdd);
}
}
@Override
public Object getParent(Object element) {
if (element instanceof AbstractWorkflowArtifact) {
return workflowEditor;
} else if (element instanceof IAtsWorkDefinition) {
return workflowEditor != null ? workflowEditor : workDefViewer;
} else if (element instanceof IAtsStateDefinition) {
return ((IAtsStateDefinition) element).getWorkDefinition();
} else if (element instanceof HeaderDefinition) {
return ((HeaderDefinition) element).getWorkDefinition();
} else if (element instanceof String) {
return workflowEditor != null ? workflowEditor : workDefViewer;
}
return null;
}
@Override
public boolean hasChildren(Object element) {
if (element instanceof String) {
return false;
} else if (element instanceof AbstractWorkflowArtifact) {
return true;
} else if (element instanceof IAtsWorkDefinition) {
return true;
} else if (element instanceof IAtsStateDefinition) {
return true;
} else if (element instanceof IAtsCompositeLayoutItem) {
return true;
} else if (element instanceof IAtsWorkItemHook) {
return true;
} else if (element instanceof IAtsWidgetDefinition) {
return true;
} else if (element instanceof IAtsPeerReviewDefinition) {
return true;
} else if (element instanceof IAtsDecisionReviewDefinition) {
return true;
} else if (element instanceof IAtsDecisionReviewOption) {
return !((IAtsDecisionReviewOption) element).getUserIds().isEmpty();
} else if (element instanceof WrappedTransitions) {
return true;
} else if (element instanceof WrappedPercentWeight) {
try {
return AtsApiService.get().getWorkDefinitionService().isStateWeightingEnabled(
((WrappedPercentWeight) element).getWorkDef());
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
return false;
} else if (element instanceof WrappedLayout) {
return !((WrappedLayout) element).stateItems.isEmpty();
} else if (element instanceof WrappedDecisionReviews) {
return !((WrappedDecisionReviews) element).decReviews.isEmpty();
} else if (element instanceof WrappedPeerReviews) {
return !((WrappedPeerReviews) element).decReviews.isEmpty();
} else if (element instanceof WrappedStateItems) {
return !((WrappedStateItems) element).workflowHooks.isEmpty();
} else if (element instanceof WrappedStates) {
if (((WrappedStates) element).states != null) {
return !((WrappedStates) element).states.isEmpty();
}
} else if (element instanceof RuleAndLocation) {
return false;
} else if (element instanceof WrappedRules) {
return !((WrappedRules) element).getRuleAndLocations().isEmpty();
} else if (element instanceof HeaderDefinition) {
return true;
}
return false;
}
private void getChildrenFromWrappedPercentDefinition(WrappedPercentWeight weightDef, List<Object> items) {
try {
for (IAtsStateDefinition stateDef : AtsApiService.get().getWorkDefinitionService().getStatesOrderedByOrdinal(
weightDef.getWorkDef())) {
items.add(String.format("State [%s]: %d", stateDef.getName(), stateDef.getStateWeight()));
}
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
}
private void getChildrenFromWidgetDefinition(Object element, List<Object> items) {
items.add("XWidget: " + ((IAtsWidgetDefinition) element).getXWidgetName());
if (((IAtsWidgetDefinition) element).getAttributeType() != null) {
items.add("Attribute Name: " + ((IAtsWidgetDefinition) element).getAttributeType().getName());
}
if (Strings.isValid(((IAtsWidgetDefinition) element).getDescription())) {
items.add("Description: " + ((IAtsWidgetDefinition) element).getDescription());
}
if (((IAtsWidgetDefinition) element).getHeight() > 0) {
items.add("Height: " + ((IAtsWidgetDefinition) element).getHeight());
}
if (((IAtsWidgetDefinition) element).getAttributeType() != null) {
items.add("Tooltip: " + ((IAtsWidgetDefinition) element).getAttributeType().getName());
}
if (!((IAtsWidgetDefinition) element).getOptions().getXOptions().isEmpty()) {
items.addAll(((IAtsWidgetDefinition) element).getOptions().getXOptions());
}
}
private void getChildrenFromPeerReviewDefinition(Object element, List<Object> items) {
if (Strings.isValid(((IAtsPeerReviewDefinition) element).getReviewTitle())) {
items.add("Title: " + ((IAtsPeerReviewDefinition) element).getReviewTitle());
}
if (Strings.isValid(((IAtsPeerReviewDefinition) element).getDescription())) {
items.add("Description: " + ((IAtsPeerReviewDefinition) element).getDescription());
}
if (Strings.isValid(((IAtsPeerReviewDefinition) element).getLocation())) {
items.add("Description: " + ((IAtsPeerReviewDefinition) element).getLocation());
}
items.add("On Event: " + ((IAtsPeerReviewDefinition) element).getStateEventType().name());
items.add("Related To State: " + ((IAtsPeerReviewDefinition) element).getRelatedToState());
items.add("Review Blocks: " + ((IAtsPeerReviewDefinition) element).getBlockingType().name());
for (String userId : ((IAtsPeerReviewDefinition) element).getAssignees()) {
try {
add(items, AtsApiService.get().getUserService().getUserByUserId(userId));
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
items.add(String.format("Exception loading user from id [%s] [%s]", userId, ex.getLocalizedMessage()));
}
}
}
private void getChildrenFromDecisionReviewDefinition(Object element, List<Object> items) {
if (Strings.isValid(((IAtsDecisionReviewDefinition) element).getReviewTitle())) {
items.add("Title: " + ((IAtsDecisionReviewDefinition) element).getReviewTitle());
}
if (Strings.isValid(((IAtsDecisionReviewDefinition) element).getDescription())) {
items.add("Description: " + ((IAtsDecisionReviewDefinition) element).getDescription());
}
items.add("On Event: " + ((IAtsDecisionReviewDefinition) element).getStateEventType().name());
items.add("Related To State: " + ((IAtsDecisionReviewDefinition) element).getRelatedToState());
items.add("Review Blocks: " + ((IAtsDecisionReviewDefinition) element).getBlockingType().name());
items.add(
"Auto Transition to Decision: " + ((IAtsDecisionReviewDefinition) element).isAutoTransitionToDecision());
for (String userId : ((IAtsDecisionReviewDefinition) element).getAssignees()) {
try {
add(items, AtsApiService.get().getUserService().getUserByUserId(userId));
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
items.add(String.format("Exception loading user from id [%s] [%s]", userId, ex.getLocalizedMessage()));
}
}
items.addAll(((IAtsDecisionReviewDefinition) element).getOptions());
}
private void getChildrenFromStateDefinition(Object element, List<Object> items) {
IAtsStateDefinition stateDef = (IAtsStateDefinition) element;
items.add("Ordinal: " + stateDef.getOrdinal());
if (Strings.isValid(stateDef.getDescription())) {
items.add("Description: " + stateDef.getDescription());
}
items.add(new WrappedLayout(stateDef.getLayoutItems()));
items.add(new WrappedRules(stateDef));
if (stateDef.getRecommendedPercentComplete() == null) {
items.add("Recommended Percent Complete: not set");
} else {
items.add("Recommended Percent Complete: " + stateDef.getRecommendedPercentComplete());
}
items.add("Color: " + (stateDef.getColor() == null ? "not set" : stateDef.getColor().toString()));
if (isTeamWf) {
items.add(new WrappedDecisionReviews(stateDef.getDecisionReviews()));
items.add(new WrappedPeerReviews(stateDef.getPeerReviews()));
}
items.add(new WrappedTransitions(stateDef));
}
private void getChildrentFromHeaderDefinition(HeaderDefinition headerDef, List<Object> items) {
try {
items.add("Show Metrics Header: " + headerDef.isShowMetricsHeader());
items.add("Show Work Package Header: " + headerDef.isShowWorkPackageHeader());
items.add("Show Sibling Links: " + headerDef.isShowSiblingLinks());
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
try {
items.add(new WrappedLayout(headerDef.getLayoutItems()));
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
private void getChildrenFromWorkDefinition(IAtsWorkDefinition workDef, List<Object> items) {
try {
items.add(workDef.getHeaderDef());
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
try {
items.addAll(AtsApiService.get().getWorkDefinitionService().getStatesOrderedByOrdinal(workDef));
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
items.add("Show State Metrics: " + workDef.isShowStateMetrics());
items.add(new WrappedPercentWeight(workDef));
}
private void getUsersFromDecisionReviewOpt(IAtsDecisionReviewOption revOpt, List<Object> items) {
for (String userId : revOpt.getUserIds()) {
try {
AtsUser user = AtsApiService.get().getUserService().getUserByUserId(userId);
add(items, user);
} catch (OseeCoreException ex) {
items.add(String.format("Erroring getting user by id [%s] : [%s]", userId, ex.getLocalizedMessage()));
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
for (String userName : revOpt.getUserNames()) {
try {
AtsUser user = AtsApiService.get().getUserService().getUserByName(userName);
add(items, user);
} catch (OseeCoreException ex) {
items.add(
String.format("Erroring getting user by name [%s] : [%s]", userName, ex.getLocalizedMessage()));
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
}
@Override
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
}
private class WrappedRules {
private final IAtsStateDefinition stateDef;
public WrappedRules(IAtsStateDefinition stateDef) {
this.stateDef = stateDef;
}
@Override
public String toString() {
return "Rules" + (getRuleAndLocations().isEmpty() ? " (Empty)" : "");
}
public Collection<RuleAndLocation> getRuleAndLocations() {
List<RuleAndLocation> result = new ArrayList<>();
// get rules from stateDef
for (String ruleDef : stateDef.getRules()) {
result.add(new RuleAndLocation(ruleDef, "State Definition"));
}
// add rules from Team Definition
if (workflowEditor != null && workflowEditor.getWfeInput().getArtifact().isOfType(
AtsArtifactTypes.TeamWorkflow)) {
try {
IAtsTeamDefinition teamDef =
((TeamWorkFlowArtifact) workflowEditor.getWfeInput().getArtifact()).getTeamDefinition();
for (String workRuleDef : AtsApiService.get().getTeamDefinitionService().getRules(teamDef)) {
String location = String.format("Team Definition [%s]", teamDef);
result.add(new RuleAndLocation(workRuleDef, location));
if (workRuleDef.startsWith("ats")) {
result.add(new RuleAndLocation(workRuleDef.replaceFirst("^ats", ""),
location + " translated from WorkRuleDefinition starting with ats"));
}
}
} catch (OseeCoreException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
return result;
}
}
private class RuleAndLocation {
private final String rule;
private final String location;
public RuleAndLocation(String rule, String location) {
this.rule = rule;
this.location = location;
}
@Override
public String toString() {
return String.format("%s [%s]", rule, location);
}
}
private class WrappedStates {
private final String name;
private final Collection<IAtsStateDefinition> states;
public WrappedStates(String name, Collection<IAtsStateDefinition> states) {
this.name = name;
this.states = states;
}
@Override
public String toString() {
if (states != null) {
return name + (states.isEmpty() ? " (Empty)" : "");
} else {
return name;
}
}
public Collection<IAtsStateDefinition> getStates() {
return states;
}
}
private class WrappedPercentWeight {
private final IAtsWorkDefinition workDef;
public WrappedPercentWeight(IAtsWorkDefinition workDef) {
this.workDef = workDef;
}
@Override
public String toString() {
try {
if (AtsApiService.get().getWorkDefinitionService().isStateWeightingEnabled(workDef)) {
return "Total Percent Weighting";
} else {
return "Total Percent Weighting: Single Percent";
}
} catch (OseeStateException ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
return "Total Percent Weighting: exception (see error log)";
}
public IAtsWorkDefinition getWorkDef() {
return workDef;
}
}
private class WrappedDecisionReviews {
private final Collection<IAtsDecisionReviewDefinition> decReviews;
public WrappedDecisionReviews(Collection<IAtsDecisionReviewDefinition> decReviews) {
this.decReviews = decReviews;
}
@Override
public String toString() {
return "Decision Reviews" + (decReviews.isEmpty() ? " (Empty)" : "");
}
public Collection<IAtsDecisionReviewDefinition> getDecisionReviews() {
return decReviews;
}
}
private class WrappedStateItems {
private final Collection<IAtsWorkItemHook> workflowHooks;
public WrappedStateItems(Collection<IAtsWorkItemHook> stateItems) {
this.workflowHooks = stateItems;
}
@Override
public String toString() {
return "Workflow Hooks" + (workflowHooks.isEmpty() ? " (Empty)" : "");
}
public Collection<IAtsWorkItemHook> getStateItems() {
return workflowHooks;
}
}
private class WrappedPeerReviews {
private final Collection<IAtsPeerReviewDefinition> decReviews;
public WrappedPeerReviews(Collection<IAtsPeerReviewDefinition> decReviews) {
this.decReviews = decReviews;
}
@Override
public String toString() {
return "Peer Reviews" + (decReviews.isEmpty() ? " (Empty)" : "");
}
public Collection<IAtsPeerReviewDefinition> getPeerReviews() {
return decReviews;
}
}
private class WrappedLayout {
private final Collection<IAtsLayoutItem> stateItems;
public WrappedLayout(Collection<IAtsLayoutItem> stateItems) {
this.stateItems = stateItems;
}
@Override
public String toString() {
return "Layout" + (stateItems.isEmpty() ? " (Empty)" : "");
}
public Collection<IAtsLayoutItem> getStateItems() {
return stateItems;
}
}
private class WrappedTransitions {
private final IAtsStateDefinition stateDef;
public WrappedTransitions(IAtsStateDefinition stateDef) {
this.stateDef = stateDef;
}
public Collection<Object> getTransitions() {
List<Object> items = new ArrayList<>();
if (stateDef.getToStates().isEmpty()) {
items.add(new WrappedStates("DefaultToState: None", null));
} else {
items.add(new WrappedStates("DefaultToState: " + stateDef.getToStates().iterator().next(), null));
}
items.add(new WrappedStates("ToStates", stateDef.getToStates()));
return items;
}
@Override
public String toString() {
return "Transitions" + (stateDef.getToStates().isEmpty() ? " (Empty)" : "");
}
}
public void setWorkDefViewer(WorkDefinitionViewer workDefViewer) {
this.workDefViewer = workDefViewer;
}
}