blob: 413e7e5acf609f97828ed36e2148abd6dba3403f [file] [log] [blame]
/*******************************************************************************
* 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.workflow.item;
import java.util.Arrays;
import java.util.Collection;
import java.util.logging.Level;
import org.eclipse.osee.ats.AtsPlugin;
import org.eclipse.osee.ats.artifact.DecisionReviewArtifact;
import org.eclipse.osee.ats.artifact.ATSLog.LogType;
import org.eclipse.osee.ats.artifact.ReviewSMArtifact.ReviewBlockType;
import org.eclipse.osee.ats.editor.SMAManager;
import org.eclipse.osee.ats.util.UsersByIds;
import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.Collections;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.User;
import org.eclipse.osee.framework.skynet.core.UserManager;
import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkRuleDefinition;
/**
* @author Donald G. Dunne
*/
public class AtsAddDecisionReviewRule extends WorkRuleDefinition {
public static String ID = "atsAddDecisionReview";
public static enum DecisionParameter {
title, forState, forEvent, reviewBlockingType, assignees, options, description
};
public static enum DecisionRuleOption {
None, TransitionToDecision
}
public AtsAddDecisionReviewRule() {
this(ID, ID);
}
public AtsAddDecisionReviewRule(String name, String id) {
super(name, id);
setDescription("Work Page and Team Definition Option: Decision Review will be auto-created based on WorkData attribute values.");
setDecisionParameterValue(this, DecisionParameter.title, "Enter Title Here");
setDecisionParameterValue(this, DecisionParameter.reviewBlockingType, "Transition");
setDecisionParameterValue(this, DecisionParameter.forState, "Implement");
setDecisionParameterValue(this, DecisionParameter.forEvent, StateEventType.TransitionTo.name());
try {
setDecisionParameterValue(this, DecisionParameter.assignees, "<99999997>");
setDecisionParameterValue(this, DecisionParameter.options, "Completed;Completed;");
} catch (Exception ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
}
public static void setDecisionParameterValue(WorkRuleDefinition workRuleDefinition, DecisionParameter decisionParameter, String value) {
workRuleDefinition.addWorkDataKeyValue(decisionParameter.name(), value);
}
public static String getDecisionParameterValue(WorkRuleDefinition workRuleDefinition, DecisionParameter decisionParameter) {
return workRuleDefinition.getWorkDataValue(decisionParameter.name());
}
/**
* Creates decision review if one of same name doesn't already exist
*
* @param atsAddDecisionReviewRule
* @param smaMgr
* @return DecisionReviewArtifact
* @throws OseeCoreException
*/
public static DecisionReviewArtifact createNewDecisionReview(WorkRuleDefinition atsAddDecisionReviewRule, SkynetTransaction transaction, SMAManager smaMgr, DecisionRuleOption... decisionRuleOption) throws OseeCoreException {
if (!atsAddDecisionReviewRule.getId().startsWith(AtsAddDecisionReviewRule.ID)) {
throw new IllegalArgumentException("WorkRuleDefinition must be AtsAddDecisionReviewRule.ID");
}
String title = getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.title);
if (Artifacts.artNames(smaMgr.getReviewManager().getReviews()).contains(title)) {
// Already created this review
return null;
}
DecisionReviewArtifact decArt = null;
if (Collections.getAggregate(decisionRuleOption).contains(DecisionRuleOption.TransitionToDecision)) {
decArt =
smaMgr.getReviewManager().createNewDecisionReviewAndTransitionToDecision(title,
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.description),
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.forState),
getReviewBlockTypeOrDefault(smaMgr, atsAddDecisionReviewRule),
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.options),
getAssigneesOrDefault(smaMgr, atsAddDecisionReviewRule), transaction);
} else {
decArt =
smaMgr.getReviewManager().createNewDecisionReview(title,
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.description),
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.forState),
getReviewBlockTypeOrDefault(smaMgr, atsAddDecisionReviewRule),
getValueOrDefault(smaMgr, atsAddDecisionReviewRule, DecisionParameter.options),
getAssigneesOrDefault(smaMgr, atsAddDecisionReviewRule), transaction);
}
decArt.getSmaMgr().getLog().addLog(LogType.Note, null,
"Review auto-generated off rule " + atsAddDecisionReviewRule.getId());
return decArt;
}
public static ReviewBlockType getReviewBlockTypeOrDefault(SMAManager smaMgr, WorkRuleDefinition workRuleDefinition) {
String value = getDecisionParameterValue(workRuleDefinition, DecisionParameter.reviewBlockingType);
if (value == null || value.equals("")) {
return null;
}
return ReviewBlockType.valueOf(value);
}
public static StateEventType getStateEventType(SMAManager smaMgr, WorkRuleDefinition workRuleDefinition) {
String value = getDecisionParameterValue(workRuleDefinition, DecisionParameter.forEvent);
if (value == null || value.equals("")) {
return null;
}
return StateEventType.valueOf(value);
}
private static String getValueOrDefault(SMAManager smaMgr, WorkRuleDefinition workRuleDefinition, DecisionParameter decisionParameter) throws OseeCoreException {
String value = getDecisionParameterValue(workRuleDefinition, decisionParameter);
if (value == null || value.equals("")) {
if (decisionParameter == DecisionParameter.title) {
return "Decide on \"" + smaMgr.getSma().getDescriptiveName() + "\"";
} else if (decisionParameter == DecisionParameter.options) {
return "Yes;Followup;<" + UserManager.getUser().getUserId() + ">\n" + "No;Completed;";
} else if (decisionParameter == DecisionParameter.description) {
return null;
} else if (decisionParameter == DecisionParameter.forState) {
return smaMgr.getStateMgr().getCurrentStateName();
}
}
return value;
}
public static Collection<User> getAssigneesOrDefault(SMAManager smaMgr, WorkRuleDefinition workRuleDefinition) throws OseeCoreException {
String value = getDecisionParameterValue(workRuleDefinition, DecisionParameter.assignees);
if (value == null || value.equals("")) {
return Arrays.asList(new User[] {UserManager.getUser()});
}
Collection<User> users = UsersByIds.getUsers(value);
if (users.size() == 0) {
users.add(UserManager.getUser());
}
return users;
}
}