blob: e12c80a06f0eb9d3c827949d14f8a8c56a395b82 [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.workflow.hooks;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
import org.eclipse.osee.ats.api.review.DecisionReviewOption;
import org.eclipse.osee.ats.api.review.DecisionReviewOptions;
import org.eclipse.osee.ats.api.review.DecisionReviewState;
import org.eclipse.osee.ats.api.review.IAtsDecisionReview;
import org.eclipse.osee.ats.api.user.AtsUser;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workflow.hooks.IAtsTransitionHook;
import org.eclipse.osee.ats.ide.editor.WorkflowEditor;
import org.eclipse.osee.ats.ide.internal.AtsApiService;
import org.eclipse.osee.ats.ide.workflow.review.DecisionReviewArtifact;
import org.eclipse.osee.framework.core.util.Result;
import org.eclipse.osee.framework.jdk.core.type.Named;
import org.eclipse.osee.framework.jdk.core.type.OseeStateException;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.ui.skynet.widgets.XComboDam;
import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* Contributed through OSGI-INF as both workflow and transition hooks
*
* @author Donald G. Dunne
*/
public class AtsDecisionReviewDecisionWorkItemHookIde implements IAtsWorkItemHookIde, IAtsTransitionHook {
public String getName() {
return AtsDecisionReviewDecisionWorkItemHookIde.class.getSimpleName();
}
@Override
public String getDescription() {
return "Add decision options to Decision state based on prepare state's entries.";
}
@Override
public Result xWidgetCreating(XWidget xWidget, FormToolkit toolkit, IAtsStateDefinition stateDefinition, Artifact art, boolean isEditable) {
if (art.isOfType(AtsArtifactTypes.DecisionReview) && stateDefinition.getName().equals(
DecisionReviewState.Decision.getName())) {
if (xWidget == null) {
throw new OseeStateException("Can't retrieve decision review combo widget to set.");
}
if (xWidget.getLabel().equals(AtsAttributeTypes.Decision.getUnqualifiedName())) {
XComboDam decisionComboDam = (XComboDam) xWidget;
DecisionReviewOptions xDecOptions =
new DecisionReviewOptions((IAtsDecisionReview) art, AtsApiService.get());
decisionComboDam.setDataStrings(Named.getNamesArray(xDecOptions.getDecisionOptions()));
}
}
return Result.TrueResult;
}
@Override
public String getOverrideTransitionToStateName(IAtsWorkItem workItem) {
if (isApplicable(workItem)) {
WorkflowEditor editor = WorkflowEditor.getWorkflowEditor(workItem);
if (editor != null) {
if (editor.getWorkFlowTab().getHeader().getWfeTransitionHeader() == null) {
return null;
}
if (editor.getWorkFlowTab().getHeader().getWfeTransitionHeader().isSelected()) {
return null;
}
XWidget xWidget = editor.getWorkFlowTab().getCurrentStateSection().getPage().getLayoutData(
AtsAttributeTypes.Decision.getUnqualifiedName()).getXWidget();
XComboDam decisionComboDam = (XComboDam) xWidget;
DecisionReviewArtifact decArt = (DecisionReviewArtifact) workItem;
return getOverrideTransitionToStateName(decArt, decisionComboDam);
}
}
return null;
}
private boolean isApplicable(IAtsWorkItem workItem) {
return workItem.isTypeEqual(
AtsArtifactTypes.DecisionReview) && workItem.getStateMgr().getCurrentStateName().equals(
DecisionReviewState.Decision.getName());
}
public String getOverrideTransitionToStateName(DecisionReviewArtifact decArt, XComboDam decisionComboDam) {
DecisionReviewOption decisionOption = getDecisionOption(decArt, decisionComboDam.get());
if (decisionOption == null) {
return null;
}
boolean followUpRequired = decisionOption.isFollowupRequired();
if (followUpRequired) {
return DecisionReviewState.Followup.getName();
} else {
return DecisionReviewState.Completed.getName();
}
}
@Override
public Collection<AtsUser> getOverrideTransitionToAssignees(IAtsWorkItem workItem, String decision) {
if (isApplicable(workItem)) {
DecisionReviewArtifact decArt = (DecisionReviewArtifact) workItem;
return getOverrideTransitionToAssignees(decArt, decision);
}
return null;
}
public Collection<AtsUser> getOverrideTransitionToAssignees(DecisionReviewArtifact decArt, String decision) {
DecisionReviewOption decisionOption = getDecisionOption(decArt, decision);
if (decisionOption == null) {
return null;
}
List<AtsUser> assignees = new LinkedList<>();
assignees.addAll(AtsApiService.get().getUserService().getUsersByUserIds(decisionOption.getAssignees()));
return assignees;
}
private DecisionReviewOption getDecisionOption(DecisionReviewArtifact decRevArt, String decision) {
if (decision.equals("")) {
return null;
}
return decRevArt.decisionOptions.getDecisionOption(decision);
}
}