diff options
24 files changed, 234 insertions, 63 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsWorkItem.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsWorkItem.java index cc2dd10befd..d6ed6284e5f 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsWorkItem.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsWorkItem.java @@ -16,6 +16,7 @@ import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workflow.HasAssignees; +import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; import org.eclipse.osee.ats.api.workflow.state.IAtsStateManager; @@ -68,4 +69,6 @@ public interface IAtsWorkItem extends IAtsObject, HasAssignees { void setStateManager(IAtsStateManager stateManager); + IAtsAction getParentAction(); + } diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/TeamWorkflowProviderAdapter.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/team/TeamWorkflowProviderAdapter.java index 744ef1480b8..a34d743b2ad 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/actions/wizard/TeamWorkflowProviderAdapter.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/team/TeamWorkflowProviderAdapter.java @@ -8,13 +8,11 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.ats.actions.wizard; +package org.eclipse.osee.ats.api.team; import java.util.Collection; import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.ai.IAtsActionableItem; -import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; -import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsBranchService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsBranchService.java index cd12f6fc725..67364f730a3 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsBranchService.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsBranchService.java @@ -128,4 +128,6 @@ public interface IAtsBranchService { ITransaction getBaseTransaction(IOseeBranch branch); + String getBranchName(IAtsTeamWorkflow teamWf); + } diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsWorkItemService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsWorkItemService.java index d52c89ed112..d711693c605 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsWorkItemService.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/workflow/IAtsWorkItemService.java @@ -68,4 +68,6 @@ public interface IAtsWorkItemService { Collection<? extends IAtsTask> getTasks(IAtsWorkItem workItem, IStateToken state); + String getArtifactTypeShortName(IAtsTeamWorkflow teamWf); + } diff --git a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/artifact/DemoTeamWorkflows.java b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/artifact/DemoTeamWorkflows.java index 78b5b6315e8..564d22381d8 100644 --- a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/artifact/DemoTeamWorkflows.java +++ b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/artifact/DemoTeamWorkflows.java @@ -12,11 +12,11 @@ package org.eclipse.osee.ats.client.demo.artifact; import java.util.Collection; import java.util.logging.Level; -import org.eclipse.osee.ats.actions.wizard.TeamWorkflowProviderAdapter; import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.ai.IAtsActionableItem; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; +import org.eclipse.osee.ats.api.team.TeamWorkflowProviderAdapter; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.client.demo.DemoArtifactTypes; import org.eclipse.osee.ats.client.demo.internal.Activator; diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java index 0cacec343bb..299e0513b7c 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java @@ -219,8 +219,7 @@ public class AtsClientImpl implements IAtsClient { relationResolver = new AtsRelationResolverServiceImpl(); workDefAdmin = - new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, teamWorkflowProvider, - attributeResolverService); + new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, attributeResolverService); branchService = new AtsBranchServiceImpl(this); reviewService = new AtsReviewServiceImpl(this, this); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java index bfca98999f3..e50137e2efc 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/AtsWorkItemServiceImpl.java @@ -26,6 +26,7 @@ import org.eclipse.osee.ats.core.client.internal.AtsClientService; import org.eclipse.osee.ats.core.client.internal.IAtsWorkItemArtifactService; import org.eclipse.osee.ats.core.client.review.ReviewManager; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; +import org.eclipse.osee.ats.core.client.team.TeamWorkFlowManager; import org.eclipse.osee.ats.core.client.validator.AtsXWidgetValidateManagerClient; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; import org.eclipse.osee.ats.core.client.workflow.transition.TransitionListeners; @@ -203,4 +204,8 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { return teamWf.getTeamDefinition().getName(); } + @Override + public String getArtifactTypeShortName(IAtsTeamWorkflow teamWf) { + return TeamWorkFlowManager.getArtifactTypeShortName((TeamWorkFlowArtifact) teamWf.getStoreObject()); + } } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/WorkItem.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/WorkItem.java index 3b648709c2e..135aae34890 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/WorkItem.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/WorkItem.java @@ -21,12 +21,16 @@ import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; +import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; import org.eclipse.osee.ats.api.workflow.state.IAtsStateManager; import org.eclipse.osee.ats.core.client.IAtsClient; +import org.eclipse.osee.ats.core.client.action.ActionArtifact; import org.eclipse.osee.ats.core.client.internal.Activator; +import org.eclipse.osee.ats.core.client.internal.AtsClientService; +import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; import org.eclipse.osee.ats.core.model.impl.AtsObject; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.OseeStateException; @@ -111,6 +115,20 @@ public class WorkItem extends AtsObject implements IAtsWorkItem { } @Override + public IAtsAction getParentAction() { + Artifact actionArt = null; + if (artifact instanceof ActionArtifact) { + actionArt = artifact; + } else if (artifact instanceof AbstractWorkflowArtifact) { + actionArt = ((AbstractWorkflowArtifact) artifact).getParentActionArtifact(); + } + if (actionArt != null) { + return AtsClientService.get().getWorkItemFactory().getAction(actionArt); + } + return null; + } + + @Override public boolean isReview() { return this instanceof IAtsAbstractReview; } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java index f3661ccb8d5..6eb7110585c 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowArtifact.java @@ -243,19 +243,6 @@ public class TeamWorkFlowArtifact extends AbstractTaskableArtifact implements IA return (Branch) AtsClientService.get().getBranchService().getWorkingBranch(this); } - public String getBranchName() { - String smaTitle = getName(); - if (smaTitle.length() > 40) { - smaTitle = smaTitle.substring(0, 39) + "..."; - } - String typeName = TeamWorkFlowManager.getArtifactTypeShortName(this); - if (Strings.isValid(typeName)) { - return String.format("%s - %s - %s", getAtsId(), typeName, smaTitle); - } else { - return String.format("%s - %s", getAtsId(), smaTitle); - } - } - public boolean isWorkingBranchCreationInProgress() { return creatingWorkingBranch; } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowManager.java index a309eae3be5..f5d85868280 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/team/TeamWorkFlowManager.java @@ -285,13 +285,7 @@ public class TeamWorkFlowManager { } public static String getBranchName(TeamWorkFlowArtifact teamArt) { - for (ITeamWorkflowProvider teamExtension : getTeamWorkflowProviders()) { - String name = teamExtension.getBranchName(teamArt); - if (Strings.isValid(name)) { - return name; - } - } - return teamArt.getBranchName(); + return AtsClientService.get().getBranchService().getBranchName(teamArt); } public static ITeamWorkflowProvider getTeamWorkflowProvider(IAtsTeamDefinition teamDef, Collection<IAtsActionableItem> actionableItems) { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java index ba89c5e3106..5503af05770 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/workflow/AbstractWorkflowArtifact.java @@ -32,6 +32,7 @@ import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.IStateToken; import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; import org.eclipse.osee.ats.api.workdef.RuleDefinitionOption; +import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; import org.eclipse.osee.ats.api.workflow.log.IAtsLogItem; import org.eclipse.osee.ats.api.workflow.log.LogType; @@ -164,6 +165,15 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple return parentTeamArt; } + @Override + public IAtsAction getParentAction() { + Artifact actionArt = getParentActionArtifact(); + if (actionArt != null) { + return AtsClientService.get().getWorkItemFactory().getAction(actionArt); + } + return null; + } + public String getEditorTitle() throws OseeCoreException { return getType() + ": " + getName(); } @@ -708,6 +718,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple return this.isOfType(AtsArtifactTypes.Task); } + @Override public boolean isReview() { return this instanceof AbstractReviewArtifact; } diff --git a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/mock/MockWorkItem.java b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/mock/MockWorkItem.java index fdb9319b091..963a60ebc01 100644 --- a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/mock/MockWorkItem.java +++ b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/mock/MockWorkItem.java @@ -18,6 +18,7 @@ import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.StateType; +import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; import org.eclipse.osee.ats.api.workflow.state.IAtsStateManager; @@ -234,4 +235,9 @@ public class MockWorkItem implements IAtsWorkItem { return false; } + @Override + public IAtsAction getParentAction() { + return null; + } + } diff --git a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java index f813e4b224d..ab9b3231950 100644 --- a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java +++ b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java @@ -89,8 +89,7 @@ public class AtsWorkDefinitionAdminImplTest { when(cacheProvider.get()).thenReturn(cache); workDefAmin = - new AtsWorkDefinitionAdminImpl(cacheProvider, workItemService, workDefinitionService, teamWorkflowProviders, - attributeResolver); + new AtsWorkDefinitionAdminImpl(cacheProvider, workItemService, workDefinitionService, attributeResolver); } @Test diff --git a/plugins/org.eclipse.osee.ats.core/OSGI-INF/ats.team.workflow.providers.ref.xml b/plugins/org.eclipse.osee.ats.core/OSGI-INF/ats.team.workflow.providers.ref.xml new file mode 100644 index 00000000000..48bb75af9d4 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.core/OSGI-INF/ats.team.workflow.providers.ref.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> + <implementation class="org.eclipse.osee.ats.core.workflow.TeamWorkflowProviders"/> + <reference bind="addTeamWorkflowProvider" cardinality="0..n" interface="org.eclipse.osee.ats.api.team.ITeamWorkflowProvider" name="ITeamWorkflowProvider" policy="dynamic" unbind="removeTeamWorkflowProvider"/> +</scr:component> diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AbstractAtsBranchService.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AbstractAtsBranchService.java index c677d74dde0..26ce356eecc 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AbstractAtsBranchService.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AbstractAtsBranchService.java @@ -23,10 +23,12 @@ import org.eclipse.osee.ats.api.commit.CommitStatus; import org.eclipse.osee.ats.api.commit.ICommitConfigItem; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; +import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; import org.eclipse.osee.ats.api.version.IAtsVersion; import org.eclipse.osee.ats.api.version.IAtsVersionService; import org.eclipse.osee.ats.api.workflow.IAtsBranchService; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; +import org.eclipse.osee.ats.core.workflow.TeamWorkflowProviders; import org.eclipse.osee.framework.core.data.IOseeBranch; import org.eclipse.osee.framework.core.data.ITransaction; import org.eclipse.osee.framework.core.enums.BranchState; @@ -43,10 +45,13 @@ public abstract class AbstractAtsBranchService implements IAtsBranchService { protected static Map<String, IOseeBranch> idToWorkingBranchCache = new HashMap<String, IOseeBranch>(); protected static Map<String, Long> idToWorkingBranchCacheUpdated = new HashMap<String, Long>(50); - private final IAtsServices atsServices; + protected IAtsServices atsServices; private static final int SHORT_NAME_LIMIT = 35; private static Set<IOseeBranch> branchesInCommit = new HashSet<IOseeBranch>(); + public AbstractAtsBranchService() { + } + public AbstractAtsBranchService(IAtsServices atsServices) { this.atsServices = atsServices; } @@ -607,4 +612,24 @@ public abstract class AbstractAtsBranchService implements IAtsBranchService { destinationBranchParent, commitTransactionIds); } + @Override + public String getBranchName(IAtsTeamWorkflow teamWf) { + for (ITeamWorkflowProvider teamExtension : TeamWorkflowProviders.getTeamWorkflowProviders()) { + String name = teamExtension.getBranchName(teamWf); + if (Strings.isValid(name)) { + return name; + } + } + String smaTitle = teamWf.getName(); + if (smaTitle.length() > 40) { + smaTitle = smaTitle.substring(0, 39) + "..."; + } + String typeName = atsServices.getWorkItemService().getArtifactTypeShortName(teamWf); + if (Strings.isValid(typeName)) { + return String.format("%s - %s - %s", teamWf.getAtsId(), typeName, smaTitle); + } else { + return String.format("%s - %s", teamWf.getAtsId(), smaTitle); + } + } + } diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java index 76b3aea61dc..331bde78ecb 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java @@ -22,7 +22,6 @@ import org.eclipse.osee.ats.api.review.IAtsDecisionReview; import org.eclipse.osee.ats.api.review.IAtsPeerToPeerReview; import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; -import org.eclipse.osee.ats.api.team.ITeamWorkflowProviders; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWidgetDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; @@ -35,6 +34,7 @@ import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.IAtsWorkItemService; import org.eclipse.osee.ats.core.util.CacheProvider; +import org.eclipse.osee.ats.core.workflow.TeamWorkflowProviders; import org.eclipse.osee.framework.core.exception.MultipleAttributesExist; import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -49,15 +49,13 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { private final CacheProvider<AtsWorkDefinitionCache> cacheProvider; private final IAtsWorkDefinitionService workDefinitionService; - private final ITeamWorkflowProviders teamWorkflowProviders; private final IAtsWorkItemService workItemService; private final IAttributeResolver attributeResolver; - public AtsWorkDefinitionAdminImpl(CacheProvider<AtsWorkDefinitionCache> workDefCacheProvider, IAtsWorkItemService workItemService, IAtsWorkDefinitionService workDefinitionService, ITeamWorkflowProviders teamWorkflowProviders, IAttributeResolver attributeResolver) { + public AtsWorkDefinitionAdminImpl(CacheProvider<AtsWorkDefinitionCache> workDefCacheProvider, IAtsWorkItemService workItemService, IAtsWorkDefinitionService workDefinitionService, IAttributeResolver attributeResolver) { this.cacheProvider = workDefCacheProvider; this.workItemService = workItemService; this.workDefinitionService = workDefinitionService; - this.teamWorkflowProviders = teamWorkflowProviders; this.attributeResolver = attributeResolver; } @@ -230,7 +228,7 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { */ private IWorkDefinitionMatch getWorkDefinitionForTask(IAtsTeamWorkflow teamWf, IAtsTask task) throws OseeCoreException { IWorkDefinitionMatch match = new WorkDefinitionMatch(); - for (ITeamWorkflowProvider provider : teamWorkflowProviders.getTeamWorkflowProviders()) { + for (ITeamWorkflowProvider provider : TeamWorkflowProviders.getTeamWorkflowProviders()) { String workFlowDefId = provider.getRelatedTaskWorkflowDefinitionId(teamWf); if (Strings.isValid(workFlowDefId)) { match = getWorkDefinition(workFlowDefId); @@ -269,7 +267,7 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { } if (!match.isMatched()) { // Check extensions for definition handling - for (ITeamWorkflowProvider provider : teamWorkflowProviders.getTeamWorkflowProviders()) { + for (ITeamWorkflowProvider provider : TeamWorkflowProviders.getTeamWorkflowProviders()) { String workFlowDefId = provider.getWorkflowDefinitionId(workItem); if (Strings.isValid(workFlowDefId)) { match = getWorkDefinition(workFlowDefId); diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/TeamWorkflowProviders.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/TeamWorkflowProviders.java new file mode 100644 index 00000000000..46be0207f40 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/TeamWorkflowProviders.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2013 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.core.workflow; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; + +/** + * @author Donald G Dunne + */ +public class TeamWorkflowProviders { + + private static final List<ITeamWorkflowProvider> teamWorkflowProviders = + new CopyOnWriteArrayList<ITeamWorkflowProvider>(); + + public void addTeamWorkflowProvider(ITeamWorkflowProvider teamWorkflowProvider) { + teamWorkflowProviders.add(teamWorkflowProvider); + } + + public void removeTeamWorkflowProvider(ITeamWorkflowProvider teamWorkflowProvider) { + teamWorkflowProviders.remove(teamWorkflowProvider); + } + + public static List<ITeamWorkflowProvider> getTeamWorkflowProviders() { + return teamWorkflowProviders; + } + +} diff --git a/plugins/org.eclipse.osee.ats.impl/OSGI-INF/ats.team.workflow.providers.ref.xml b/plugins/org.eclipse.osee.ats.impl/OSGI-INF/ats.team.workflow.providers.ref.xml new file mode 100644 index 00000000000..984ba2bda10 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.impl/OSGI-INF/ats.team.workflow.providers.ref.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop"> + <implementation class="org.eclipse.osee.ats.impl.internal.util.TeamWorkflowProviders"/> + <reference bind="addTeamWorkflowProvider" cardinality="0..n" interface="org.eclipse.osee.ats.api.team.ITeamWorkflowProvider" name="ITeamWorkflowProvider" policy="dynamic" unbind="removeTeamWorkflowProvider"/> + <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/> +</scr:component> diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java index ddd9aede91a..fa4d61fe687 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java @@ -71,7 +71,7 @@ import org.eclipse.osee.ats.impl.internal.util.AtsRelationResolverServiceImpl; import org.eclipse.osee.ats.impl.internal.util.AtsReviewServiceImpl; import org.eclipse.osee.ats.impl.internal.util.AtsStoreServiceImpl; import org.eclipse.osee.ats.impl.internal.util.AtsWorkDefinitionCacheProvider; -import org.eclipse.osee.ats.impl.internal.util.TeamWorkflowProvider; +import org.eclipse.osee.ats.impl.internal.util.TeamWorkflowProviders; import org.eclipse.osee.ats.impl.internal.workitem.AtsProgramService; import org.eclipse.osee.ats.impl.internal.workitem.AtsTeamDefinitionService; import org.eclipse.osee.ats.impl.internal.workitem.AtsVersionServiceImpl; @@ -111,7 +111,6 @@ public class AtsServerImpl implements IAtsServer { private IAtsReviewService reviewService; private IAtsWorkDefinitionAdmin workDefAdmin; private AtsWorkDefinitionCacheProvider workDefCacheProvider; - private TeamWorkflowProvider teamWorkflowProvider; private AtsAttributeResolverServiceImpl attributeResolverService; private IAtsConfig config; private IAtsConfigItemFactory configItemFactory; @@ -188,18 +187,16 @@ public class AtsServerImpl implements IAtsServer { workItemFactory = new WorkItemFactory(logger, this); configItemFactory = new ConfigItemFactory(logger, this); - workItemService = new AtsWorkItemServiceImpl(this, this); + workItemService = new AtsWorkItemServiceImpl(this, new TeamWorkflowProviders()); branchService = new AtsBranchServiceImpl(getServices(), orcsApi); reviewService = new AtsReviewServiceImpl(this, this, workItemService); workDefCacheProvider = new AtsWorkDefinitionCacheProvider(workDefService); - teamWorkflowProvider = new TeamWorkflowProvider(); attributeResolverService = new AtsAttributeResolverServiceImpl(); relationResolver = new AtsRelationResolverServiceImpl(this); attributeResolverService.setOrcsApi(orcsApi); workDefAdmin = - new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, teamWorkflowProvider, - attributeResolverService); + new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, attributeResolverService); atsLogFactory = AtsCoreFactory.newLogFactory(); atsStateFactory = AtsCoreFactory.newStateFactory(getServices(), atsLogFactory); diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/notify/WorkItemNotificationProcessor.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/notify/WorkItemNotificationProcessor.java index 9a4951566b2..484d5b21b1c 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/notify/WorkItemNotificationProcessor.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/notify/WorkItemNotificationProcessor.java @@ -151,7 +151,10 @@ public class WorkItemNotificationProcessor { try { IAtsStateDefinition stateDefinition = workItem.getStateDefinition(); StateType stateType = stateDefinition.getStateType(); - if (types.contains(AtsNotifyType.Cancelled) || types.contains(AtsNotifyType.Completed) && (!workItem.isTask() && (stateType.isCompleted() || stateType.isCancelled()))) { + boolean notificationTypeIsCompletedOrCancelled = + types.contains(AtsNotifyType.Cancelled) || types.contains(AtsNotifyType.Completed); + boolean stateTypeIsCompletedOrCancelled = stateType.isCompleted() || stateType.isCancelled(); + if (notificationTypeIsCompletedOrCancelled && !workItem.isTask() && stateTypeIsCompletedOrCancelled) { IAtsUser originator = workItem.getCreatedBy(); if (originator.isActive()) { if (!EmailUtil.isEmailValid(originator.getEmail())) { diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/TeamWorkflowProvider.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/ITeamWorkflowProvidersLazy.java index 679d58df17b..c927e96049f 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/TeamWorkflowProvider.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/ITeamWorkflowProvidersLazy.java @@ -10,25 +10,14 @@ *******************************************************************************/ package org.eclipse.osee.ats.impl.internal.util; -import java.util.Collections; -import java.util.Iterator; import java.util.List; import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; -import org.eclipse.osee.ats.api.team.ITeamWorkflowProviders; /** * @author Donald G. Dunne */ -public class TeamWorkflowProvider implements ITeamWorkflowProviders { +public interface ITeamWorkflowProvidersLazy { - @Override - public Iterator<ITeamWorkflowProvider> iterator() { - return getTeamWorkflowProviders().iterator(); - } - - @Override - public List<ITeamWorkflowProvider> getTeamWorkflowProviders() { - return Collections.emptyList(); - } + public List<ITeamWorkflowProvider> getProviders(); } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/TeamWorkflowProviders.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/TeamWorkflowProviders.java new file mode 100644 index 00000000000..09a2ede7941 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/TeamWorkflowProviders.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2015 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.impl.internal.util; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.logger.Log; + +/** + * @author Donald G Dunne + */ +public class TeamWorkflowProviders implements ITeamWorkflowProvidersLazy { + + private Log logger; + private static final List<ITeamWorkflowProvider> teamWorkflowProviders = + new CopyOnWriteArrayList<ITeamWorkflowProvider>(); + + public void setLogger(Log logger) { + this.logger = logger; + } + + public void addTeamWorkflowProvider(ITeamWorkflowProvider teamWorkflowProvider) { + teamWorkflowProviders.add(teamWorkflowProvider); + } + + public void removeTeamWorkflowProvider(ITeamWorkflowProvider teamWorkflowProvider) { + teamWorkflowProviders.remove(teamWorkflowProvider); + } + + public void start() throws OseeCoreException { + logger.info("AtsTeamWorkflowProviders started"); + } + + public void stop() { + logger = null; + teamWorkflowProviders.clear(); + } + + public static List<ITeamWorkflowProvider> getTeamWorkflowProviders() { + return teamWorkflowProviders; + } + + @Override + public List<ITeamWorkflowProvider> getProviders() { + return teamWorkflowProviders; + } + +} diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsWorkItemServiceImpl.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsWorkItemServiceImpl.java index 6cef274d494..3bb907ee268 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsWorkItemServiceImpl.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsWorkItemServiceImpl.java @@ -19,6 +19,7 @@ import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.api.review.IAtsAbstractReview; +import org.eclipse.osee.ats.api.team.ITeamWorkflowProvider; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IStateToken; import org.eclipse.osee.ats.api.workdef.StateType; @@ -30,9 +31,11 @@ import org.eclipse.osee.ats.api.workflow.IAtsWorkItemService; import org.eclipse.osee.ats.api.workflow.transition.ITransitionListener; import org.eclipse.osee.ats.core.workflow.state.SimpleTeamState; import org.eclipse.osee.ats.impl.IAtsServer; +import org.eclipse.osee.ats.impl.internal.util.ITeamWorkflowProvidersLazy; import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.core.data.IAttributeType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.orcs.data.ArtifactReadable; /** @@ -40,17 +43,17 @@ import org.eclipse.osee.orcs.data.ArtifactReadable; */ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { - private final IArtifactProvider artifactProvider; private final IAtsServer atsServer; + private final ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy; - public AtsWorkItemServiceImpl(IAtsServer atsServer, IArtifactProvider artifactProvider) { + public AtsWorkItemServiceImpl(IAtsServer atsServer, ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy) { this.atsServer = atsServer; - this.artifactProvider = artifactProvider; + this.teamWorkflowProvidersLazy = teamWorkflowProvidersLazy; } @Override public IArtifactType getArtifactType(IAtsWorkItem workItem) throws OseeCoreException { - return artifactProvider.getArtifact(workItem).getArtifactType(); + return atsServer.getArtifact(workItem).getArtifactType(); } @Override @@ -60,7 +63,7 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { @Override public boolean isOfType(IAtsWorkItem workItem, IArtifactType matchType) throws OseeCoreException { - return artifactProvider.getArtifact(workItem).getArtifactType().matches(matchType); + return atsServer.getArtifact(workItem).isOfType(matchType); } @Override @@ -70,7 +73,7 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { @Override public int getTransactionNumber(IAtsWorkItem workItem) throws OseeCoreException { - return artifactProvider.getArtifact(workItem).getTransaction(); + return atsServer.getArtifact(workItem).getTransaction(); } @Override @@ -151,7 +154,7 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { @Override public String getCurrentStateName(IAtsWorkItem workItem) throws OseeCoreException { - return artifactProvider.getArtifact(workItem).getSoleAttributeValue(AtsAttributeTypes.CurrentState, "").replaceAll( + return atsServer.getArtifact(workItem).getSoleAttributeValue(AtsAttributeTypes.CurrentState, "").replaceAll( ";.*$", ""); } @@ -183,7 +186,7 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { String version = ""; try { ArtifactReadable art = - artifactProvider.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).getOneOrNull(); + atsServer.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).getOneOrNull(); if (art != null) { version = art.getName(); } @@ -198,4 +201,15 @@ public class AtsWorkItemServiceImpl implements IAtsWorkItemService { return teamWf.getTeamDefinition().getName(); } + @Override + public String getArtifactTypeShortName(IAtsTeamWorkflow teamWf) { + for (ITeamWorkflowProvider atsTeamWorkflow : teamWorkflowProvidersLazy.getProviders()) { + String typeName = atsTeamWorkflow.getArtifactTypeShortName(teamWf); + if (Strings.isValid(typeName)) { + return typeName; + } + } + return null; + } + } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java index 945c2bbb491..dab372db45c 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java @@ -21,6 +21,7 @@ import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; +import org.eclipse.osee.ats.api.workflow.IAtsAction; import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.log.IAtsLog; @@ -111,6 +112,20 @@ public class WorkItem extends AtsObject implements IAtsWorkItem { } @Override + public IAtsAction getParentAction() { + ArtifactReadable actionArt = null; + IAtsTeamWorkflow teamWf = getParentTeamWorkflow(); + if (teamWf != null) { + ResultSet<ArtifactReadable> results = + ((ArtifactReadable) teamWf.getStoreObject()).getRelated(AtsRelationTypes.ActionToWorkflow_Action); + if (!results.isEmpty()) { + actionArt = results.iterator().next(); + } + } + return atsServer.getWorkItemFactory().getAction(actionArt); + } + + @Override public boolean isReview() { return this instanceof IAtsAbstractReview; } |