blob: 0dfeae55f53e1e81db138169fa3a4f1998378983 [file] [log] [blame]
/*
* Created on Dec 15, 2010
*
* PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
*/
package org.eclipse.osee.ats.workdef;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import org.eclipse.osee.ats.actions.wizard.ITeamWorkflowProvider;
import org.eclipse.osee.ats.artifact.AbstractWorkflowArtifact;
import org.eclipse.osee.ats.artifact.AtsAttributeTypes;
import org.eclipse.osee.ats.artifact.DecisionReviewArtifact;
import org.eclipse.osee.ats.artifact.PeerToPeerReviewArtifact;
import org.eclipse.osee.ats.artifact.TaskArtifact;
import org.eclipse.osee.ats.artifact.TeamDefinitionArtifact;
import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
import org.eclipse.osee.ats.artifact.TeamWorkflowProviders;
import org.eclipse.osee.ats.internal.AtsPlugin;
import org.eclipse.osee.ats.util.AtsArtifactTypes;
import org.eclipse.osee.ats.util.widgets.DecisionOption;
import org.eclipse.osee.ats.util.widgets.XDecisionOptions;
import org.eclipse.osee.ats.workdef.provider.AtsWorkDefinitionProvider;
import org.eclipse.osee.ats.workflow.item.AtsAddDecisionReviewRule;
import org.eclipse.osee.ats.workflow.item.AtsAddPeerToPeerReviewRule;
import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions;
import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
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.XOption;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.DynamicXWidgetLayoutData;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinition;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinitionFactory;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkFlowDefinitionMatch;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinition;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkWidgetDefinition;
public class WorkDefinitionFactory {
private static final Map<String, RuleDefinition> idToRule = new HashMap<String, RuleDefinition>();
private static final Map<Artifact, WorkDefinitionMatch> artToWorkDefinitions =
new HashMap<Artifact, WorkDefinitionMatch>();
private static final Map<String, WorkDefinitionMatch> idToWorkDefintion = new HashMap<String, WorkDefinitionMatch>();
private static String AtsStatePercentCompleteWeightRule = "atsStatePercentCompleteWeight";
public static RuleDefinition getRuleById(String id) {
ensureRulesLoaded();
return idToRule.get(id);
}
private synchronized static void ensureRulesLoaded() {
if (idToRule.isEmpty()) {
try {
for (WorkItemDefinition workItem : WorkItemDefinitionFactory.getWorkItemDefinitions()) {
if (workItem instanceof WorkRuleDefinition) {
if (workItem.getName().startsWith("atsAddDecisionReview")) {
System.err.println("skipping rule " + workItem.getName());
} else if (workItem.getName().startsWith("atsAddPeerToPeerReview")) {
System.err.println("skipping rule " + workItem.getName());
} else if (workItem.getName().startsWith(AtsStatePercentCompleteWeightRule)) {
System.err.println("skipping rule " + workItem.getName());
} else {
try {
WorkRuleDefinition workRule = (WorkRuleDefinition) workItem;
// All rules in DB should map to RuleDefinitionOption
RuleDefinition ruleDef = null;
String workRuleName = workRule.getName().replaceFirst("^ats", "");
try {
RuleDefinitionOption ruleOption = RuleDefinitionOption.valueOf(workRuleName);
ruleDef = new RuleDefinition(ruleOption);
} catch (IllegalArgumentException ex) {
ruleDef = new RuleDefinition(workRuleName);
}
ruleDef.setDescription(workRule.getDescription());
copyKeyValuePair(ruleDef, workRule);
idToRule.put(ruleDef.getName(), ruleDef);
} catch (Exception ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
}
}
}
} catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
}
}
public static void clearCaches() {
artToWorkDefinitions.clear();
idToRule.clear();
idToWorkDefintion.clear();
}
public static WorkDefinitionMatch getWorkDefinition(Artifact artifact) throws OseeCoreException {
if (!artToWorkDefinitions.containsKey(artifact)) {
WorkDefinitionMatch match = getWorkDefinitionNew(artifact);
if (!match.isMatched()) {
WorkFlowDefinitionMatch flowMatch = WorkFlowDefinitionFactory.getWorkFlowDefinition(artifact);
if (flowMatch.isMatched()) {
WorkDefinition workDef = translateToWorkDefinition(flowMatch.getWorkFlowDefinition());
match = new WorkDefinitionMatch(workDef, null);
match.getTrace().addAll(flowMatch.getTrace());
}
}
artToWorkDefinitions.put(artifact, match);
}
return artToWorkDefinitions.get(artifact);
}
public static WorkDefinitionMatch getWorkDefinition(String id) throws OseeCoreException {
if (!idToWorkDefintion.containsKey(id)) {
WorkDefinitionMatch match = new WorkDefinitionMatch();
String translatedId = WorkDefinitionFactory.getOverrideWorkDefId(id);
// Try to get from new DSL provider if configured to use it
if (!match.isMatched()) {
WorkDefinition workDef = AtsWorkDefinitionProvider.get().getWorkFlowDefinition(translatedId);
if (workDef != null) {
match.setWorkDefinition(workDef);
match.getTrace().add(
(String.format("from DSL provider loaded id [%s] and override translated Id [%s]", id, translatedId)));
}
}
// Otherwise, just translate legacy WorkFlowDefinition from artifact
if (!match.isMatched()) {
WorkFlowDefinition workFlowDef = (WorkFlowDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(id);
if (workFlowDef != null) {
WorkDefinition workDef = translateToWorkDefinition(workFlowDef);
if (workDef != null) {
match.setWorkDefinition(workDef);
match.getTrace().add(
String.format("from legacy WorkFlowDefinition [%s] translated for id [%s]", id, id));
}
}
}
// If still no match, configuration may have new workdef id but not set to use them
// Attempt to get back to original id and load through WorkFlowDefinition translate
if (!match.isMatched()) {
String reverseId = AtsWorkDefinitionSheetProviders.getReverseOverrideId(id);
if (reverseId != null) {
WorkFlowDefinition workFlowDef =
(WorkFlowDefinition) WorkItemDefinitionFactory.getWorkItemDefinition(reverseId);
if (workFlowDef != null) {
WorkDefinition workDef = translateToWorkDefinition(workFlowDef);
if (workDef != null) {
match.setWorkDefinition(workDef);
match.getTrace().add(
String.format(
"from legacy WorkFlowDefinition [%s] translated for id [%s] falling back to reverse id [%s]",
id, id, reverseId));
}
}
}
}
if (match.isMatched()) {
System.out.println("Loaded " + match);
idToWorkDefintion.put(id, match);
}
}
WorkDefinitionMatch match = idToWorkDefintion.get(id);
if (match == null) {
match = new WorkDefinitionMatch();
}
return match;
}
public static WorkDefinition translateToWorkDefinition(WorkFlowDefinition workFlowDef) {
ensureRulesLoaded();
try {
String startWorkPageName = workFlowDef.getResolvedStartPageId();
WorkDefinition workDef = new WorkDefinition(workFlowDef.getId());
addRulesToWorkDefinition(workFlowDef, workDef);
for (WorkPageDefinition workPage : workFlowDef.getPages()) {
// not using ids anymore for states, widgets or rules
StateDefinition stateDef = workDef.getOrCreateState(workPage.getPageName());
stateDef.setWorkDefinition(workDef);
stateDef.setOrdinal(workPage.getWorkPageOrdinal());
if (workPage.getId().equals(startWorkPageName)) {
workDef.setStartState(stateDef);
}
// TODO get rid of this??
copyKeyValuePair(stateDef, workPage);
stateDef.setWorkPageType(workPage.getWorkPageType());
for (WorkPageDefinition returnPageDefinition : workFlowDef.getReturnPages(workPage)) {
// new model doesn't have AsReturn, instead it uses OverrideAttributeValidation
StateDefinition returnStateDef = workDef.getOrCreateState(returnPageDefinition.getPageName());
stateDef.getOverrideAttributeValidationStates().add(returnStateDef);
}
for (WorkPageDefinition toPageDefinition : workFlowDef.getToPages(workPage)) {
StateDefinition toStateDef = workDef.getOrCreateState(toPageDefinition.getPageName());
stateDef.getToStates().add(toStateDef);
}
WorkPageDefinition defaultToPageDefinition = workFlowDef.getDefaultToPage(workPage);
if (defaultToPageDefinition != null) {
StateDefinition defaultToStateDef = workDef.getOrCreateState(defaultToPageDefinition.getPageName());
stateDef.setDefaultToState(defaultToStateDef);
}
CompositeStateItem compStateItem = null;
for (WorkItemDefinition itemDef : workPage.getWorkItems(true)) {
if (itemDef instanceof WorkWidgetDefinition) {
WorkWidgetDefinition workWidget = (WorkWidgetDefinition) itemDef;
DynamicXWidgetLayoutData data = workWidget.get();
// Check for being_composites and process as separate widgets
int numColumns = data.getBeginComposite();
if (numColumns > 0) {
compStateItem = new CompositeStateItem(numColumns);
stateDef.getStateItems().add(compStateItem);
}
// Create new Widget Definition for widget
WidgetDefinition widgetDef = new WidgetDefinition(workWidget.getName());
widgetDef.setDescription(workWidget.getDescription());
copyKeyValuePair(widgetDef, workWidget);
// Convert layout data to widget definition values
for (XOption option : data.getXOptionHandler().getXOptions()) {
WidgetOption widgetOpt = null;
try {
widgetOpt = WidgetOption.valueOf(option.name());
} catch (IllegalArgumentException ex) {
// do nothing
}
if (widgetOpt != null) {
widgetDef.set(widgetOpt);
}
}
// Old model only had required, new model has two types of required
if (data.isRequired()) {
widgetDef.set(WidgetOption.REQUIRED_FOR_TRANSITION);
}
if (Strings.isValid(data.getName()) && !widgetDef.getName().equals(data.getName())) {
widgetDef.setName(data.getName());
}
widgetDef.setAttributeName(data.getStoreName());
widgetDef.setDefaultValue(data.getDefaultValue());
if (data.isHeightSet()) {
widgetDef.setHeight(data.getHeight());
}
widgetDef.setToolTip(data.getToolTip());
widgetDef.setXWidgetName(data.getXWidgetName());
if (compStateItem != null) {
compStateItem.getStateItems().add(widgetDef);
} else {
stateDef.getStateItems().add(widgetDef);
}
// Check for end composite
boolean endComposite = data.isEndComposite();
if (endComposite) {
compStateItem = null;
}
} else if (itemDef instanceof WorkRuleDefinition) {
WorkRuleDefinition workRule = (WorkRuleDefinition) itemDef;
if (workRule.getName().startsWith("atsAddDecisionReview")) {
DecisionReviewDefinition decRevDef = convertDecisionReviewRule(workRule);
if (!Strings.isValid(decRevDef.getRelatedToState())) {
decRevDef.setRelatedToState(stateDef.getName());
}
stateDef.getDecisionReviews().add(decRevDef);
} else if (workRule.getName().startsWith("atsAddPeerToPeerReview")) {
PeerReviewDefinition peerRevDef = convertPeerReviewRule(workRule);
if (!Strings.isValid(peerRevDef.getRelatedToState())) {
peerRevDef.setRelatedToState(stateDef.getName());
}
stateDef.getPeerReviews().add(peerRevDef);
} else {
RuleDefinition ruleDef = getRuleById(workRule.getId().replaceFirst("^ats", ""));
if (ruleDef == null) {
OseeLog.log(AtsPlugin.class, Level.SEVERE,
String.format("Null work rule for " + workRule.getId()));
} else {
stateDef.addRule(ruleDef, "from related WorkItemDefintion");
}
}
} else {
OseeLog.log(AtsPlugin.class, Level.SEVERE,
"Unexpected item type as page child -> " + itemDef.getType());
}
}
}
// Process WeightDefinitions
Artifact workDefArt = workFlowDef.getArtifact();
for (Artifact workChild : workDefArt.getRelatedArtifacts(CoreRelationTypes.WorkItem__Child)) {
if (workChild.getName().startsWith(AtsStatePercentCompleteWeightRule)) {
WorkRuleDefinition ruleDefinition = new WorkRuleDefinition(workChild);
for (String stateName : ruleDefinition.getWorkDataKeyValueMap().keySet()) {
String value = ruleDefinition.getWorkDataValue(stateName);
try {
double percent = new Double(value).doubleValue();
if (percent < 0.0 || percent > 1) {
OseeLog.log(
AtsPlugin.class,
Level.SEVERE,
"Invalid percent value \"" + value + "\" (must be 0..1) for rule " + ruleDefinition.getName(),
new OseeArgumentException("state map exception"));
} else {
percent = percent * 100;
workDef.getStateByName(stateName).setPercentWeight(new Double(percent).intValue());
}
} catch (Exception ex) {
OseeLog.log(
AtsPlugin.class,
Level.SEVERE,
"Invalid percent value \"" + value + "\" (must be float 0..1) for rule " + ruleDefinition.getName(),
new OseeArgumentException("state map exception"));
}
}
Result result = workDef.validateStateWeighting();
if (result.isFalse()) {
OseeLog.log(AtsPlugin.class, Level.SEVERE,
"Error translating weight definitions - " + result.getText());
}
}
}
return workDef;
} catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
return null;
}
private static void addRulesToWorkDefinition(WorkFlowDefinition workFlowDef, WorkDefinition workDef) {
try {
for (WorkRuleDefinition workRule : workFlowDef.getWorkRules()) {
RuleDefinition ruleDef = getRuleById(workRule.getId());
workDef.getRules().add(ruleDef);
}
} catch (Exception ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE,
"Error processing WorkRuleDefinition for workflow " + workDef.getName(), ex);
}
}
private static DecisionReviewDefinition convertDecisionReviewRule(WorkRuleDefinition workRule) throws OseeCoreException {
DecisionReviewDefinition revDef = new DecisionReviewDefinition(workRule.getName());
revDef.setBlockingType(AtsAddDecisionReviewRule.getReviewBlockTypeOrDefault(workRule));
for (User user : AtsAddDecisionReviewRule.getAssigneesOrDefault(workRule)) {
revDef.getAssignees().add(user.getUserId());
}
revDef.setReviewTitle(AtsAddDecisionReviewRule.getReviewTitle(workRule));
revDef.setRelatedToState(AtsAddDecisionReviewRule.getRelatedToState(workRule));
revDef.setDescription(workRule.getDescription());
revDef.setAutoTransitionToDecision(true);
revDef.setStateEventType(AtsAddDecisionReviewRule.getStateEventType(workRule));
for (DecisionOption decOpt : XDecisionOptions.getDecisionOptions(AtsAddDecisionReviewRule.getDecisionOptionString(workRule))) {
DecisionReviewOption revOpt = new DecisionReviewOption(decOpt.getName());
revOpt.setFollowupRequired(decOpt.isFollowupRequired());
for (User user : decOpt.getAssignees()) {
revOpt.getUserIds().add(user.getUserId());
}
revDef.getOptions().add(revOpt);
}
return revDef;
}
private static PeerReviewDefinition convertPeerReviewRule(WorkRuleDefinition workRule) throws OseeCoreException {
PeerReviewDefinition revDef = new PeerReviewDefinition(workRule.getName());
revDef.setBlockingType(AtsAddPeerToPeerReviewRule.getReviewBlockTypeOrDefault(workRule));
for (User user : AtsAddPeerToPeerReviewRule.getAssigneesOrDefault(workRule)) {
revDef.getAssignees().add(user.getUserId());
}
revDef.setReviewTitle(AtsAddPeerToPeerReviewRule.getReviewTitle(workRule));
revDef.setRelatedToState(AtsAddPeerToPeerReviewRule.getRelatedToState(workRule));
revDef.setDescription(workRule.getDescription());
revDef.setLocation(AtsAddPeerToPeerReviewRule.getLocation(workRule));
revDef.setStateEventType(AtsAddPeerToPeerReviewRule.getStateEventType(workRule));
return revDef;
}
private static void copyKeyValuePair(AbstractWorkDefItem itemDef, WorkItemDefinition workItem) {
for (Entry<String, String> entry : workItem.getWorkDataKeyValueMap().entrySet()) {
// XWidget is a key of WorkWidgetDefinition and should be handled through the normal conversion process
if (!entry.getKey().equals("XWidget")) {
itemDef.addWorkDataKeyValue(entry.getKey(), entry.getValue());
}
}
}
private static WorkDefinitionMatch getWorkDefinitionFromArtifactsAttributeValue(Artifact artifact) throws OseeCoreException {
// If this artifact specifies it's own workflow definition, use it
String workFlowDefId = artifact.getSoleAttributeValue(AtsAttributeTypes.WorkflowDefinition, null);
if (Strings.isValid(workFlowDefId)) {
String translatedId = WorkDefinitionFactory.getOverrideWorkDefId(workFlowDefId);
WorkDefinitionMatch match = getWorkDefinition(translatedId);
if (match.isMatched()) {
match.getTrace().add(
String.format("from artifact [%s] for id [%s] and override translated Id [%s]", artifact, workFlowDefId,
translatedId));
return match;
}
}
return new WorkDefinitionMatch();
}
private static WorkDefinitionMatch getTaskWorkDefinitionFromArtifactsAttributeValue(Artifact artifact) throws OseeCoreException {
// If this artifact specifies it's own workflow definition, use it
String workFlowDefId = artifact.getSoleAttributeValue(AtsAttributeTypes.RelatedTaskWorkflowDefinition, null);
if (Strings.isValid(workFlowDefId)) {
String translatedId = WorkDefinitionFactory.getOverrideWorkDefId(workFlowDefId);
WorkDefinitionMatch match = getWorkDefinition(translatedId);
if (match.isMatched()) {
match.getTrace().add(
String.format("from artifact [%s] for id [%s] and override translated Id [%s]", artifact, workFlowDefId,
translatedId));
return match;
}
}
return new WorkDefinitionMatch();
}
/**
* Look at team def's attribute for Work Definition setting, otherwise, walk up team tree for setting
*/
private static WorkDefinitionMatch getWorkDefinitionFromTeamDefinitionAttributeInherited(TeamDefinitionArtifact teamDef) throws OseeCoreException {
WorkDefinitionMatch match = getWorkDefinitionFromArtifactsAttributeValue(teamDef);
if (match.isMatched()) {
return match;
}
Artifact parentArt = teamDef.getParent();
if (parentArt != null && parentArt instanceof TeamDefinitionArtifact) {
return getWorkDefinitionFromTeamDefinitionAttributeInherited((TeamDefinitionArtifact) parentArt);
}
return new WorkDefinitionMatch();
}
private static WorkDefinitionMatch getWorkDefinitionForTask(TaskArtifact taskArt) throws OseeCoreException {
WorkDefinitionMatch match = new WorkDefinitionMatch();
for (ITeamWorkflowProvider provider : TeamWorkflowProviders.getAtsTeamWorkflowExtensions()) {
String workFlowDefId = provider.getRelatedTaskWorkflowDefinitionId(taskArt.getParentAWA());
if (Strings.isValid(workFlowDefId)) {
String translatedId = getOverrideWorkDefId(workFlowDefId);
match = WorkDefinitionFactory.getWorkDefinition(translatedId);
match.getTrace().add(
(String.format("from provider [%s] for id [%s] and override translated Id [%s]",
provider.getClass().getSimpleName(), workFlowDefId, translatedId)));
break;
}
}
if (!match.isMatched()) {
// If task specifies it's own workflow id, use it
match = getWorkDefinitionFromArtifactsAttributeValue(taskArt);
}
if (!match.isMatched()) {
// Else If parent SMA has a related task definition workflow id specified, use it
WorkDefinitionMatch match2 = getTaskWorkDefinitionFromArtifactsAttributeValue(taskArt.getParentAWA());
if (match2.isMatched()) {
match2.getTrace().add(String.format("from task parent SMA [%s]", taskArt.getParentAWA()));
match = match2;
}
}
if (!match.isMatched()) {
// Else If parent TeamWorkflow's TeamDefinition has a related task definition workflow id, use it
match = getTaskWorkDefinitionFromArtifactsAttributeValue(taskArt.getParentTeamWorkflow().getTeamDefinition());
}
if (!match.isMatched()) {
// Else, use default Task workflow
String translatedId = getOverrideWorkDefId(AtsWorkDefinitions.TaskWorkflowDefinitionId);
match = getWorkDefinition(translatedId);
if (match.isMatched()) {
match.getTrace().add(
String.format("default TaskWorkflowDefinition ID [%s] and override translated Id [%s]",
AtsWorkDefinitions.TaskWorkflowDefinitionId, translatedId));
}
}
return match;
}
private static WorkDefinitionMatch getWorkDefinitionNew(Artifact artifact) throws OseeCoreException {
WorkDefinitionMatch match = new WorkDefinitionMatch();
if (artifact.isOfType(AtsArtifactTypes.Task)) {
match = getWorkDefinitionForTask((TaskArtifact) artifact);
}
if (!match.isMatched() && artifact instanceof AbstractWorkflowArtifact) {
AbstractWorkflowArtifact aba = (AbstractWorkflowArtifact) artifact;
// Check extensions for definition handling
for (ITeamWorkflowProvider provider : TeamWorkflowProviders.getAtsTeamWorkflowExtensions()) {
String workFlowDefId = provider.getWorkflowDefinitionId(aba);
if (Strings.isValid(workFlowDefId)) {
match =
WorkDefinitionFactory.getWorkDefinition(WorkDefinitionFactory.getOverrideWorkDefId(workFlowDefId));
}
}
if (!match.isMatched()) {
// If this artifact specifies it's own workflow definition, use it
match = getWorkDefinitionFromArtifactsAttributeValue(artifact);
if (!match.isMatched()) {
// Otherwise, use workflow defined by attribute of WorkflowDefinition
// Note: This is new. Old TeamDefs got workflow off relation
if (artifact.isOfType(AtsArtifactTypes.TeamWorkflow)) {
TeamDefinitionArtifact teamDef = ((TeamWorkFlowArtifact) artifact).getTeamDefinition();
match = getWorkDefinitionFromTeamDefinitionAttributeInherited(teamDef);
if (!match.isMatched()) {
match = ((TeamWorkFlowArtifact) artifact).getTeamDefinition().getWorkDefinition();
}
} else if (artifact.isOfType(AtsArtifactTypes.Goal)) {
match = getWorkDefinition(getOverrideWorkDefId(AtsWorkDefinitions.GoalWorkflowDefinitionId));
match.getTrace().add(
String.format("Override translated from id [%s]", AtsWorkDefinitions.GoalWorkflowDefinitionId));
} else if (artifact instanceof PeerToPeerReviewArtifact) {
match = getWorkDefinition(getOverrideWorkDefId(AtsWorkDefinitions.PeerToPeerWorkflowDefinitionId));
match.getTrace().add(
String.format("Override translated from id [%s]",
AtsWorkDefinitions.PeerToPeerWorkflowDefinitionId));
} else if (artifact instanceof DecisionReviewArtifact) {
match = getWorkDefinition(getOverrideWorkDefId(AtsWorkDefinitions.DecisionWorkflowDefinitionId));
match.getTrace().add(
String.format("Override translated from id [%s]", AtsWorkDefinitions.DecisionWorkflowDefinitionId));
}
}
}
}
return match;
}
public static Collection<WorkDefinitionMatch> getWorkDefinitions() {
return idToWorkDefintion.values();
}
public static String getOverrideWorkDefId(String id) {
// Don't override if no providers available (dsl plugins not released)
String overrideId = AtsWorkDefinitionSheetProviders.getOverrideId(id);
if (Strings.isValid(overrideId)) {
OseeLog.log(AtsPlugin.class, Level.INFO,
String.format("Override WorkDefinition [%s] with [%s]", id, overrideId));
return overrideId;
}
return id;
}
}